--- /dev/null
+# Microsoft Developer Studio Project File - Name="lwip4" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=lwip4 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "lwip4.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "lwip4.mak" CFG="lwip4 - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "lwip4 - Win32 Release" (basierend auf "Win32 (x86) Static Library")
+!MESSAGE "lwip4 - Win32 Debug" (basierend auf "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "lwip4 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\src\include" /I "..\..\..\src\include\ipv4" /I "..\..\..\proj\msvc6" /I "..\..\..\src\arch\msvc6\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "lwip4 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\src\include" /I "..\..\..\src\include\ipv4" /I "..\..\..\proj\msvc6" /I "..\..\..\src\arch\msvc6\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"Debug\lwip4_d.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "lwip4 - Win32 Release"
+# Name "lwip4 - Win32 Debug"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\src\core\ipv4\icmp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\inet.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\ipv4\ip.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\ipv4\ip_addr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\mem.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\memp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\netif.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\pbuf.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\stats.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\sys.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\tcp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\tcp_in.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\tcp_out.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\core\udp.c
+# End Source File
+# End Group
+# Begin Group "Header-Dateien"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\api.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\api_msg.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\arch.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\arch\msvc6\include\arch\cc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\arch\msvc6\include\arch\cpu.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\debug.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\def.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\err.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\event.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\ipv4\lwip\icmp.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\ipv4\lwip\inet.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\ipv4\lwip\ip.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\ipv4\lwip\ip_addr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\arch\msvc6\include\arch\lib.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\lwipopts.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\mem.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\memp.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\netif.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\opt.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\pbuf.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\sys.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\tcp.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\tcpip.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\include\lwip\udp.h
+# End Source File
+# End Group
+# End Target
+# End Project
--- /dev/null
+/*
+ * Copyright (c) 2001, 2002 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. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ */
+#ifndef __LWIPOPTS_H__
+#define __LWIPOPTS_H__
+
+#define NO_SYS 1
+//#define LWIP_EVENT_API 1
+
+/* ---------- Memory options ---------- */
+/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
+ lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
+ byte alignment -> define MEM_ALIGNMENT to 2. */
+#define MEM_ALIGNMENT 2
+
+/* MEM_SIZE: the size of the heap memory. If the application will send
+a lot of data that needs to be copied, this should be set high. */
+#define MEM_SIZE 1000
+
+/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
+ sends a lot of data out of ROM (or other static memory), this
+ should be set high. */
+#define MEMP_NUM_PBUF 8
+/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
+ per active UDP "connection". */
+#define MEMP_NUM_UDP_PCB 4
+/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
+ connections. */
+#define MEMP_NUM_TCP_PCB 2
+/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
+ connections. */
+#define MEMP_NUM_TCP_PCB_LISTEN 8
+/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
+ segments. */
+#define MEMP_NUM_TCP_SEG 8
+
+/* The following four are used only with the sequential API and can be
+ set to 0 if the application only will use the raw API. */
+/* MEMP_NUM_NETBUF: the number of struct netbufs. */
+#define MEMP_NUM_NETBUF 0
+/* MEMP_NUM_NETCONN: the number of struct netconns. */
+#define MEMP_NUM_NETCONN 0
+/* MEMP_NUM_APIMSG: the number of struct api_msg, used for
+ communication between the TCP/IP stack and the sequential
+ programs. */
+#define MEMP_NUM_API_MSG 0
+/* MEMP_NUM_TCPIPMSG: the number of struct tcpip_msg, which is used
+ for sequential API communication and incoming packets. Used in
+ src/api/tcpip.c. */
+#define MEMP_NUM_TCPIP_MSG 0
+/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
+ timeouts. */
+#define MEMP_NUM_SYS_TIMEOUT 0
+
+/* ---------- Pbuf options ---------- */
+/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
+#define PBUF_POOL_SIZE 8
+
+/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
+#define PBUF_POOL_BUFSIZE 128
+
+/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
+ link level header. */
+#define PBUF_LINK_HLEN 16
+
+/* ---------- TCP options ---------- */
+#define LWIP_TCP 1
+#define TCP_TTL 255
+
+/* Controls if TCP should queue segments that arrive out of
+ order. Define to 0 if your device is low on memory. */
+#define TCP_QUEUE_OOSEQ 0
+
+/* TCP Maximum segment size. */
+#define TCP_MSS 128
+
+/* TCP sender buffer space (bytes). */
+#define TCP_SND_BUF 256
+
+/* TCP sender buffer space (pbufs). This must be at least = 2 *
+ TCP_SND_BUF/TCP_MSS for things to work. */
+#define TCP_SND_QUEUELEN 4 * TCP_SND_BUF/TCP_MSS
+
+/* TCP receive window. */
+#define TCP_WND 512
+
+/* Maximum number of retransmissions of data segments. */
+#define TCP_MAXRTX 12
+
+/* Maximum number of retransmissions of SYN segments. */
+#define TCP_SYNMAXRTX 4
+
+/* ---------- ARP options ---------- */
+#define ARP_TABLE_SIZE 10
+
+/* ---------- IP options ---------- */
+/* Define IP_FORWARD to 1 if you wish to have the ability to forward
+ IP packets across network interfaces. If you are going to run lwIP
+ on a device with only one network interface, define this to 0. */
+#define IP_FORWARD 0
+
+/* If defined to 1, IP options are allowed (but not parsed). If
+ defined to 0, all packets with IP options are dropped. */
+#define IP_OPTIONS 1
+
+/* ---------- ICMP options ---------- */
+#define ICMP_TTL 255
+
+
+/* ---------- DHCP options ---------- */
+/* Define LWIP_DHCP to 1 if you want DHCP configuration of
+ interfaces. DHCP is not implemented in lwIP 0.5.1, however, so
+ turning this on does currently not work. */
+#define LWIP_DHCP 0
+
+/* 1 if you want to do an ARP check on the offered address
+ (recommended). */
+#define DHCP_DOES_ARP_CHECK 1
+
+/* ---------- UDP options ---------- */
+#define LWIP_UDP 0
+#define UDP_TTL 255
+
+
+/* ---------- Statistics options ---------- */
+/*#define STATS*/
+
+#ifdef STATS
+#define LINK_STATS
+#define IP_STATS
+#define ICMP_STATS
+#define UDP_STATS
+#define TCP_STATS
+#define MEM_STATS
+#define MEMP_STATS
+#define PBUF_STATS
+#define SYS_STATS
+#endif /* STATS */
+
+#endif /* __LWIPOPTS_H__ */
--- /dev/null
+/*
+ * 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 lwIPtest
+ *
+ ****************************************************************************
+ *
+ * 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.
+ *
+ */
+
+#define WIN32_LEAN_AND_MEAN
+#include <stdlib.h>
+#include <stdio.h>
+#include <windows.h>
+#include <packet32.h>
+#include <ntddndis.h>
+
+#include "lwip/debug.h"
+
+#include "lwip/opt.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 "netif/etharp.h"
+#include "netif/tcpdump.h"
+
+#undef NETIF_DEBUG
+
+/* Define those to better describe your network interface. */
+#define IFNAME0 'p'
+#define IFNAME1 'k'
+
+struct ethernetif {
+ struct eth_addr *ethaddr;
+ /* Add whatever per-interface state that is needed here. */
+};
+
+static const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}};
+
+/* Forward declarations. */
+static void ethernetif_input(struct netif *netif);
+static err_t ethernetif_output(struct netif *netif, struct pbuf *p,
+ struct ip_addr *ipaddr);
+
+static struct netif *pktif_netif;
+
+LPADAPTER lpAdapter;
+LPPACKET lpPacket;
+char buffer[256000]; // buffer to hold the data coming from the driver
+unsigned char *cur_packet;
+int cur_length;
+
+struct eth_addr ethaddr;
+
+/*-----------------------------------------------------------------------------------*/
+int init_adapter(void)
+{
+ #define Max_Num_Adapter 10
+
+ char AdapterList[Max_Num_Adapter][1024];
+
+ int i;
+ DWORD dwVersion;
+ DWORD dwWindowsMajorVersion;
+
+ //unicode strings (winnt)
+ WCHAR AdapterName[8192]; // string that contains a list of the network adapters
+ WCHAR *temp,*temp1;
+
+ //ascii strings (win95)
+ char AdapterNamea[8192]; // string that contains a list of the network adapters
+ char *tempa,*temp1a;
+
+ int AdapterNum=0;
+ ULONG AdapterLength;
+
+ PPACKET_OID_DATA ppacket_oid_data;
+
+ BOOLEAN result;
+
+ // obtain the name of the adapters installed on this machine
+ AdapterLength=4096;
+
+ memset(AdapterList,0,sizeof(AdapterList));
+
+ i=0;
+
+ // the data returned by PacketGetAdapterNames is different in Win95 and in WinNT.
+ // We have to check the os on which we are running
+ dwVersion=GetVersion();
+ dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
+ if (!(dwVersion >= 0x80000000 && dwWindowsMajorVersion >= 4))
+ { // Windows NT
+ if(PacketGetAdapterNames(AdapterName,&AdapterLength)==FALSE){
+ printf("Unable to retrieve the list of the adapters!\n");
+ return -1;
+ }
+ temp=AdapterName;
+ temp1=AdapterName;
+ while ((*temp!='\0')||(*(temp-1)!='\0'))
+ {
+ if (*temp=='\0')
+ {
+ memcpy(AdapterList[i],temp1,(temp-temp1)*2);
+ temp1=temp+1;
+ i++;
+ }
+
+ temp++;
+ }
+
+ AdapterNum=i;
+ }
+
+ else //windows 95
+ {
+ if(PacketGetAdapterNames(AdapterNamea,&AdapterLength)==FALSE){
+ printf("Unable to retrieve the list of the adapters!\n");
+ return -1;
+ }
+ tempa=AdapterNamea;
+ temp1a=AdapterNamea;
+
+ while ((*tempa!='\0')||(*(tempa-1)!='\0'))
+ {
+ if (*tempa=='\0')
+ {
+ memcpy(AdapterList[i],temp1a,tempa-temp1a);
+ temp1a=tempa+1;
+ i++;
+ }
+ tempa++;
+ }
+
+ AdapterNum=i;
+ }
+
+ if (AdapterNum<=0)
+ return -1;
+
+ ppacket_oid_data=malloc(sizeof(PACKET_OID_DATA)+6);
+ lpAdapter=PacketOpenAdapter(AdapterList[0]);
+ if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE))
+ return -1;
+ ppacket_oid_data->Oid=OID_802_3_PERMANENT_ADDRESS;
+ ppacket_oid_data->Length=6;
+ if (!PacketRequest(lpAdapter,FALSE,ppacket_oid_data))
+ return -1;
+ memcpy(ppacket_oid_data->Data,ðaddr,6);
+ free(ppacket_oid_data);
+ PacketSetBuff(lpAdapter,512000);
+ PacketSetReadTimeout(lpAdapter,1);
+ PacketSetHwFilter(lpAdapter,NDIS_PACKET_TYPE_ALL_LOCAL);
+ if((lpPacket = PacketAllocatePacket())==NULL){
+ return (-1);
+ }
+ PacketInitPacket(lpPacket,(char*)buffer,256000);
+
+ return 0;
+}
+
+void shutdown_adapter(void)
+{
+ struct ethernetif *ethernetif;
+
+ ethernetif = pktif_netif->state;
+
+ PacketFreePacket(lpPacket);
+ PacketCloseAdapter(lpAdapter);
+}
+
+static void open_adapter(struct ethernetif *ethernetif)
+{
+ memcpy(ðaddr,ethernetif->ethaddr,6);
+}
+
+/*-----------------------------------------------------------------------------------*/
+static void
+low_level_init(struct netif *netif)
+{
+ struct ethernetif *ethernetif;
+
+ ethernetif = netif->state;
+
+ open_adapter(ethernetif);
+
+#ifdef NETIF_DEBUG
+ DEBUGF(NETIF_DEBUG, ("pktif: eth_addr %02X%02X%02X%02X%02X%02X\n",ethernetif->ethaddr->addr[0],ethernetif->ethaddr->addr[1],ethernetif->ethaddr->addr[2],ethernetif->ethaddr->addr[3],ethernetif->ethaddr->addr[4],ethernetif->ethaddr->addr[5]));
+#endif /* NETIF_DEBUG */
+ /* Do whatever else is needed to initialize interface. */
+
+ pktif_netif=netif;
+}
+/*-----------------------------------------------------------------------------------*/
+/*
+ * 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 *ethernetif, struct pbuf *p)
+{
+ struct pbuf *q;
+ unsigned char buffer[1600];
+ unsigned char *ptr;
+ LPPACKET lpPacket;
+
+ /* initiate transfer(); */
+ if (p->tot_len>=1600)
+ return ERR_BUF;
+ if((lpPacket = PacketAllocatePacket())==NULL)
+ return ERR_BUF;
+ PacketInitPacket(lpPacket,buffer,p->tot_len);
+ 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); */
+#ifdef NETIF_DEBUG
+ 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));
+#endif
+ bcopy(q->payload,ptr,q->len);
+ ptr+=q->len;
+ }
+
+ /* signal that packet should be sent(); */
+
+ if (!PacketSendPacket(lpAdapter,lpPacket,TRUE))
+ return ERR_BUF;
+ PacketFreePacket(lpPacket);
+
+#ifdef LINK_STATS
+ stats.link.xmit++;
+#endif /* LINK_STATS */
+ 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 *ethernetif)
+{
+ struct pbuf *p, *q;
+ int start, length;
+
+ /* Obtain the size of the packet and put it into the "len"
+ variable. */
+ length = cur_length;
+ if (length<=0)
+ return NULL;
+
+ /* We allocate a pbuf chain of pbufs from the pool. */
+ p = pbuf_alloc(PBUF_LINK, (u16_t)length, PBUF_POOL);
+#ifdef NETIF_DEBUG
+ DEBUGF(NETIF_DEBUG, ("netif: recv length %i p->tot_len %i\n", length, (int)p->tot_len));
+#endif
+
+ 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) {
+ /* Read enough bytes to fill this pbuf in the chain. The
+ avaliable data in the pbuf is given by the q->len
+ variable. */
+ /* read data into(q->payload, q->len); */
+#ifdef NETIF_DEBUG
+ 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));
+#endif
+ bcopy(&cur_packet[start],q->payload,q->len);
+ start+=q->len;
+ length-=q->len;
+ if (length<=0)
+ break;
+ }
+ /* acknowledge that packet has been read(); */
+ cur_length=0;
+#ifdef LINK_STATS
+ stats.link.recv++;
+#endif /* LINK_STATS */
+ } else {
+ /* drop packet(); */
+ cur_length=0;
+#ifdef LINK_STATS
+ stats.link.memerr++;
+ stats.link.drop++;
+#endif /* LINK_STATS */
+ }
+
+ return p;
+}
+/*-----------------------------------------------------------------------------------*/
+/*
+ * ethernetif_output():
+ *
+ * This function is called by the TCP/IP stack when an IP packet
+ * should be sent. It calls the function called low_level_output() to
+ * do the actuall transmission of the packet.
+ *
+ */
+/*-----------------------------------------------------------------------------------*/
+static err_t
+ethernetif_output(struct netif *netif, struct pbuf *p,
+ struct ip_addr *ipaddr)
+{
+ p = etharp_output(netif, ipaddr, p);
+ if(p != NULL) {
+ return low_level_output(netif, p);
+ }
+ return ERR_OK;
+}
+/*-----------------------------------------------------------------------------------*/
+/*
+ * 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)
+{
+ struct ethernetif *ethernetif;
+ struct eth_hdr *ethhdr;
+ struct pbuf *p;
+
+
+ ethernetif = netif->state;
+
+ p = low_level_input(netif);
+
+ if(p != NULL) {
+
+#ifdef LINK_STATS
+ stats.link.recv++;
+#endif /* LINK_STATS */
+
+ ethhdr = p->payload;
+
+ switch(htons(ethhdr->type)) {
+ case ETHTYPE_IP:
+ etharp_ip_input(netif, p);
+ pbuf_header(p, -14);
+ //if(ip_lookup(p->payload, netif)) {
+ netif->input(p, netif);
+ //}
+ break;
+ case ETHTYPE_ARP:
+ p = etharp_arp_input(netif, ethernetif->ethaddr, p);
+ if(p != NULL) {
+ low_level_output(netif, p);
+ pbuf_free(p);
+ }
+ break;
+ default:
+ pbuf_free(p);
+ break;
+ }
+ }
+}
+/*-----------------------------------------------------------------------------------*/
+static void
+arp_timer(void *arg)
+{
+ etharp_tmr();
+ sys_timeout(ARP_TMR_INTERVAL, (sys_timeout_handler)arp_timer, NULL);
+}
+/*-----------------------------------------------------------------------------------*/
+/*
+ * 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.
+ *
+ */
+/*-----------------------------------------------------------------------------------*/
+void
+ethernetif_init(struct netif *netif)
+{
+ struct ethernetif *ethernetif;
+
+ ethernetif = mem_malloc(sizeof(struct ethernetif));
+ netif->state = ethernetif;
+ netif->name[0] = IFNAME0;
+ netif->name[1] = IFNAME1;
+ netif->output = ethernetif_output;
+
+ ethernetif->ethaddr = (struct eth_addr *)&(netif->hwaddr[0]);
+
+ low_level_init(netif);
+ etharp_init();
+
+ sys_timeout(ARP_TMR_INTERVAL, (sys_timeout_handler)arp_timer, NULL);
+}
+/*-----------------------------------------------------------------------------------*/
+/*
+ * pktif_update():
+ *
+ * Needs to be called periodically to get new packets. This could
+ * be done inside a thread.
+ */
+/*-----------------------------------------------------------------------------------*/
+static void ProcessPackets(LPPACKET lpPacket)
+{
+
+ ULONG ulLines, ulBytesReceived;
+ char *base;
+ char *buf;
+ u_int off=0;
+ u_int tlen,tlen1;
+ struct bpf_hdr *hdr;
+ struct ethernetif *ethernetif;
+
+ ethernetif = pktif_netif->state;
+
+ ulBytesReceived = lpPacket->ulBytesReceived;
+
+ buf = lpPacket->Buffer;
+
+ off=0;
+
+ while(off<ulBytesReceived)
+ {
+ //if(kbhit())return;
+ 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);
+
+ ethernetif_input(pktif_netif);
+ }
+}
+
+void update_adapter(void)
+{
+ struct ethernetif *ethernetif;
+
+ ethernetif = pktif_netif->state;
+
+ if(PacketReceivePacket(lpAdapter,lpPacket,TRUE)==TRUE)
+ ProcessPackets(lpPacket);
+ cur_length=0;
+ cur_packet=NULL;
+}
+
--- /dev/null
+# Microsoft Developer Studio Project File - Name="pktif" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=pktif - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "pktif.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "pktif.mak" CFG="pktif - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "pktif - Win32 Release" (basierend auf "Win32 (x86) Static Library")
+!MESSAGE "pktif - Win32 Debug" (basierend auf "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "pktif - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\src\include" /I "..\..\..\src\include\ipv4" /I "..\..\..\proj\msvc6" /I "..\..\..\src\arch\msvc6\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "pktif - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\src\include" /I "..\..\..\src\include\ipv4" /I "..\..\..\proj\msvc6" /I "..\..\..\src\arch\msvc6\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"Debug\pktif_d.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "pktif - Win32 Release"
+# Name "pktif - Win32 Debug"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\src\netif\etharp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\pktif.c
+# End Source File
+# End Group
+# Begin Group "Header-Dateien"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\src\include\netif\etharp.h
+# End Source File
+# End Group
+# End Target
+# End Project
--- /dev/null
+lwIP for Win32
+
+***WARNING***
+The current CVS code of this port isn't much tested.
+***WARNING***
+
+This is a quickly hacked port and example project of the lwIP library to
+Win32/MSVC.
+
+Due to the nature of the lwip library you have to copy this whole project
+into a new subdir in proj and modify lwipopts.h to your needs. If you move
+it to another directory besides proj, you have to update the include paths
+in the project settings.
+
+Included in the proj/msvc6 directory is the network interface driver using
+the winpcap library.
+
+There is no more documentation yet. Try to figure it out yourself.
+
+This is provided as is, it's just a hack to test some stuff, no serious
+implementation.
+
+Florian Schulze (florian.proff.schulze@gmx.net)
+
+lwIP: http://www.sics.se/~adam/lwip/
+WinPCap: http://netgroup-serv.polito.it/winpcap/
\ No newline at end of file
--- /dev/null
+/*
+ * 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.
+ *
+ * test.c - This file is part of lwIPtest
+ *
+ */
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <time.h>
+#include <string.h>
+
+#include "lwip/debug.h"
+#include "lwip/mem.h"
+#include "lwip/memp.h"
+#include "lwip/sys.h"
+
+#include "lwip/stats.h"
+
+#include "lwip/tcpip.h"
+
+#include "netif/loopif.h"
+#include "netif/tcpdump.h"
+
+#include "arch/perf.h"
+
+//#include "httpd.h"
+//#include "ftpd.h"
+//#include "fs.h"
+
+void ethernetif_init(struct netif *netif);
+int init_adapter(void);
+void shutdown_adapter(void);
+void update_adapter(void);
+
+int dbg_printf(const char *fmt, ...)
+{
+ va_list v;
+ int r;
+
+ va_start(v, fmt);
+ r = vfprintf(stderr,fmt, v);
+ va_end(v);
+ return r;
+}
+
+static err_t netio_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
+{
+ if (err == ERR_OK && p != NULL)
+ {
+ tcp_recved(pcb, p->tot_len);
+ pbuf_free(p);
+ }
+ else
+ pbuf_free(p);
+
+ if (err == ERR_OK && p == NULL)
+ {
+ tcp_arg(pcb, NULL);
+ tcp_sent(pcb, NULL);
+ tcp_recv(pcb, NULL);
+ tcp_close(pcb);
+ }
+
+ return ERR_OK;
+}
+
+static err_t netio_accept(void *arg, struct tcp_pcb *pcb, err_t err)
+{
+ tcp_arg(pcb, NULL);
+ tcp_sent(pcb, NULL);
+ tcp_recv(pcb, netio_recv);
+ return ERR_OK;
+}
+
+void netio_init(void)
+{
+ struct tcp_pcb *pcb;
+
+ pcb = tcp_new();
+ tcp_bind(pcb, IP_ADDR_ANY, 18767);
+ pcb = tcp_listen(pcb);
+ tcp_accept(pcb, netio_accept);
+}
+
+void main_loop()
+{
+ struct ip_addr ipaddr, netmask, gw;
+ int last_time;
+ int timer1;
+ int timer2;
+ int done;
+
+ IP4_ADDR(&gw, 192,168,2,201);
+ IP4_ADDR(&ipaddr, 192,168,2,200);
+ IP4_ADDR(&netmask, 255,255,255,0);
+
+ if (init_adapter() != 0)
+ return;
+
+ netif_set_default(netif_add(&ipaddr, &netmask, &gw, ethernetif_init,
+ ip_input));
+
+ /*
+ IP4_ADDR(&gw, 127,0,0,1);
+ IP4_ADDR(&ipaddr, 127,0,0,1);
+ IP4_ADDR(&netmask, 255,0,0,0);
+
+ netif_add(&ipaddr, &netmask, &gw, loopif_init,
+ ip_input);
+ */
+
+ tcp_init();
+ udp_init();
+ ip_init();
+
+ //httpd_init();
+ netio_init();
+ //ftpd_init();
+
+ last_time=clock();
+ timer1=0;
+ timer2=0;
+ done=0;
+
+ while(!done)
+ {
+ int cur_time;
+ int time_diff;
+
+ cur_time=clock();
+ time_diff=cur_time-last_time;
+ if (time_diff>0)
+ {
+ last_time=cur_time;
+ timer1+=time_diff;
+ timer2+=time_diff;
+ }
+
+ if (timer1>10)
+ {
+ tcp_fasttmr();
+ timer1=0;
+ }
+
+ if (timer2>45)
+ {
+ tcp_slowtmr();
+ timer2=0;
+ done=kbhit();
+ }
+
+ update_adapter();
+ }
+
+ shutdown_adapter();
+}
+
+void bcopy(const void *src, void *dest, int len)
+{
+ memcpy(dest,src,len);
+}
+
+void bzero(void *data, int n)
+{
+ memset(data,0,n);
+}
+
+int main(void)
+{
+ setvbuf(stdout,NULL,_IONBF,0);
+#ifdef PERF
+ perf_init("/tmp/lwip.perf");
+#endif /* PERF */
+#ifdef STATS
+ stats_init();
+#endif /* STATS */
+ sys_init();
+ mem_init();
+ memp_init();
+ pbuf_init();
+
+ //tcpdump_init();
+
+ printf("System initialized.\n");
+
+ main_loop();
+
+ return 0;
+}
+
--- /dev/null
+# Microsoft Developer Studio Project File - Name="test" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=test - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE
+!MESSAGE NMAKE /f "test.mak".
+!MESSAGE
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE
+!MESSAGE NMAKE /f "test.mak" CFG="test - Win32 Debug"
+!MESSAGE
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE
+!MESSAGE "test - Win32 Release" (basierend auf "Win32 (x86) Console Application")
+!MESSAGE "test - Win32 Debug" (basierend auf "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "test - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\src\include" /I "..\..\..\src\include\ipv4" /I "..\..\..\proj\msvc6" /I "..\..\..\src\arch\msvc6\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Packet.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\src\include" /I "..\..\src\include\ipv4" /I "..\..\src\arch\msvc6\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Packet.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "test - Win32 Release"
+# Name "test - Win32 Debug"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\test.c
+# End Source File
+# End Group
+# Begin Group "Header-Dateien"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Ressourcendateien"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=.\lwip4\Release\lwip4.lib
+
+!IF "$(CFG)" == "test - Win32 Release"
+
+!ELSEIF "$(CFG)" == "test - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\lwip4\Debug\lwip4_d.lib
+
+!IF "$(CFG)" == "test - Win32 Release"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "test - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\pktif\Debug\pktif_d.lib
+
+!IF "$(CFG)" == "test - Win32 Release"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF "$(CFG)" == "test - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\pktif\Release\pktif.lib
+
+!IF "$(CFG)" == "test - Win32 Release"
+
+!ELSEIF "$(CFG)" == "test - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ENDIF
+
+# End Source File
+# End Target
+# End Project
--- /dev/null
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
+
+###############################################################################
+
+Project: "lwip4"=.\lwip4\lwip4.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "pktif"=.\pktif\pktif.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "test"=.\test.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name lwip4
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name pktif
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
--- /dev/null
+#pragma pack(push,1)
--- /dev/null
+/*
+ * Copyright (c) 2001, 2002 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. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ */
+#ifndef __ARCH_CC_H__
+#define __ARCH_CC_H__
+
+typedef unsigned char u8_t;
+typedef signed char s8_t;
+/*typedef unsigned short u8_t;
+ typedef signed short s8_t; */
+typedef unsigned short u16_t;
+typedef signed short s16_t;
+typedef unsigned long u32_t;
+typedef signed long s32_t;
+
+typedef u32_t mem_ptr_t;
+
+#define PACK_STRUCT_FIELD(x) x
+#define PACK_STRUCT_STRUCT
+#pragma warning(disable: 4103)
+
+#endif /* __ARCH_CC_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2001, 2002 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. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ */
+#ifndef __ARCH_CPU_H__
+#define __ARCH_CPU_H__
+
+#ifndef BYTE_ORDER
+#define BYTE_ORDER LITTLE_ENDIAN
+#endif /* BYTE_ORDER */
+
+#endif /* __ARCH_CPU_H__ */
--- /dev/null
+#pragma pack(pop)
--- /dev/null
+/*
+ * Copyright (c) 2001, 2002 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. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ */
+#ifndef __ARCH_INIT_H__
+#define __ARCH_INIT_H__
+
+#define TCPIP_INIT_DONE(arg) sys_sem_signal(*(sys_sem_t *)arg)
+
+#endif /* __ARCH_INIT_H__ */
+
+
+
+
--- /dev/null
+/*
+ * Copyright (c) 2001, 2002 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. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ */
+#ifndef __ARCH_LIB_H__
+#define __ARCH_LIB_H__
+
+#ifndef _STRING_H_
+#ifndef _STRING_H
+int strlen(const char *str);
+int strncmp(const char *str1, const char *str2, int len);
+void bcopy(const void *src, void *dest, int len);
+void bzero(void *data, int n);
+#endif /* _STRING_H */
+#endif /* _STRING_H_ */
+
+#endif /* __ARCH_LIB_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2001, 2002 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. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ */
+#ifndef __ARCH_PERF_H__
+#define __ARCH_PERF_H__
+
+#ifdef PERF
+#define PERF_START
+#define PERF_STOP(x)
+
+/*#define PERF_START do { \
+ struct tms __perf_start, __perf_end; \
+ times(&__perf_start)
+#define PERF_STOP(x) times(&__perf_end); \
+ perf_print_times(&__perf_start, &__perf_end, x);\
+ } while(0)*/
+#else /* PERF */
+#define PERF_START /* null definition */
+#define PERF_STOP(x) /* null definition */
+#endif /* PERF */
+
+void perf_print(unsigned long c1l, unsigned long c1h,
+ unsigned long c2l, unsigned long c2h,
+ char *key);
+
+void perf_print_times(struct tms *start, struct tms *end, char *key);
+
+void perf_init(char *fname);
+
+#endif /* __ARCH_PERF_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2001, 2002 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. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ */
+#ifndef __ARCH_SYS_ARCH_H__
+#define __ARCH_SYS_ARCH_H__
+
+#define SYS_MBOX_NULL NULL
+#define SYS_SEM_NULL NULL
+
+struct sys_sem;
+typedef struct sys_sem * sys_sem_t;
+
+struct sys_mbox;
+typedef struct sys_mbox *sys_mbox_t;
+
+struct sys_thread;
+typedef struct sys_thread * sys_thread_t;
+
+#endif /* __ARCH_SYS_ARCH_H__ */
+