diff --git a/ports/win32/msvc8/.cvsignore b/ports/win32/msvc8/.cvsignore
deleted file mode 100644
index 2f28b03..0000000
--- a/ports/win32/msvc8/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-Debug
-lwIP_Test.ncb
-lwIP_Test.suo
\ No newline at end of file
diff --git a/ports/win32/msvc8/lwIP_pktif.vcproj b/ports/win32/msvc8/lwIP_pktif.vcproj
deleted file mode 100644
index e0b2b4c..0000000
--- a/ports/win32/msvc8/lwIP_pktif.vcproj
+++ /dev/null
@@ -1,265 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ports/win32/pktdrv.c b/ports/win32/pktdrv.c
deleted file mode 100644
index 7758e9b..0000000
--- a/ports/win32/pktdrv.c
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
- * Copyright (c) 2001,2002 Florian Schulze.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the authors nor the names of the contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * pktdrv.c - This file is part of lwIP pktif
- *
- ****************************************************************************
- *
- * This file is derived from an example in lwIP with the following license:
- *
- * Copyright (c) 2001, Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-#include "pktdrv.h"
-#include "lwipcfg_msvc.h"
-
-#pragma warning (disable: 4201) /* don't warn about union without name */
-
-#define WIN32_LEAN_AND_MEAN
-/* get the windows definitions of the following 4 functions out of the way */
-#include
-#include
-#include
-#include
-#include
-
-/** @todo use the lwip header file */
-#define ETHARP_HWADDR_LEN 6
-
-#define MAX_NUM_ADAPTERS 10
-#define ADAPTER_NAME_LEN 4096
-#define PACKET_ADAPTER_BUFSIZE 512000
-#define PACKET_INPUT_BUFSIZE 256000
-
-#define PACKET_OID_DATA_SIZE 255
-
-/* Packet Adapter informations */
-struct packet_adapter {
- input_fn input;
- void *input_fn_arg;
- LPADAPTER lpAdapter;
- LPPACKET lpPacket;
- UINT bs_drop;
- NDIS_MEDIA_STATE fNdisMediaState;
- /* buffer to hold the data coming from the driver */
- char buffer[PACKET_INPUT_BUFSIZE];
-};
-
-static int get_link_state(struct packet_adapter *pa, NDIS_MEDIA_STATE *linkstate);
-
-
-/** Get a list of adapters
- *
- * @param adapter_list void* array: list where the adapters are stored
- * @param list_len size of adapter_list (number of void*)
- * @param buffer here the actual data is stored, adapter_list points into this buffer
- * @param buf_len size of buffer in bytes
- * @return number of adapters found or negative on error
- */
-static int
-get_adapter_list(char** adapter_list, int list_len, void* buffer, size_t buf_len)
-{
- int i;
- char *temp, *start;
- ULONG AdapterLength;
-
- memset(adapter_list, 0, list_len*sizeof(void*));
- memset(buffer, 0, buf_len);
-
- /* obtain the name of the adapters installed on this machine
- (a list of strings separated by '\0') */
- AdapterLength = buf_len;
- if (PacketGetAdapterNames((char*)buffer, &AdapterLength)==FALSE){
- printf("Unable to retrieve the list of the adapters!\n");
- return 0;
- }
-
- /* get the start of each adapter name in the list and put it into
- * the AdapterList array */
- i = 0;
- temp = (char*)buffer;
- start = (char*)buffer;
- while ((*temp != '\0') || (*(temp - 1) != '\0')) {
- if (*temp == '\0') {
- adapter_list[i] = start;
- start = temp + 1;
- i++;
- if (i >= list_len) {
- break;
- }
- }
- temp++;
- }
- return i;
-}
-
-/** Get the index of an adapter by its GUID
- *
- * @param adapter_guid GUID of the adapter
- * @return index of the adapter or negative on error
- */
-int
-get_adapter_index(const char* adapter_guid)
-{
- char *AdapterList[MAX_NUM_ADAPTERS];
- int i;
- char AdapterName[ADAPTER_NAME_LEN]; /* string that contains a list of the network adapters */
- int AdapterNum;
-
- if ((adapter_guid != NULL) && (adapter_guid[0] != 0)) {
- AdapterNum = get_adapter_list(AdapterList, MAX_NUM_ADAPTERS, AdapterName, ADAPTER_NAME_LEN);
- if (AdapterNum > 0) {
- for (i = 0; i < AdapterNum; i++) {
- if(strstr((char*)AdapterList[i], adapter_guid)) {
- return i;
- }
- }
- }
- }
- return -1;
-}
-
-/**
- * Open a network adapter and set it up for packet input
- *
- * @param adapter_num the index of the adapter to use
- * @param mac_addr the MAC address of the adapter is stored here (if != NULL)
- * @param input a function to call to receive a packet
- * @param arg argument to pass to input
- * @param linkstate the initial link state
- * @return an adapter handle on success, NULL on failure
- */
-void*
-init_adapter(int adapter_num, char *mac_addr, input_fn input, void *arg, enum link_adapter_event *linkstate)
-{
- char *AdapterList[MAX_NUM_ADAPTERS];
-#ifndef PACKET_LIB_QUIET
- int i;
-#endif /* PACKET_LIB_QUIET */
- char AdapterName[ADAPTER_NAME_LEN]; /* string that contains a list of the network adapters */
- int AdapterNum;
- PPACKET_OID_DATA ppacket_oid_data;
- unsigned char ethaddr[ETHARP_HWADDR_LEN];
- struct packet_adapter *pa;
- NDIS_MEDIA_STATE mediastate;
-
- pa = (struct packet_adapter *)malloc(sizeof(struct packet_adapter));
- if (!pa) {
- printf("Unable to alloc the adapter!\n");
- return NULL;
- }
-
- memset(pa, 0, sizeof(struct packet_adapter));
- pa->input = input;
- pa->input_fn_arg = arg;
-
- AdapterNum = get_adapter_list(AdapterList, MAX_NUM_ADAPTERS, AdapterName, ADAPTER_NAME_LEN);
-
- /* print all adapter names */
- if (AdapterNum <= 0) {
- free(pa);
- return NULL; /* no adapters found */
- }
-#ifndef PACKET_LIB_QUIET
- for (i = 0; i < AdapterNum; i++) {
- LPADAPTER lpAdapter;
- printf("%2i: %s\n", i, AdapterList[i]);
- /* set up the selected adapter */
- lpAdapter = PacketOpenAdapter(AdapterList[i]);
- if (lpAdapter && (lpAdapter->hFile != INVALID_HANDLE_VALUE)) {
- ppacket_oid_data = (PPACKET_OID_DATA)malloc(sizeof(PACKET_OID_DATA) + PACKET_OID_DATA_SIZE);
- if (ppacket_oid_data) {
- ppacket_oid_data->Oid = OID_GEN_VENDOR_DESCRIPTION;
- ppacket_oid_data->Length = PACKET_OID_DATA_SIZE;
- if (PacketRequest(lpAdapter, FALSE, ppacket_oid_data)) {
- printf(" Name: \"%s\"\n", ppacket_oid_data->Data);
- }
- free(ppacket_oid_data);
- }
- PacketCloseAdapter(lpAdapter);
- lpAdapter = NULL;
- }
- }
-#endif /* PACKET_LIB_QUIET */
- /* invalid adapter index -> check this after printing the adapters */
- if (adapter_num < 0) {
- printf("Invalid adapter_num: %d\n", adapter_num);
- free(pa);
- return NULL;
- }
- /* adapter index out of range */
- if (adapter_num >= AdapterNum) {
- printf("Invalid adapter_num: %d\n", adapter_num);
- free(pa);
- return NULL;
- }
-#ifndef PACKET_LIB_QUIET
- printf("Using adapter_num: %d\n", adapter_num);
-#endif /* PACKET_LIB_QUIET */
- /* set up the selected adapter */
- pa->lpAdapter = PacketOpenAdapter(AdapterList[adapter_num]);
- if (!pa->lpAdapter || (pa->lpAdapter->hFile == INVALID_HANDLE_VALUE)) {
- free(pa);
- return NULL;
- }
- /* alloc the OID packet */
- ppacket_oid_data = (PPACKET_OID_DATA)malloc(sizeof(PACKET_OID_DATA) + PACKET_OID_DATA_SIZE);
- if (!ppacket_oid_data) {
- PacketCloseAdapter(pa->lpAdapter);
- free(pa);
- return NULL;
- }
- /* get the description of the selected adapter */
- ppacket_oid_data->Oid = OID_GEN_VENDOR_DESCRIPTION;
- ppacket_oid_data->Length = PACKET_OID_DATA_SIZE;
- if (PacketRequest(pa->lpAdapter, FALSE, ppacket_oid_data)) {
- printf("Using adapter: \"%s\"", ppacket_oid_data->Data);
- }
- /* get the MAC address of the selected adapter */
- ppacket_oid_data->Oid = OID_802_3_PERMANENT_ADDRESS;
- ppacket_oid_data->Length = ETHARP_HWADDR_LEN;
- if (!PacketRequest(pa->lpAdapter, FALSE, ppacket_oid_data)) {
- printf("ERROR getting the adapter's HWADDR, maybe it's not an ethernet adapter?\n");
- PacketCloseAdapter(pa->lpAdapter);
- free(pa);
- return NULL;
- }
- /* copy the MAC address */
- memcpy(ðaddr, ppacket_oid_data->Data, ETHARP_HWADDR_LEN);
- free(ppacket_oid_data);
- if (mac_addr != NULL) {
- /* copy the MAC address to the user supplied buffer, also */
- memcpy(mac_addr, ðaddr, ETHARP_HWADDR_LEN);
- }
- printf(" [MAC: %02X:%02X:%02X:%02X:%02X:%02X]\n", ethaddr[0], ethaddr[1], ethaddr[2],
- ethaddr[3], ethaddr[4], ethaddr[5]);
- /* some more adapter settings */
- PacketSetBuff(pa->lpAdapter, PACKET_ADAPTER_BUFSIZE);
- PacketSetReadTimeout(pa->lpAdapter, 1);
- PacketSetHwFilter(pa->lpAdapter, NDIS_PACKET_TYPE_ALL_LOCAL | NDIS_PACKET_TYPE_PROMISCUOUS);
- /* set up packet descriptor (the application input buffer) */
- if ((pa->lpPacket = PacketAllocatePacket()) == NULL) {
- printf("ERROR setting up a packet descriptor\n");
- PacketCloseAdapter(pa->lpAdapter);
- free(pa);
- return NULL;
- }
- PacketInitPacket(pa->lpPacket,(char*)pa->buffer, sizeof(pa->buffer));
-
- if(get_link_state(pa, &mediastate)) {
- *linkstate = (mediastate == NdisMediaStateConnected ? LINKEVENT_UP : LINKEVENT_DOWN);
- }
-
- return pa;
-}
-
-/**
- * Close the adapter (no more packets can be sent or received)
- *
- * @param adapter adapter handle received by a call to init_adapter, invalid on return
- */
-void
-shutdown_adapter(void *adapter)
-{
- struct packet_adapter *pa = (struct packet_adapter*)adapter;
- if (pa != NULL) {
- if (pa->lpPacket) {
- PacketFreePacket(pa->lpPacket);
- }
- if (pa->lpAdapter) {
- PacketCloseAdapter(pa->lpAdapter);
- }
- free(pa);
- }
-}
-
-/**
- * Send a packet
- *
- * @param adapter adapter handle received by a call to init_adapter
- * @param buffer complete packet to send (including ETH header; without CRC)
- * @param len length of the packet (including ETH header; without CRC)
- */
-int
-packet_send(void *adapter, void *buffer, int len)
-{
- struct packet_adapter *pa = (struct packet_adapter*)adapter;
- LPPACKET lpPacket;
-
- if (pa == NULL) {
- return -1;
- }
- if ((lpPacket = PacketAllocatePacket()) == NULL) {
- return -1;
- }
- PacketInitPacket(lpPacket, buffer, len);
- if (!PacketSendPacket(pa->lpAdapter, lpPacket, TRUE)) {
- return -1;
- }
- PacketFreePacket(lpPacket);
-
- return 0;
-}
-
-/**
- * Process a packet buffer (which can hold multiple packets) and feed
- * every packet to process_input().
- *
- * @param adapter adapter handle received by a call to init_adapter
- * @param lpPacket the packet buffer to process
- */
-static void
-ProcessPackets(void *adapter, LPPACKET lpPacket)
-{
- struct packet_adapter *pa = (struct packet_adapter*)adapter;
- ULONG ulLines, ulBytesReceived;
- char *base;
- char *buf;
- u_int off = 0;
- u_int tlen, tlen1;
- struct bpf_hdr *hdr;
- void *cur_packet;
- int cur_length;
-
- if (pa == NULL) {
- return;
- }
-
- ulBytesReceived = lpPacket->ulBytesReceived;
-
- buf = (char*)lpPacket->Buffer;
-
- off=0;
-
- while (off < ulBytesReceived) {
- hdr = (struct bpf_hdr *)(buf + off);
- tlen1 = hdr->bh_datalen;
- cur_length = tlen1;
- tlen = hdr->bh_caplen;
- off += hdr->bh_hdrlen;
-
- ulLines = (tlen + 15) / 16;
- if (ulLines > 5) {
- ulLines = 5;
- }
-
- base =(char*)(buf + off);
- cur_packet = base;
- off = Packet_WORDALIGN(off + tlen);
-
- pa->input(pa->input_fn_arg, cur_packet, cur_length);
- }
-}
-
-/**
- * Check for newly received packets. Called in the main loop: 'interrupt' mode is not
- * really supported :(
- *
- * @param adapter adapter handle received by a call to init_adapter
- */
-void
-update_adapter(void *adapter)
-{
- struct packet_adapter *pa = (struct packet_adapter*)adapter;
- struct bpf_stat stat;
-
- /* print the capture statistics */
- if(PacketGetStats(pa->lpAdapter, &stat) == FALSE) {
- printf("Warning: unable to get stats from the kernel!\n");
- } else {
- if (pa->bs_drop != stat.bs_drop) {
- printf("%d packets received.\n%d Packets dropped.\n", stat.bs_recv, stat.bs_drop);
- pa->bs_drop = stat.bs_drop;
- }
- }
-
- if ((pa != NULL) && (PacketReceivePacket(pa->lpAdapter, pa->lpPacket, TRUE))) {
- ProcessPackets(adapter, pa->lpPacket);
- }
-}
-
-/** Get the current linkg status
- * @param adapter adapter handle received by a call to init_adapter
- * @param linkstate the current link state
- * @return 1: succeeded, 0: failed
- */
-static int
-get_link_state(struct packet_adapter *pa, NDIS_MEDIA_STATE *linkstate)
-{
- int ret = 0;
- if(pa != NULL) {
- PPACKET_OID_DATA ppacket_oid_data;
-
- /* get the media connect status of the selected adapter */
- ppacket_oid_data = (PPACKET_OID_DATA)malloc(sizeof(PACKET_OID_DATA) + sizeof(NDIS_MEDIA_STATE));
- if (ppacket_oid_data != NULL) {
- ppacket_oid_data->Oid = OID_GEN_MEDIA_CONNECT_STATUS;
- ppacket_oid_data->Length = sizeof(NDIS_MEDIA_STATE);
- if (PacketRequest(pa->lpAdapter, FALSE, ppacket_oid_data)) {
- *linkstate = (*((PNDIS_MEDIA_STATE)(ppacket_oid_data->Data)));
- ret = 1;
- }
- free(ppacket_oid_data);
- }
- }
-
- return ret;
-}
-
-/**
- * Check for link state changes. Called in the main loop: 'interrupt' mode is not
- * really supported :(
- *
- * @param adapter adapter handle received by a call to init_adapter
- * @return one of the link_adapter_event values
- */
-enum link_adapter_event
-link_adapter(void *adapter)
-{
- struct packet_adapter *pa = (struct packet_adapter*)adapter;
-
- if (pa != NULL) {
- NDIS_MEDIA_STATE fNdisMediaState;
- if (get_link_state(pa, &fNdisMediaState)) {
- if (pa->fNdisMediaState != fNdisMediaState) {
- pa->fNdisMediaState = fNdisMediaState;
- return ((fNdisMediaState == NdisMediaStateConnected) ? LINKEVENT_UP : LINKEVENT_DOWN);
- }
- }
- }
-
- return LINKEVENT_UNCHANGED;
-}
diff --git a/ports/win32/pktdrv.h b/ports/win32/pktdrv.h
deleted file mode 100644
index 3a2e251..0000000
--- a/ports/win32/pktdrv.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef __PKTDRV_H__
-#define __PKTDRV_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef void (*input_fn)(void *arg, void *packet, int len);
-
-enum link_adapter_event {
- LINKEVENT_UNCHANGED,
- LINKEVENT_UP,
- LINKEVENT_DOWN
-};
-
-void* init_adapter (int adapter_num, char *mac_addr, input_fn input, void *arg, enum link_adapter_event *linkstate);
-void shutdown_adapter(void *adapter);
-int packet_send (void *adapter, void *buffer, int len);
-void update_adapter (void *adapter);
-enum link_adapter_event link_adapter (void *adapter);
-int get_adapter_index(const char* adapter_guid);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/ports/win32/pktif.c b/ports/win32/pktif.c
deleted file mode 100644
index ba6c6fc..0000000
--- a/ports/win32/pktif.c
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * Copyright (c) 2001,2002 Florian Schulze.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the authors nor the names of the contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * pktif.c - This file is part of lwIP pktif
- *
- ****************************************************************************
- *
- * This file is derived from an example in lwIP with the following license:
- *
- * Copyright (c) 2001, Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_ETHERNET
-
-#include "pktif.h"
-
-/* get the windows definitions of the following 4 functions out of the way */
-#include
-#include
-#include
-
-#include "lwip/debug.h"
-
-#include "lwip/def.h"
-#include "lwip/mem.h"
-#include "lwip/pbuf.h"
-#include "lwip/stats.h"
-#include "lwip/sys.h"
-#include "lwip/ip.h"
-#include "lwip/snmp.h"
-#include "lwip/tcpip.h"
-
-#include "netif/etharp.h"
-#include "pktdrv.h"
-#include "pcap_helper.h"
-
-/* include the port-dependent configuration */
-#include "lwipcfg_msvc.h"
-
-/* Define those to better describe your network interface.
- For now, we use 'e0', 'e1', 'e2' and so on */
-#define IFNAME0 'e'
-#define IFNAME1 '0'
-
-/* index of the network adapter to use for lwIP */
-#ifndef PACKET_LIB_ADAPTER_NR
-#define PACKET_LIB_ADAPTER_NR 0
-#endif
-
-/* Define PHY delay when "link up" */
-#ifndef PHY_LINKUP_DELAY
-#define PHY_LINKUP_DELAY 5000
-#endif
-
-/* link state notification macro */
-#if NO_SYS
-#define NOTIFY_LINKSTATE(netif, linkfunc) linkfunc(netif)
-#else /* NO_SYS*/
-#if LWIP_TCPIP_TIMEOUT
-#define NOTIFY_LINKSTATE(netif, linkfunc) tcpip_timeout(PHY_LINKUP_DELAY, (sys_timeout_handler)linkfunc, netif)
-#else /* LWIP_TCPIP_TIMEOUT */
-#define NOTIFY_LINKSTATE(netif, linkfunc) tcpip_callback((tcpip_callback_fn)linkfunc, netif)
-#endif /* LWIP_TCPIP_TIMEOUT */
-#endif /* NO_SYS*/
-
-/* Forward declarations. */
-void ethernetif_process_input(void *arg, void *packet, int len);
-
-/*-----------------------------------------------------------------------------------*/
-static void
-low_level_init(struct netif *netif)
-{
- char adapter_mac_addr[ETHARP_HWADDR_LEN];
- u8_t my_mac_addr[ETHARP_HWADDR_LEN] = LWIP_MAC_ADDR_BASE;
- int adapter_num = PACKET_LIB_ADAPTER_NR;
- enum link_adapter_event linkstate;
-
-#ifdef PACKET_LIB_GET_ADAPTER_NETADDRESS
- ip_addr_t netaddr;
-#define GUID_LEN 128
- char guid[GUID_LEN + 1];
- memset(&guid, 0, sizeof(guid));
- PACKET_LIB_GET_ADAPTER_NETADDRESS(&netaddr);
- if (get_adapter_index_from_addr((struct in_addr *)&netaddr, guid, GUID_LEN) < 0) {
- printf("ERROR initializing network adapter, failed to get GUID for network address %s\n", ip_ntoa(&netaddr));
- LWIP_ASSERT("ERROR initializing network adapter, failed to get GUID for network address!", 0);
- return;
- }
- adapter_num = get_adapter_index(guid);
- if (adapter_num < 0) {
- printf("ERROR finding network adapter with GUID \"%s\"!\n", guid);
- LWIP_ASSERT("ERROR finding network adapter with expected GUID!", 0);
- return;
- }
-
-#else /* PACKET_LIB_GET_ADAPTER_NETADDRESS */
-#ifdef PACKET_LIB_ADAPTER_GUID
- /* get adapter index for guid string */
- adapter_num = get_adapter_index(PACKET_LIB_ADAPTER_GUID);
- if (adapter_num < 0) {
- printf("ERROR finding network adapter with GUID \"%s\"!\n", PACKET_LIB_ADAPTER_GUID);
- LWIP_ASSERT("ERROR initializing network adapter!\n", 0);
- return;
- }
-#endif /* PACKET_LIB_ADAPTER_GUID */
-#endif /* PACKET_LIB_GET_ADAPTER_NETADDRESS */
-
- /* Do whatever else is needed to initialize interface. */
- if ((netif->state = init_adapter(adapter_num, adapter_mac_addr,
- ethernetif_process_input, netif, &linkstate)) == NULL) {
- printf("ERROR initializing network adapter %d!\n", PACKET_LIB_ADAPTER_NR);
- LWIP_ASSERT("ERROR initializing network adapter!", 0);
- return;
- }
-
- /* change the MAC address to a unique value
- so that multiple ethernetifs are supported */
- my_mac_addr[ETHARP_HWADDR_LEN - 1] += netif->num;
- /* Copy MAC addr */
- memcpy(&netif->hwaddr, my_mac_addr, ETHARP_HWADDR_LEN);
-
- if (linkstate == LINKEVENT_UP) {
- netif_set_link_up(netif);
- } else {
- netif_set_link_down(netif);
- }
-
- LWIP_DEBUGF(NETIF_DEBUG, ("pktif: eth_addr %02X%02X%02X%02X%02X%02X\n",netif->hwaddr[0],netif->hwaddr[1],netif->hwaddr[2],netif->hwaddr[3],netif->hwaddr[4],netif->hwaddr[5]));
-}
-
-/*-----------------------------------------------------------------------------------*/
-/*
- * low_level_output():
- *
- * Should do the actual transmission of the packet. The packet is
- * contained in the pbuf that is passed to the function. This pbuf
- * might be chained.
- *
- */
-/*-----------------------------------------------------------------------------------*/
-static err_t
-low_level_output(struct netif *netif, struct pbuf *p)
-{
- struct pbuf *q;
- unsigned char buffer[1600];
- unsigned char *ptr;
- struct eth_hdr *ethhdr;
- u16_t tot_len = p->tot_len - ETH_PAD_SIZE;
-
-#if defined(LWIP_DEBUG) && LWIP_NETIF_TX_SINGLE_PBUF
- LWIP_ASSERT("p->next == NULL && p->len == p->tot_len", p->next == NULL && p->len == p->tot_len);
-#endif
-
- /* initiate transfer(); */
- if (p->tot_len >= sizeof(buffer)) {
- LINK_STATS_INC(link.lenerr);
- LINK_STATS_INC(link.drop);
- snmp_inc_ifoutdiscards(netif);
- return ERR_BUF;
- }
- ptr = buffer;
- for(q = p; q != NULL; q = q->next) {
- /* Send the data from the pbuf to the interface, one pbuf at a
- time. The size of the data in each pbuf is kept in the ->len
- variable. */
- /* send data from(q->payload, q->len); */
- LWIP_DEBUGF(NETIF_DEBUG, ("netif: send ptr %p q->payload %p q->len %i q->next %p\n", ptr, q->payload, (int)q->len, q->next));
- if (q == p) {
- memcpy(ptr, &((char*)q->payload)[ETH_PAD_SIZE], q->len - ETH_PAD_SIZE);
- ptr += q->len - ETH_PAD_SIZE;
- } else {
- memcpy(ptr, q->payload, q->len);
- ptr += q->len;
- }
- }
-
- /* signal that packet should be sent(); */
- if (packet_send(netif->state, buffer, tot_len) < 0) {
- LINK_STATS_INC(link.memerr);
- LINK_STATS_INC(link.drop);
- snmp_inc_ifoutdiscards(netif);
- return ERR_BUF;
- }
-
- LINK_STATS_INC(link.xmit);
- snmp_add_ifoutoctets(netif, tot_len);
- ethhdr = (struct eth_hdr *)p->payload;
- if ((ethhdr->dest.addr[0] & 1) != 0) {
- /* broadcast or multicast packet*/
- snmp_inc_ifoutnucastpkts(netif);
- } else {
- /* unicast packet */
- snmp_inc_ifoutucastpkts(netif);
- }
- return ERR_OK;
-}
-
-/*-----------------------------------------------------------------------------------*/
-/*
- * low_level_input():
- *
- * Should allocate a pbuf and transfer the bytes of the incoming
- * packet from the interface into the pbuf.
- *
- */
-/*-----------------------------------------------------------------------------------*/
-static struct pbuf *
-low_level_input(struct netif *netif, void *packet, int packet_len)
-{
- struct pbuf *p, *q;
- int start;
- int length = packet_len;
- struct eth_addr *dest = (struct eth_addr*)packet;
- struct eth_addr *src = dest + 1;
- int unicast;
-
- /* MAC filter: only let my MAC or non-unicast through */
- unicast = ((dest->addr[0] & 0x01) == 0);
- if (((memcmp(dest, &netif->hwaddr, ETHARP_HWADDR_LEN)) && unicast) ||
- /* and don't let feedback packets through (limitation in winpcap?) */
- (!memcmp(src, netif->hwaddr, ETHARP_HWADDR_LEN))) {
- /* don't update counters here! */
- return NULL;
- }
-
- /* We allocate a pbuf chain of pbufs from the pool. */
- p = pbuf_alloc(PBUF_RAW, (u16_t)length + ETH_PAD_SIZE, PBUF_POOL);
- LWIP_DEBUGF(NETIF_DEBUG, ("netif: recv length %i p->tot_len %i\n", length, (int)p->tot_len));
-
- if (p != NULL) {
- /* We iterate over the pbuf chain until we have read the entire
- packet into the pbuf. */
- start=0;
- for (q = p; q != NULL; q = q->next) {
- u16_t copy_len = q->len;
- /* Read enough bytes to fill this pbuf in the chain. The
- available data in the pbuf is given by the q->len
- variable. */
- /* read data into(q->payload, q->len); */
- LWIP_DEBUGF(NETIF_DEBUG, ("netif: recv start %i length %i q->payload %p q->len %i q->next %p\n", start, length, q->payload, (int)q->len, q->next));
- if (q == p) {
- LWIP_ASSERT("q->len >= ETH_PAD_SIZE", q->len >= ETH_PAD_SIZE);
- copy_len -= ETH_PAD_SIZE;
- memcpy(&((char*)q->payload)[ETH_PAD_SIZE], &((char*)packet)[start], copy_len);
- } else {
- memcpy(q->payload, &((char*)packet)[start], copy_len);
- }
- start += copy_len;
- length -= copy_len;
- if (length <= 0) {
- break;
- }
- }
- LINK_STATS_INC(link.recv);
- snmp_add_ifinoctets(netif, p->tot_len);
- if (unicast) {
- snmp_inc_ifinucastpkts(netif);
- } else {
- snmp_inc_ifinnucastpkts(netif);
- }
- } else {
- /* drop packet(); */
- LINK_STATS_INC(link.memerr);
- LINK_STATS_INC(link.drop);
- }
-
- return p;
-}
-
-/*-----------------------------------------------------------------------------------*/
-/*
- * ethernetif_input():
- *
- * This function should be called when a packet is ready to be read
- * from the interface. It uses the function low_level_input() that
- * should handle the actual reception of bytes from the network
- * interface.
- *
- */
-/*-----------------------------------------------------------------------------------*/
-static void
-ethernetif_input(struct netif *netif, void *packet, int packet_len)
-{
- struct eth_hdr *ethhdr;
- struct pbuf *p;
-
- if (packet_len <= 0) {
- return;
- }
- /* move received packet into a new pbuf */
- p = low_level_input(netif, packet, packet_len);
- /* no packet could be read, silently ignore this */
- if (p == NULL) {
- return;
- }
-
- /* points to packet payload, which starts with an Ethernet header */
- ethhdr = (struct eth_hdr *)p->payload;
- switch (htons(ethhdr->type)) {
- /* IP or ARP packet? */
- case ETHTYPE_IP:
- case ETHTYPE_ARP:
-#if PPPOE_SUPPORT
- /* PPPoE packet? */
- case ETHTYPE_PPPOEDISC:
- case ETHTYPE_PPPOE:
-#endif /* PPPOE_SUPPORT */
- /* full packet send to tcpip_thread to process */
- if (netif->input(p, netif) != ERR_OK) {
- LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
- pbuf_free(p);
- p = NULL;
- }
- break;
-
- default:
- LINK_STATS_INC(link.proterr);
- LINK_STATS_INC(link.drop);
- pbuf_free(p);
- p = NULL;
- break;
- }
-}
-
-/*-----------------------------------------------------------------------------------*/
-/*
- * ethernetif_init():
- *
- * Should be called at the beginning of the program to set up the
- * network interface. It calls the function low_level_init() to do the
- * actual setup of the hardware.
- *
- */
-/*-----------------------------------------------------------------------------------*/
-err_t
-ethernetif_init(struct netif *netif)
-{
- static int ethernetif_index;
-
- int local_index;
- SYS_ARCH_DECL_PROTECT(lev);
- SYS_ARCH_PROTECT(lev);
- local_index = ethernetif_index++;
- SYS_ARCH_UNPROTECT(lev);
-
- netif->name[0] = IFNAME0;
- netif->name[1] = (char)(IFNAME1 + local_index);
- netif->linkoutput = low_level_output;
-#if LWIP_ARP
- netif->output = etharp_output;
-#else /* LWIP_ARP */
- netif->output = NULL; /* not used for PPPoE */
-#endif /* LWIP_ARP */
-#if LWIP_NETIF_HOSTNAME
- /* Initialize interface hostname */
- netif_set_hostname(netif, "lwip");
-#endif /* LWIP_NETIF_HOSTNAME */
-
- netif->mtu = 1500;
- netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_IGMP;
- netif->hwaddr_len = ETHARP_HWADDR_LEN;
-
- NETIF_INIT_SNMP(netif, snmp_ifType_ethernet_csmacd, 100000000);
-
- /* sets link up or down based on current status */
- low_level_init(netif);
-
- return ERR_OK;
-}
-
-void
-ethernetif_shutdown(struct netif *netif)
-{
- shutdown_adapter(netif->state);
-}
-
-void
-ethernetif_poll(struct netif *netif)
-{
- update_adapter(netif->state);
-
- /* Process the link status change */
- switch (link_adapter(netif->state)) {
- case LINKEVENT_UP: {
- NOTIFY_LINKSTATE(netif,netif_set_link_up);
- break;
- }
- case LINKEVENT_DOWN: {
- NOTIFY_LINKSTATE(netif,netif_set_link_down);
- break;
- }
- }
-}
-
-/*-----------------------------------------------------------------------------------*/
-/*
- * pktif_update():
- *
- * Needs to be called periodically to get new packets. This could
- * be done inside a thread.
- */
-/*-----------------------------------------------------------------------------------*/
-void
-ethernetif_process_input(void *arg, void *packet, int packet_len)
-{
- struct netif *netif = (struct netif*)arg;
- ethernetif_input(netif, packet, packet_len);
-}
-
-#endif /* LWIP_ETHERNET */
diff --git a/ports/win32/pktif.h b/ports/win32/pktif.h
deleted file mode 100644
index 88b16a1..0000000
--- a/ports/win32/pktif.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef __PKTIF_H__
-#define __PKTIF_H__
-
-#include "lwip/err.h"
-#include "lwip/netif.h"
-
-err_t ethernetif_init (struct netif *netif);
-void ethernetif_shutdown(struct netif *netif);
-void ethernetif_poll (struct netif *netif);
-
-#endif