diff options
Diffstat (limited to 'contrib/ports/win32')
38 files changed, 6092 insertions, 0 deletions
diff --git a/contrib/ports/win32/Common.mk b/contrib/ports/win32/Common.mk new file mode 100644 index 00000000000..2260162181b --- /dev/null +++ b/contrib/ports/win32/Common.mk @@ -0,0 +1,51 @@ +# +# 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> +# + +CC=gcc + +# Architecture specific files. +LWIPARCH?=$(CONTRIBDIR)/ports/win32 +SYSARCH?=$(LWIPARCH)/sys_arch.c +ARCHFILES=$(SYSARCH) $(LWIPARCH)/pcapif.c \ + $(LWIPARCH)/pcapif_helper.c $(LWIPARCH)/sio.c + +WIN32_COMMON_MK_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) +include $(WIN32_COMMON_MK_DIR)/../Common.allports.mk + +PCAPDIR=$(PCAP_DIR)/Include +LDFLAGS+=-L$(PCAP_DIR)/lib -lwpcap -lpacket +# -Wno-format: GCC complains about non-standard 64 bit modifier needed for MSVC runtime +CFLAGS+=-I$(PCAPDIR) -Wno-format + +pcapif.o: + $(CC) $(CFLAGS) -Wno-error -Wno-redundant-decls -c $(<:.o=.c) +pcapif_helper.o: + $(CC) $(CFLAGS) -std=c99 -Wno-redundant-decls -c $(<:.o=.c) diff --git a/contrib/ports/win32/Filelists.cmake b/contrib/ports/win32/Filelists.cmake new file mode 100644 index 00000000000..36e02a56b02 --- /dev/null +++ b/contrib/ports/win32/Filelists.cmake @@ -0,0 +1,46 @@ +# This file is indended to be included in end-user CMakeLists.txt +# include(/path/to/Filelists.cmake) +# It assumes the variable LWIP_CONTRIB_DIR is defined pointing to the +# root path of lwIP/contrib sources. +# +# This file is NOT designed (on purpose) to be used as cmake +# subdir via add_subdirectory() +# The intention is to provide greater flexibility to users to +# create their own targets using the *_SRCS variables. + +if(NOT ${CMAKE_VERSION} VERSION_LESS "3.10.0") + include_guard(GLOBAL) +endif() + +set(lwipcontribportwindows_SRCS + ${LWIP_CONTRIB_DIR}/ports/win32/sys_arch.c + ${LWIP_CONTRIB_DIR}/ports/win32/sio.c + ${LWIP_CONTRIB_DIR}/ports/win32/pcapif.c + ${LWIP_CONTRIB_DIR}/ports/win32/pcapif_helper.c +) + +# pcapif needs WinPcap developer package: https://www.winpcap.org/devel.htm +if(NOT DEFINED WPDPACK_DIR) + set(WPDPACK_DIR ${LWIP_DIR}/../WpdPack) + message(STATUS "WPDPACK_DIR not set - using default location ${WPDPACK_DIR}") +endif() +if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(WPDPACK_LIB_DIR ${WPDPACK_DIR}/lib/x64) + else() + set(WPDPACK_LIB_DIR ${WPDPACK_DIR}/lib) + endif() + set(WPCAP ${WPDPACK_LIB_DIR}/wpcap.lib) + set(PACKET ${WPDPACK_LIB_DIR}/packet.lib) +else() + find_library(WPCAP wpcap HINTS ${WPDPACK_DIR}/lib/x64) + find_library(PACKET packet HINTS ${WPDPACK_DIR}/lib/x64) +endif() +message(STATUS "WPCAP library: ${WPCAP}") +message(STATUS "PACKET library: ${PACKET}") + +add_library(lwipcontribportwindows EXCLUDE_FROM_ALL ${lwipcontribportwindows_SRCS}) +target_include_directories(lwipcontribportwindows PRIVATE ${LWIP_INCLUDE_DIRS} "${WPDPACK_DIR}/include" ${LWIP_MBEDTLS_INCLUDE_DIRS}) +target_compile_options(lwipcontribportwindows PRIVATE ${LWIP_COMPILER_FLAGS}) +target_compile_definitions(lwipcontribaddons PRIVATE ${LWIP_DEFINITIONS} ${LWIP_MBEDTLS_DEFINITIONS}) +target_link_libraries(lwipcontribportwindows PUBLIC ${WPCAP} ${PACKET} ${LWIP_MBEDTLS_LINK_LIBRARIES}) diff --git a/contrib/ports/win32/check/check_stdint.h b/contrib/ports/win32/check/check_stdint.h new file mode 100644 index 00000000000..c2c100d5fc3 --- /dev/null +++ b/contrib/ports/win32/check/check_stdint.h @@ -0,0 +1 @@ +/* deliberateliy empty */ diff --git a/contrib/ports/win32/check/config.h b/contrib/ports/win32/check/config.h new file mode 100644 index 00000000000..7ed591d1a62 --- /dev/null +++ b/contrib/ports/win32/check/config.h @@ -0,0 +1,29 @@ +/* config.h for check-0.11.0 on win32 under MSVC/MinGW */ + +#ifdef _MSC_VER + +typedef unsigned int pid_t; +typedef unsigned int uint32_t; + +typedef int ssize_t; + +#define HAVE_DECL_STRDUP 1 +#define HAVE_DECL_FILENO 1 +#define HAVE_DECL_PUTENV 1 + +#define _CRT_SECURE_NO_WARNINGS + +/* disable some warnings */ +#pragma warning (disable: 4090) /* const assigned to non-const */ +#pragma warning (disable: 4996) /* fileno is deprecated */ + +#endif /* _ MSC_VER */ + + +#define LWIP_UNITTESTS_NOFORK + +#include <io.h> +#include <stdint.h> + +typedef unsigned int clockid_t; +typedef unsigned int timer_t; diff --git a/contrib/ports/win32/check/stdbool.h b/contrib/ports/win32/check/stdbool.h new file mode 100644 index 00000000000..1f504d91a3a --- /dev/null +++ b/contrib/ports/win32/check/stdbool.h @@ -0,0 +1,9 @@ +#ifndef MY_STDBOOL_H +#define MY_STDBOOL_H + +typedef int bool; +#define true 1 +#define false 0 +#define __bool_true_false_are_defined 1 + +#endif diff --git a/contrib/ports/win32/check/sys/time.h b/contrib/ports/win32/check/sys/time.h new file mode 100644 index 00000000000..d71d827d16a --- /dev/null +++ b/contrib/ports/win32/check/sys/time.h @@ -0,0 +1,12 @@ +#ifndef LWIP_SYS__TIME_H +#define LWIP_SYS__TIME_H + +#include <stdlib.h> /* time_t */ + +struct timeval { + time_t tv_sec; /* seconds */ + long tv_usec; /* and microseconds */ +}; +int gettimeofday(struct timeval* tp, void* tzp); + +#endif diff --git a/contrib/ports/win32/check/time.c b/contrib/ports/win32/check/time.c new file mode 100644 index 00000000000..b5947cd99e4 --- /dev/null +++ b/contrib/ports/win32/check/time.c @@ -0,0 +1,66 @@ +#include <time.h> + +#include <windows.h> +#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) + #define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 +#else + #define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL +#endif + +#include "config.h" + +struct timezone +{ + int tz_minuteswest; /* minutes W of Greenwich */ + int tz_dsttime; /* type of dst correction */ +}; + +int gettimeofday(struct timeval *tv, struct timezone *tz) +{ + FILETIME ft; + unsigned __int64 tmpres = 0; + static int tzflag; + + if (NULL != tv) { + GetSystemTimeAsFileTime(&ft); + + tmpres |= ft.dwHighDateTime; + tmpres <<= 32; + tmpres |= ft.dwLowDateTime; + + /*converting file time to unix epoch*/ + tmpres -= DELTA_EPOCH_IN_MICROSECS; + tmpres /= 10; /*convert into microseconds*/ + tv->tv_sec = (long)(tmpres / 1000000UL); + tv->tv_usec = (long)(tmpres % 1000000UL); + } + + if (NULL != tz) { + if (!tzflag) { + _tzset(); + tzflag++; + } + tz->tz_minuteswest = _timezone / 60; + tz->tz_dsttime = _daylight; + } + + return 0; +} + +struct tm * +localtime_r(const time_t *timer, struct tm *result) +{ + struct tm *local_result; + + if (result == NULL) { + return NULL; + } + + local_result = localtime (timer); + if (local_result == NULL) { + return NULL; + } + + memcpy(result, local_result, sizeof(*result)); + return result; +} diff --git a/contrib/ports/win32/check/unistd.h b/contrib/ports/win32/check/unistd.h new file mode 100644 index 00000000000..332e6e129b4 --- /dev/null +++ b/contrib/ports/win32/check/unistd.h @@ -0,0 +1,7 @@ +#ifndef LWIP_UNISTD_H +#define LWIP_UNISTD_H + +/* include io.h for read() and write() */ +#include <io.h> + +#endif diff --git a/contrib/ports/win32/example_app/CMakeLists.txt b/contrib/ports/win32/example_app/CMakeLists.txt new file mode 100644 index 00000000000..7dfe55503ae --- /dev/null +++ b/contrib/ports/win32/example_app/CMakeLists.txt @@ -0,0 +1,27 @@ +include(${LWIP_DIR}/contrib/ports/CMakeCommon.cmake) + +set (LWIP_INCLUDE_DIRS + "${LWIP_DIR}/src/include" + "${LWIP_DIR}/contrib/" + "${LWIP_DIR}/contrib/ports/win32/include" + "${LWIP_DIR}/contrib/examples/example_app" +) + +include(${LWIP_DIR}/src/Filelists.cmake) +include(${LWIP_DIR}/contrib/Filelists.cmake) +include(${LWIP_DIR}/contrib/ports/win32/Filelists.cmake) + +if(NOT EXISTS ${LWIP_DIR}/contrib/examples/example_app/lwipcfg.h) + message(WARNING "${LWIP_DIR}/contrib/examples/example_app is missing lwipcfg.h +Copy ${LWIP_DIR}/contrib/examples/example_app/lwipcfg.h.example to ${LWIP_DIR}/contrib/examples/example_app/lwipcfg.h and edit appropriately") +endif() +add_executable(example_app ${LWIP_DIR}/contrib/examples/example_app/test.c default_netif.c) +target_include_directories(example_app PRIVATE ${LWIP_INCLUDE_DIRS}) +target_compile_options(example_app PRIVATE ${LWIP_COMPILER_FLAGS}) +target_compile_definitions(example_app PRIVATE ${LWIP_DEFINITIONS} ${LWIP_MBEDTLS_DEFINITIONS}) +target_link_libraries(example_app ${LWIP_SANITIZER_LIBS} lwipallapps lwipcontribexamples lwipcontribapps lwipcontribaddons lwipcontribportwindows lwipcore lwipmbedtls) + +add_executable(makefsdata ${lwipmakefsdata_SRCS}) +target_compile_options(makefsdata PRIVATE ${LWIP_COMPILER_FLAGS}) +target_include_directories(makefsdata PRIVATE ${LWIP_INCLUDE_DIRS}) +target_link_libraries(makefsdata ${LWIP_SANITIZER_LIBS} lwipcore lwipcontribportwindows) diff --git a/contrib/ports/win32/example_app/Makefile b/contrib/ports/win32/example_app/Makefile new file mode 100644 index 00000000000..452af7a9577 --- /dev/null +++ b/contrib/ports/win32/example_app/Makefile @@ -0,0 +1,55 @@ +# +# 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> +# + +all compile: example_app makefsdata +.PHONY: all + +include ../Common.mk + +CFLAGS+=-I$(CONTRIBDIR)/examples/example_app + +MAKEFSDATAOBJS=$(notdir $(MAKEFSDATAFILES:.c=.o)) + +clean: + cmd /c del /q *.o $(LWIPLIBCOMMON) $(APPLIB) test.exe *.s .depend* *.map + +depend dep: .depend + +include .depend + +.depend: $(CONTRIBDIR)/examples/example_app/test.c default_netif.c $(LWIPFILES) $(APPFILES) $(MAKEFSDATAFILES) + $(CCDEP) $(CFLAGS) -MM $^ > .depend || cmd /c del .depend + +example_app: .depend $(LWIPLIBCOMMON) $(APPLIB) default_netif.o test.o + $(CC) $(CFLAGS) -o example_app test.o default_netif.o -Wl,--start-group $(APPLIB) $(LWIPLIBCOMMON) -Wl,--end-group $(LDFLAGS) -Xlinker -Map=test.map + +makefsdata: .depend $(MAKEFSDATAOBJS) + $(CC) $(CFLAGS) -o makefsdata $(MAKEFSDATAOBJS) diff --git a/contrib/ports/win32/example_app/default_netif.c b/contrib/ports/win32/example_app/default_netif.c new file mode 100644 index 00000000000..9af2ecca03f --- /dev/null +++ b/contrib/ports/win32/example_app/default_netif.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2001-2003 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> + * + */ + +#include "lwip/opt.h" + +#include "lwip/netif.h" +#include "lwip/ip_addr.h" +#include "lwip/sys.h" +#include "lwip/tcpip.h" +#include "../pcapif.h" +#include "examples/example_app/default_netif.h" + +static struct netif netif; + +#if LWIP_IPV4 +#define NETIF_ADDRS ipaddr, netmask, gw, +void init_default_netif(const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw) +#else +#define NETIF_ADDRS +void init_default_netif(void) +#endif +{ +#if NO_SYS + netif_add(&netif, NETIF_ADDRS NULL, pcapif_init, netif_input); +#else /* NO_SYS */ + netif_add(&netif, NETIF_ADDRS NULL, pcapif_init, tcpip_input); +#endif /* NO_SYS */ + netif_set_default(&netif); +} + +void +default_netif_poll(void) +{ +#if !PCAPIF_RX_USE_THREAD + /* check for packets and link status*/ + pcapif_poll(&netif); + /* When pcapif_poll comes back, there are not packets, so sleep to + prevent 100% CPU load. Don't do this in an embedded system since it + increases latency! */ + sys_msleep(1); +#else /* !PCAPIF_RX_USE_THREAD */ + sys_msleep(50); +#endif /* !PCAPIF_RX_USE_THREAD */ +} + +void +default_netif_shutdown(void) +{ + /* release the pcap library... */ + pcapif_shutdown(&netif); +} diff --git a/contrib/ports/win32/include/arch/bpstruct.h b/contrib/ports/win32/include/arch/bpstruct.h new file mode 100644 index 00000000000..1d81e3f7b89 --- /dev/null +++ b/contrib/ports/win32/include/arch/bpstruct.h @@ -0,0 +1 @@ +#pragma pack(push,1) diff --git a/contrib/ports/win32/include/arch/cc.h b/contrib/ports/win32/include/arch/cc.h new file mode 100644 index 00000000000..0a0c03219ca --- /dev/null +++ b/contrib/ports/win32/include/arch/cc.h @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2001-2003 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 LWIP_ARCH_CC_H +#define LWIP_ARCH_CC_H + +#ifdef _MSC_VER +#pragma warning (disable: 4127) /* conditional expression is constant */ +#pragma warning (disable: 4996) /* 'strncpy' was declared deprecated */ +#pragma warning (disable: 4103) /* structure packing changed by including file */ +#pragma warning (disable: 4820) /* 'x' bytes padding added after data member 'y' */ +#pragma warning (disable: 4711) /* The compiler performed inlining on the given function, although it was not marked for inlining */ +#endif + +#ifdef _MSC_VER +#if _MSC_VER >= 1910 +#include <errno.h> /* use MSVC errno for >= 2017 */ +#else +#define LWIP_PROVIDE_ERRNO /* provide errno for MSVC pre-2017 */ +#endif +#else /* _MSC_VER */ +#define LWIP_PROVIDE_ERRNO /* provide errno for non-MSVC */ +#endif /* _MSC_VER */ + +#ifdef __GNUC__ +#define LWIP_TIMEVAL_PRIVATE 0 +#include <sys/time.h> +#endif + +/* Define platform endianness (might already be defined) */ +#ifndef BYTE_ORDER +#define BYTE_ORDER LITTLE_ENDIAN +#endif /* BYTE_ORDER */ + +typedef int sys_prot_t; + +#ifdef _MSC_VER +/* define _INTPTR for Win32 MSVC stdint.h */ +#define _INTPTR 2 + +/* Do not use lwIP default definitions for format strings + * because these do not work with MSVC 2010 compiler (no inttypes.h) + */ +#define LWIP_NO_INTTYPES_H 1 + +/* Define (sn)printf formatters for these lwIP types */ +#define X8_F "02x" +#define U16_F "hu" +#define U32_F "lu" +#define S32_F "ld" +#define X32_F "lx" + +#define S16_F "hd" +#define X16_F "hx" +#define SZT_F "lu" +#endif /* _MSC_VER */ + +/* Compiler hints for packing structures */ +#define PACK_STRUCT_USE_INCLUDES + +#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ + LWIP_PLATFORM_DIAG(("Assertion \"%s\" failed at line %d in %s\n", message, __LINE__, __FILE__)); \ + handler;} } while(0) + +#ifdef _MSC_VER +/* C runtime functions redefined */ +#if _MSC_VER < 1910 +#define snprintf _snprintf +#endif +#define strdup _strdup +#endif + +/* Define an example for LWIP_PLATFORM_DIAG: since this uses varargs and the old +* C standard lwIP targets does not support this in macros, we have extra brackets +* around the arguments, which are left out in the following macro definition: +*/ +#if !defined(LWIP_TESTMODE) || !LWIP_TESTMODE +void lwip_win32_platform_diag(const char *format, ...); +#define LWIP_PLATFORM_DIAG(x) lwip_win32_platform_diag x +#endif + +extern unsigned int lwip_port_rand(void); +#define LWIP_RAND() ((uint32_t)lwip_port_rand()) + +#define PPP_INCLUDE_SETTINGS_HEADER + +#endif /* LWIP_ARCH_CC_H */ diff --git a/contrib/ports/win32/include/arch/epstruct.h b/contrib/ports/win32/include/arch/epstruct.h new file mode 100644 index 00000000000..65898b54bb5 --- /dev/null +++ b/contrib/ports/win32/include/arch/epstruct.h @@ -0,0 +1 @@ +#pragma pack(pop) diff --git a/contrib/ports/win32/include/arch/perf.h b/contrib/ports/win32/include/arch/perf.h new file mode 100644 index 00000000000..d1150b1d806 --- /dev/null +++ b/contrib/ports/win32/include/arch/perf.h @@ -0,0 +1,40 @@ +/* + * 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels <adam@sics.se> + * + */ +#ifndef LWIP_PERF_H +#define LWIP_PERF_H + +#define PERF_START /* null definition */ +#define PERF_STOP(x) /* null definition */ + +#endif /* LWIP_PERF_H */ diff --git a/contrib/ports/win32/include/arch/sys_arch.h b/contrib/ports/win32/include/arch/sys_arch.h new file mode 100644 index 00000000000..ded10284bec --- /dev/null +++ b/contrib/ports/win32/include/arch/sys_arch.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2001-2003 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 LWIP_ARCH_SYS_ARCH_H +#define LWIP_ARCH_SYS_ARCH_H + +/* HANDLE is used for sys_sem_t but we won't include windows.h */ +struct _sys_sem { + void *sem; +}; +typedef struct _sys_sem sys_sem_t; +#define sys_sem_valid_val(sema) (((sema).sem != NULL) && ((sema).sem != (void*)-1)) +#define sys_sem_valid(sema) (((sema) != NULL) && sys_sem_valid_val(*(sema))) +#define sys_sem_set_invalid(sema) ((sema)->sem = NULL) + +/* HANDLE is used for sys_mutex_t but we won't include windows.h */ +struct _sys_mut { + void *mut; +}; +typedef struct _sys_mut sys_mutex_t; +#define sys_mutex_valid_val(mutex) (((mutex).mut != NULL) && ((mutex).mut != (void*)-1)) +#define sys_mutex_valid(mutex) (((mutex) != NULL) && sys_mutex_valid_val(*(mutex))) +#define sys_mutex_set_invalid(mutex) ((mutex)->mut = NULL) + +#ifndef MAX_QUEUE_ENTRIES +#define MAX_QUEUE_ENTRIES 100 +#endif +struct lwip_mbox { + void* sem; + void* q_mem[MAX_QUEUE_ENTRIES]; + u32_t head, tail; +}; +typedef struct lwip_mbox sys_mbox_t; +#define SYS_MBOX_NULL NULL +#define sys_mbox_valid_val(mbox) (((mbox).sem != NULL) && ((mbox).sem != (void*)-1)) +#define sys_mbox_valid(mbox) ((mbox != NULL) && sys_mbox_valid_val(*(mbox))) +#define sys_mbox_set_invalid(mbox) ((mbox)->sem = NULL) + +/* DWORD (thread id) is used for sys_thread_t but we won't include windows.h */ +typedef u32_t sys_thread_t; + +sys_sem_t* sys_arch_netconn_sem_get(void); +void sys_arch_netconn_sem_alloc(void); +void sys_arch_netconn_sem_free(void); +#define LWIP_NETCONN_THREAD_SEM_GET() sys_arch_netconn_sem_get() +#define LWIP_NETCONN_THREAD_SEM_ALLOC() sys_arch_netconn_sem_alloc() +#define LWIP_NETCONN_THREAD_SEM_FREE() sys_arch_netconn_sem_free() + +#define LWIP_EXAMPLE_APP_ABORT() lwip_win32_keypressed() +int lwip_win32_keypressed(void); + +/* Threading options */ +void sys_mark_tcpip_thread(void); +#define LWIP_MARK_TCPIP_THREAD() sys_mark_tcpip_thread() + +#if LWIP_TCPIP_CORE_LOCKING +void sys_lock_tcpip_core(void); +#define LOCK_TCPIP_CORE() sys_lock_tcpip_core() +void sys_unlock_tcpip_core(void); +#define UNLOCK_TCPIP_CORE() sys_unlock_tcpip_core() +#endif + +#endif /* LWIP_ARCH_SYS_ARCH_H */ diff --git a/contrib/ports/win32/msvc/build_coverity.cmd b/contrib/ports/win32/msvc/build_coverity.cmd new file mode 100644 index 00000000000..f96cc632844 --- /dev/null +++ b/contrib/ports/win32/msvc/build_coverity.cmd @@ -0,0 +1,26 @@ +@echo off +rem Usage: pass the path to cov-build.exe (with trailing backslash, without the exe) as first parameter +rem ATTENTION: this deletes the output folder "cov-int" and the output file "cov-int.zip" first! + +set devenv="%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe" +if not exist %devenv% set devenv="%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\vcexpress.exe" +if not exist %devenv% set devenv="%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe" +if not exist %devenv% set devenv="%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\vcexpress.exe" +set covbuild=%1cov-build.exe +set covoutput=cov-int +set zip7="c:\Program Files\7-Zip\7z.exe" + +pushd %~dp0 + +if exist %covoutput% rd /s /q %covoutput% +if exist %covoutput%.zip del %covoutput%.zip + +%covbuild% --dir %covoutput% %devenv% lwip_test.sln /build Debug || goto error + +if exist %zip7% goto dozip +echo error: 7zip not found at \"%zip7% +goto error +:dozip +%zip7% a %covoutput%.zip %covoutput% +:error +popd
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/libcheck.vcxproj b/contrib/ports/win32/msvc/libcheck.vcxproj new file mode 100644 index 00000000000..c33fdab6130 --- /dev/null +++ b/contrib/ports/win32/msvc/libcheck.vcxproj @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{EBB156DC-01BF-47B2-B69C-1A750B6B5F09}</ProjectGuid> + <RootNamespace>libcheck</RootNamespace> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>MultiByte</CharacterSet> + <WholeProgramOptimization>true</WholeProgramOptimization> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\$(ProjectName)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\$(ProjectName)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\$(ProjectName)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>..\check;..\..\..\..\..\check\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_LIB;WIN32;_DEBUG;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <Optimization>MaxSpeed</Optimization> + <IntrinsicFunctions>true</IntrinsicFunctions> + <AdditionalIncludeDirectories>..\check;..\..\..\..\..\check\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + </ClCompile> + </ItemDefinitionGroup> + <ItemGroup> + <ClInclude Include="..\..\..\..\..\check\lib\libcompat.h" /> + <ClInclude Include="..\check\config.h" /> + <ClInclude Include="..\check\unistd.h" /> + <ClInclude Include="..\check\sys\time.h" /> + <ClInclude Include="..\..\..\..\..\check\src\check.h" /> + <ClInclude Include="..\..\..\..\..\check\src\check_error.h" /> + <ClInclude Include="..\..\..\..\..\check\src\check_impl.h" /> + <ClInclude Include="..\..\..\..\..\check\src\check_list.h" /> + <ClInclude Include="..\..\..\..\..\check\src\check_log.h" /> + <ClInclude Include="..\..\..\..\..\check\src\check_msg.h" /> + <ClInclude Include="..\..\..\..\..\check\src\check_pack.h" /> + <ClInclude Include="..\..\..\..\..\check\src\check_print.h" /> + <ClInclude Include="..\..\..\..\..\check\src\check_str.h" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\..\..\check\lib\clock_gettime.c" /> + <ClCompile Include="..\..\..\..\..\check\lib\libcompat.c" /> + <ClCompile Include="..\check\time.c" /> + <ClCompile Include="..\..\..\..\..\check\src\check.c" /> + <ClCompile Include="..\..\..\..\..\check\src\check_error.c" /> + <ClCompile Include="..\..\..\..\..\check\src\check_list.c" /> + <ClCompile Include="..\..\..\..\..\check\src\check_log.c" /> + <ClCompile Include="..\..\..\..\..\check\src\check_msg.c" /> + <ClCompile Include="..\..\..\..\..\check\src\check_pack.c" /> + <ClCompile Include="..\..\..\..\..\check\src\check_print.c" /> + <ClCompile Include="..\..\..\..\..\check\src\check_run.c" /> + <ClCompile Include="..\..\..\..\..\check\src\check_str.c" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/libcheck.vcxproj.filters b/contrib/ports/win32/msvc/libcheck.vcxproj.filters new file mode 100644 index 00000000000..d8bfdfcec93 --- /dev/null +++ b/contrib/ports/win32/msvc/libcheck.vcxproj.filters @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Win32"> + <UniqueIdentifier>{05d172f9-8ca6-4d9c-96e4-2b0480a8222f}</UniqueIdentifier> + </Filter> + <Filter Include="Win32\sys"> + <UniqueIdentifier>{eb9ccf88-7e08-4202-bb4f-5a51443fa480}</UniqueIdentifier> + </Filter> + <Filter Include="src"> + <UniqueIdentifier>{3f044d95-ab52-45ce-b4ae-27797eb221b2}</UniqueIdentifier> + </Filter> + <Filter Include="libcompat"> + <UniqueIdentifier>{abb21abe-51c2-45df-bdc9-8e00ce7fe404}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\check\config.h"> + <Filter>Win32</Filter> + </ClInclude> + <ClInclude Include="..\check\unistd.h"> + <Filter>Win32</Filter> + </ClInclude> + <ClInclude Include="..\check\sys\time.h"> + <Filter>Win32\sys</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\..\check\src\check.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\..\check\src\check_error.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\..\check\src\check_impl.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\..\check\src\check_list.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\..\check\src\check_log.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\..\check\src\check_msg.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\..\check\src\check_pack.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\..\check\src\check_print.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\..\check\src\check_str.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\..\check\lib\libcompat.h"> + <Filter>libcompat</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\check\time.c"> + <Filter>Win32</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\..\check\src\check.c"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\..\check\src\check_error.c"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\..\check\src\check_list.c"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\..\check\src\check_log.c"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\..\check\src\check_msg.c"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\..\check\src\check_pack.c"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\..\check\src\check_print.c"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\..\check\src\check_run.c"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\..\check\src\check_str.c"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\..\check\lib\libcompat.c"> + <Filter>libcompat</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\..\check\lib\clock_gettime.c"> + <Filter>libcompat</Filter> + </ClCompile> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/lwIP.vcxproj b/contrib/ports/win32/msvc/lwIP.vcxproj new file mode 100644 index 00000000000..5e7587f1e5b --- /dev/null +++ b/contrib/ports/win32/msvc/lwIP.vcxproj @@ -0,0 +1,593 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug unittests|Win32"> + <Configuration>Debug unittests</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release unittests|Win32"> + <Configuration>Release unittests</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{2CC276FA-B226-49C9-8F82-7FCD5A228E28}</ProjectGuid> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\$(ProjectName)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\$(ProjectName)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">$(Configuration)\$(ProjectName)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">$(Configuration)\$(ProjectName)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">$(Configuration)\$(ProjectName)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">$(Configuration)\$(ProjectName)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\$(ProjectName)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\$(ProjectName)\</OutDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <Optimization>MaxSpeed</Optimization> + <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> + <AdditionalIncludeDirectories>..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level4</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <CompileAs>Default</CompileAs> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0407</Culture> + </ResourceCompile> + <Lib> + <SuppressStartupBanner>true</SuppressStartupBanner> + </Lib> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <PrecompiledHeader> + </PrecompiledHeader> + <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level4</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + <CompileAs>Default</CompileAs> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0407</Culture> + </ResourceCompile> + <Lib> + <SuppressStartupBanner>true</SuppressStartupBanner> + </Lib> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <PrecompiledHeader> + </PrecompiledHeader> + <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level4</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + <CompileAs>Default</CompileAs> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0407</Culture> + </ResourceCompile> + <Lib> + <SuppressStartupBanner>true</SuppressStartupBanner> + </Lib> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'"> + <ClCompile> + <Optimization>MaxSpeed</Optimization> + <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> + <AdditionalIncludeDirectories>..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level4</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <CompileAs>Default</CompileAs> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0407</Culture> + </ResourceCompile> + <Lib> + <SuppressStartupBanner>true</SuppressStartupBanner> + </Lib> + </ItemDefinitionGroup> + <ItemGroup> + <CustomBuildStep Include="..\..\..\..\doc\contrib.txt"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </CustomBuildStep> + <CustomBuildStep Include="..\..\..\..\doc\FILES"> + <FileType>Document</FileType> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </CustomBuildStep> + <CustomBuildStep Include="..\..\..\..\doc\rawapi.txt"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </CustomBuildStep> + <CustomBuildStep Include="..\..\..\..\doc\savannah.txt"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </CustomBuildStep> + <CustomBuildStep Include="..\..\..\..\doc\snmp_agent.txt"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </CustomBuildStep> + <CustomBuildStep Include="..\..\..\..\doc\sys_arch.txt"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </CustomBuildStep> + <CustomBuildStep Include="..\..\..\..\src\core\ipv6\README"> + <FileType>Document</FileType> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </CustomBuildStep> + <CustomBuildStep Include="..\..\..\..\src\netif\FILES"> + <FileType>Document</FileType> + </CustomBuildStep> + <CustomBuildStep Include="..\lwipcfg_msvc.h.example"> + <FileType>Document</FileType> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </CustomBuildStep> + <None Include="..\..\..\..\CHANGELOG" /> + <None Include="..\..\..\..\COPYING" /> + <None Include="..\..\..\..\doc\contrib.txt" /> + <None Include="..\..\..\..\doc\doxygen\generate.bat" /> + <None Include="..\..\..\..\doc\doxygen\generate.sh" /> + <None Include="..\..\..\..\doc\doxygen\lwip.Doxyfile" /> + <None Include="..\..\..\..\doc\FILES" /> + <None Include="..\..\..\..\doc\mdns.txt" /> + <None Include="..\..\..\..\doc\ppp.txt" /> + <None Include="..\..\..\..\doc\savannah.txt" /> + <None Include="..\..\..\..\FILES" /> + <None Include="..\..\..\..\README" /> + <None Include="..\..\..\..\UPGRADING" /> + <None Include="..\..\..\examples\example_app\lwipcfg.h.example"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </None> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\..\doc\NO_SYS_SampleCode.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\..\src\api\api_lib.c" /> + <ClCompile Include="..\..\..\..\src\api\api_msg.c" /> + <ClCompile Include="..\..\..\..\src\api\err.c" /> + <ClCompile Include="..\..\..\..\src\api\if_api.c" /> + <ClCompile Include="..\..\..\..\src\api\netbuf.c" /> + <ClCompile Include="..\..\..\..\src\api\netdb.c" /> + <ClCompile Include="..\..\..\..\src\api\netifapi.c" /> + <ClCompile Include="..\..\..\..\src\api\sockets.c" /> + <ClCompile Include="..\..\..\..\src\api\tcpip.c" /> + <ClCompile Include="..\..\..\..\src\apps\altcp_tls\altcp_tls_mbedtls.c"> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\altcp_tls\altcp_tls_mbedtls_mem.c"> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\http\altcp_proxyconnect.c" /> + <ClCompile Include="..\..\..\..\src\apps\http\http_client.c" /> + <ClCompile Include="..\..\..\..\src\apps\lwiperf\lwiperf.c" /> + <ClCompile Include="..\..\..\..\src\apps\mdns\mdns_domain.c" /> + <ClCompile Include="..\..\..\..\src\apps\mdns\mdns_out.c" /> + <ClCompile Include="..\..\..\..\src\apps\mqtt\mqtt.c" /> + <ClCompile Include="..\..\..\..\src\apps\netbiosns\netbiosns.c" /> + <ClCompile Include="..\..\..\..\src\apps\smtp\smtp.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_snmpv2_framework.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_snmpv2_usm.c" /> + <ClCompile Include="..\..\..\..\src\apps\sntp\sntp.c" /> + <ClCompile Include="..\..\..\..\src\apps\tftp\tftp.c" /> + <ClCompile Include="..\..\..\..\src\core\altcp.c" /> + <ClCompile Include="..\..\..\..\src\core\altcp_alloc.c" /> + <ClCompile Include="..\..\..\..\src\core\altcp_tcp.c" /> + <ClCompile Include="..\..\..\..\src\core\def.c" /> + <ClCompile Include="..\..\..\..\src\core\dns.c" /> + <ClCompile Include="..\..\..\..\src\core\inet_chksum.c" /> + <ClCompile Include="..\..\..\..\src\core\init.c" /> + <ClCompile Include="..\..\..\..\src\core\mem.c" /> + <ClCompile Include="..\..\..\..\src\core\memp.c" /> + <ClCompile Include="..\..\..\..\src\core\netif.c" /> + <ClCompile Include="..\..\..\..\src\core\pbuf.c" /> + <ClCompile Include="..\..\..\..\src\core\raw.c" /> + <ClCompile Include="..\..\..\..\src\core\stats.c" /> + <ClCompile Include="..\..\..\..\src\core\sys.c" /> + <ClCompile Include="..\..\..\..\src\core\tcp.c" /> + <ClCompile Include="..\..\..\..\src\core\tcp_in.c" /> + <ClCompile Include="..\..\..\..\src\core\tcp_out.c" /> + <ClCompile Include="..\..\..\..\src\core\udp.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv4\acd.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv4\autoip.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv4\dhcp.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv4\etharp.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv4\icmp.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv4\igmp.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv4\ip4.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv4\ip4_addr.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv6\dhcp6.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv6\ethip6.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv6\icmp6.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv6\inet6.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv6\ip6.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv6\ip6_addr.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv6\ip6_frag.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv6\mld6.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv6\nd6.c" /> + <ClCompile Include="..\..\..\..\src\netif\bridgeif.c" /> + <ClCompile Include="..\..\..\..\src\netif\bridgeif_fdb.c" /> + <ClCompile Include="..\..\..\..\src\netif\ethernet.c" /> + <ClCompile Include="..\..\..\..\src\netif\lowpan6.c" /> + <ClCompile Include="..\..\..\..\src\netif\lowpan6_ble.c" /> + <ClCompile Include="..\..\..\..\src\netif\lowpan6_common.c" /> + <ClCompile Include="..\..\..\..\src\netif\slipif.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\auth.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\ccp.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\chap-md5.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\chap-new.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\chap_ms.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\demand.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\eap.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\ecp.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\eui64.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\fsm.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\ipcp.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\ipv6cp.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\lcp.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\magic.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\mppe.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\multilink.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\ppp.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\pppcrypt.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\pppoe.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\pppol2tp.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\pppos.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\upap.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\utils.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\vj.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\polarssl\arc4.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\polarssl\des.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\polarssl\md4.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\polarssl\md5.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\polarssl\sha1.c" /> + <ClCompile Include="..\..\..\..\src\apps\http\fs.c" /> + <ClCompile Include="..\..\..\..\src\apps\http\fsdata.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\http\httpd.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_asn1.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_core.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_msg.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_netconn.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_pbuf_stream.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_raw.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_scalar.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_table.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_threadsync.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_traps.c" /> + <ClCompile Include="..\..\..\..\src\core\ip.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmpv3.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_icmp.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_interfaces.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_ip.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_snmp.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_system.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_tcp.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_udp.c" /> + <ClCompile Include="..\..\..\..\src\netif\ppp\pppapi.c" /> + <ClCompile Include="..\..\..\..\src\core\ipv4\ip4_frag.c" /> + <ClCompile Include="..\..\..\..\src\core\timeouts.c" /> + <ClCompile Include="..\..\..\..\src\apps\mdns\mdns.c" /> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmpv3_mbedtls.c"> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\..\..\mbedtls\include;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\zepif.c" /> + <ClCompile Include="..\sio.c" /> + <ClCompile Include="..\sys_arch.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">true</ExcludedFromBuild> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\..\doc\doxygen\main_page.h" /> + <ClInclude Include="..\..\..\..\src\apps\altcp_tls\altcp_tls_mbedtls_mem.h" /> + <ClInclude Include="..\..\..\..\src\apps\altcp_tls\altcp_tls_mbedtls_structs.h" /> + <ClInclude Include="..\..\..\..\src\apps\snmp\snmp_msg.h" /> + <ClInclude Include="..\..\..\..\src\include\compat\stdc\errno.h" /> + <ClInclude Include="..\..\..\..\src\include\compat\posix\arpa\inet.h" /> + <ClInclude Include="..\..\..\..\src\include\compat\posix\netdb.h" /> + <ClInclude Include="..\..\..\..\src\include\compat\posix\net\if.h" /> + <ClInclude Include="..\..\..\..\src\include\compat\posix\sys\socket.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\altcp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\altcp_tcp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\altcp_tls.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\altcp_proxyconnect.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\altcp_tls_mbedtls_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\http_client.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\lwiperf.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mdns_domain.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mdns_out.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mdns_priv.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mqtt.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mqtt_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mqtt_priv.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\netbiosns.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\netbiosns_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\smtp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\smtp_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_snmpv2_framework.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_snmpv2_usm.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\sntp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\sntp_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\tftp_client.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\tftp_common.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\tftp_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\tftp_server.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\errno.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\if_api.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\ip6_zone.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\altcp_priv.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\api_msg.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\memp_priv.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\memp_std.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\mem_priv.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\nd6_priv.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\raw_priv.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\sockets_priv.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\tcpip_priv.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\tcp_priv.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\acd.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\api.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\arch.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\autoip.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\debug.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\def.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\dhcp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\dhcp6.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\dns.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\err.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\ethip6.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\icmp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\icmp6.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\igmp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\inet.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\inet_chksum.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\init.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\ip.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\ip4.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\ip4_addr.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\ip6.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\ip6_addr.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\ip6_frag.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\ip_addr.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\mem.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\memp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\mld6.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\nd6.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\netbuf.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\netdb.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\netif.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\netifapi.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\opt.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\pbuf.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\dhcp6.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\etharp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\iana.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\ieee.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\igmp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\raw.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\sio.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\snmp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\sockets.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\stats.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\sys.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\tcp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\tcpip.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\udp.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\bridgeif.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\bridgeif_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\etharp.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ethernet.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ieee802154.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\lowpan6.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\lowpan6_ble.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\lowpan6_common.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\lowpan6_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\slipif.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ccp.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\chap-md5.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\chap-new.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\chap_ms.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\eap.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ecp.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\eui64.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\fsm.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ipcp.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ipv6cp.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\lcp.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\magic.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\mppe.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ppp.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ppp_impl.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ppp_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppcrypt.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppdebug.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppoe.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppol2tp.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppos.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\upap.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\vj.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\polarssl\arc4.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\polarssl\des.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\polarssl\md4.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\polarssl\md5.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\polarssl\sha1.h" /> + <ClInclude Include="..\..\..\..\src\apps\http\fsdata.h" /> + <ClInclude Include="..\..\..\..\src\apps\http\httpd_structs.h" /> + <ClInclude Include="..\..\..\..\src\apps\snmp\snmp_asn1.h" /> + <ClInclude Include="..\..\..\..\src\apps\snmp\snmp_core_priv.h" /> + <ClInclude Include="..\..\..\..\src\apps\snmp\snmp_pbuf_stream.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_core.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_mib2.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_scalar.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_table.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_threadsync.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppapi.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\fs.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\httpd.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\httpd_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmpv3.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\etharp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\ip4_frag.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\timeouts.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mdns.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mdns_opts.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\acd.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\autoip.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\dhcp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\dns.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\ip.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\ip4.h" /> + <ClInclude Include="..\..\..\..\src\apps\snmp\snmpv3_priv.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\ethernet.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\icmp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\icmp6.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\ip6.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\mld6.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\nd6.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\tcp.h" /> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\udp.h" /> + <ClInclude Include="..\..\..\..\src\include\netif\zepif.h" /> + <ClInclude Include="..\..\..\examples\example_app\default_netif.h" /> + <ClInclude Include="..\..\..\examples\example_app\lwipcfg.h" /> + <ClInclude Include="..\..\..\examples\example_app\lwipopts.h" /> + <ClInclude Include="..\..\..\examples\example_app\lwippools.h" /> + <ClInclude Include="..\..\..\examples\example_app\ppp_settings.h" /> + <ClInclude Include="..\include\arch\bpstruct.h" /> + <ClInclude Include="..\include\arch\cc.h" /> + <ClInclude Include="..\include\arch\epstruct.h" /> + <ClInclude Include="..\include\arch\perf.h" /> + <ClInclude Include="..\include\arch\sys_arch.h" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/lwIP.vcxproj.filters b/contrib/ports/win32/msvc/lwIP.vcxproj.filters new file mode 100644 index 00000000000..bb90c3eb311 --- /dev/null +++ b/contrib/ports/win32/msvc/lwIP.vcxproj.filters @@ -0,0 +1,1075 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="doc"> + <UniqueIdentifier>{51757ae3-05ca-4e6a-a745-19c9ffc62278}</UniqueIdentifier> + </Filter> + <Filter Include="src"> + <UniqueIdentifier>{e40d58ed-58be-4618-9664-6df29e27f835}</UniqueIdentifier> + </Filter> + <Filter Include="src\api"> + <UniqueIdentifier>{5752fd8f-90c3-4381-8b6a-86c09a2f9859}</UniqueIdentifier> + </Filter> + <Filter Include="src\apps"> + <UniqueIdentifier>{48a805a9-e5d2-4eed-b29c-02b57140a03d}</UniqueIdentifier> + </Filter> + <Filter Include="src\apps\lwiperf"> + <UniqueIdentifier>{8a8dba58-934c-4292-aa8d-d20e2b801bd4}</UniqueIdentifier> + </Filter> + <Filter Include="src\apps\netbiosns"> + <UniqueIdentifier>{20594706-d6e1-4503-bc38-f297892d752a}</UniqueIdentifier> + </Filter> + <Filter Include="src\apps\snmp"> + <UniqueIdentifier>{1075aec7-b001-47bd-9846-ed635687e26e}</UniqueIdentifier> + </Filter> + <Filter Include="src\apps\sntp"> + <UniqueIdentifier>{9b7b3b39-f3b0-4915-81d9-d66c3443c348}</UniqueIdentifier> + </Filter> + <Filter Include="src\core"> + <UniqueIdentifier>{75f75ac5-73a4-4458-bc23-eaed529c37e1}</UniqueIdentifier> + </Filter> + <Filter Include="src\core\ipv4"> + <UniqueIdentifier>{97772339-4210-4a32-82d0-d25269d3e3d6}</UniqueIdentifier> + </Filter> + <Filter Include="src\core\ipv6"> + <UniqueIdentifier>{06467ead-0683-44db-bc41-6aa5a82490f0}</UniqueIdentifier> + </Filter> + <Filter Include="src\include"> + <UniqueIdentifier>{166a3203-ccc3-4eff-9eaa-1e5648a7fb5b}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\lwip"> + <UniqueIdentifier>{6b889738-b59a-450a-b4dd-0d1986bffca1}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\lwip\apps"> + <UniqueIdentifier>{c64c0664-acd9-4f2f-8bd7-78250f4b7b4b}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\lwip\priv"> + <UniqueIdentifier>{56e8d041-f1e0-4b02-a173-563190c0eb4a}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\netif"> + <UniqueIdentifier>{dc783ea8-63ed-4de6-b576-a87c318a7ad1}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\netif\ppp"> + <UniqueIdentifier>{7822191b-1cd0-4ce8-a852-da0474977fc4}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\netif\ppp\polarssl"> + <UniqueIdentifier>{b22a3b7a-d076-44a5-9a16-1e6f49cd5a94}</UniqueIdentifier> + </Filter> + <Filter Include="src\netif"> + <UniqueIdentifier>{0109fdbb-3aed-45fa-a308-493988755364}</UniqueIdentifier> + </Filter> + <Filter Include="src\netif\ppp"> + <UniqueIdentifier>{32a9c4ed-7687-48bb-8b9d-482c2f6c7554}</UniqueIdentifier> + </Filter> + <Filter Include="src\netif\ppp\polarssl"> + <UniqueIdentifier>{c6c4a1a7-dab8-4463-b155-07e7303b54e4}</UniqueIdentifier> + </Filter> + <Filter Include="arch"> + <UniqueIdentifier>{2e87d0f7-38a3-45f8-870d-f8622c20e9d9}</UniqueIdentifier> + </Filter> + <Filter Include="src\apps\http"> + <UniqueIdentifier>{45f6a578-1f4b-4741-9b55-5b5084ecc1d9}</UniqueIdentifier> + </Filter> + <Filter Include="src\apps\mdns"> + <UniqueIdentifier>{92215272-cad9-4cf0-a2e1-705f6220e2a9}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\lwip\prot"> + <UniqueIdentifier>{bdd3995a-aa34-4a4e-891e-a13c5373d618}</UniqueIdentifier> + </Filter> + <Filter Include="doc\doxygen"> + <UniqueIdentifier>{d0ce6e8b-4b30-498b-a1bb-aecee958df42}</UniqueIdentifier> + </Filter> + <Filter Include="src\apps\tftp"> + <UniqueIdentifier>{6db73869-23f6-48ab-8d92-c8e478e55892}</UniqueIdentifier> + </Filter> + <Filter Include="src\apps\mqtt"> + <UniqueIdentifier>{65542a97-c588-47b3-b1f6-ae51645c736e}</UniqueIdentifier> + </Filter> + <Filter Include="src\apps\altcp_tls"> + <UniqueIdentifier>{ffd283f4-44f0-4be2-83a3-8bd55f29e80f}</UniqueIdentifier> + </Filter> + <Filter Include="src\apps\smtp"> + <UniqueIdentifier>{d9456888-d299-48ff-8165-ff499e5a0ba3}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\compat"> + <UniqueIdentifier>{5aa786e4-df26-432c-b32c-9c4fac00b951}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\compat\posix"> + <UniqueIdentifier>{8fb42d78-1e77-4208-b457-44f41c4cc901}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\compat\posix\sys"> + <UniqueIdentifier>{81578f11-9d3c-4bc8-a518-6f78f082fe0e}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\compat\posix\net"> + <UniqueIdentifier>{f8d65087-0cee-46de-8d8c-dca719bf2a4b}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\compat\posix\arpa"> + <UniqueIdentifier>{91d8473a-deb5-4943-8b63-b43d86c7fa1c}</UniqueIdentifier> + </Filter> + <Filter Include="src\include\compat\stdc"> + <UniqueIdentifier>{15855a74-48c6-473c-b4cb-40ec065698d4}</UniqueIdentifier> + </Filter> + <Filter Include="example_app"> + <UniqueIdentifier>{2c795490-531d-4a03-b30d-73760b09975a}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <None Include="..\..\..\..\CHANGELOG" /> + <None Include="..\..\..\..\COPYING" /> + <None Include="..\..\..\..\FILES" /> + <None Include="..\..\..\..\README" /> + <None Include="..\..\..\..\UPGRADING" /> + <None Include="..\..\..\..\doc\contrib.txt"> + <Filter>doc</Filter> + </None> + <None Include="..\..\..\..\doc\FILES"> + <Filter>doc</Filter> + </None> + <None Include="..\..\..\..\doc\mdns.txt"> + <Filter>doc</Filter> + </None> + <None Include="..\..\..\..\doc\ppp.txt"> + <Filter>doc</Filter> + </None> + <None Include="..\..\..\..\doc\savannah.txt"> + <Filter>doc</Filter> + </None> + <None Include="..\..\..\..\doc\doxygen\generate.bat"> + <Filter>doc\doxygen</Filter> + </None> + <None Include="..\..\..\..\doc\doxygen\generate.sh"> + <Filter>doc\doxygen</Filter> + </None> + <None Include="..\..\..\..\doc\doxygen\lwip.Doxyfile"> + <Filter>doc\doxygen</Filter> + </None> + <None Include="..\..\..\examples\example_app\lwipcfg.h.example"> + <Filter>example_app</Filter> + </None> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\..\src\api\api_lib.c"> + <Filter>src\api</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\api\api_msg.c"> + <Filter>src\api</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\api\err.c"> + <Filter>src\api</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\api\netbuf.c"> + <Filter>src\api</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\api\netdb.c"> + <Filter>src\api</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\api\netifapi.c"> + <Filter>src\api</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\api\sockets.c"> + <Filter>src\api</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\api\tcpip.c"> + <Filter>src\api</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\lwiperf\lwiperf.c"> + <Filter>src\apps\lwiperf</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\netbiosns\netbiosns.c"> + <Filter>src\apps\netbiosns</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\sntp\sntp.c"> + <Filter>src\apps\sntp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\def.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\dns.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\inet_chksum.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\init.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\mem.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\memp.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\netif.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\pbuf.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\raw.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\stats.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\sys.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\tcp.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\tcp_in.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\tcp_out.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\udp.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv4\acd.c"> + <Filter>src\core\ipv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv4\autoip.c"> + <Filter>src\core\ipv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv4\dhcp.c"> + <Filter>src\core\ipv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv4\icmp.c"> + <Filter>src\core\ipv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv4\igmp.c"> + <Filter>src\core\ipv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv4\ip4.c"> + <Filter>src\core\ipv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv4\ip4_addr.c"> + <Filter>src\core\ipv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv6\dhcp6.c"> + <Filter>src\core\ipv6</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv6\ethip6.c"> + <Filter>src\core\ipv6</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv6\icmp6.c"> + <Filter>src\core\ipv6</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv6\inet6.c"> + <Filter>src\core\ipv6</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv6\ip6.c"> + <Filter>src\core\ipv6</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv6\ip6_addr.c"> + <Filter>src\core\ipv6</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv6\ip6_frag.c"> + <Filter>src\core\ipv6</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv6\mld6.c"> + <Filter>src\core\ipv6</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv6\nd6.c"> + <Filter>src\core\ipv6</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ethernet.c"> + <Filter>src\netif</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\lowpan6.c"> + <Filter>src\netif</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\slipif.c"> + <Filter>src\netif</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\auth.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\ccp.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\chap-md5.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\chap-new.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\chap_ms.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\demand.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\eap.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\ecp.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\eui64.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\fsm.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\ipcp.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\ipv6cp.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\lcp.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\magic.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\mppe.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\multilink.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\ppp.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\pppcrypt.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\pppoe.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\pppol2tp.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\pppos.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\upap.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\utils.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\vj.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\polarssl\arc4.c"> + <Filter>src\netif\ppp\polarssl</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\polarssl\des.c"> + <Filter>src\netif\ppp\polarssl</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\polarssl\md4.c"> + <Filter>src\netif\ppp\polarssl</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\polarssl\md5.c"> + <Filter>src\netif\ppp\polarssl</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\polarssl\sha1.c"> + <Filter>src\netif\ppp\polarssl</Filter> + </ClCompile> + <ClCompile Include="..\sio.c"> + <Filter>arch</Filter> + </ClCompile> + <ClCompile Include="..\sys_arch.c"> + <Filter>arch</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\http\httpd.c"> + <Filter>src\apps\http</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\http\fsdata.c"> + <Filter>src\apps\http</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\http\fs.c"> + <Filter>src\apps\http</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_asn1.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_core.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_msg.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_netconn.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_pbuf_stream.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_raw.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_scalar.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_table.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_threadsync.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_traps.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ip.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_icmp.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_interfaces.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_ip.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_snmp.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_system.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_tcp.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_mib2_udp.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmpv3.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\ppp\pppapi.c"> + <Filter>src\netif\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv4\etharp.c"> + <Filter>src\core\ipv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\ipv4\ip4_frag.c"> + <Filter>src\core\ipv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\timeouts.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\mdns\mdns.c"> + <Filter>src\apps\mdns</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmpv3_mbedtls.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\doc\NO_SYS_SampleCode.c"> + <Filter>doc</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\tftp\tftp.c"> + <Filter>src\apps\tftp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\mqtt\mqtt.c"> + <Filter>src\apps\mqtt</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\api\if_api.c"> + <Filter>src\api</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\bridgeif.c"> + <Filter>src\netif</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_snmpv2_framework.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\snmp\snmp_snmpv2_usm.c"> + <Filter>src\apps\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\altcp.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\altcp_tcp.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\altcp_tls\altcp_tls_mbedtls.c"> + <Filter>src\apps\altcp_tls</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\altcp_tls\altcp_tls_mbedtls_mem.c"> + <Filter>src\apps\altcp_tls</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\smtp\smtp.c"> + <Filter>src\apps\smtp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\bridgeif_fdb.c"> + <Filter>src\netif</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\http\http_client.c"> + <Filter>src\apps\http</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\core\altcp_alloc.c"> + <Filter>src\core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\http\altcp_proxyconnect.c"> + <Filter>src\apps\http</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\lowpan6_ble.c"> + <Filter>src\netif</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\zepif.c"> + <Filter>src\netif</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\netif\lowpan6_common.c"> + <Filter>src\netif</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\mdns\mdns_domain.c"> + <Filter>src\apps\mdns</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\src\apps\mdns\mdns_out.c"> + <Filter>src\apps\mdns</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\lwiperf.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\netbiosns.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\netbiosns_opts.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_opts.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\sntp.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\sntp_opts.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\acd.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\api.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\arch.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\autoip.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\debug.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\def.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\dhcp.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\dhcp6.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\dns.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\err.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\ethip6.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\icmp.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\icmp6.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\igmp.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\inet.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\inet_chksum.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\init.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\ip.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\ip4.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\ip4_addr.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\ip6.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\ip6_addr.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\ip6_frag.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\ip_addr.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\mem.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\memp.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\mld6.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\nd6.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\netbuf.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\netdb.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\netif.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\netifapi.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\opt.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\pbuf.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\raw.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\sio.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\snmp.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\sockets.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\stats.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\sys.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\tcp.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\tcpip.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\udp.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\etharp.h"> + <Filter>src\include\netif</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ethernet.h"> + <Filter>src\include\netif</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\lowpan6.h"> + <Filter>src\include\netif</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\lowpan6_opts.h"> + <Filter>src\include\netif</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\slipif.h"> + <Filter>src\include\netif</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ccp.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\chap-md5.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\chap-new.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\chap_ms.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\eap.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ecp.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\eui64.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\fsm.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ipcp.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ipv6cp.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\lcp.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\magic.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\mppe.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ppp.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ppp_impl.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\ppp_opts.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppcrypt.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppdebug.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppoe.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppol2tp.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppos.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\upap.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\vj.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\polarssl\arc4.h"> + <Filter>src\include\netif\ppp\polarssl</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\polarssl\des.h"> + <Filter>src\include\netif\ppp\polarssl</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\polarssl\md4.h"> + <Filter>src\include\netif\ppp\polarssl</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\polarssl\md5.h"> + <Filter>src\include\netif\ppp\polarssl</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\polarssl\sha1.h"> + <Filter>src\include\netif\ppp\polarssl</Filter> + </ClInclude> + <ClInclude Include="..\include\arch\bpstruct.h"> + <Filter>arch</Filter> + </ClInclude> + <ClInclude Include="..\include\arch\cc.h"> + <Filter>arch</Filter> + </ClInclude> + <ClInclude Include="..\include\arch\epstruct.h"> + <Filter>arch</Filter> + </ClInclude> + <ClInclude Include="..\include\arch\perf.h"> + <Filter>arch</Filter> + </ClInclude> + <ClInclude Include="..\include\arch\sys_arch.h"> + <Filter>arch</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\tcp_priv.h"> + <Filter>src\include\lwip\priv</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\tcpip_priv.h"> + <Filter>src\include\lwip\priv</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\memp_priv.h"> + <Filter>src\include\lwip\priv</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\memp_std.h"> + <Filter>src\include\lwip\priv</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\api_msg.h"> + <Filter>src\include\lwip\priv</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\apps\http\httpd_structs.h"> + <Filter>src\apps\http</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\apps\http\fsdata.h"> + <Filter>src\apps\http</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\apps\snmp\snmp_asn1.h"> + <Filter>src\apps\snmp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\apps\snmp\snmp_core_priv.h"> + <Filter>src\apps\snmp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\apps\snmp\snmp_pbuf_stream.h"> + <Filter>src\apps\snmp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_core.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_mib2.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_scalar.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_table.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_threadsync.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\apps\snmp\snmp_msg.h"> + <Filter>src\apps\snmp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ppp\pppapi.h"> + <Filter>src\include\netif\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\fs.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\httpd.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\httpd_opts.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmpv3.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\etharp.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\ip4_frag.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\timeouts.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mdns.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mdns_opts.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\acd.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\autoip.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\dhcp.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\dns.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\ip.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\ip4.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\apps\snmp\snmpv3_priv.h"> + <Filter>src\apps\snmp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\ethernet.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\icmp.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\icmp6.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\ip6.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\mld6.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\nd6.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\tcp.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\udp.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mdns_priv.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\igmp.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\etharp.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\doc\doxygen\main_page.h"> + <Filter>doc\doxygen</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\tftp_client.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\tftp_common.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\tftp_opts.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\tftp_server.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\errno.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\nd6_priv.h"> + <Filter>src\include\lwip\priv</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mqtt.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\if_api.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\ip6_zone.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\sockets_priv.h"> + <Filter>src\include\lwip\priv</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\bridgeif.h"> + <Filter>src\include\netif</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\bridgeif_opts.h"> + <Filter>src\include\netif</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\altcp.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\altcp_tcp.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\apps\altcp_tls\altcp_tls_mbedtls_mem.h"> + <Filter>src\apps\altcp_tls</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\apps\altcp_tls\altcp_tls_mbedtls_structs.h"> + <Filter>src\apps\altcp_tls</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\altcp_tls.h"> + <Filter>src\include\lwip</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\altcp_tls_mbedtls_opts.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_snmpv2_framework.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\snmp_snmpv2_usm.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\smtp.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\smtp_opts.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\altcp_priv.h"> + <Filter>src\include\lwip\priv</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mqtt_priv.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mqtt_opts.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\compat\posix\sys\socket.h"> + <Filter>src\include\compat\posix\sys</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\compat\posix\netdb.h"> + <Filter>src\include\compat\posix</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\compat\posix\net\if.h"> + <Filter>src\include\compat\posix\net</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\compat\posix\arpa\inet.h"> + <Filter>src\include\compat\posix\arpa</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\compat\stdc\errno.h"> + <Filter>src\include\compat\stdc</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\iana.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\ieee.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\raw_priv.h"> + <Filter>src\include\lwip\priv</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\priv\mem_priv.h"> + <Filter>src\include\lwip\priv</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\http_client.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\altcp_proxyconnect.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\prot\dhcp6.h"> + <Filter>src\include\lwip\prot</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\lowpan6_ble.h"> + <Filter>src\include\netif</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\ieee802154.h"> + <Filter>src\include\netif</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\zepif.h"> + <Filter>src\include\netif</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\netif\lowpan6_common.h"> + <Filter>src\include\netif</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\example_app\default_netif.h"> + <Filter>example_app</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\example_app\lwipcfg.h"> + <Filter>example_app</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\example_app\lwipopts.h"> + <Filter>example_app</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\example_app\lwippools.h"> + <Filter>example_app</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\example_app\ppp_settings.h"> + <Filter>example_app</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mdns_domain.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\src\include\lwip\apps\mdns_out.h"> + <Filter>src\include\lwip\apps</Filter> + </ClInclude> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/lwIP_Test.sln b/contrib/ports/win32/msvc/lwIP_Test.sln new file mode 100644 index 00000000000..ce59abd2587 --- /dev/null +++ b/contrib/ports/win32/msvc/lwIP_Test.sln @@ -0,0 +1,37 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwIP_Test", "lwIP_Test.vcxproj", "{8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwIP pcapif", "lwIP_pcapif.vcxproj", "{6F44E49E-9F21-4144-91EC-53B92AEF62CE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwIP", "lwIP.vcxproj", "{2CC276FA-B226-49C9-8F82-7FCD5A228E28}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makefsdata", "makefsdata.vcxproj", "{0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Debug|Win32.Build.0 = Debug|Win32 + {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Release|Win32.ActiveCfg = Release|Win32 + {8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}.Release|Win32.Build.0 = Release|Win32 + {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Debug|Win32.ActiveCfg = Debug|Win32 + {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Debug|Win32.Build.0 = Debug|Win32 + {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Release|Win32.ActiveCfg = Release|Win32 + {6F44E49E-9F21-4144-91EC-53B92AEF62CE}.Release|Win32.Build.0 = Release|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|Win32.ActiveCfg = Debug|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|Win32.Build.0 = Debug|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|Win32.ActiveCfg = Release|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|Win32.Build.0 = Release|Win32 + {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Debug|Win32.ActiveCfg = Debug|Win32 + {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Debug|Win32.Build.0 = Debug|Win32 + {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Release|Win32.ActiveCfg = Release|Win32 + {0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/contrib/ports/win32/msvc/lwIP_Test.vcxproj b/contrib/ports/win32/msvc/lwIP_Test.vcxproj new file mode 100644 index 00000000000..37d4dab2af4 --- /dev/null +++ b/contrib/ports/win32/msvc/lwIP_Test.vcxproj @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{8CC0CE51-32CF-4585-BFAF-A9343BC5A96D}</ProjectGuid> + <RootNamespace>lwIP_test</RootNamespace> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(Configuration)\$(ProjectName)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Midl> + <TypeLibraryName>.\Release/test.tlb</TypeLibraryName> + <HeaderFileName> + </HeaderFileName> + </Midl> + <ClCompile> + <Optimization>MaxSpeed</Optimization> + <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> + <AdditionalIncludeDirectories>..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <PrecompiledHeader> + </PrecompiledHeader> + <PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile> + <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level4</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <CompileAs>Default</CompileAs> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0407</Culture> + </ResourceCompile> + <Link> + <AdditionalDependencies>Packet.lib;wpcap.lib;%(AdditionalDependencies)</AdditionalDependencies> + <SuppressStartupBanner>true</SuppressStartupBanner> + <AdditionalLibraryDirectories>$(PCAP_DIR)\Lib;..\..\..\..\..\winpcap\WpdPack\Lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <ProgramDatabaseFile>.\Release/test.pdb</ProgramDatabaseFile> + <SubSystem>Console</SubSystem> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + <TargetMachine>MachineX86</TargetMachine> + <GenerateMapFile>true</GenerateMapFile> + <MapFileName>$(TargetDir)$(TargetName).map</MapFileName> + <DelayLoadDLLs>Packet.dll;wpcap.dll;%(DelayLoadDLLs)</DelayLoadDLLs> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Midl> + <TypeLibraryName>.\Debug/test.tlb</TypeLibraryName> + <HeaderFileName> + </HeaderFileName> + </Midl> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_CONSOLE;WIN32;_DEBUG;LWIP_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <PrecompiledHeader> + </PrecompiledHeader> + <PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile> + <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level4</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + <CompileAs>Default</CompileAs> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0407</Culture> + </ResourceCompile> + <Link> + <AdditionalDependencies>Packet.lib;wpcap.lib;%(AdditionalDependencies)</AdditionalDependencies> + <SuppressStartupBanner>true</SuppressStartupBanner> + <AdditionalLibraryDirectories>$(PCAP_DIR)\Lib;..\..\..\..\..\winpcap\WpdPack\Lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <GenerateDebugInformation>true</GenerateDebugInformation> + <SubSystem>Console</SubSystem> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + <TargetMachine>MachineX86</TargetMachine> + <GenerateMapFile>false</GenerateMapFile> + <MapFileName>$(TargetDir)$(TargetName).map</MapFileName> + <DelayLoadDLLs>Packet.dll;wpcap.dll;%(DelayLoadDLLs)</DelayLoadDLLs> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\..\..\addons\ipv6_static_routing\ip6_route_table.c" /> + <ClCompile Include="..\..\..\addons\tcp_isn\tcp_isn.c" /> + <ClCompile Include="..\..\..\apps\tcpecho_raw\tcpecho_raw.c" /> + <ClCompile Include="..\..\..\apps\udpecho_raw\udpecho_raw.c" /> + <ClCompile Include="..\..\..\examples\example_app\test.c" /> + <ClCompile Include="..\..\..\examples\httpd\cgi_example\cgi_example.c" /> + <ClCompile Include="..\..\..\examples\httpd\fs_example\fs_example.c" /> + <ClCompile Include="..\..\..\examples\httpd\genfiles_example\genfiles_example.c" /> + <ClCompile Include="..\..\..\examples\httpd\https_example\https_example.c" /> + <ClCompile Include="..\..\..\examples\httpd\post_example\post_example.c" /> + <ClCompile Include="..\..\..\examples\httpd\ssi_example\ssi_example.c" /> + <ClCompile Include="..\..\..\examples\lwiperf\lwiperf_example.c" /> + <ClCompile Include="..\..\..\examples\mdns\mdns_example.c" /> + <ClCompile Include="..\..\..\examples\mqtt\mqtt_example.c" /> + <ClCompile Include="..\..\..\examples\ppp\pppos_example.c" /> + <ClCompile Include="..\..\..\examples\snmp\snmp_example.c" /> + <ClCompile Include="..\..\..\examples\snmp\snmp_private_mib\lwip_prvmib.c" /> + <ClCompile Include="..\..\..\examples\snmp\snmp_v3\snmpv3_dummy.c" /> + <ClCompile Include="..\..\..\examples\sntp\sntp_example.c" /> + <ClCompile Include="..\..\..\examples\tftp\tftp_example.c" /> + <ClCompile Include="..\..\..\apps\chargen\chargen.c" /> + <ClCompile Include="..\..\..\apps\httpserver\httpserver-netconn.c" /> + <ClCompile Include="..\..\..\apps\netio\netio.c" /> + <ClCompile Include="..\..\..\apps\ping\ping.c" /> + <ClCompile Include="..\..\..\apps\rtp\rtp.c" /> + <ClCompile Include="..\..\..\apps\shell\shell.c" /> + <ClCompile Include="..\..\..\apps\socket_examples\socket_examples.c" /> + <ClCompile Include="..\..\..\apps\tcpecho\tcpecho.c" /> + <ClCompile Include="..\..\..\apps\udpecho\udpecho.c" /> + <ClCompile Include="..\example_app\default_netif.c" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\addons\ipv6_static_routing\ip6_route_table.h" /> + <ClInclude Include="..\..\..\addons\tcp_isn\tcp_isn.h" /> + <ClInclude Include="..\..\..\apps\chargen\chargen.h" /> + <ClInclude Include="..\..\..\apps\httpserver\httpserver-netconn.h" /> + <ClInclude Include="..\..\..\apps\netio\netio.h" /> + <ClInclude Include="..\..\..\apps\ping\ping.h" /> + <ClInclude Include="..\..\..\apps\rtp\rtp.h" /> + <ClInclude Include="..\..\..\apps\shell\shell.h" /> + <ClInclude Include="..\..\..\apps\socket_examples\socket_examples.h" /> + <ClInclude Include="..\..\..\apps\tcpecho\tcpecho.h" /> + <ClInclude Include="..\..\..\apps\tcpecho_raw\tcpecho_raw.h" /> + <ClInclude Include="..\..\..\apps\udpecho\udpecho.h" /> + <ClInclude Include="..\..\..\apps\udpecho_raw\udpecho_raw.h" /> + <ClInclude Include="..\..\..\examples\httpd\cgi_example\cgi_example.h" /> + <ClInclude Include="..\..\..\examples\httpd\fs_example\fs_example.h" /> + <ClInclude Include="..\..\..\examples\httpd\genfiles_example\genfiles_example.h" /> + <ClInclude Include="..\..\..\examples\httpd\https_example\https_example.h" /> + <ClInclude Include="..\..\..\examples\httpd\ssi_example\ssi_example.h" /> + <ClInclude Include="..\..\..\examples\lwiperf\lwiperf_example.h" /> + <ClInclude Include="..\..\..\examples\mdns\mdns_example.h" /> + <ClInclude Include="..\..\..\examples\mqtt\mqtt_example.h" /> + <ClInclude Include="..\..\..\examples\ppp\pppos_example.h" /> + <ClInclude Include="..\..\..\examples\snmp\snmp_example.h" /> + <ClInclude Include="..\..\..\examples\snmp\snmp_private_mib\private_mib.h" /> + <ClInclude Include="..\..\..\examples\snmp\snmp_v3\snmpv3_dummy.h" /> + <ClInclude Include="..\..\..\examples\sntp\sntp_example.h" /> + <ClInclude Include="..\..\..\examples\tftp\tftp_example.h" /> + </ItemGroup> + <ItemGroup> + <None Include="..\..\..\addons\ipv6_static_routing\README" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="lwIP.vcxproj"> + <Project>{2cc276fa-b226-49c9-8f82-7fcd5a228e28}</Project> + <ReferenceOutputAssembly>false</ReferenceOutputAssembly> + </ProjectReference> + <ProjectReference Include="lwIP_pcapif.vcxproj"> + <Project>{6f44e49e-9f21-4144-91ec-53b92aef62ce}</Project> + <ReferenceOutputAssembly>false</ReferenceOutputAssembly> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/lwIP_Test.vcxproj.filters b/contrib/ports/win32/msvc/lwIP_Test.vcxproj.filters new file mode 100644 index 00000000000..52f7732ec70 --- /dev/null +++ b/contrib/ports/win32/msvc/lwIP_Test.vcxproj.filters @@ -0,0 +1,252 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{e858c3d0-1558-4d47-bc6a-9d4a55ce3d3a}</UniqueIdentifier> + <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions> + </Filter> + <Filter Include="Source Files\apps"> + <UniqueIdentifier>{0582eefd-a68e-45f8-b93c-f828c4794f30}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\addons"> + <UniqueIdentifier>{ed0627c2-099a-4da8-af0c-142003828f9f}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\addons\tcp_isn"> + <UniqueIdentifier>{4ffb2268-6fc6-44d7-8e3b-2a3f68b8d5a3}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\addons\ipv6_static_routing"> + <UniqueIdentifier>{93b36161-88b2-448c-9c45-ac6f27b98290}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples"> + <UniqueIdentifier>{6456d2d6-61e6-4c99-9f1f-1f225437a642}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\httpd"> + <UniqueIdentifier>{75bb877e-aa45-4e2e-82fe-946ddadc6a64}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\snmp"> + <UniqueIdentifier>{78411edf-fe39-4edb-a6bd-2833755e0342}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\httpd\fs_example"> + <UniqueIdentifier>{531dd0cf-ec13-42b7-a3bb-b837382d4ecd}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\httpd\ssi_example"> + <UniqueIdentifier>{d71bdb12-c5ed-4823-99f0-2d537765a2eb}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\snmp\snmp_private_mib"> + <UniqueIdentifier>{0b9db8c7-f352-4ca6-86c6-1a6c58482c5d}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\snmp\snmp_v3"> + <UniqueIdentifier>{97f0ea5c-16cf-4640-a6b3-ace059ed2388}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\httpd\cgi_example"> + <UniqueIdentifier>{24079d2d-aab1-49f9-b0fa-57910a18b93a}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\httpd\genfiles_example"> + <UniqueIdentifier>{d38ed32b-9498-429e-a02c-08332c463725}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\httpd\post_example"> + <UniqueIdentifier>{672a49fd-94ff-4126-8de3-e96c9c32dfb8}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\mdns"> + <UniqueIdentifier>{e5276e3f-3e2a-4376-aee3-85aafd12c77b}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\tftp"> + <UniqueIdentifier>{f6d95ce0-df4f-4988-8654-624468dd4ecd}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\sntp"> + <UniqueIdentifier>{a37e5539-232e-4d91-9c10-3d7a851b8c4c}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\ppp"> + <UniqueIdentifier>{a2a65260-5055-4a0d-bd0b-4a3ca3560918}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\lwiperf"> + <UniqueIdentifier>{aa359e5e-131e-4f20-9e5d-416f9ae76abd}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\mqtt"> + <UniqueIdentifier>{bd6f1fcc-c88f-4b96-a267-401f6bf9898b}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\examples\httpd\https_example"> + <UniqueIdentifier>{1098bc59-6867-48a3-afa4-b896510241d1}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\apps\chargen\chargen.c"> + <Filter>Source Files\apps</Filter> + </ClCompile> + <ClCompile Include="..\..\..\apps\httpserver\httpserver-netconn.c"> + <Filter>Source Files\apps</Filter> + </ClCompile> + <ClCompile Include="..\..\..\apps\netio\netio.c"> + <Filter>Source Files\apps</Filter> + </ClCompile> + <ClCompile Include="..\..\..\apps\ping\ping.c"> + <Filter>Source Files\apps</Filter> + </ClCompile> + <ClCompile Include="..\..\..\apps\rtp\rtp.c"> + <Filter>Source Files\apps</Filter> + </ClCompile> + <ClCompile Include="..\..\..\apps\shell\shell.c"> + <Filter>Source Files\apps</Filter> + </ClCompile> + <ClCompile Include="..\..\..\apps\socket_examples\socket_examples.c"> + <Filter>Source Files\apps</Filter> + </ClCompile> + <ClCompile Include="..\..\..\apps\tcpecho\tcpecho.c"> + <Filter>Source Files\apps</Filter> + </ClCompile> + <ClCompile Include="..\..\..\apps\udpecho\udpecho.c"> + <Filter>Source Files\apps</Filter> + </ClCompile> + <ClCompile Include="..\..\..\apps\tcpecho_raw\tcpecho_raw.c"> + <Filter>Source Files\apps</Filter> + </ClCompile> + <ClCompile Include="..\..\..\apps\udpecho_raw\udpecho_raw.c"> + <Filter>Source Files\apps</Filter> + </ClCompile> + <ClCompile Include="..\..\..\addons\tcp_isn\tcp_isn.c"> + <Filter>Source Files\addons\tcp_isn</Filter> + </ClCompile> + <ClCompile Include="..\..\..\addons\ipv6_static_routing\ip6_route_table.c"> + <Filter>Source Files\addons\ipv6_static_routing</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\httpd\fs_example\fs_example.c"> + <Filter>Source Files\examples\httpd\fs_example</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\httpd\ssi_example\ssi_example.c"> + <Filter>Source Files\examples\httpd\ssi_example</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\snmp\snmp_private_mib\lwip_prvmib.c"> + <Filter>Source Files\examples\snmp\snmp_private_mib</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\snmp\snmp_v3\snmpv3_dummy.c"> + <Filter>Source Files\examples\snmp\snmp_v3</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\httpd\cgi_example\cgi_example.c"> + <Filter>Source Files\examples\httpd\cgi_example</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\httpd\genfiles_example\genfiles_example.c"> + <Filter>Source Files\examples\httpd\genfiles_example</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\httpd\post_example\post_example.c"> + <Filter>Source Files\examples\httpd\post_example</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\mdns\mdns_example.c"> + <Filter>Source Files\examples\mdns</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\tftp\tftp_example.c"> + <Filter>Source Files\examples\tftp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\snmp\snmp_example.c"> + <Filter>Source Files\examples\snmp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\sntp\sntp_example.c"> + <Filter>Source Files\examples\sntp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\ppp\pppos_example.c"> + <Filter>Source Files\examples\ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\lwiperf\lwiperf_example.c"> + <Filter>Source Files\examples\lwiperf</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\mqtt\mqtt_example.c"> + <Filter>Source Files\examples\mqtt</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\example_app\test.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\example_app\default_netif.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\examples\httpd\https_example\https_example.c"> + <Filter>Source Files\examples\httpd\https_example</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\apps\chargen\chargen.h"> + <Filter>Source Files\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\apps\httpserver\httpserver-netconn.h"> + <Filter>Source Files\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\apps\netio\netio.h"> + <Filter>Source Files\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\apps\ping\ping.h"> + <Filter>Source Files\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\apps\rtp\rtp.h"> + <Filter>Source Files\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\apps\shell\shell.h"> + <Filter>Source Files\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\apps\socket_examples\socket_examples.h"> + <Filter>Source Files\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\apps\tcpecho\tcpecho.h"> + <Filter>Source Files\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\apps\udpecho\udpecho.h"> + <Filter>Source Files\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\apps\tcpecho_raw\tcpecho_raw.h"> + <Filter>Source Files\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\apps\udpecho_raw\udpecho_raw.h"> + <Filter>Source Files\apps</Filter> + </ClInclude> + <ClInclude Include="..\..\..\addons\tcp_isn\tcp_isn.h"> + <Filter>Source Files\addons\tcp_isn</Filter> + </ClInclude> + <ClInclude Include="..\..\..\addons\ipv6_static_routing\ip6_route_table.h"> + <Filter>Source Files\addons\ipv6_static_routing</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\httpd\fs_example\fs_example.h"> + <Filter>Source Files\examples\httpd\fs_example</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\httpd\ssi_example\ssi_example.h"> + <Filter>Source Files\examples\httpd\ssi_example</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\snmp\snmp_private_mib\private_mib.h"> + <Filter>Source Files\examples\snmp\snmp_private_mib</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\snmp\snmp_v3\snmpv3_dummy.h"> + <Filter>Source Files\examples\snmp\snmp_v3</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\httpd\cgi_example\cgi_example.h"> + <Filter>Source Files\examples\httpd\cgi_example</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\httpd\genfiles_example\genfiles_example.h"> + <Filter>Source Files\examples\httpd\genfiles_example</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\mdns\mdns_example.h"> + <Filter>Source Files\examples\mdns</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\tftp\tftp_example.h"> + <Filter>Source Files\examples\tftp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\snmp\snmp_example.h"> + <Filter>Source Files\examples\snmp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\sntp\sntp_example.h"> + <Filter>Source Files\examples\sntp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\ppp\pppos_example.h"> + <Filter>Source Files\examples\ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\lwiperf\lwiperf_example.h"> + <Filter>Source Files\examples\lwiperf</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\mqtt\mqtt_example.h"> + <Filter>Source Files\examples\mqtt</Filter> + </ClInclude> + <ClInclude Include="..\..\..\examples\httpd\https_example\https_example.h"> + <Filter>Source Files\examples\httpd\https_example</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <None Include="..\..\..\addons\ipv6_static_routing\README"> + <Filter>Source Files\addons\ipv6_static_routing</Filter> + </None> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj b/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj new file mode 100644 index 00000000000..1bfdfb1741a --- /dev/null +++ b/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectName>lwIP pcapif</ProjectName> + <ProjectGuid>{6F44E49E-9F21-4144-91EC-53B92AEF62CE}</ProjectGuid> + <RootNamespace>lwIP pcapif</RootNamespace> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseOfMfc>false</UseOfMfc> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;.\;$(PCAP_DIR)\Include;..\..\..\..\..\winpcap\WpdPack\Include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <PrecompiledHeader> + </PrecompiledHeader> + <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level4</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + <CompileAs>Default</CompileAs> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0407</Culture> + </ResourceCompile> + <Lib /> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <Optimization>MaxSpeed</Optimization> + <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> + <AdditionalIncludeDirectories>..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;.\;$(PCAP_DIR)\Include;..\..\..\..\..\winpcap\WpdPack\Include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <PrecompiledHeader> + </PrecompiledHeader> + <PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile> + <ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName> + <WarningLevel>Level4</WarningLevel> + <SuppressStartupBanner>true</SuppressStartupBanner> + <CompileAs>Default</CompileAs> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + <ResourceCompile> + <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <Culture>0x0407</Culture> + </ResourceCompile> + <Lib> + <SuppressStartupBanner>true</SuppressStartupBanner> + </Lib> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\pcapif.c" /> + <ClCompile Include="..\pcapif_helper.c" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\pcapif.h" /> + <ClInclude Include="..\pcapif_helper.h" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="lwIP.vcxproj"> + <Project>{2cc276fa-b226-49c9-8f82-7fcd5a228e28}</Project> + <ReferenceOutputAssembly>false</ReferenceOutputAssembly> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj.filters b/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj.filters new file mode 100644 index 00000000000..f933f17ac89 --- /dev/null +++ b/contrib/ports/win32/msvc/lwIP_pcapif.vcxproj.filters @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{0d38b8c3-e694-4572-89b8-fc6e825a092d}</UniqueIdentifier> + <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions> + </Filter> + <Filter Include="Header Files"> + <UniqueIdentifier>{e5ce29d5-319e-4e99-978b-b88e8d6167e4}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\pcapif.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\pcapif_helper.c"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\pcapif.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\pcapif_helper.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/lwIP_unittests.sln b/contrib/ports/win32/msvc/lwIP_unittests.sln new file mode 100644 index 00000000000..2dfefb06445 --- /dev/null +++ b/contrib/ports/win32/msvc/lwIP_unittests.sln @@ -0,0 +1,31 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwip_unittests", "lwip_unittests.vcxproj", "{6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lwIP", "lwIP.vcxproj", "{2CC276FA-B226-49C9-8F82-7FCD5A228E28}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcheck", "libcheck.vcxproj", "{EBB156DC-01BF-47B2-B69C-1A750B6B5F09}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Debug|Win32.ActiveCfg = Debug|Win32 + {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Debug|Win32.Build.0 = Debug|Win32 + {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Release|Win32.ActiveCfg = Release|Win32 + {6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}.Release|Win32.Build.0 = Release|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|Win32.ActiveCfg = Debug unittests|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Debug|Win32.Build.0 = Debug unittests|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|Win32.ActiveCfg = Release unittests|Win32 + {2CC276FA-B226-49C9-8F82-7FCD5A228E28}.Release|Win32.Build.0 = Release unittests|Win32 + {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Debug|Win32.ActiveCfg = Debug|Win32 + {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Debug|Win32.Build.0 = Debug|Win32 + {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Release|Win32.ActiveCfg = Release|Win32 + {EBB156DC-01BF-47B2-B69C-1A750B6B5F09}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/contrib/ports/win32/msvc/lwip_unittests.vcxproj b/contrib/ports/win32/msvc/lwip_unittests.vcxproj new file mode 100644 index 00000000000..17577d9a81a --- /dev/null +++ b/contrib/ports/win32/msvc/lwip_unittests.vcxproj @@ -0,0 +1,145 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{6CCABAA4-F86F-4119-AFF8-43C9A4A234C2}</ProjectGuid> + <RootNamespace>lwip_unittests</RootNamespace> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>MultiByte</CharacterSet> + <WholeProgramOptimization>true</WholeProgramOptimization> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\$(ProjectName)\</IntDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\$(ProjectName)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>..\check;..\..\..\..\..\check\src;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <WarningLevel>Level4</WarningLevel> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + <DisableSpecificWarnings>4820</DisableSpecificWarnings> + </ClCompile> + <Link> + <GenerateDebugInformation>true</GenerateDebugInformation> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + <TargetMachine>MachineX86</TargetMachine> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <Optimization>MaxSpeed</Optimization> + <IntrinsicFunctions>true</IntrinsicFunctions> + <AdditionalIncludeDirectories>..\check;..\..\..\..\..\check\src;..\..\..\..\test\unit;..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <WarningLevel>Level4</WarningLevel> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + </ClCompile> + <Link> + <GenerateDebugInformation>true</GenerateDebugInformation> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + <TargetMachine>MachineX86</TargetMachine> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\..\..\..\test\unit\api\test_sockets.c" /> + <ClCompile Include="..\..\..\..\test\unit\arch\sys_arch.c" /> + <ClCompile Include="..\..\..\..\test\unit\core\test_def.c" /> + <ClCompile Include="..\..\..\..\test\unit\core\test_dns.c" /> + <ClCompile Include="..\..\..\..\test\unit\core\test_mem.c" /> + <ClCompile Include="..\..\..\..\test\unit\core\test_netif.c" /> + <ClCompile Include="..\..\..\..\test\unit\core\test_pbuf.c" /> + <ClCompile Include="..\..\..\..\test\unit\core\test_timers.c" /> + <ClCompile Include="..\..\..\..\test\unit\ip4\test_ip4.c" /> + <ClCompile Include="..\..\..\..\test\unit\ip6\test_ip6.c" /> + <ClCompile Include="..\..\..\..\test\unit\mdns\test_mdns.c" /> + <ClCompile Include="..\..\..\..\test\unit\mqtt\test_mqtt.c" /> + <ClCompile Include="..\..\..\..\test\unit\ppp\test_pppos.c" /> + <ClCompile Include="..\..\..\..\test\unit\tcp\tcp_helper.c" /> + <ClCompile Include="..\..\..\..\test\unit\tcp\test_tcp.c" /> + <ClCompile Include="..\..\..\..\test\unit\tcp\test_tcp_oos.c" /> + <ClCompile Include="..\..\..\..\test\unit\tcp\test_tcp_state.c" /> + <ClCompile Include="..\..\..\..\test\unit\udp\test_udp.c" /> + <ClCompile Include="..\..\..\..\test\unit\etharp\test_etharp.c" /> + <ClCompile Include="..\..\..\..\test\unit\dhcp\test_dhcp.c" /> + <ClCompile Include="..\..\..\..\test\unit\lwip_unittests.c" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\..\test\unit\api\test_sockets.h" /> + <ClInclude Include="..\..\..\..\test\unit\arch\sys_arch.h" /> + <ClInclude Include="..\..\..\..\test\unit\core\test_def.h" /> + <ClInclude Include="..\..\..\..\test\unit\core\test_dns.h" /> + <ClInclude Include="..\..\..\..\test\unit\core\test_mem.h" /> + <ClInclude Include="..\..\..\..\test\unit\core\test_netif.h" /> + <ClInclude Include="..\..\..\..\test\unit\core\test_pbuf.h" /> + <ClInclude Include="..\..\..\..\test\unit\core\test_timers.h" /> + <ClInclude Include="..\..\..\..\test\unit\ip4\test_ip4.h" /> + <ClInclude Include="..\..\..\..\test\unit\ip6\test_ip6.h" /> + <ClInclude Include="..\..\..\..\test\unit\mdns\test_mdns.h" /> + <ClInclude Include="..\..\..\..\test\unit\mqtt\test_mqtt.h" /> + <ClInclude Include="..\..\..\..\test\unit\ppp\test_pppos.h" /> + <ClInclude Include="..\..\..\..\test\unit\tcp\tcp_helper.h" /> + <ClInclude Include="..\..\..\..\test\unit\tcp\test_tcp.h" /> + <ClInclude Include="..\..\..\..\test\unit\tcp\test_tcp_oos.h" /> + <ClInclude Include="..\..\..\..\test\unit\tcp\test_tcp_state.h" /> + <ClInclude Include="..\..\..\..\test\unit\udp\test_udp.h" /> + <ClInclude Include="..\..\..\..\test\unit\etharp\test_etharp.h" /> + <ClInclude Include="..\..\..\..\test\unit\dhcp\test_dhcp.h" /> + <ClInclude Include="..\..\..\..\test\unit\lwip_check.h" /> + <ClInclude Include="..\..\..\..\test\unit\lwipopts.h" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="libcheck.vcxproj"> + <Project>{ebb156dc-01bf-47b2-b69c-1a750b6b5f09}</Project> + <ReferenceOutputAssembly>false</ReferenceOutputAssembly> + </ProjectReference> + <ProjectReference Include="lwIP.vcxproj"> + <Project>{2cc276fa-b226-49c9-8f82-7fcd5a228e28}</Project> + <ReferenceOutputAssembly>false</ReferenceOutputAssembly> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/lwip_unittests.vcxproj.filters b/contrib/ports/win32/msvc/lwip_unittests.vcxproj.filters new file mode 100644 index 00000000000..bbac4e7be3c --- /dev/null +++ b/contrib/ports/win32/msvc/lwip_unittests.vcxproj.filters @@ -0,0 +1,168 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="core"> + <UniqueIdentifier>{e351c538-9f2b-4a01-bf46-3ee8873cbc0f}</UniqueIdentifier> + </Filter> + <Filter Include="tcp"> + <UniqueIdentifier>{5805c4bc-32c1-49cf-a35e-af58757e2d7a}</UniqueIdentifier> + </Filter> + <Filter Include="udp"> + <UniqueIdentifier>{173ba4ab-b194-4933-8e02-319044c2a8fa}</UniqueIdentifier> + </Filter> + <Filter Include="etharp"> + <UniqueIdentifier>{70c655a7-f40f-4728-b586-33fd9598b355}</UniqueIdentifier> + </Filter> + <Filter Include="dhcp"> + <UniqueIdentifier>{a6b60d4e-4b81-44f2-9408-2e45cc769391}</UniqueIdentifier> + </Filter> + <Filter Include="mdns"> + <UniqueIdentifier>{d454902e-ce5b-48ae-a690-e6490bdbbf17}</UniqueIdentifier> + </Filter> + <Filter Include="api"> + <UniqueIdentifier>{d9501476-6102-4f14-90bd-35322fbd2fb2}</UniqueIdentifier> + </Filter> + <Filter Include="arch"> + <UniqueIdentifier>{b04f182c-1910-456d-9388-397dfe82dbc9}</UniqueIdentifier> + </Filter> + <Filter Include="mqtt"> + <UniqueIdentifier>{fd48ae04-ec85-478f-a97c-a7c8384a2d94}</UniqueIdentifier> + </Filter> + <Filter Include="ip4"> + <UniqueIdentifier>{fe93fc95-f1af-4a1f-a086-c1771dbf4d79}</UniqueIdentifier> + </Filter> + <Filter Include="ipv6"> + <UniqueIdentifier>{924d29be-e5e4-4b25-8bc4-92db91ce4c49}</UniqueIdentifier> + </Filter> + <Filter Include="ppp"> + <UniqueIdentifier>{4d24c808-c024-4aba-a214-e5bc276e124d}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\..\test\unit\core\test_mem.c"> + <Filter>core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\core\test_pbuf.c"> + <Filter>core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\tcp\tcp_helper.c"> + <Filter>tcp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\tcp\test_tcp.c"> + <Filter>tcp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\tcp\test_tcp_oos.c"> + <Filter>tcp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\udp\test_udp.c"> + <Filter>udp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\etharp\test_etharp.c"> + <Filter>etharp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\dhcp\test_dhcp.c"> + <Filter>dhcp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\lwip_unittests.c" /> + <ClCompile Include="..\..\..\..\test\unit\mdns\test_mdns.c"> + <Filter>mdns</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\api\test_sockets.c"> + <Filter>api</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\arch\sys_arch.c"> + <Filter>arch</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\mqtt\test_mqtt.c"> + <Filter>mqtt</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\ip4\test_ip4.c"> + <Filter>ip4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\core\test_def.c"> + <Filter>core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\core\test_timers.c"> + <Filter>core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\core\test_netif.c"> + <Filter>core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\ip6\test_ip6.c"> + <Filter>ipv6</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\core\test_dns.c"> + <Filter>core</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\ppp\test_pppos.c"> + <Filter>ppp</Filter> + </ClCompile> + <ClCompile Include="..\..\..\..\test\unit\tcp\test_tcp_state.c"> + <Filter>tcp</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\..\test\unit\core\test_mem.h"> + <Filter>core</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\core\test_pbuf.h"> + <Filter>core</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\tcp\tcp_helper.h"> + <Filter>tcp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\tcp\test_tcp.h"> + <Filter>tcp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\tcp\test_tcp_oos.h"> + <Filter>tcp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\udp\test_udp.h"> + <Filter>udp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\etharp\test_etharp.h"> + <Filter>etharp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\dhcp\test_dhcp.h"> + <Filter>dhcp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\lwip_check.h" /> + <ClInclude Include="..\..\..\..\test\unit\lwipopts.h" /> + <ClInclude Include="..\..\..\..\test\unit\mdns\test_mdns.h"> + <Filter>mdns</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\api\test_sockets.h"> + <Filter>api</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\arch\sys_arch.h"> + <Filter>arch</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\mqtt\test_mqtt.h"> + <Filter>mqtt</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\ip4\test_ip4.h"> + <Filter>ip4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\core\test_def.h"> + <Filter>core</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\core\test_timers.h"> + <Filter>core</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\core\test_netif.h"> + <Filter>core</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\ip6\test_ip6.h"> + <Filter>ipv6</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\core\test_dns.h"> + <Filter>core</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\ppp\test_pppos.h"> + <Filter>ppp</Filter> + </ClInclude> + <ClInclude Include="..\..\..\..\test\unit\tcp\test_tcp_state.h"> + <Filter>tcp</Filter> + </ClInclude> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/makefsdata.vcxproj b/contrib/ports/win32/msvc/makefsdata.vcxproj new file mode 100644 index 00000000000..5881642d23f --- /dev/null +++ b/contrib/ports/win32/msvc/makefsdata.vcxproj @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\..\src\apps\http\makefsdata\makefsdata.c" /> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{0BFC0F21-8E84-4E68-A9E1-CE2A09B72F6D}</ProjectGuid> + <RootNamespace>makefsdata</RootNamespace> + <Keyword>Win32Proj</Keyword> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <WholeProgramOptimization>true</WholeProgramOptimization> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v143</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir> + <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>true</MinimalRebuild> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level4</WarningLevel> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + </ClCompile> + <Link> + <GenerateDebugInformation>true</GenerateDebugInformation> + <SubSystem>Console</SubSystem> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + <TargetMachine>MachineX86</TargetMachine> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <Optimization>MaxSpeed</Optimization> + <IntrinsicFunctions>true</IntrinsicFunctions> + <AdditionalIncludeDirectories>..\..\..\..\src\include;..\..\..\..\src\include\ipv4;..\..\..\..\src\include\ipv6;..\include;..\..\..\examples\example_app;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level4</WarningLevel> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + </ClCompile> + <Link> + <GenerateDebugInformation>true</GenerateDebugInformation> + <SubSystem>Console</SubSystem> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + <TargetMachine>MachineX86</TargetMachine> + </Link> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/msvc/makefsdata.vcxproj.filters b/contrib/ports/win32/msvc/makefsdata.vcxproj.filters new file mode 100644 index 00000000000..0f0210dc858 --- /dev/null +++ b/contrib/ports/win32/msvc/makefsdata.vcxproj.filters @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Quelldateien"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\..\src\apps\http\makefsdata\makefsdata.c"> + <Filter>Quelldateien</Filter> + </ClCompile> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/contrib/ports/win32/pcapif.c b/contrib/ports/win32/pcapif.c new file mode 100644 index 00000000000..58a42b4efb3 --- /dev/null +++ b/contrib/ports/win32/pcapif.c @@ -0,0 +1,1124 @@ +/** + * pcapif.c - This file is part of lwIP pcapif + * + **************************************************************************** + * + * 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 the port-dependent configuration */ +#include "lwipcfg.h" + +#include <stdlib.h> +#include <stdio.h> + +#ifdef _MSC_VER +#pragma warning( push, 3 ) +#include "pcap.h" +#pragma warning ( pop ) +#else +/* e.g. mingw */ +#define _MSC_VER 1500 +#include "pcap.h" +#undef _MSC_VER +#endif + +#include "lwip/opt.h" + +#if LWIP_ETHERNET + +#include "pcapif.h" + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#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 "lwip/timeouts.h" +#include "lwip/ethip6.h" + +#include "lwip/etharp.h" + +/* For compatibility with old pcap */ +#ifndef PCAP_OPENFLAG_PROMISCUOUS +#define PCAP_OPENFLAG_PROMISCUOUS 1 +#endif + +/** Set this to 0 to receive all multicast ethernet destination addresses */ +#ifndef PCAPIF_FILTER_GROUP_ADDRESSES +#define PCAPIF_FILTER_GROUP_ADDRESSES 1 +#endif + +/** Set this to 1 to receive all frames (also unicast to other addresses) + * In this mode, filtering out our own tx packets from loopback receiving + * is done via matching rx against recent tx (memcmp). + */ +#ifndef PCAPIF_RECEIVE_PROMISCUOUS +#define PCAPIF_RECEIVE_PROMISCUOUS 0 +#endif + +/* 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 + +/** If 1, check link state and report it to lwIP. + * If 0, don't check link state (lwIP link state is always UP). + */ +#ifndef PCAPIF_HANDLE_LINKSTATE +#define PCAPIF_HANDLE_LINKSTATE 1 +#endif + +/** If 1, use PBUF_REF for RX (for testing purposes mainly). + * For this, LWIP_SUPPORT_CUSTOM_PBUF must be enabled. + * Also, PBUF_POOL_BUFSIZE must be set high enough to ensure all rx packets + * fit into a single pbuf. + */ +#ifndef PCAPIF_RX_REF +#define PCAPIF_RX_REF 0 +#endif + +/** This can be used when netif->state is used for something else in your + * application (e.g. when wrapping a class around this interface). Just + * make sure this define returns the state pointer set by + * pcapif_low_level_init() (e.g. by using an offset or a callback). + */ +#ifndef PCAPIF_GET_STATE_PTR +#define PCAPIF_GET_STATE_PTR(netif) ((netif)->state) +#endif + +/** Define this to 1 to allocate readonly pbufs for RX (needs PCAPIF_RX_REF, + * only implemented for windows, for now) + */ +#ifndef PCAPIF_RX_READONLY +#define PCAPIF_RX_READONLY 0 +#endif + +#if PCAPIF_HANDLE_LINKSTATE +#include "pcapif_helper.h" + +/* Define "PHY" delay when "link up" */ +#ifndef PCAPIF_LINKUP_DELAY +#define PCAPIF_LINKUP_DELAY 0 +#endif + +#define PCAPIF_LINKCHECK_INTERVAL_MS 500 + +/* link state notification macro */ +#if PCAPIF_LINKUP_DELAY +#define PCAPIF_NOTIFY_LINKSTATE(netif, linkfunc) sys_timeout(PCAPIF_LINKUP_DELAY, (sys_timeout_handler)linkfunc, netif) +#else /* PHY_LINKUP_DELAY */ +#define PCAPIF_NOTIFY_LINKSTATE(netif, linkfunc) linkfunc(netif) +#endif /* PHY_LINKUP_DELAY */ + +#endif /* PCAPIF_HANDLE_LINKSTATE */ + +/* Define PCAPIF_RX_LOCK_LWIP and PCAPIF_RX_UNLOCK_LWIP if you need to lock the lwIP core + before/after pbuf_alloc() or netif->input() are called on RX. */ +#ifndef PCAPIF_RX_LOCK_LWIP +#define PCAPIF_RX_LOCK_LWIP() +#endif +#ifndef PCAPIF_RX_UNLOCK_LWIP +#define PCAPIF_RX_UNLOCK_LWIP() +#endif + +#define ETH_MIN_FRAME_LEN 60U +#define ETH_MAX_FRAME_LEN 1518U + +#define ADAPTER_NAME_LEN 128 +#define ADAPTER_DESC_LEN 128 + +#if PCAPIF_RECEIVE_PROMISCUOUS +#ifndef PCAPIF_LOOPBACKFILTER_NUM_TX_PACKETS +#define PCAPIF_LOOPBACKFILTER_NUM_TX_PACKETS 128 +#endif +struct pcapipf_pending_packet { + struct pcapipf_pending_packet *next; + u16_t len; + u8_t data[ETH_MAX_FRAME_LEN]; +}; +#endif /* PCAPIF_RECEIVE_PROMISCUOUS */ + +/* Packet Adapter information */ +struct pcapif_private { + void *input_fn_arg; + pcap_t *adapter; + char name[ADAPTER_NAME_LEN]; + char description[ADAPTER_DESC_LEN]; + int shutdown_called; +#if PCAPIF_RX_USE_THREAD + volatile int rx_run; + volatile int rx_running; +#endif /* PCAPIF_RX_USE_THREAD */ +#if PCAPIF_HANDLE_LINKSTATE + struct pcapifh_linkstate *link_state; + enum pcapifh_link_event last_link_event; +#endif /* PCAPIF_HANDLE_LINKSTATE */ +#if PCAPIF_RECEIVE_PROMISCUOUS + struct pcapipf_pending_packet packets[PCAPIF_LOOPBACKFILTER_NUM_TX_PACKETS]; + struct pcapipf_pending_packet *tx_packets; + struct pcapipf_pending_packet *free_packets; +#endif /* PCAPIF_RECEIVE_PROMISCUOUS */ +}; + +#if PCAPIF_RECEIVE_PROMISCUOUS +static void +pcapif_init_tx_packets(struct pcapif_private *priv) +{ + int i; + priv->tx_packets = NULL; + priv->free_packets = NULL; + for (i = 0; i < PCAPIF_LOOPBACKFILTER_NUM_TX_PACKETS; i++) { + struct pcapipf_pending_packet *pack = &priv->packets[i]; + pack->len = 0; + pack->next = priv->free_packets; + priv->free_packets = pack; + } +} + +static void +pcapif_add_tx_packet(struct pcapif_private *priv, unsigned char *buf, u16_t tot_len) +{ + struct pcapipf_pending_packet *tx; + struct pcapipf_pending_packet *pack; + SYS_ARCH_DECL_PROTECT(lev); + + /* get a free packet (locked) */ + SYS_ARCH_PROTECT(lev); + pack = priv->free_packets; + if ((pack == NULL) && (priv->tx_packets != NULL)) { + /* no free packets, reuse the oldest */ + pack = priv->tx_packets; + priv->tx_packets = pack->next; + } + LWIP_ASSERT("no free packet", pack != NULL); + priv->free_packets = pack->next; + pack->next = NULL; + SYS_ARCH_UNPROTECT(lev); + + /* set up the packet (unlocked) */ + pack->len = tot_len; + memcpy(pack->data, buf, tot_len); + + /* put the packet on the list (locked) */ + SYS_ARCH_PROTECT(lev); + if (priv->tx_packets != NULL) { + for (tx = priv->tx_packets; tx->next != NULL; tx = tx->next); + LWIP_ASSERT("bug", tx != NULL); + tx->next = pack; + } else { + priv->tx_packets = pack; + } + SYS_ARCH_UNPROTECT(lev); +} + +static int +pcapif_compare_packets(struct pcapipf_pending_packet *pack, const void *packet, int packet_len) +{ + if (pack->len == packet_len) { + if (!memcmp(pack->data, packet, packet_len)) { + return 1; + } + } + return 0; +} + +static int +pcaipf_is_tx_packet(struct netif *netif, const void *packet, int packet_len) +{ + struct pcapif_private *priv = (struct pcapif_private*)PCAPIF_GET_STATE_PTR(netif); + struct pcapipf_pending_packet *iter, *last; + SYS_ARCH_DECL_PROTECT(lev); + + last = priv->tx_packets; + if (last == NULL) { + /* list is empty */ + return 0; + } + /* compare the first packet */ + if (pcapif_compare_packets(last, packet, packet_len)) { + SYS_ARCH_PROTECT(lev); + LWIP_ASSERT("list has changed", last == priv->tx_packets); + priv->tx_packets = last->next; + last->next = priv->free_packets; + priv->free_packets = last; + last->len = 0; + SYS_ARCH_UNPROTECT(lev); + return 1; + } + SYS_ARCH_PROTECT(lev); + for (iter = last->next; iter != NULL; last = iter, iter = iter->next) { + /* unlock while comparing (this works because we have a clean threading separation + of adding and removing items and adding is only done at the end) */ + SYS_ARCH_UNPROTECT(lev); + if (pcapif_compare_packets(iter, packet, packet_len)) { + SYS_ARCH_PROTECT(lev); + LWIP_ASSERT("last != NULL", last != NULL); + last->next = iter->next; + iter->next = priv->free_packets; + priv->free_packets = iter; + last->len = 0; + SYS_ARCH_UNPROTECT(lev); + return 1; + } + SYS_ARCH_PROTECT(lev); + } + SYS_ARCH_UNPROTECT(lev); + return 0; +} +#else /* PCAPIF_RECEIVE_PROMISCUOUS */ +#define pcapif_init_tx_packets(priv) +#define pcapif_add_tx_packet(priv, buf, tot_len) +static int +pcaipf_is_tx_packet(struct netif *netif, const void *packet, int packet_len) +{ + const struct eth_addr *src = (const struct eth_addr *)packet + 1; + if (packet_len >= (ETH_HWADDR_LEN * 2)) { + /* Don't let feedback packets through (limitation in winpcap?) */ + if(!memcmp(src, netif->hwaddr, ETH_HWADDR_LEN)) { + return 1; + } + } + return 0; +} +#endif /* PCAPIF_RECEIVE_PROMISCUOUS */ + +#if PCAPIF_RX_REF +struct pcapif_pbuf_custom +{ + struct pbuf_custom pc; +#if PCAPIF_RX_READONLY + void *ro_mem; +#else + struct pbuf* p; +#endif +}; +#endif /* PCAPIF_RX_REF */ + +/* Forward declarations. */ +static void pcapif_input(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *packet); + +#ifdef PACKET_LIB_GET_ADAPTER_NETADDRESS +/** Get the index of an adapter by its network address + * + * @param netaddr network address of the adapter (e.g. 192.168.1.0) + * @return index of the adapter or negative on error + */ +static int +get_adapter_index_from_addr(struct in_addr *netaddr, char *guid, size_t guid_len) +{ + pcap_if_t *alldevs; + pcap_if_t *d; + char errbuf[PCAP_ERRBUF_SIZE+1]; + int index = 0; + + memset(guid, 0, guid_len); + + /* Retrieve the interfaces list */ + if (pcap_findalldevs(&alldevs, errbuf) == -1) { + printf("Error in pcap_findalldevs: %s\n", errbuf); + return -1; + } + /* Scan the list printing every entry */ + for (d = alldevs; d != NULL; d = d->next, index++) { + pcap_addr_t *a; + for(a = d->addresses; a != NULL; a = a->next) { + if (a->addr->sa_family == AF_INET) { + ULONG a_addr = ((struct sockaddr_in *)a->addr)->sin_addr.s_addr; + ULONG a_netmask = ((struct sockaddr_in *)a->netmask)->sin_addr.s_addr; + ULONG a_netaddr = a_addr & a_netmask; + ULONG addr = (*netaddr).s_addr; + if (a_netaddr == addr) { + int ret = -1; + char name[128]; + char *start, *end; + size_t len = strlen(d->name); + if(len > 127) { + len = 127; + } + MEMCPY(name, d->name, len); + name[len] = 0; + start = strstr(name, "{"); + if (start != NULL) { + end = strstr(start, "}"); + if (end != NULL) { + size_t len = end - start + 1; + MEMCPY(guid, start, len); + ret = index; + } + } + pcap_freealldevs(alldevs); + return ret; + } + } + } + } + printf("Network address not found.\n"); + + pcap_freealldevs(alldevs); + return -1; +} +#endif /* PACKET_LIB_GET_ADAPTER_NETADDRESS */ + +#if defined(PACKET_LIB_GET_ADAPTER_NETADDRESS) || defined(PACKET_LIB_ADAPTER_GUID) +/** 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 + */ +static int +get_adapter_index(const char* adapter_guid) +{ + pcap_if_t *alldevs; + pcap_if_t *d; + char errbuf[PCAP_ERRBUF_SIZE+1]; + int idx = 0; + + /* Retrieve the interfaces list */ + if (pcap_findalldevs(&alldevs, errbuf) == -1) { + printf("Error in pcap_findalldevs: %s\n", errbuf); + return -1; + } + /* Scan the list and compare name vs. adapter_guid */ + for (d = alldevs; d != NULL; d = d->next, idx++) { + if(strstr(d->name, adapter_guid)) { + pcap_freealldevs(alldevs); + return idx; + } + } + /* not found, dump all adapters */ + printf("%d available adapters:\n", idx); + for (d = alldevs, idx = 0; d != NULL; d = d->next, idx++) { + printf("- %d: %s\n", idx, d->name); + } + pcap_freealldevs(alldevs); + return -1; +} +#endif /* defined(PACKET_LIB_GET_ADAPTER_NETADDRESS) || defined(PACKET_LIB_ADAPTER_GUID) */ + +static pcap_t* +pcapif_open_adapter(const char* adapter_name, char* errbuf) +{ + pcap_t* adapter = pcap_open_live(adapter_name,/* name of the device */ + 65536, /* portion of the packet to capture */ + /* 65536 guarantees that the whole packet will be captured on all the link layers */ + PCAP_OPENFLAG_PROMISCUOUS,/* promiscuous mode */ +#if PCAPIF_RX_USE_THREAD + /*-*/1, /* don't wait at all for lower latency */ +#else + 1, /* wait 1 ms in ethernetif_poll */ +#endif + errbuf); /* error buffer */ + return adapter; +} + +#if !PCAPIF_RX_USE_THREAD +static void +pcap_reopen_adapter(struct pcapif_private *pa) +{ + char errbuf[PCAP_ERRBUF_SIZE+1]; + pcap_if_t *alldevs; + if (pa->adapter != NULL) { + pcap_close(pa->adapter); + pa->adapter = NULL; + } + if (pcap_findalldevs(&alldevs, errbuf) != -1) { + pcap_if_t *d; + for (d = alldevs; d != NULL; d = d->next) { + if (!strcmp(d->name, pa->name)) { + pa->adapter = pcapif_open_adapter(pa->name, errbuf); + if (pa->adapter == NULL) { + printf("failed to reopen pcap adapter after failure: %s\n", errbuf); + } + break; + } + } + pcap_freealldevs(alldevs); + } +} +#endif + +/** + * Open a network adapter and set it up for packet input + * + * @param adapter_num the index of the adapter to use + * @param arg argument to pass to input + * @return an adapter handle on success, NULL on failure + */ +static struct pcapif_private* +pcapif_init_adapter(int adapter_num, void *arg) +{ + int i; + int number_of_adapters; + struct pcapif_private *pa; + char errbuf[PCAP_ERRBUF_SIZE+1]; + + pcap_if_t *alldevs; + pcap_if_t *d; + pcap_if_t *used_adapter = NULL; + + pa = (struct pcapif_private *)malloc(sizeof(struct pcapif_private)); + if (!pa) { + printf("Unable to alloc the adapter!\n"); + return NULL; + } + + memset(pa, 0, sizeof(struct pcapif_private)); + pcapif_init_tx_packets(pa); + pa->input_fn_arg = arg; + + /* Retrieve the interfaces list */ + if (pcap_findalldevs(&alldevs, errbuf) == -1) { + free(pa); + return NULL; /* no adapters found */ + } + /* get number of adapters and adapter pointer */ + for (d = alldevs, number_of_adapters = 0; d != NULL; d = d->next, number_of_adapters++) { + if (number_of_adapters == adapter_num) { + char *desc = d->description; + size_t len; + + len = strlen(d->name); + LWIP_ASSERT("len < ADAPTER_NAME_LEN", len < ADAPTER_NAME_LEN); + strcpy(pa->name, d->name); + + used_adapter = d; + /* format vendor description */ + if (desc != NULL) { + len = strlen(desc); + if (strstr(desc, " ' on local host") != NULL) { + len -= 16; + } + else if (strstr(desc, "' on local host") != NULL) { + len -= 15; + } + if (strstr(desc, "Network adapter '") == desc) { + len -= 17; + desc += 17; + } + len = LWIP_MIN(len, ADAPTER_DESC_LEN-1); + while ((desc[len-1] == ' ') || (desc[len-1] == '\t')) { + /* don't copy trailing whitespace */ + len--; + } + strncpy(pa->description, desc, len); + pa->description[len] = 0; + } else { + strcpy(pa->description, "<no_desc>"); + } + } + } + +#ifndef PCAPIF_LIB_QUIET + /* Scan the list printing every entry */ + for (d = alldevs, i = 0; d != NULL; d = d->next, i++) { + char *desc = d->description; + char descBuf[128]; + size_t len; + const char* devname = d->name; + if (d->name == NULL) { + devname = "<unnamed>"; + } else { + if (strstr(devname, "\\Device\\") == devname) { + /* windows: strip the first part */ + devname += 8; + } + } + printf("%2i: %s\n", i, devname); + if (desc != NULL) { + /* format vendor description */ + len = strlen(desc); + if (strstr(desc, " ' on local host") != NULL) { + len -= 16; + } + else if (strstr(desc, "' on local host") != NULL) { + len -= 15; + } + if (strstr(desc, "Network adapter '") == desc) { + len -= 17; + desc += 17; + } + len = LWIP_MIN(len, 127); + while ((desc[len-1] == ' ') || (desc[len-1] == '\t')) { + /* don't copy trailing whitespace */ + len--; + } + strncpy(descBuf, desc, len); + descBuf[len] = 0; + printf(" Desc: \"%s\"\n", descBuf); + } + } +#endif /* PCAPIF_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); + pcap_freealldevs(alldevs); + return NULL; + } + /* adapter index out of range */ + if (adapter_num >= number_of_adapters) { + printf("Invalid adapter_num: %d\n", adapter_num); + free(pa); + pcap_freealldevs(alldevs); + return NULL; + } +#ifndef PCAPIF_LIB_QUIET + printf("Using adapter_num: %d\n", adapter_num); +#endif /* PCAPIF_LIB_QUIET */ + /* set up the selected adapter */ + + LWIP_ASSERT("used_adapter != NULL", used_adapter != NULL); + + /* Open the device */ + pa->adapter = pcapif_open_adapter(used_adapter->name, errbuf); + if (pa->adapter == NULL) { + printf("\nUnable to open the adapter. %s is not supported by pcap (\"%s\").\n", used_adapter->name, errbuf); + /* Free the device list */ + pcap_freealldevs(alldevs); + free(pa); + return NULL; + } + printf("Using adapter: \"%s\"\n", pa->description); + pcap_freealldevs(alldevs); + +#if PCAPIF_HANDLE_LINKSTATE + pa->link_state = pcapifh_linkstate_init(pa->name); + pa->last_link_event = PCAPIF_LINKEVENT_UNKNOWN; +#endif /* PCAPIF_HANDLE_LINKSTATE */ + + return pa; +} + +#if PCAPIF_HANDLE_LINKSTATE +static void +pcapif_check_linkstate(void *netif_ptr) +{ + struct netif *netif = (struct netif*)netif_ptr; + struct pcapif_private *pa = (struct pcapif_private*)PCAPIF_GET_STATE_PTR(netif); + enum pcapifh_link_event le; + + le = pcapifh_linkstate_get(pa->link_state); + + if (pa->last_link_event != le) { + pa->last_link_event = le; + switch (le) { + case PCAPIF_LINKEVENT_UP: { + PCAPIF_NOTIFY_LINKSTATE(netif, netif_set_link_up); + break; + } + case PCAPIF_LINKEVENT_DOWN: { + PCAPIF_NOTIFY_LINKSTATE(netif, netif_set_link_down); + break; + } + case PCAPIF_LINKEVENT_UNKNOWN: /* fall through */ + default: + break; + } + } + sys_timeout(PCAPIF_LINKCHECK_INTERVAL_MS, pcapif_check_linkstate, netif); +} +#endif /* PCAPIF_HANDLE_LINKSTATE */ + + +/** + * Close the adapter (no more packets can be sent or received) + * + * @param netif netif to shutdown + */ +void +pcapif_shutdown(struct netif *netif) +{ + struct pcapif_private *pa = (struct pcapif_private*)PCAPIF_GET_STATE_PTR(netif); + if (pa) { +#if PCAPIF_RX_USE_THREAD + pa->rx_run = 0; +#endif /* PCAPIF_RX_USE_THREAD */ + if (pa->adapter) { + pcap_breakloop(pa->adapter); + pcap_close(pa->adapter); + } +#if PCAPIF_RX_USE_THREAD + /* wait for rxthread to end */ + while(pa->rx_running); +#endif /* PCAPIF_RX_USE_THREAD */ +#if PCAPIF_HANDLE_LINKSTATE + pcapifh_linkstate_close(pa->link_state); +#endif /* PCAPIF_HANDLE_LINKSTATE */ + free(pa); + } +} + +#if PCAPIF_RX_USE_THREAD +/** RX running in its own thread */ +static void +pcapif_input_thread(void *arg) +{ + struct netif *netif = (struct netif *)arg; + struct pcapif_private *pa = (struct pcapif_private*)PCAPIF_GET_STATE_PTR(netif); + do + { + struct pcap_pkthdr pkt_header; + const u_char *packet = pcap_next(pa->adapter, &pkt_header); + if(packet != NULL) { + pcapif_input((u_char*)pa, &pkt_header, packet); + } + } while (pa->rx_run); + pa->rx_running = 0; +} +#endif /* PCAPIF_RX_USE_THREAD */ + +/** Low-level initialization: find the correct adapter and initialize it. + */ +static void +pcapif_low_level_init(struct netif *netif) +{ + u8_t my_mac_addr[ETH_HWADDR_LEN] = LWIP_MAC_ADDR_BASE; + int adapter_num = PACKET_LIB_ADAPTER_NR; + struct pcapif_private *pa; +#ifdef PACKET_LIB_GET_ADAPTER_NETADDRESS + ip4_addr_t netaddr; +#define GUID_LEN 128 + char guid[GUID_LEN + 1]; +#endif /* PACKET_LIB_GET_ADAPTER_NETADDRESS */ + + /* If 'state' is != NULL at this point, we assume it is an 'int' giving + the index of the adapter to use (+ 1 because 0==NULL is invalid). + This can be used to instantiate multiple PCAP drivers. */ + if (netif->state != NULL) { + adapter_num = (LWIP_PTR_NUMERIC_CAST(int, netif->state)) - 1; + if (adapter_num < 0) { + printf("ERROR: invalid adapter index \"%d\"!\n", adapter_num); + LWIP_ASSERT("ERROR initializing network adapter!", 0); + return; + } + } + +#ifdef PACKET_LIB_GET_ADAPTER_NETADDRESS + 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", ip4addr_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!", 0); + return; + } +#endif /* PACKET_LIB_ADAPTER_GUID */ +#endif /* PACKET_LIB_GET_ADAPTER_NETADDRESS */ + + /* Do whatever else is needed to initialize interface. */ + pa = pcapif_init_adapter(adapter_num, netif); + if (pa == NULL) { + printf("ERROR initializing network adapter %d!\n", adapter_num); + LWIP_ASSERT("ERROR initializing network adapter!", 0); + return; + } + netif->state = pa; + + /* change the MAC address to a unique value + so that multiple ethernetifs are supported */ + /* @todo: this does NOT support multiple processes using this adapter! */ + my_mac_addr[ETH_HWADDR_LEN - 1] += netif->num; + /* Copy MAC addr */ + SMEMCPY(&netif->hwaddr, my_mac_addr, ETH_HWADDR_LEN); + + /* get the initial link state of the selected interface */ +#if PCAPIF_HANDLE_LINKSTATE + pa->last_link_event = pcapifh_linkstate_get(pa->link_state); + if (pa->last_link_event == PCAPIF_LINKEVENT_DOWN) { + netif_set_link_down(netif); + } else { + netif_set_link_up(netif); + } + sys_timeout(PCAPIF_LINKCHECK_INTERVAL_MS, pcapif_check_linkstate, netif); +#else /* PCAPIF_HANDLE_LINKSTATE */ + /* just set the link up so that lwIP can transmit */ + netif_set_link_up(netif); +#endif /* PCAPIF_HANDLE_LINKSTATE */ + +#if PCAPIF_RX_USE_THREAD + pa->rx_run = 1; + pa->rx_running = 1; + sys_thread_new("pcapif_rxthread", pcapif_input_thread, netif, 0, 0); +#endif + + LWIP_DEBUGF(NETIF_DEBUG, ("pcapif: 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(): + * Transmit a packet. The packet is contained in the pbuf that is passed to + * the function. This pbuf might be chained. + */ +static err_t +pcapif_low_level_output(struct netif *netif, struct pbuf *p) +{ + struct pbuf *q; + unsigned char buffer[ETH_MAX_FRAME_LEN + ETH_PAD_SIZE]; + unsigned char *buf = buffer; + unsigned char *ptr; + struct eth_hdr *ethhdr; + u16_t tot_len = p->tot_len - ETH_PAD_SIZE; + struct pcapif_private *pa = (struct pcapif_private*)PCAPIF_GET_STATE_PTR(netif); + +#if defined(LWIP_DEBUG) && LWIP_NETIF_TX_SINGLE_PBUF && !(LWIP_IPV4 && IP_FRAG) && (LWIP_IPV6 && LWIP_IPV6_FRAG) + LWIP_ASSERT("p->next == NULL && p->len == p->tot_len", p->next == NULL && p->len == p->tot_len); +#endif + + /* initiate transfer */ + if ((p->len == p->tot_len) && (p->len >= ETH_MIN_FRAME_LEN + ETH_PAD_SIZE)) { + /* no pbuf chain, don't have to copy -> faster */ + buf = &((unsigned char*)p->payload)[ETH_PAD_SIZE]; + } else { + /* pbuf chain, copy into contiguous buffer */ + if (p->tot_len >= sizeof(buffer)) { + LINK_STATS_INC(link.lenerr); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); + 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, (void*)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; + } + } + } + + if (tot_len < ETH_MIN_FRAME_LEN) { + /* ensure minimal frame length */ + memset(&buf[tot_len], 0, ETH_MIN_FRAME_LEN - tot_len); + tot_len = ETH_MIN_FRAME_LEN; + } + + /* signal that packet should be sent */ + if (pcap_sendpacket(pa->adapter, buf, tot_len) < 0) { + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); + return ERR_BUF; + } + if (netif_is_link_up(netif)) { + pcapif_add_tx_packet(pa, buf, tot_len); + } + + LINK_STATS_INC(link.xmit); + MIB2_STATS_NETIF_ADD(netif, ifoutoctets, tot_len); + ethhdr = (struct eth_hdr *)p->payload; + if ((ethhdr->dest.addr[0] & 1) != 0) { + /* broadcast or multicast packet*/ + MIB2_STATS_NETIF_INC(netif, ifoutnucastpkts); + } else { + /* unicast packet */ + MIB2_STATS_NETIF_INC(netif, ifoutucastpkts); + } + return ERR_OK; +} + +/** low_level_input(): Allocate a pbuf and transfer the bytes of the incoming + * packet from the interface into the pbuf. + */ +static struct pbuf * +pcapif_low_level_input(struct netif *netif, const void *packet, int packet_len) +{ + struct pbuf *p, *q; + int start; + int length = packet_len; + const struct eth_addr *dest = (const struct eth_addr*)packet; + int unicast; +#if PCAPIF_FILTER_GROUP_ADDRESSES && !PCAPIF_RECEIVE_PROMISCUOUS + const u8_t bcast[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + const u8_t ipv4mcast[] = {0x01, 0x00, 0x5e}; + const u8_t ipv6mcast[] = {0x33, 0x33}; +#endif /* PCAPIF_FILTER_GROUP_ADDRESSES && !PCAPIF_RECEIVE_PROMISCUOUS */ + + if (pcaipf_is_tx_packet(netif, packet, packet_len)) { + /* don't update counters here! */ + return NULL; + } + + unicast = ((dest->addr[0] & 0x01) == 0); +#if !PCAPIF_RECEIVE_PROMISCUOUS + /* MAC filter: only let my MAC or non-unicast through (pcap receives loopback traffic, too) */ + if (memcmp(dest, &netif->hwaddr, ETH_HWADDR_LEN) && +#if PCAPIF_FILTER_GROUP_ADDRESSES + (memcmp(dest, ipv4mcast, 3) || ((dest->addr[3] & 0x80) != 0)) && + memcmp(dest, ipv6mcast, 2) && + memcmp(dest, bcast, 6) +#else /* PCAPIF_FILTER_GROUP_ADDRESSES */ + unicast +#endif /* PCAPIF_FILTER_GROUP_ADDRESSES */ + ) { + /* don't update counters here! */ + return NULL; + } +#endif /* !PCAPIF_RECEIVE_PROMISCUOUS */ + + /* 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, (void*)q->next)); + if (q == p) { +#if ETH_PAD_SIZE + LWIP_ASSERT("q->len >= ETH_PAD_SIZE", q->len >= ETH_PAD_SIZE); + copy_len -= ETH_PAD_SIZE; +#endif /* ETH_PAD_SIZE*/ + MEMCPY(&((char*)q->payload)[ETH_PAD_SIZE], &((const char*)packet)[start], copy_len); + } else { + MEMCPY(q->payload, &((const char*)packet)[start], copy_len); + } + start += copy_len; + length -= copy_len; + if (length <= 0) { + break; + } + } + LINK_STATS_INC(link.recv); + MIB2_STATS_NETIF_ADD(netif, ifinoctets, p->tot_len - ETH_PAD_SIZE); + if (unicast) { + MIB2_STATS_NETIF_INC(netif, ifinucastpkts); + } else { + MIB2_STATS_NETIF_INC(netif, ifinnucastpkts); + } + } else { + /* drop packet */ + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(netif, ifindiscards); + } + + return p; +} + +#if PCAPIF_RX_REF +static void +pcapif_rx_pbuf_free_custom(struct pbuf *p) +{ + struct pcapif_pbuf_custom* ppc; + LWIP_ASSERT("NULL pointer", p != NULL); + ppc = (struct pcapif_pbuf_custom*)p; +#if PCAPIF_RX_READONLY + LWIP_ASSERT("NULL pointer", ppc->ro_mem != NULL); + pcapifh_free_readonly_mem(ppc->ro_mem); + ppc->ro_mem = NULL; +#else + LWIP_ASSERT("NULL pointer", ppc->p != NULL); + pbuf_free(ppc->p); + ppc->p = NULL; +#endif + mem_free(p); +} + +static struct pbuf* +pcapif_rx_ref(struct pbuf* p) +{ + struct pcapif_pbuf_custom* ppc; + struct pbuf* q; + u16_t len; + void *payload_mem; + + LWIP_ASSERT("NULL pointer", p != NULL); + LWIP_ASSERT("chained pbuf not supported here", p->next == NULL); + + ppc = (struct pcapif_pbuf_custom*)mem_malloc(sizeof(struct pcapif_pbuf_custom)); + LWIP_ASSERT("out of memory for RX", ppc != NULL); + ppc->pc.custom_free_function = pcapif_rx_pbuf_free_custom; + len = p->tot_len; +#if PCAPIF_RX_READONLY + payload_mem = pcapifh_alloc_readonly_copy(p->payload, len); + LWIP_ASSERT("out of readonly memory for RX", payload_mem != NULL); + pbuf_free(p); + ppc->ro_mem = payload_mem; +#else + ppc->p = p; + payload_mem = p->payload; +#endif + + q = pbuf_alloced_custom(PBUF_RAW, len, PBUF_REF, &ppc->pc, payload_mem, len); + LWIP_ASSERT("pbuf_alloced_custom returned NULL", q != NULL); + return q; +} +#endif /* PCAPIF_RX_REF */ + +/** pcapif_input: This function is 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 +pcapif_input(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *packet) +{ + struct pcapif_private *pa = (struct pcapif_private*)user; + int packet_len = pkt_header->caplen; + struct netif *netif = (struct netif *)pa->input_fn_arg; + struct pbuf *p; + + PCAPIF_RX_LOCK_LWIP(); + + /* move received packet into a new pbuf */ + p = pcapif_low_level_input(netif, packet, packet_len); + /* if no packet could be read, silently ignore this */ + if (p != NULL) { +#if PCAPIF_RX_REF + p = pcapif_rx_ref(p); +#endif + /* pass all packets to ethernet_input, which decides what packets it supports */ + if (netif->input(p, netif) != ERR_OK) { + LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n")); + pbuf_free(p); + } + } + PCAPIF_RX_UNLOCK_LWIP(); +} + +/** + * pcapif_init(): initialization function, pass to netif_add(). + */ +err_t +pcapif_init(struct netif *netif) +{ + static int ethernetif_index; + + int local_index; + SYS_ARCH_DECL_PROTECT(lev); + + pcapifh_init_npcap(); + + SYS_ARCH_PROTECT(lev); + local_index = ethernetif_index++; + SYS_ARCH_UNPROTECT(lev); + + LWIP_ASSERT("pcapif needs an input callback", netif->input != NULL); + + netif->name[0] = IFNAME0; + netif->name[1] = (char)(IFNAME1 + local_index); + netif->linkoutput = pcapif_low_level_output; +#if LWIP_IPV4 +#if LWIP_ARP + netif->output = etharp_output; +#else /* LWIP_ARP */ + netif->output = NULL; /* not used for PPPoE */ +#endif /* LWIP_ARP */ +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + netif->output_ip6 = ethip6_output; +#endif /* LWIP_IPV6 */ +#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_ETHERNET | NETIF_FLAG_IGMP; +#if LWIP_IPV6 && LWIP_IPV6_MLD + netif->flags |= NETIF_FLAG_MLD6; +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ + netif->hwaddr_len = ETH_HWADDR_LEN; + + NETIF_INIT_SNMP(netif, snmp_ifType_ethernet_csmacd, 100000000); + + /* sets link up or down based on current status */ + pcapif_low_level_init(netif); + + return ERR_OK; +} + +#if !PCAPIF_RX_USE_THREAD +void +pcapif_poll(struct netif *netif) +{ + struct pcapif_private *pa = (struct pcapif_private*)PCAPIF_GET_STATE_PTR(netif); + + int ret; + do { + if (pa->adapter != NULL) { + ret = pcap_dispatch(pa->adapter, -1, pcapif_input, (u_char*)pa); + } else { + ret = -1; + } + if (ret < 0) { + /* error (e.g. adapter removed or resume from standby), try to reopen the adapter */ + pcap_reopen_adapter(pa); + } + } while (ret > 0); + +} +#endif /* !PCAPIF_RX_USE_THREAD */ + +#endif /* LWIP_ETHERNET */ diff --git a/contrib/ports/win32/pcapif.h b/contrib/ports/win32/pcapif.h new file mode 100644 index 00000000000..8d67ea42fc0 --- /dev/null +++ b/contrib/ports/win32/pcapif.h @@ -0,0 +1,32 @@ +#ifndef LWIP_PCAPIF_H +#define LWIP_PCAPIF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "lwip/err.h" + +/** Set to 1 to let rx use an own thread (only for NO_SYS==0). + * If set to 0, ethernetif_poll is used to poll for packets. + */ +#ifndef PCAPIF_RX_USE_THREAD +#define PCAPIF_RX_USE_THREAD !NO_SYS +#endif +#if PCAPIF_RX_USE_THREAD && NO_SYS +#error "Can't create a dedicated RX thread with NO_SYS==1" +#endif + +struct netif; + +err_t pcapif_init (struct netif *netif); +void pcapif_shutdown(struct netif *netif); +#if !PCAPIF_RX_USE_THREAD +void pcapif_poll (struct netif *netif); +#endif /* !PCAPIF_RX_USE_THREAD */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_PCAPIF_H */ diff --git a/contrib/ports/win32/pcapif_helper.c b/contrib/ports/win32/pcapif_helper.c new file mode 100644 index 00000000000..03b92e0db69 --- /dev/null +++ b/contrib/ports/win32/pcapif_helper.c @@ -0,0 +1,172 @@ +/** + * pcapif_helper.c - This file is part of lwIP pcapif and provides helper functions + * for managing the link state. + */ + +#include "pcapif_helper.h" + +#include <stdlib.h> +#include <stdio.h> + +#include "lwip/arch.h" + +#ifdef WIN32 + +#define WIN32_LEAN_AND_MEAN + +#ifdef _MSC_VER +#pragma warning( push, 3 ) +#endif +#include <windows.h> +#include <packet32.h> +#include <ntddndis.h> +#ifdef _MSC_VER +#pragma warning ( pop ) +#endif + +struct pcapifh_linkstate { + LPADAPTER lpAdapter; + PPACKET_OID_DATA ppacket_oid_data; +}; + +struct pcapifh_linkstate* pcapifh_linkstate_init(char *adapter_name) +{ + struct pcapifh_linkstate* state = (struct pcapifh_linkstate*)malloc(sizeof(struct pcapifh_linkstate)); + if (state != NULL) { + memset(state, 0, sizeof(struct pcapifh_linkstate)); + state->ppacket_oid_data = (PPACKET_OID_DATA)malloc(sizeof(PACKET_OID_DATA) + sizeof(NDIS_MEDIA_STATE)); + if (state->ppacket_oid_data == NULL) { + free(state); + state = NULL; + } else { + state->lpAdapter = PacketOpenAdapter((char*)adapter_name); + if ((state->lpAdapter == NULL) || (state->lpAdapter->hFile == INVALID_HANDLE_VALUE)) { + /* failed to open adapter */ + free(state); + state = NULL; + } + } + } + return state; +} + +enum pcapifh_link_event pcapifh_linkstate_get(struct pcapifh_linkstate* state) +{ + enum pcapifh_link_event ret = PCAPIF_LINKEVENT_UNKNOWN; + if (state != NULL) { + state->ppacket_oid_data->Oid = OID_GEN_MEDIA_CONNECT_STATUS; + state->ppacket_oid_data->Length = sizeof(NDIS_MEDIA_STATE); + if (PacketRequest(state->lpAdapter, FALSE, state->ppacket_oid_data)) { + NDIS_MEDIA_STATE fNdisMediaState; + fNdisMediaState = (*((PNDIS_MEDIA_STATE)(state->ppacket_oid_data->Data))); + ret = ((fNdisMediaState == NdisMediaStateConnected) ? PCAPIF_LINKEVENT_UP : PCAPIF_LINKEVENT_DOWN); + } + } + return ret; +} + +void pcapifh_linkstate_close(struct pcapifh_linkstate* state) +{ + if (state != NULL) { + if (state->lpAdapter != NULL) { + PacketCloseAdapter(state->lpAdapter); + } + if (state->ppacket_oid_data != NULL) { + free(state->ppacket_oid_data); + } + free(state); + } +} + +/** Helper function for PCAPIF_RX_READONLY for windows: copy the date to a new + * page which is set to READONLY after copying. + * This is a helper to simulate hardware that receives to memory that cannot be + * written by the CPU. + */ +void * +pcapifh_alloc_readonly_copy(void *data, size_t len) +{ + DWORD oldProtect; + void *ret; + if (len > 4096) { + lwip_win32_platform_diag("pcapifh_alloc_readonly_copy: invalid len: %d\n", len); + while(1); + } + ret = VirtualAlloc(NULL, 4096, MEM_COMMIT, PAGE_READWRITE); + if (ret == NULL) { + lwip_win32_platform_diag("VirtualAlloc failed: %d\n", GetLastError()); + while(1); + } + memcpy(ret, data, len); + if (!VirtualProtect(ret, len, PAGE_READONLY, &oldProtect)) { + lwip_win32_platform_diag("VirtualProtect failed: %d\n", GetLastError()); + while(1); + } + return ret; +} + +void +pcapifh_free_readonly_mem(void *data) +{ + if (!VirtualFree(data, 0, MEM_RELEASE)) { + lwip_win32_platform_diag("VirtualFree(0x%08x) failed: %d\n", data, GetLastError()); + while(1); + } +} + +/** + * Npcap keeps its DLLs in a different directory for compatiblity with winpcap. + * Make sure they get found by adding that directory to the DLL search path. + */ +void pcapifh_init_npcap(void) +{ + char npcap_dir[512]; + unsigned int len; + static char npcap_initialized = 0; + + if (!npcap_initialized) + { + npcap_initialized = 1; + + len = GetSystemDirectory(npcap_dir, 480); + if (!len) { + lwip_win32_platform_diag("Error in GetSystemDirectory: %x", GetLastError()); + return; + } + strcat_s(npcap_dir, 512, "\\Npcap"); + if (SetDllDirectory(npcap_dir) == 0) { + lwip_win32_platform_diag("Error in SetDllDirectory: %x", GetLastError()); + return; + } + } +} + +#else /* WIN32 */ + +/* @todo: add linux/unix implementation? */ + +struct pcapifh_linkstate { + u8_t empty; +}; + +struct pcapifh_linkstate* pcapifh_linkstate_init(char *adapter_name) +{ + LWIP_UNUSED_ARG(adapter_name); + return NULL; +} + +enum pcapifh_link_event pcapifh_linkstate_get(struct pcapifh_linkstate* state) +{ + LWIP_UNUSED_ARG(state); + return PCAPIF_LINKEVENT_UP; +} +void pcapifh_linkstate_close(struct pcapifh_linkstate* state) +{ + LWIP_UNUSED_ARG(state); +} + +void pcapifh_init_npcap(void) +{ +} + +#endif /* WIN32 */ diff --git a/contrib/ports/win32/pcapif_helper.h b/contrib/ports/win32/pcapif_helper.h new file mode 100644 index 00000000000..fd1c52778d1 --- /dev/null +++ b/contrib/ports/win32/pcapif_helper.h @@ -0,0 +1,31 @@ +#ifndef LWIP_PCAPIF_HELPER_H +#define LWIP_PCAPIF_HELPER_H + +#include <stddef.h> + +#ifdef __cplusplus +extern "C" { +#endif + +struct pcapifh_linkstate; + +enum pcapifh_link_event { + PCAPIF_LINKEVENT_UNKNOWN, + PCAPIF_LINKEVENT_UP, + PCAPIF_LINKEVENT_DOWN +}; + +struct pcapifh_linkstate* pcapifh_linkstate_init(char *adapter_name); +enum pcapifh_link_event pcapifh_linkstate_get(struct pcapifh_linkstate* state); +void pcapifh_linkstate_close(struct pcapifh_linkstate* state); + +void *pcapifh_alloc_readonly_copy(void *data, size_t len); +void pcapifh_free_readonly_mem(void *data); + +void pcapifh_init_npcap(void); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_PCAPIF_HELPER_H */ diff --git a/contrib/ports/win32/readme.txt b/contrib/ports/win32/readme.txt new file mode 100644 index 00000000000..87e09d0e1f7 --- /dev/null +++ b/contrib/ports/win32/readme.txt @@ -0,0 +1,26 @@ +lwIP for Win32 + +This is an example port of lwIP for Win32. It uses WinPCAP to send & receive packets. +To compile it, use the MSVC projects in the 'msvc' subdir, the CMake files, or the Makefile +in the 'mingw' subdir. + +For all compilers/build systems: +- you have to set an environment variable PCAP_DIR pointing to the WinPcap Developer's + Pack (containing 'include' and 'lib') + alternatively, place the WinPcap Developer's pack next to the "lwip" folder: + "winpcap\WpdPack" + +You also will have to copy the file 'contrib/examples/example_app/lwipcfg.h.example' to +'contrib/examples/example_app/lwipcfg.h' and modify to suit your needs (WinPcap adapter number, +IP configuration, applications...). + +Included in the contrib\ports\win32 directory is the network interface driver +using the winpcap library. + +lwIP: http://savannah.nongnu.org/projects/lwip/ +WinPCap: https://www.winpcap.org/devel.htm +Visual C++: http://www.microsoft.com/express/download/ + +To compile the unittests (msvc\lwIP_unittests.sln), download check (tested with v0.11.0) from +https://github.com/libcheck/check/releases/ +and place it in a folder "check" next to the "contrib" folder. diff --git a/contrib/ports/win32/sio.c b/contrib/ports/win32/sio.c new file mode 100644 index 00000000000..0b64492bbb2 --- /dev/null +++ b/contrib/ports/win32/sio.c @@ -0,0 +1,304 @@ +/* + * Copyright (c) 2001-2003 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. + * + */ + +#include <lwip/opt.h> +#include <lwip/sys.h> +#include <lwip/sio.h> + +#include <stdio.h> +#include <stdarg.h> + +#ifdef _MSC_VER +#pragma warning (push, 3) +#endif +#include <windows.h> +#ifdef _MSC_VER +#pragma warning (pop) +#endif +#include "lwipcfg.h" + +/** When 1, use COM ports, when 0, use named pipes (for simulation). */ +#ifndef SIO_USE_COMPORT +#define SIO_USE_COMPORT 1 +#endif + +/** If SIO_USE_COMPORT==1, use COMx, if 0, use a pipe (default) */ +#if SIO_USE_COMPORT +#define SIO_DEVICENAME "\\\\.\\COM" +#else +#define SIO_DEVICENAME "\\\\.\\pipe\\lwip" +#endif + +#if SIO_USE_COMPORT +#ifndef SIO_COMPORT_SPEED +#define SIO_COMPORT_SPEED 115200 +#endif +#ifndef SIO_COMPORT_BYTESIZE +#define SIO_COMPORT_BYTESIZE 8 +#endif +#ifndef SIO_COMPORT_STOPBITS +#define SIO_COMPORT_STOPBITS 0 /* ONESTOPBIT */ +#endif +#ifndef SIO_COMPORT_PARITY +#define SIO_COMPORT_PARITY 0 /* NOPARITY */ +#endif +#endif /* SIO_USE_COMPORT */ + +static int sio_abort = 0; + +/* \\.\pipe\lwip0 */ +/* pppd /dev/ttyS0 logfile mylog debug nocrtscts local noauth noccp ms-dns 212.27.54.252 192.168.0.4:192.168.0.5 + */ + +/** + * SIO_DEBUG: Enable debugging for SIO. + */ +#ifndef SIO_DEBUG +#define SIO_DEBUG LWIP_DBG_OFF +#endif + +#if SIO_USE_COMPORT +/** When using a real COM port, set up the + * serial line settings (baudrate etc.) + */ +static BOOL +sio_setup(HANDLE fd) +{ + COMMTIMEOUTS cto; + DCB dcb; + + /* set up baudrate and other communication settings */ + memset(&dcb, 0, sizeof(dcb)); + /* Obtain the DCB structure for the device */ + if (!GetCommState(fd, &dcb)) { + return FALSE; + } + /* Set the new data */ + dcb.BaudRate = SIO_COMPORT_SPEED; + dcb.ByteSize = SIO_COMPORT_BYTESIZE; + dcb.StopBits = 0; /* ONESTOPBIT */ + dcb.Parity = 0; /* NOPARITY */ + dcb.fParity = 0; /* parity is not used */ + /* do not use flow control */ + /*dcb.fOutxDsrFlow = dcb.fDtrControl = 0; + dcb.fOutxCtsFlow = dcb.fRtsControl = 0; + dcb.fErrorChar = dcb.fNull = 0; + dcb.fInX = dcb.fOutX = 0; + dcb.XonChar = dcb.XoffChar = 0; + dcb.XonLim = dcb.XoffLim = 100;*/ + + /* Set the new DCB structure */ + if (!SetCommState(fd, &dcb)) { + return FALSE; + } + + memset(&cto, 0, sizeof(cto)); + if(!GetCommTimeouts(fd, &cto)) + { + return FALSE; + } + /* change read timeout, leave write timeout as it is */ + cto.ReadIntervalTimeout = 1; + cto.ReadTotalTimeoutMultiplier = 0; + cto.ReadTotalTimeoutConstant = 1; /* 1 ms */ + if(!SetCommTimeouts(fd, &cto)) { + return FALSE; + } + + return TRUE; +} +#endif /* SIO_USE_COMPORT */ + +/** + * Opens a serial device for communication. + * + * @param devnum device number + * @return handle to serial device if successful, NULL otherwise + */ +sio_fd_t sio_open(u8_t devnum) +{ + HANDLE fileHandle = INVALID_HANDLE_VALUE; + CHAR fileName[256]; + LWIP_DEBUGF(SIO_DEBUG, ("sio_open(%lu)\n", (DWORD)devnum)); +#if SIO_USE_COMPORT + snprintf(fileName, 255, SIO_DEVICENAME"%lu", (DWORD)(devnum)); +#else /* SIO_USE_COMPORT */ + snprintf(fileName, 255, SIO_DEVICENAME"%lu", (DWORD)(devnum & ~1)); + if ((devnum & 1) == 0) { + fileHandle = CreateNamedPipeA(fileName, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_NOWAIT, + PIPE_UNLIMITED_INSTANCES, 102400, 102400, 100, NULL); + } else +#endif /* SIO_USE_COMPORT */ + { + fileHandle = CreateFileA(fileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); + } + if (fileHandle != INVALID_HANDLE_VALUE) { + sio_abort = 0; +#if !SIO_USE_COMPORT + if (devnum & 1) { + DWORD mode = PIPE_NOWAIT; + if (!SetNamedPipeHandleState(fileHandle, &mode, NULL, NULL)) { + LWIP_DEBUGF(SIO_DEBUG, ("sio_open(%lu): SetNamedPipeHandleState failed. GetLastError() returns %d\n", + (DWORD)devnum, GetLastError())); + } + } else +#endif /* !SIO_USE_COMPORT */ + { + FlushFileBuffers(fileHandle); + } +#if SIO_USE_COMPORT + if(!sio_setup(fileHandle)) { + CloseHandle(fileHandle); + LWIP_DEBUGF(SIO_DEBUG, ("sio_open(%lu): sio_setup failed. GetLastError() returns %lu\n", + (DWORD)devnum, GetLastError())); + return NULL; + } +#endif /* SIO_USE_COMPORT */ + LWIP_DEBUGF(SIO_DEBUG, ("sio_open: file \"%s\" successfully opened.\n", fileName)); + printf("sio_open: file \"%s\" (%d) successfully opened: 0x%08x\n", fileName, devnum, LWIP_PTR_NUMERIC_CAST(unsigned int, fileHandle)); + return (sio_fd_t)(fileHandle); + } + LWIP_DEBUGF(SIO_DEBUG, ("sio_open(%lu) failed. GetLastError() returns %lu\n", + (DWORD)devnum, GetLastError())); + printf("sio_open(%lu) failed. GetLastError() returns %lu\n", + (DWORD)devnum, GetLastError()); + return NULL; +} + +/** + * Sends a single character to the serial device. + * + * @param c character to send + * @param fd serial device handle + * + * @note This function will block until the character can be sent. + */ +void sio_send(u8_t c, sio_fd_t fd) +{ + DWORD dwNbBytesWritten = 0; + LWIP_DEBUGF(SIO_DEBUG, ("sio_send(%lu)\n", (DWORD)c)); + while ((!WriteFile((HANDLE)(fd), &c, 1, &dwNbBytesWritten, NULL)) || (dwNbBytesWritten < 1)) { + } +} + +/** + * Receives a single character from the serial device. + * + * @param fd serial device handle + * + * @note This function will block until a character is received. + */ +u8_t sio_recv(sio_fd_t fd) +{ + DWORD dwNbBytesReadden = 0; + u8_t byte = 0; + LWIP_DEBUGF(SIO_DEBUG, ("sio_recv()\n")); + while ((sio_abort == 0) && ((!ReadFile((HANDLE)(fd), &byte, 1, &dwNbBytesReadden, NULL)) || (dwNbBytesReadden < 1))); + LWIP_DEBUGF(SIO_DEBUG, ("sio_recv()=%lu\n", (DWORD)byte)); + return byte; +} + +/** + * Reads from the serial device. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received - may be 0 if aborted by sio_read_abort + * + * @note This function will block until data can be received. The blocking + * can be cancelled by calling sio_read_abort(). + */ +u32_t sio_read(sio_fd_t fd, u8_t* data, u32_t len) +{ + BOOL ret; + DWORD dwNbBytesReadden = 0; + LWIP_DEBUGF(SIO_DEBUG, ("sio_read()...\n")); + ret = ReadFile((HANDLE)(fd), data, len, &dwNbBytesReadden, NULL); + LWIP_DEBUGF(SIO_DEBUG, ("sio_read()=%lu bytes -> %d\n", dwNbBytesReadden, ret)); + LWIP_UNUSED_ARG(ret); + return dwNbBytesReadden; +} + +/** + * Tries to read from the serial device. Same as sio_read but returns + * immediately if no data is available and never blocks. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received + */ +u32_t sio_tryread(sio_fd_t fd, u8_t* data, u32_t len) +{ + /* @todo: implement non-blocking read */ + BOOL ret; + DWORD dwNbBytesReadden = 0; + LWIP_DEBUGF(SIO_DEBUG, ("sio_read()...\n")); + ret = ReadFile((HANDLE)(fd), data, len, &dwNbBytesReadden, NULL); + LWIP_DEBUGF(SIO_DEBUG, ("sio_read()=%lu bytes -> %d\n", dwNbBytesReadden, ret)); + LWIP_UNUSED_ARG(ret); + return dwNbBytesReadden; +} + +/** + * Writes to the serial device. + * + * @param fd serial device handle + * @param data pointer to data to send + * @param len length (in bytes) of data to send + * @return number of bytes actually sent + * + * @note This function will block until all data can be sent. + */ +u32_t sio_write(sio_fd_t fd, const u8_t* data, u32_t len) +{ + BOOL ret; + DWORD dwNbBytesWritten = 0; + LWIP_DEBUGF(SIO_DEBUG, ("sio_write()...\n")); + ret = WriteFile((HANDLE)(fd), data, len, &dwNbBytesWritten, NULL); + LWIP_DEBUGF(SIO_DEBUG, ("sio_write()=%lu bytes -> %d\n", dwNbBytesWritten, ret)); + LWIP_UNUSED_ARG(ret); + return dwNbBytesWritten; +} + +/** + * Aborts a blocking sio_read() call. + * @todo: This currently ignores fd and aborts all reads + * + * @param fd serial device handle + */ +void sio_read_abort(sio_fd_t fd) +{ + LWIP_UNUSED_ARG(fd); + LWIP_DEBUGF(SIO_DEBUG, ("sio_read_abort() !!!!!...\n")); + sio_abort = 1; + return; +} diff --git a/contrib/ports/win32/sys_arch.c b/contrib/ports/win32/sys_arch.c new file mode 100644 index 00000000000..84f5775edf3 --- /dev/null +++ b/contrib/ports/win32/sys_arch.c @@ -0,0 +1,782 @@ +/* + * Copyright (c) 2001-2003 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> + * Simon Goldschmidt + * + */ + +#include <stdlib.h> +#include <stdio.h> /* sprintf() for task names */ + +#ifdef _MSC_VER +#pragma warning (push, 3) +#endif +#include <windows.h> +#ifdef _MSC_VER +#pragma warning (pop) +#endif +#include <time.h> + +#include <lwip/opt.h> +#include <lwip/arch.h> +#include <lwip/stats.h> +#include <lwip/debug.h> +#include <lwip/sys.h> +#include <lwip/tcpip.h> + +/** Set this to 1 to enable assertion checks that SYS_ARCH_PROTECT() is only + * called once in a call stack (calling it nested might cause trouble in some + * implementations, so let's avoid this in core code as long as we can). + */ +#ifndef LWIP_SYS_ARCH_CHECK_NESTED_PROTECT +#define LWIP_SYS_ARCH_CHECK_NESTED_PROTECT 1 +#endif + +/** Set this to 1 to enable assertion checks that SYS_ARCH_PROTECT() is *not* + * called before functions potentiolly involving the OS scheduler. + * + * This scheme is currently broken only for non-core-locking when waking up + * threads waiting on a socket via select/poll. + */ +#ifndef LWIP_SYS_ARCH_CHECK_SCHEDULING_UNPROTECTED +#define LWIP_SYS_ARCH_CHECK_SCHEDULING_UNPROTECTED LWIP_TCPIP_CORE_LOCKING +#endif + +#define LWIP_WIN32_SYS_ARCH_ENABLE_PROTECT_COUNTER (LWIP_SYS_ARCH_CHECK_NESTED_PROTECT || LWIP_SYS_ARCH_CHECK_SCHEDULING_UNPROTECTED) + +/* These functions are used from NO_SYS also, for precise timer triggering */ +static LARGE_INTEGER freq, sys_start_time; +#define SYS_INITIALIZED() (freq.QuadPart != 0) + +static DWORD netconn_sem_tls_index; + +static HCRYPTPROV hcrypt; + +static void +sys_win_rand_init(void) +{ + if (!CryptAcquireContext(&hcrypt, NULL, NULL, PROV_RSA_FULL, 0)) { + DWORD err = GetLastError(); + LWIP_PLATFORM_DIAG(("CryptAcquireContext failed with error %d, trying to create NEWKEYSET", (int)err)); + if(!CryptAcquireContext(&hcrypt, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET)) { + char errbuf[128]; + err = GetLastError(); + snprintf(errbuf, sizeof(errbuf), "CryptAcquireContext failed with error %d", (int)err); + LWIP_UNUSED_ARG(err); + LWIP_ASSERT(errbuf, 0); + } + } +} + +unsigned int +lwip_port_rand(void) +{ + u32_t ret; + if (CryptGenRandom(hcrypt, sizeof(ret), (BYTE*)&ret)) { + return ret; + } + /* maybe CryptAcquireContext has not been called... */ + sys_win_rand_init(); + if (CryptGenRandom(hcrypt, sizeof(ret), (BYTE*)&ret)) { + return ret; + } + LWIP_ASSERT("CryptGenRandom failed", 0); + return 0; +} + +static void +sys_init_timing(void) +{ + QueryPerformanceFrequency(&freq); + QueryPerformanceCounter(&sys_start_time); +} + +static LONGLONG +sys_get_ms_longlong(void) +{ + LONGLONG ret; + LARGE_INTEGER now; +#if NO_SYS + if (!SYS_INITIALIZED()) { + sys_init(); + LWIP_ASSERT("initialization failed", SYS_INITIALIZED()); + } +#endif /* NO_SYS */ + QueryPerformanceCounter(&now); + ret = now.QuadPart-sys_start_time.QuadPart; + return (u32_t)(((ret)*1000)/freq.QuadPart); +} + +u32_t +sys_jiffies(void) +{ + return (u32_t)sys_get_ms_longlong(); +} + +u32_t +sys_now(void) +{ + u32_t now = (u32_t)sys_get_ms_longlong(); +#ifdef LWIP_FUZZ_SYS_NOW + now += sys_now_offset; +#endif + return now; +} + +CRITICAL_SECTION critSec; +#if LWIP_WIN32_SYS_ARCH_ENABLE_PROTECT_COUNTER +static int protection_depth; +#endif + +static void +InitSysArchProtect(void) +{ + InitializeCriticalSection(&critSec); +} + +sys_prot_t +sys_arch_protect(void) +{ +#if NO_SYS + if (!SYS_INITIALIZED()) { + sys_init(); + LWIP_ASSERT("initialization failed", SYS_INITIALIZED()); + } +#endif + EnterCriticalSection(&critSec); +#if LWIP_SYS_ARCH_CHECK_NESTED_PROTECT + LWIP_ASSERT("nested SYS_ARCH_PROTECT", protection_depth == 0); +#endif +#if LWIP_WIN32_SYS_ARCH_ENABLE_PROTECT_COUNTER + protection_depth++; +#endif + return 0; +} + +void +sys_arch_unprotect(sys_prot_t pval) +{ + LWIP_UNUSED_ARG(pval); +#if LWIP_SYS_ARCH_CHECK_NESTED_PROTECT + LWIP_ASSERT("missing SYS_ARCH_PROTECT", protection_depth == 1); +#else + LWIP_ASSERT("missing SYS_ARCH_PROTECT", protection_depth > 0); +#endif +#if LWIP_WIN32_SYS_ARCH_ENABLE_PROTECT_COUNTER + protection_depth--; +#endif + LeaveCriticalSection(&critSec); +} + +#if LWIP_SYS_ARCH_CHECK_SCHEDULING_UNPROTECTED +/** This checks that SYS_ARCH_PROTECT() hasn't been called by protecting + * and then checking the level + */ +static void +sys_arch_check_not_protected(void) +{ + sys_arch_protect(); + LWIP_ASSERT("SYS_ARCH_PROTECT before scheduling", protection_depth == 1); + sys_arch_unprotect(0); +} +#else +#define sys_arch_check_not_protected() +#endif + +static void +msvc_sys_init(void) +{ + sys_win_rand_init(); + sys_init_timing(); + InitSysArchProtect(); + netconn_sem_tls_index = TlsAlloc(); + LWIP_ASSERT("TlsAlloc failed", netconn_sem_tls_index != TLS_OUT_OF_INDEXES); +} + +void +sys_init(void) +{ + msvc_sys_init(); +} + +#if !NO_SYS + +struct threadlist { + lwip_thread_fn function; + void *arg; + DWORD id; + struct threadlist *next; +}; + +static struct threadlist *lwip_win32_threads = NULL; + +err_t +sys_sem_new(sys_sem_t *sem, u8_t count) +{ + HANDLE new_sem = NULL; + + LWIP_ASSERT("sem != NULL", sem != NULL); + + new_sem = CreateSemaphore(0, count, 100000, 0); + LWIP_ASSERT("Error creating semaphore", new_sem != NULL); + if(new_sem != NULL) { + if (SYS_INITIALIZED()) { + SYS_ARCH_LOCKED(SYS_STATS_INC_USED(sem)); + } else { + SYS_STATS_INC_USED(sem); + } +#if LWIP_STATS && SYS_STATS + LWIP_ASSERT("sys_sem_new() counter overflow", lwip_stats.sys.sem.used != 0); +#endif /* LWIP_STATS && SYS_STATS*/ + sem->sem = new_sem; + return ERR_OK; + } + + /* failed to allocate memory... */ + if (SYS_INITIALIZED()) { + SYS_ARCH_LOCKED(SYS_STATS_INC(sem.err)); + } else { + SYS_STATS_INC(sem.err); + } + sem->sem = NULL; + return ERR_MEM; +} + +void +sys_sem_free(sys_sem_t *sem) +{ + /* parameter check */ + LWIP_ASSERT("sem != NULL", sem != NULL); + LWIP_ASSERT("sem->sem != NULL", sem->sem != NULL); + LWIP_ASSERT("sem->sem != INVALID_HANDLE_VALUE", sem->sem != INVALID_HANDLE_VALUE); + CloseHandle(sem->sem); + + SYS_ARCH_LOCKED(SYS_STATS_DEC(sem.used)); +#if LWIP_STATS && SYS_STATS + LWIP_ASSERT("sys_sem_free() closed more than created", lwip_stats.sys.sem.used != (u16_t)-1); +#endif /* LWIP_STATS && SYS_STATS */ + sem->sem = NULL; +} + +u32_t +sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout) +{ + DWORD ret; + LONGLONG starttime, endtime; + LWIP_ASSERT("sem != NULL", sem != NULL); + LWIP_ASSERT("sem->sem != NULL", sem->sem != NULL); + LWIP_ASSERT("sem->sem != INVALID_HANDLE_VALUE", sem->sem != INVALID_HANDLE_VALUE); + if (!timeout) { + /* wait infinite */ + starttime = sys_get_ms_longlong(); + ret = WaitForSingleObject(sem->sem, INFINITE); + LWIP_ASSERT("Error waiting for semaphore", ret == WAIT_OBJECT_0); + endtime = sys_get_ms_longlong(); + /* return the time we waited for the sem */ + return (u32_t)(endtime - starttime); + } else { + starttime = sys_get_ms_longlong(); + ret = WaitForSingleObject(sem->sem, timeout); + LWIP_ASSERT("Error waiting for semaphore", (ret == WAIT_OBJECT_0) || (ret == WAIT_TIMEOUT)); + if (ret == WAIT_OBJECT_0) { + endtime = sys_get_ms_longlong(); + /* return the time we waited for the sem */ + return (u32_t)(endtime - starttime); + } else { + /* timeout */ + return SYS_ARCH_TIMEOUT; + } + } +} + +void +sys_sem_signal(sys_sem_t *sem) +{ + BOOL ret; + sys_arch_check_not_protected(); + LWIP_ASSERT("sem != NULL", sem != NULL); + LWIP_ASSERT("sem->sem != NULL", sem->sem != NULL); + LWIP_ASSERT("sem->sem != INVALID_HANDLE_VALUE", sem->sem != INVALID_HANDLE_VALUE); + ret = ReleaseSemaphore(sem->sem, 1, NULL); + LWIP_ASSERT("Error releasing semaphore", ret != 0); + LWIP_UNUSED_ARG(ret); +} + +err_t +sys_mutex_new(sys_mutex_t *mutex) +{ + HANDLE new_mut = NULL; + + LWIP_ASSERT("mutex != NULL", mutex != NULL); + + new_mut = CreateMutex(NULL, FALSE, NULL); + LWIP_ASSERT("Error creating mutex", new_mut != NULL); + if (new_mut != NULL) { + SYS_ARCH_LOCKED(SYS_STATS_INC_USED(mutex)); +#if LWIP_STATS && SYS_STATS + LWIP_ASSERT("sys_mutex_new() counter overflow", lwip_stats.sys.mutex.used != 0); +#endif /* LWIP_STATS && SYS_STATS*/ + mutex->mut = new_mut; + return ERR_OK; + } + + /* failed to allocate memory... */ + SYS_ARCH_LOCKED(SYS_STATS_INC(mutex.err)); + mutex->mut = NULL; + return ERR_MEM; +} + +void +sys_mutex_free(sys_mutex_t *mutex) +{ + /* parameter check */ + LWIP_ASSERT("mutex != NULL", mutex != NULL); + LWIP_ASSERT("mutex->mut != NULL", mutex->mut != NULL); + LWIP_ASSERT("mutex->mut != INVALID_HANDLE_VALUE", mutex->mut != INVALID_HANDLE_VALUE); + CloseHandle(mutex->mut); + + SYS_ARCH_LOCKED(SYS_STATS_DEC(mutex.used)); +#if LWIP_STATS && SYS_STATS + LWIP_ASSERT("sys_mutex_free() closed more than created", lwip_stats.sys.mutex.used != (u16_t)-1); +#endif /* LWIP_STATS && SYS_STATS */ + mutex->mut = NULL; +} + +void sys_mutex_lock(sys_mutex_t *mutex) +{ + DWORD ret; + LWIP_ASSERT("mutex != NULL", mutex != NULL); + LWIP_ASSERT("mutex->mut != NULL", mutex->mut != NULL); + LWIP_ASSERT("mutex->mut != INVALID_HANDLE_VALUE", mutex->mut != INVALID_HANDLE_VALUE); + /* wait infinite */ + ret = WaitForSingleObject(mutex->mut, INFINITE); + LWIP_ASSERT("Error waiting for mutex", ret == WAIT_OBJECT_0); + LWIP_UNUSED_ARG(ret); +} + +void +sys_mutex_unlock(sys_mutex_t *mutex) +{ + sys_arch_check_not_protected(); + LWIP_ASSERT("mutex != NULL", mutex != NULL); + LWIP_ASSERT("mutex->mut != NULL", mutex->mut != NULL); + LWIP_ASSERT("mutex->mut != INVALID_HANDLE_VALUE", mutex->mut != INVALID_HANDLE_VALUE); + /* wait infinite */ + if (!ReleaseMutex(mutex->mut)) { + LWIP_ASSERT("Error releasing mutex", 0); + } +} + + +#ifdef _MSC_VER +const DWORD MS_VC_EXCEPTION=0x406D1388; +#pragma pack(push,8) +typedef struct tagTHREADNAME_INFO +{ + DWORD dwType; /* Must be 0x1000. */ + LPCSTR szName; /* Pointer to name (in user addr space). */ + DWORD dwThreadID; /* Thread ID (-1=caller thread). */ + DWORD dwFlags; /* Reserved for future use, must be zero. */ +} THREADNAME_INFO; +#pragma pack(pop) + +static void +SetThreadName(DWORD dwThreadID, const char* threadName) +{ + THREADNAME_INFO info; + info.dwType = 0x1000; + info.szName = threadName; + info.dwThreadID = dwThreadID; + info.dwFlags = 0; + + __try { + RaiseException(MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info); + } + __except(EXCEPTION_EXECUTE_HANDLER) { + } +} +#else /* _MSC_VER */ +static void +SetThreadName(DWORD dwThreadID, const char* threadName) +{ + LWIP_UNUSED_ARG(dwThreadID); + LWIP_UNUSED_ARG(threadName); +} +#endif /* _MSC_VER */ + +static DWORD WINAPI +sys_thread_function(void* arg) +{ + struct threadlist* t = (struct threadlist*)arg; +#if LWIP_NETCONN_SEM_PER_THREAD + sys_arch_netconn_sem_alloc(); +#endif + t->function(t->arg); +#if LWIP_NETCONN_SEM_PER_THREAD + sys_arch_netconn_sem_free(); +#endif + return 0; +} + +sys_thread_t +sys_thread_new(const char *name, lwip_thread_fn function, void *arg, int stacksize, int prio) +{ + struct threadlist *new_thread; + HANDLE h; + SYS_ARCH_DECL_PROTECT(lev); + + LWIP_UNUSED_ARG(name); + LWIP_UNUSED_ARG(stacksize); + LWIP_UNUSED_ARG(prio); + + new_thread = (struct threadlist*)malloc(sizeof(struct threadlist)); + LWIP_ASSERT("new_thread != NULL", new_thread != NULL); + if (new_thread != NULL) { + new_thread->function = function; + new_thread->arg = arg; + SYS_ARCH_PROTECT(lev); + new_thread->next = lwip_win32_threads; + lwip_win32_threads = new_thread; + + h = CreateThread(0, 0, sys_thread_function, new_thread, 0, &(new_thread->id)); + LWIP_ASSERT("h != 0", h != 0); + LWIP_ASSERT("h != -1", h != INVALID_HANDLE_VALUE); + LWIP_UNUSED_ARG(h); + SetThreadName(new_thread->id, name); + + SYS_ARCH_UNPROTECT(lev); + return new_thread->id; + } + return 0; +} + +#if !NO_SYS +#if LWIP_TCPIP_CORE_LOCKING + +static DWORD lwip_core_lock_holder_thread_id; + +void +sys_lock_tcpip_core(void) +{ + sys_mutex_lock(&lock_tcpip_core); + lwip_core_lock_holder_thread_id = GetCurrentThreadId(); +} + +void +sys_unlock_tcpip_core(void) +{ + lwip_core_lock_holder_thread_id = 0; + sys_mutex_unlock(&lock_tcpip_core); +} +#endif /* LWIP_TCPIP_CORE_LOCKING */ + +static DWORD lwip_tcpip_thread_id; + +void +sys_mark_tcpip_thread(void) +{ + lwip_tcpip_thread_id = GetCurrentThreadId(); +} + +void +sys_check_core_locking(void) +{ + /* Embedded systems should check we are NOT in an interrupt context here */ + + if (lwip_tcpip_thread_id != 0) { + DWORD current_thread_id = GetCurrentThreadId(); + +#if LWIP_TCPIP_CORE_LOCKING + LWIP_ASSERT("Function called without core lock", current_thread_id == lwip_core_lock_holder_thread_id); +#else /* LWIP_TCPIP_CORE_LOCKING */ + LWIP_ASSERT("Function called from wrong thread", current_thread_id == lwip_tcpip_thread_id); +#endif /* LWIP_TCPIP_CORE_LOCKING */ + LWIP_UNUSED_ARG(current_thread_id); /* for LWIP_NOASSERT */ + } +} +#endif /* !NO_SYS */ + +err_t +sys_mbox_new(sys_mbox_t *mbox, int size) +{ + LWIP_ASSERT("mbox != NULL", mbox != NULL); + LWIP_UNUSED_ARG(size); + + mbox->sem = CreateSemaphore(0, 0, MAX_QUEUE_ENTRIES, 0); + LWIP_ASSERT("Error creating semaphore", mbox->sem != NULL); + if (mbox->sem == NULL) { + SYS_ARCH_LOCKED(SYS_STATS_INC(mbox.err)); + return ERR_MEM; + } + memset(&mbox->q_mem, 0, sizeof(u32_t)*MAX_QUEUE_ENTRIES); + mbox->head = 0; + mbox->tail = 0; + SYS_ARCH_LOCKED(SYS_STATS_INC_USED(mbox)); +#if LWIP_STATS && SYS_STATS + LWIP_ASSERT("sys_mbox_new() counter overflow", lwip_stats.sys.mbox.used != 0); +#endif /* LWIP_STATS && SYS_STATS */ + return ERR_OK; +} + +void +sys_mbox_free(sys_mbox_t *mbox) +{ + /* parameter check */ + LWIP_ASSERT("mbox != NULL", mbox != NULL); + LWIP_ASSERT("mbox->sem != NULL", mbox->sem != NULL); + LWIP_ASSERT("mbox->sem != INVALID_HANDLE_VALUE", mbox->sem != INVALID_HANDLE_VALUE); + + CloseHandle(mbox->sem); + + SYS_STATS_DEC(mbox.used); +#if LWIP_STATS && SYS_STATS + LWIP_ASSERT( "sys_mbox_free() ", lwip_stats.sys.mbox.used != (u16_t)-1); +#endif /* LWIP_STATS && SYS_STATS */ + mbox->sem = NULL; +} + +void +sys_mbox_post(sys_mbox_t *q, void *msg) +{ + BOOL ret; + SYS_ARCH_DECL_PROTECT(lev); + sys_arch_check_not_protected(); + + /* parameter check */ + LWIP_ASSERT("q != SYS_MBOX_NULL", q != SYS_MBOX_NULL); + LWIP_ASSERT("q->sem != NULL", q->sem != NULL); + LWIP_ASSERT("q->sem != INVALID_HANDLE_VALUE", q->sem != INVALID_HANDLE_VALUE); + + SYS_ARCH_PROTECT(lev); + q->q_mem[q->head] = msg; + q->head++; + if (q->head >= MAX_QUEUE_ENTRIES) { + q->head = 0; + } + LWIP_ASSERT("mbox is full!", q->head != q->tail); + ret = ReleaseSemaphore(q->sem, 1, 0); + LWIP_ASSERT("Error releasing sem", ret != 0); + LWIP_UNUSED_ARG(ret); + + SYS_ARCH_UNPROTECT(lev); +} + +err_t +sys_mbox_trypost(sys_mbox_t *q, void *msg) +{ + u32_t new_head; + BOOL ret; + SYS_ARCH_DECL_PROTECT(lev); + sys_arch_check_not_protected(); + + /* parameter check */ + LWIP_ASSERT("q != SYS_MBOX_NULL", q != SYS_MBOX_NULL); + LWIP_ASSERT("q->sem != NULL", q->sem != NULL); + LWIP_ASSERT("q->sem != INVALID_HANDLE_VALUE", q->sem != INVALID_HANDLE_VALUE); + + SYS_ARCH_PROTECT(lev); + + new_head = q->head + 1; + if (new_head >= MAX_QUEUE_ENTRIES) { + new_head = 0; + } + if (new_head == q->tail) { + SYS_ARCH_UNPROTECT(lev); + return ERR_MEM; + } + + q->q_mem[q->head] = msg; + q->head = new_head; + LWIP_ASSERT("mbox is full!", q->head != q->tail); + ret = ReleaseSemaphore(q->sem, 1, 0); + LWIP_ASSERT("Error releasing sem", ret != 0); + LWIP_UNUSED_ARG(ret); + + SYS_ARCH_UNPROTECT(lev); + return ERR_OK; +} + +err_t +sys_mbox_trypost_fromisr(sys_mbox_t *q, void *msg) +{ + return sys_mbox_trypost(q, msg); +} + +u32_t +sys_arch_mbox_fetch(sys_mbox_t *q, void **msg, u32_t timeout) +{ + DWORD ret; + LONGLONG starttime, endtime; + SYS_ARCH_DECL_PROTECT(lev); + + /* parameter check */ + LWIP_ASSERT("q != SYS_MBOX_NULL", q != SYS_MBOX_NULL); + LWIP_ASSERT("q->sem != NULL", q->sem != NULL); + LWIP_ASSERT("q->sem != INVALID_HANDLE_VALUE", q->sem != INVALID_HANDLE_VALUE); + + if (timeout == 0) { + timeout = INFINITE; + } + starttime = sys_get_ms_longlong(); + ret = WaitForSingleObject(q->sem, timeout); + if (ret == WAIT_OBJECT_0) { + SYS_ARCH_PROTECT(lev); + if (msg != NULL) { + *msg = q->q_mem[q->tail]; + } + + q->tail++; + if (q->tail >= MAX_QUEUE_ENTRIES) { + q->tail = 0; + } + SYS_ARCH_UNPROTECT(lev); + endtime = sys_get_ms_longlong(); + return (u32_t)(endtime - starttime); + } else { + LWIP_ASSERT("Error waiting for sem", ret == WAIT_TIMEOUT); + if (msg != NULL) { + *msg = NULL; + } + + return SYS_ARCH_TIMEOUT; + } +} + +u32_t +sys_arch_mbox_tryfetch(sys_mbox_t *q, void **msg) +{ + DWORD ret; + SYS_ARCH_DECL_PROTECT(lev); + + /* parameter check */ + LWIP_ASSERT("q != SYS_MBOX_NULL", q != SYS_MBOX_NULL); + LWIP_ASSERT("q->sem != NULL", q->sem != NULL); + LWIP_ASSERT("q->sem != INVALID_HANDLE_VALUE", q->sem != INVALID_HANDLE_VALUE); + + ret = WaitForSingleObject(q->sem, 0); + if (ret == WAIT_OBJECT_0) { + SYS_ARCH_PROTECT(lev); + if (msg != NULL) { + *msg = q->q_mem[q->tail]; + } + + q->tail++; + if (q->tail >= MAX_QUEUE_ENTRIES) { + q->tail = 0; + } + SYS_ARCH_UNPROTECT(lev); + return 0; + } else { + LWIP_ASSERT("Error waiting for sem", ret == WAIT_TIMEOUT); + if (msg != NULL) { + *msg = NULL; + } + + return SYS_MBOX_EMPTY; + } +} + +#if LWIP_NETCONN_SEM_PER_THREAD +sys_sem_t* +sys_arch_netconn_sem_get(void) +{ + LPVOID tls_data = TlsGetValue(netconn_sem_tls_index); + return (sys_sem_t*)tls_data; +} + +void +sys_arch_netconn_sem_alloc(void) +{ + sys_sem_t *sem; + err_t err; + BOOL done; + + sem = (sys_sem_t*)malloc(sizeof(sys_sem_t)); + LWIP_ASSERT("failed to allocate memory for TLS semaphore", sem != NULL); + err = sys_sem_new(sem, 0); + LWIP_ASSERT("failed to initialise TLS semaphore", err == ERR_OK); + done = TlsSetValue(netconn_sem_tls_index, sem); + LWIP_UNUSED_ARG(done); + LWIP_ASSERT("failed to initialise TLS semaphore storage", done == TRUE); +} + +void +sys_arch_netconn_sem_free(void) +{ + LPVOID tls_data = TlsGetValue(netconn_sem_tls_index); + if (tls_data != NULL) { + BOOL done; + free(tls_data); + done = TlsSetValue(netconn_sem_tls_index, NULL); + LWIP_UNUSED_ARG(done); + LWIP_ASSERT("failed to de-init TLS semaphore storage", done == TRUE); + } +} +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + +#endif /* !NO_SYS */ + +/* get keyboard state to terminate the debug app on any kbhit event using win32 API */ +int +lwip_win32_keypressed(void) +{ + INPUT_RECORD rec; + DWORD num = 0; + HANDLE h = GetStdHandle(STD_INPUT_HANDLE); + BOOL ret = PeekConsoleInput(h, &rec, 1, &num); + if (ret && num) { + ReadConsoleInput(h, &rec, 1, &num); + if (rec.EventType == KEY_EVENT) { + if (rec.Event.KeyEvent.bKeyDown) { + /* not a special key? */ + if (rec.Event.KeyEvent.uChar.AsciiChar != 0) { + return 1; + } + } + } + } + return 0; +} + +#include <stdarg.h> + +/* This is an example implementation for LWIP_PLATFORM_DIAG: + * format a string and pass it to your output function. + */ +void +lwip_win32_platform_diag(const char *format, ...) +{ + va_list ap; + /* get the varargs */ + va_start(ap, format); + /* print via varargs; to use another output function, you could use + vsnprintf here */ + vprintf(format, ap); + va_end(ap); +} |
