Introduction of sequential-API build variant, better thread safety (lwIP only)
This commit is contained in:
75
Makefile
75
Makefile
@@ -116,7 +116,7 @@ LIBZT_INCLUDES+=-Iinclude \
|
||||
# NS_ Configuration options for userspace network stack
|
||||
|
||||
ifeq ($(ZT_DEBUG),1)
|
||||
ZT_FLAGS+=-DZT_TRACE
|
||||
ZT_DEFS+=-DZT_TRACE
|
||||
CFLAGS+=-Wall -g -pthread
|
||||
STRIP=echo
|
||||
else
|
||||
@@ -125,7 +125,7 @@ else
|
||||
STRIP=strip
|
||||
endif
|
||||
ifeq ($(LIBZT_DEBUG),1)
|
||||
LIBZT_FLAGS+=-DLIBZT_DEBUG
|
||||
LIBZT_DEFS+=-DLIBZT_DEBUG
|
||||
endif
|
||||
ifeq ($(NS_DEBUG),1)
|
||||
# specified in stack configuration section
|
||||
@@ -147,8 +147,8 @@ ifeq ($(SDK_JNI), 1)
|
||||
endif
|
||||
|
||||
CXXFLAGS=$(CFLAGS) -Wno-format -fno-rtti -std=c++11
|
||||
ZT_FLAGS+=-DZT_SDK -DZT_SOFTWARE_UPDATE_DEFAULT="\"disable\""
|
||||
LIBZT_FLAGS+=
|
||||
ZT_DEFS+=-DZT_SDK -DZT_SOFTWARE_UPDATE_DEFAULT="\"disable\""
|
||||
LIBZT_DEFS+=
|
||||
LIBZT_FILES:=src/VirtualTap.cpp src/libzt.cpp src/Utilities.cpp
|
||||
STATIC_LIB=$(BUILD)/libzt.a
|
||||
|
||||
@@ -166,22 +166,22 @@ endif
|
||||
ifeq ($(STACK_PICO),1)
|
||||
# picoTCP default protocol versions
|
||||
ifeq ($(NS_DEBUG),1)
|
||||
STACK_FLAGS+=
|
||||
STACK_DEFS+=
|
||||
endif
|
||||
ifeq ($(LIBZT_IPV4)$(LIBZT_IPV6),1)
|
||||
ifeq ($(LIBZT_IPV4),1)
|
||||
STACK_DRIVER_FLAGS+=-DLIBZT_IPV4
|
||||
STACK_FLAGS+=IPV4=1
|
||||
STACK_DRIVER_DEFS+=-DLIBZT_IPV4
|
||||
STACK_DEFS+=IPV4=1
|
||||
endif
|
||||
ifeq ($(LIBZT_IPV6),1)
|
||||
STACK_DRIVER_FLAGS+=-DLIBZT_IPV6
|
||||
STACK_FLAGS+=IPV6=1
|
||||
STACK_DRIVER_DEFS+=-DLIBZT_IPV6
|
||||
STACK_DEFS+=IPV6=1
|
||||
endif
|
||||
else
|
||||
STACK_DRIVER_FLAGS+=-DLIBZT_IPV4 -DLIBZT_IPV6
|
||||
STACK_FLAGS+=IPV6=1 IPV4=1
|
||||
STACK_DRIVER_DEFS+=-DLIBZT_IPV4 -DLIBZT_IPV6
|
||||
STACK_DEFS+=IPV6=1 IPV4=1
|
||||
endif
|
||||
STACK_DRIVER_FLAGS+=-DSTACK_PICO
|
||||
STACK_DRIVER_DEFS+=-DSTACK_PICO
|
||||
STACK_LIB:=libpicotcp.a
|
||||
STACK_DIR:=ext/picotcp
|
||||
STACK_LIB:=$(STACK_DIR)/build/lib/$(STACK_LIB)
|
||||
@@ -193,23 +193,23 @@ endif
|
||||
ifeq ($(STACK_LWIP),1)
|
||||
# lwIP default protocol versions
|
||||
ifeq ($(NS_DEBUG),1)
|
||||
STACK_FLAGS+=LWIP_DEBUG=1
|
||||
STACK_DEFS+=LWIP_DEBUG=1
|
||||
endif
|
||||
ifeq ($(LIBZT_IPV4)$(LIBZT_IPV6),1)
|
||||
ifeq ($(LIBZT_IPV4),1)
|
||||
STACK_DRIVER_FLAGS+=-DLIBZT_IPV4 -DLWIP_IPV4=1
|
||||
STACK_FLAGS+=LIBZT_IPV4=1
|
||||
STACK_DRIVER_DEFS+=-DLIBZT_IPV4 -DLWIP_IPV4=1
|
||||
STACK_DEFS+=LIBZT_IPV4=1
|
||||
endif
|
||||
ifeq ($(LIBZT_IPV6),1)
|
||||
STACK_DRIVER_FLAGS+=-DLIBZT_IPV6 -DLWIP_IPV6=1
|
||||
STACK_FLAGS+=LIBZT_IPV6=1
|
||||
STACK_DRIVER_DEFS+=-DLIBZT_IPV6 -DLWIP_IPV6=1
|
||||
STACK_DEFS+=LIBZT_IPV6=1
|
||||
endif
|
||||
else
|
||||
STACK_DRIVER_FLAGS+=-DLIBZT_IPV4 -DLWIP_IPV4=1
|
||||
STACK_FLAGS+=LIBZT_IPV4=1
|
||||
STACK_DRIVER_DEFS+=-DLIBZT_IPV4 -DLWIP_IPV4=1
|
||||
STACK_DEFS+=LIBZT_IPV4=1
|
||||
endif
|
||||
STACK_DRIVER_FLAGS+=-DLWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS
|
||||
STACK_DRIVER_FLAGS+=-DSTACK_LWIP
|
||||
STACK_DRIVER_DEFS+=-DLWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS
|
||||
STACK_DRIVER_DEFS+=-DSTACK_LWIP
|
||||
STACK_DRIVER_FILES:=src/lwIP.cpp
|
||||
LWIPARCH=$(CONTRIBDIR)/ports/unix
|
||||
LWIPDIR=ext/lwip/src
|
||||
@@ -222,7 +222,7 @@ STACK_INCLUDES+=-Iext/lwip/src/include/lwip \
|
||||
endif
|
||||
|
||||
ifeq ($(NO_STACK),1)
|
||||
STACK_DRIVER_FLAGS+=-DNO_STACK
|
||||
STACK_DRIVER_DEFS+=-DNO_STACK
|
||||
endif
|
||||
|
||||
##############################################################################
|
||||
@@ -231,8 +231,8 @@ endif
|
||||
|
||||
%.o : %.cpp
|
||||
@mkdir -p $(BUILD) obj
|
||||
$(CXX) $(CXXFLAGS) $(SANFLAGS) $(STACK_DRIVER_FLAGS) $(ZT_FLAGS) \
|
||||
$(ZT_INCLUDES) $(STACK_INCLUDES) $(LIBZT_INCLUDES) -c $^ -o obj/$(@F)
|
||||
$(CXX) $(CXXFLAGS) $(SANFLAGS) $(STACK_DRIVER_DEFS) $(ZT_DEFS) \
|
||||
$(ZT_INCLUDES) $(LIBZT_INCLUDES) -c $^ -o obj/$(@F)
|
||||
|
||||
%.o : %.c
|
||||
@mkdir -p $(BUILD) obj
|
||||
@@ -242,13 +242,13 @@ picotcp:
|
||||
cd ext/picotcp; make lib ARCH=shared IPV4=1 IPV6=1
|
||||
|
||||
lwip:
|
||||
make -f make-liblwip.mk liblwip.a $(STACK_FLAGS)
|
||||
make -f make-liblwip.mk liblwip.a $(STACK_DEFS)
|
||||
|
||||
ifeq ($(STACK_PICO),1)
|
||||
static_lib: picotcp $(ZTO_OBJS)
|
||||
@mkdir -p $(BUILD) obj
|
||||
$(CXX) $(CXXFLAGS) $(SANFLAGS) $(ZT_FLAGS) $(ZT_INCLUDES) $(LIBZT_FLAGS) \
|
||||
$(LIBZT_INCLUDES) $(STACK_INCLUDES) $(STACK_DRIVER_FLAGS) $(LIBZT_FILES) \
|
||||
$(CXX) $(CXXFLAGS) $(SANFLAGS) $(ZT_DEFS) $(ZT_INCLUDES) $(LIBZT_DEFS) \
|
||||
$(LIBZT_INCLUDES) $(STACK_INCLUDES) $(STACK_DRIVER_DEFS) $(LIBZT_FILES) \
|
||||
$(STACK_DRIVER_FILES) -c
|
||||
mv *.o obj
|
||||
mv ext/picotcp/build/lib/*.o obj
|
||||
@@ -259,18 +259,23 @@ endif
|
||||
ifeq ($(STACK_LWIP),1)
|
||||
static_lib: lwip $(ZTO_OBJS)
|
||||
@mkdir -p $(BUILD) obj
|
||||
$(CXX) $(CXXFLAGS) $(SANFLAGS) $(ZT_FLAGS) $(ZT_INCLUDES) $(LIBZT_FLAGS) \
|
||||
$(LIBZT_INCLUDES) $(STACK_INCLUDES) $(STACK_DRIVER_FLAGS) $(LIBZT_FILES) \
|
||||
$(STACK_DRIVER_FILES) -c
|
||||
$(CXX) $(CXXFLAGS) -c src/VirtualSocket.cpp $(LIBZT_INCLUDES)
|
||||
$(CXX) $(CXXFLAGS) -c src/VirtualBindingPair.cpp $(ZT_INCLUDES) $(LIBZT_INCLUDES)
|
||||
$(CXX) $(CXXFLAGS) -c src/Platform.cpp $(LIBZT_INCLUDES)
|
||||
$(CXX) $(CXXFLAGS) -c src/libzt.cpp $(ZT_DEFS) $(ZT_INCLUDES) $(STACK_INCLUDES) $(LIBZT_DEFS) $(LIBZT_INCLUDES) $(STACK_DRIVER_DEFS)
|
||||
$(CXX) $(CXXFLAGS) -c src/Utilities.cpp $(ZT_DEFS) $(ZT_INCLUDES) $(LIBZT_INCLUDES) $(STACK_DRIVER_DEFS)
|
||||
$(CXX) $(CXXFLAGS) -c src/ZT1Service.cpp $(ZT_DEFS) $(ZT_INCLUDES) $(LIBZT_INCLUDES) $(LIBZT_DEFS) $(STACK_DRIVER_DEFS)
|
||||
$(CXX) $(CXXFLAGS) -c src/VirtualTap.cpp $(ZT_DEFS) $(ZT_INCLUDES) $(LIBZT_DEFS) $(LIBZT_INCLUDES) $(STACK_DRIVER_DEFS)
|
||||
$(CXX) $(CXXFLAGS) -c src/lwIP.cpp $(ZT_DEFS) $(ZT_INCLUDES) $(STACK_INCLUDES) $(LIBZT_DEFS) $(LIBZT_INCLUDES) $(STACK_DRIVER_DEFS)
|
||||
mv *.o obj
|
||||
$(ARTOOL) $(ARFLAGS) -o $(STATIC_LIB) $(STACK_LIB) obj/*.o
|
||||
$(ARTOOL) $(ARFLAGS) -o $(STATIC_LIB) obj/*.o
|
||||
@date +"Build script finished on %F %T"
|
||||
endif
|
||||
# for layer-2 only (this will omit all userspace network stack code)
|
||||
ifeq ($(NO_STACK),1)
|
||||
static_lib: $(ZTO_OBJS)
|
||||
@mkdir -p $(BUILD) obj
|
||||
$(CXX) $(CXXFLAGS) $(ZT_FLAGS) $(ZT_INCLUDES) $(LIBZT_FLAGS) $(LIBZT_INCLUDES) $(LIBZT_FILES) -c
|
||||
$(CXX) $(CXXFLAGS) $(ZT_DEFS) $(ZT_INCLUDES) $(LIBZT_DEFS) $(LIBZT_INCLUDES) $(LIBZT_FILES) -c
|
||||
mv *.o obj
|
||||
$(ARTOOL) $(ARFLAGS) -o $(STATIC_LIB) obj/*.o
|
||||
@date +"Build script finished on %F %T"
|
||||
@@ -318,13 +323,13 @@ tests: selftest nativetest ztproxy
|
||||
ZT_UTILS:=zto/node/Utils.cpp -Izto/node
|
||||
|
||||
selftest:
|
||||
$(CXX) $(CXXFLAGS) -D__SELFTEST__ $(STACK_DRIVER_FLAGS) $(LIBZT_FLAGS) \
|
||||
$(CXX) $(CXXFLAGS) -D__SELFTEST__ $(STACK_DRIVER_DEFS) $(LIBZT_DEFS) \
|
||||
$(SANFLAGS) $(LIBZT_INCLUDES) $(ZT_INCLUDES) $(ZT_UTILS) test/selftest.cpp -o \
|
||||
$(BUILD)/selftest -L$(BUILD) -lzt -lpthread
|
||||
@./check.sh $(BUILD)/selftest
|
||||
@date +"Build script finished on %F %T"
|
||||
nativetest:
|
||||
$(CXX) $(CXXFLAGS) -D__NATIVETEST__ $(STACK_DRIVER_FLAGS) $(SANFLAGS) \
|
||||
$(CXX) $(CXXFLAGS) -D__NATIVETEST__ $(STACK_DRIVER_DEFS) $(SANFLAGS) \
|
||||
$(LIBZT_INCLUDES) $(ZT_INCLUDES) test/selftest.cpp -o $(BUILD)/nativetest
|
||||
@./check.sh $(BUILD)/nativetest
|
||||
@date +"Build script finished on %F %T"
|
||||
@@ -334,7 +339,7 @@ ztproxy:
|
||||
@./check.sh $(BUILD)/ztproxy
|
||||
@date +"Build script finished on %F %T"
|
||||
intercept:
|
||||
$(CXX) $(CXXFLAGS) $(SANFLAGS) $(STACK_DRIVER_FLAGS) $(LIBZT_INCLUDES) \
|
||||
$(CXX) $(CXXFLAGS) $(SANFLAGS) $(STACK_DRIVER_DEFS) $(LIBZT_INCLUDES) \
|
||||
$(ZT_INCLUDES) examples/intercept/intercept.cpp -D_GNU_SOURCE \
|
||||
-shared -o $(BUILD)/intercept.so $< -ldl
|
||||
@./check.sh $(BUILD)/intercept.so
|
||||
|
||||
25
ext/lwip-contrib/.gitignore
vendored
Normal file
25
ext/lwip-contrib/.gitignore
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
*.o
|
||||
*.so
|
||||
*.a
|
||||
.depend
|
||||
/ports/unix/unixsim/simhost
|
||||
/ports/unix/unixsim/simrouter
|
||||
/ports/unix/unixsim/simnode
|
||||
/ports/unix/unixsim/makefsdata
|
||||
/ports/unix/minimal/echop
|
||||
/ports/win32/msvc/Debug
|
||||
/ports/win32/lwipcfg_msvc.h
|
||||
/ports/win32/msvc/Debug unittests
|
||||
/ports/win32/msvc/Release
|
||||
/ports/win32/msvc/Release unittests
|
||||
/ports/win32/msvc/*.user
|
||||
/ports/win32/msvc/*.ncb
|
||||
/ports/win32/msvc/*.cache
|
||||
/ports/win32/msvc/*.suo
|
||||
/ports/win32/msvc/ipch
|
||||
/ports/win32/msvc/*.opensdf
|
||||
/ports/win32/msvc/*.sdf
|
||||
/ports/unix/check/lwip_unittests
|
||||
/ports/win32/mingw/*.exe
|
||||
/ports/win32/mingw/*.map
|
||||
/ports/win32/mingw/cov-int
|
||||
47
ext/lwip-contrib/Filelists.mk
Normal file
47
ext/lwip-contrib/Filelists.mk
Normal file
@@ -0,0 +1,47 @@
|
||||
#
|
||||
# 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>
|
||||
#
|
||||
|
||||
# CONTRIBAPPFILES: Contrib Applications.
|
||||
CONTRIBAPPFILES=$(CONTRIBDIR)/apps/httpserver/httpserver-netconn.c \
|
||||
$(CONTRIBDIR)/apps/chargen/chargen.c \
|
||||
$(CONTRIBDIR)/apps/udpecho/udpecho.c \
|
||||
$(CONTRIBDIR)/apps/tcpecho/tcpecho.c \
|
||||
$(CONTRIBDIR)/apps/shell/shell.c \
|
||||
$(CONTRIBDIR)/apps/udpecho_raw/udpecho_raw.c \
|
||||
$(CONTRIBDIR)/apps/tcpecho_raw/tcpecho_raw.c \
|
||||
$(CONTRIBDIR)/apps/netio/netio.c \
|
||||
$(CONTRIBDIR)/apps/ping/ping.c \
|
||||
$(CONTRIBDIR)/apps/snmp_private_mib/lwip_prvmib.c \
|
||||
$(CONTRIBDIR)/apps/snmp_v3/snmpv3_dummy.c \
|
||||
$(CONTRIBDIR)/apps/socket_examples/socket_examples.c \
|
||||
$(CONTRIBDIR)/apps/rtp/rtp.c \
|
||||
$(CONTRIBDIR)/addons/tcp_isn/tcp_isn.c \
|
||||
$(CONTRIBDIR)/addons/ipv6_static_routing/ip6_route_table.c
|
||||
94
ext/lwip-contrib/ports/Common.allports.mk
Normal file
94
ext/lwip-contrib/ports/Common.allports.mk
Normal file
@@ -0,0 +1,94 @@
|
||||
#
|
||||
# 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
|
||||
#CC=clang
|
||||
CCDEP?=$(CC)
|
||||
|
||||
CFLAGS+=-g -Wall -DLWIP_DEBUG -pedantic -Werror \
|
||||
-Wparentheses -Wsequence-point -Wswitch-default \
|
||||
-Wextra -Wundef -Wshadow -Wpointer-arith -Wcast-qual \
|
||||
-Wc++-compat -Wwrite-strings -Wold-style-definition -Wcast-align \
|
||||
-Wmissing-prototypes -Wredundant-decls -Wnested-externs \
|
||||
-Wunreachable-code -Wuninitialized
|
||||
|
||||
ifeq (,$(findstring clang,$(CC)))
|
||||
CFLAGS+= -Wlogical-op
|
||||
# if GCC is newer than 4.8/4.9 you may use:
|
||||
#CFLAGS:=$(CFLAGS) -fsanitize=address -fstack-protector -fstack-check -fsanitize=undefined -fno-sanitize=alignment
|
||||
else
|
||||
# we cannot sanitize alignment on x86-64 targets because clang wants 64 bit alignment
|
||||
CFLAGS+= -fsanitize=address -fsanitize=undefined -fno-sanitize=alignment -Wdocumentation -Wno-documentation-deprecated-sync
|
||||
endif
|
||||
|
||||
# not used for now but interesting:
|
||||
# -Wpacked
|
||||
# -ansi
|
||||
# -std=c89
|
||||
|
||||
CONTRIBDIR?=../../..
|
||||
ARFLAGS?=rs
|
||||
|
||||
#Set this to where you have the lwip core module checked out from git
|
||||
#default assumes it's a dir named lwip at the same level as the contrib module
|
||||
LWIPDIR?=$(CONTRIBDIR)/../lwip/src
|
||||
|
||||
CFLAGS+=-I. \
|
||||
-I$(CONTRIBDIR) \
|
||||
-I$(LWIPDIR)/include \
|
||||
-I$(LWIPARCH)/include
|
||||
|
||||
# Add include path and link to mbedTLS lib if available
|
||||
MBEDTLSDIR?=$(CONTRIBDIR)/../mbedtls
|
||||
ifneq (,$(wildcard $(MBEDTLSDIR)/include/mbedtls/*.h))
|
||||
LDFLAGS+=-L$(MBEDTLSDIR)/library -lmbedtls -lmbedcrypto -lmbedx509
|
||||
CFLAGS+=-I$(MBEDTLSDIR)/include -Wno-redundant-decls -DLWIP_HAVE_MBEDTLS=1
|
||||
endif
|
||||
|
||||
include $(CONTRIBDIR)/Filelists.mk
|
||||
include $(LWIPDIR)/Filelists.mk
|
||||
|
||||
# LWIPFILES: All the above.
|
||||
LWIPFILES=$(LWIPNOAPPSFILES) $(ARCHFILES)
|
||||
LWIPOBJS=$(notdir $(LWIPFILES:.c=.o))
|
||||
|
||||
LWIPLIBCOMMON=liblwipcommon.a
|
||||
$(LWIPLIBCOMMON): $(LWIPOBJS)
|
||||
$(AR) $(ARFLAGS) $(LWIPLIBCOMMON) $?
|
||||
|
||||
APPFILES=$(CONTRIBAPPFILES) $(LWIPAPPFILES)
|
||||
APPLIB=liblwipapps.a
|
||||
APPOBJS=$(notdir $(APPFILES:.c=.o))
|
||||
$(APPLIB): $(APPOBJS)
|
||||
$(AR) $(ARFLAGS) $(APPLIB) $?
|
||||
|
||||
%.o:
|
||||
$(CC) $(CFLAGS) -c $<
|
||||
8
ext/lwip-contrib/ports/FILES
Normal file
8
ext/lwip-contrib/ports/FILES
Normal file
@@ -0,0 +1,8 @@
|
||||
unix/ - Architectural files for testing on unix-like systems
|
||||
(assuming gcc and pthreads).
|
||||
- Maintained by Kieran Mansley <kieran@recoil.org>
|
||||
|
||||
msvc6/ - Architectural files for Microsoft Visual C++ 6.0.
|
||||
- Maintained by Simon Goldschmidt <sgoldschmidt@de.pepperl-fuchs.com>
|
||||
|
||||
old/ - Ports that are no longer actively maintained
|
||||
42
ext/lwip-contrib/ports/unix/Common.mk
Normal file
42
ext/lwip-contrib/ports/unix/Common.mk
Normal file
@@ -0,0 +1,42 @@
|
||||
#
|
||||
# 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>
|
||||
#
|
||||
|
||||
# Architecture specific files.
|
||||
LWIPARCH?=$(CONTRIBDIR)/ports/unix/port
|
||||
SYSARCH?=$(LWIPARCH)/sys_arch.c
|
||||
ARCHFILES=$(LWIPARCH)/perf.c $(SYSARCH) $(LWIPARCH)/netif/tapif.c $(LWIPARCH)/netif/tunif.c \
|
||||
$(LWIPARCH)/netif/unixif.c $(LWIPARCH)/netif/list.c $(LWIPARCH)/netif/tcpdump.c \
|
||||
$(LWIPARCH)/netif/delif.c $(LWIPARCH)/netif/sio.c $(LWIPARCH)/netif/fifo.c
|
||||
|
||||
UNIX_COMMON_MK_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
|
||||
include $(UNIX_COMMON_MK_DIR)../Common.allports.mk
|
||||
|
||||
LDFLAGS+=-pthread -lutil -lrt
|
||||
52
ext/lwip-contrib/ports/unix/README
Normal file
52
ext/lwip-contrib/ports/unix/README
Normal file
@@ -0,0 +1,52 @@
|
||||
This port contains infrastructure and examples for running lwIP on Unix-like
|
||||
operating systems (Linux, OpenBSD, cygwin). Much of this is targetted towards
|
||||
testing lwIP applications.
|
||||
|
||||
* port/sys_arch.c, port/perf.c, port/include/arch/: Generic platform porting,
|
||||
for both states of NO_SYS. (Mapping debugging to printf, providing
|
||||
sys_now & co from the system time etc.)
|
||||
|
||||
* check: Runs the unit tests shipped with main lwIP on the Unix port.
|
||||
|
||||
* fuzz: Helper application for fuzzing the lwIP stack
|
||||
|
||||
* port/netif, port/include/netif: Various network interface implementations and
|
||||
their helpers, some explicitly for Unix infrastructure, some generic (but most
|
||||
useful on an easy to debug system):
|
||||
|
||||
* delif: Network interface that inserts delay before receiving or sending
|
||||
packages
|
||||
|
||||
* fifo: Helper for sio
|
||||
|
||||
* list: Helper for unixif
|
||||
|
||||
* pcapif: Network interface that replays packages from a PCAP dump file, and
|
||||
discards packages sent out from it
|
||||
|
||||
* sio: Mapping Unix character devices to lwIP's sio mechanisms
|
||||
|
||||
* tapif: Network interface that is mapped to a tap interface (Unix user
|
||||
space layer 2 network device). Uses lwIP threads.
|
||||
|
||||
* tcpdump: Utility functions to dump pbufs into a tcpdump formatted log
|
||||
file
|
||||
|
||||
* tunif: Network interface that is mapped to a tun interface (Unix user
|
||||
space layer 3 network device). Uses lwIP threads.
|
||||
|
||||
* unixif: Network interface that allows lwIP Unix programs to "meet" at Unix
|
||||
socket address and exchange traffic over it.
|
||||
|
||||
* lib: Compiling lwIP as a shared library
|
||||
|
||||
* minimal: Standalone example program that runs in NO_SYS=1 mode.
|
||||
Contains the mintapif network interface implementation, which is similar to
|
||||
netif/tapif, but runs without threads.
|
||||
|
||||
Runs an echo server and SNMP.
|
||||
|
||||
* unixsim: Standalone example program that runs in NO_SYS=0 mode. Uses
|
||||
the tapif network interface.
|
||||
|
||||
Runs an HTTP server.
|
||||
62
ext/lwip-contrib/ports/unix/check/Makefile
Normal file
62
ext/lwip-contrib/ports/unix/check/Makefile
Normal file
@@ -0,0 +1,62 @@
|
||||
#
|
||||
# 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: lwip_unittests
|
||||
.PHONY: all clean check
|
||||
|
||||
# The include path to sys_arch.h and lwipopts.h must be first, so this must be before Common.mk
|
||||
CFLAGS=-DLWIP_NOASSERT_ON_ERROR -I/usr/include/check -I$(LWIPDIR)/../test/unit
|
||||
|
||||
# Prevent compiling sys_arch.c of unix port because unit test provide their own port
|
||||
SYSARCH?=
|
||||
include ../Common.mk
|
||||
|
||||
LDFLAGS:=-lcheck -lm -lsubunit $(LDFLAGS)
|
||||
|
||||
TESTDIR=$(LWIPDIR)/../test/unit
|
||||
include $(TESTDIR)/Filelists.mk
|
||||
TESTOBJS=$(notdir $(TESTFILES:.c=.o))
|
||||
|
||||
clean:
|
||||
@rm -f *.o $(LWIPLIBCOMMON) $(APPLIB) lwip_unittests *.s .depend* *.core core
|
||||
|
||||
depend dep: .depend
|
||||
|
||||
include .depend
|
||||
|
||||
.depend: $(LWIPFILES) $(APPFILES) $(TESTFILES)
|
||||
$(CCDEP) $(CFLAGS) -MM $^ > .depend || rm -f .depend
|
||||
|
||||
lwip_unittests: .depend $(TESTOBJS) $(LWIPLIBCOMMON) $(APPLIB)
|
||||
$(CC) $(CFLAGS) -o lwip_unittests $(TESTOBJS) -Wl,--start-group $(LWIPLIBCOMMON) $(APPLIB) $(LDFLAGS) -Wl,--end-group
|
||||
|
||||
check: lwip_unittests
|
||||
@./lwip_unittests
|
||||
8
ext/lwip-contrib/ports/unix/check/README
Normal file
8
ext/lwip-contrib/ports/unix/check/README
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
Helper files to run lwIP unit tests on unix-like systems.
|
||||
|
||||
1. Install the check library, through a package manager or from http://check.sourceforge.net/
|
||||
2. Put the lwip code in a directory called 'lwip' in the same directory as lwip-contrib is
|
||||
3. Run `make check`
|
||||
4. Make sure all tests pass
|
||||
|
||||
2
ext/lwip-contrib/ports/unix/check/config.h
Normal file
2
ext/lwip-contrib/ports/unix/check/config.h
Normal file
@@ -0,0 +1,2 @@
|
||||
/* Enable this to simplify debugging */
|
||||
/* #define LWIP_UNITTESTS_NOFORK */
|
||||
105
ext/lwip/test/fuzz/Makefile → ext/lwip-contrib/ports/unix/lib/Makefile
Executable file → Normal file
105
ext/lwip/test/fuzz/Makefile → ext/lwip-contrib/ports/unix/lib/Makefile
Executable file → Normal file
@@ -1,53 +1,52 @@
|
||||
#
|
||||
# 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: lwip_fuzz
|
||||
.PHONY: all clean
|
||||
|
||||
CC=afl-gcc
|
||||
LDFLAGS=-lm
|
||||
CFLAGS=-O0
|
||||
|
||||
CONTRIBDIR=../../../lwip-contrib
|
||||
include $(CONTRIBDIR)/ports/unix/Common.mk
|
||||
|
||||
clean:
|
||||
rm -f *.o $(LWIPLIBCOMMON) lwip_fuzz *.s .depend* *.core core
|
||||
|
||||
depend dep: .depend
|
||||
|
||||
include .depend
|
||||
|
||||
.depend: fuzz.c $(LWIPFILES) $(APPFILES)
|
||||
$(CCDEP) $(CFLAGS) -MM $^ > .depend || rm -f .depend
|
||||
|
||||
lwip_fuzz: .depend $(LWIPLIBCOMMON) fuzz.o
|
||||
$(CC) $(CFLAGS) -o lwip_fuzz fuzz.o $(LWIPLIBCOMMON) $(LDFLAGS)
|
||||
#
|
||||
# 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>
|
||||
#
|
||||
|
||||
UNIXLIB=liblwip.a
|
||||
|
||||
all: $(UNIXLIB)
|
||||
.PHONY: all
|
||||
|
||||
include ../Common.mk
|
||||
|
||||
CFLAGS+=-fPIC
|
||||
|
||||
clean:
|
||||
rm -f *.o $(LWIPLIBCOMMON) *.s .depend* *.core core
|
||||
|
||||
depend dep: .depend
|
||||
|
||||
include .depend
|
||||
|
||||
$(UNIXLIB): $(LWIPLIBCOMMON) unixlib.o
|
||||
$(CC) -g -nostartfiles -shared -o $@ $^
|
||||
|
||||
.depend: unixlib.c $(LWIPFILES)
|
||||
$(CCDEP) $(CFLAGS) -MM $^ > .depend || rm -f .depend
|
||||
31
ext/lwip-contrib/ports/unix/lib/README
Normal file
31
ext/lwip-contrib/ports/unix/lib/README
Normal file
@@ -0,0 +1,31 @@
|
||||
This directory contains an example of how to compile lwIP as a self
|
||||
initialising shared library on Linux.
|
||||
|
||||
Some brief instructions:
|
||||
|
||||
* Compile the code:
|
||||
|
||||
> make clean all
|
||||
|
||||
This should produce liblwip4unixlib.so. This is the shared library.
|
||||
|
||||
* Link an application against the shared library
|
||||
|
||||
If you're using gcc you can do this by including -llwip4unixlib in
|
||||
your link command.
|
||||
|
||||
* Run your application
|
||||
|
||||
Ensure that LD_LIBRARY_PATH includes the directory that contains
|
||||
liblwip4unixlib.so (ie. this directory)
|
||||
|
||||
|
||||
|
||||
If you are unsure about shared libraries and libraries on linux in
|
||||
general, you might find this HOWTO useful:
|
||||
|
||||
<http://www.tldp.org/HOWTO/Program-Library-HOWTO/>
|
||||
|
||||
|
||||
|
||||
Kieran Mansley, October 2002.
|
||||
419
ext/lwip-contrib/ports/unix/lib/lwipopts.h
Normal file
419
ext/lwip-contrib/ports/unix/lib/lwipopts.h
Normal file
@@ -0,0 +1,419 @@
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* lwIP Options Configuration
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2004 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_LWIPOPTS_H
|
||||
#define LWIP_LWIPOPTS_H
|
||||
|
||||
/*
|
||||
* Include user defined options first. Anything not defined in these files
|
||||
* will be set to standard values. Override anything you dont like!
|
||||
*/
|
||||
#include "lwipopts.h"
|
||||
#include "lwip/debug.h"
|
||||
|
||||
/*
|
||||
-----------------------------------------------
|
||||
---------- Platform specific locking ----------
|
||||
-----------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
|
||||
* critical regions during buffer allocation, deallocation and memory
|
||||
* allocation and deallocation.
|
||||
*/
|
||||
#define SYS_LIGHTWEIGHT_PROT 0
|
||||
|
||||
/**
|
||||
* NO_SYS==1: Provides VERY minimal functionality. Otherwise,
|
||||
* use lwIP facilities.
|
||||
*/
|
||||
#define NO_SYS 0
|
||||
|
||||
/*
|
||||
------------------------------------
|
||||
---------- Memory options ----------
|
||||
------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* MEM_ALIGNMENT: should be set to the alignment of the CPU
|
||||
* 4 byte alignment -> #define MEM_ALIGNMENT 4
|
||||
* 2 byte alignment -> #define MEM_ALIGNMENT 2
|
||||
*/
|
||||
#define MEM_ALIGNMENT 1U
|
||||
|
||||
/**
|
||||
* MEM_SIZE: the size of the heap memory. If the application will send
|
||||
* a lot of data that needs to be copied, this should be set high.
|
||||
*/
|
||||
#define MEM_SIZE 1600
|
||||
|
||||
/*
|
||||
------------------------------------------------
|
||||
---------- Internal Memory Pool Sizes ----------
|
||||
------------------------------------------------
|
||||
*/
|
||||
/**
|
||||
* MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF).
|
||||
* If the application sends a lot of data out of ROM (or other static memory),
|
||||
* this should be set high.
|
||||
*/
|
||||
#define MEMP_NUM_PBUF 16
|
||||
|
||||
/**
|
||||
* MEMP_NUM_RAW_PCB: Number of raw connection PCBs
|
||||
* (requires the LWIP_RAW option)
|
||||
*/
|
||||
#define MEMP_NUM_RAW_PCB 4
|
||||
|
||||
/**
|
||||
* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
|
||||
* per active UDP "connection".
|
||||
* (requires the LWIP_UDP option)
|
||||
*/
|
||||
#define MEMP_NUM_UDP_PCB 4
|
||||
|
||||
/**
|
||||
* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections.
|
||||
* (requires the LWIP_TCP option)
|
||||
*/
|
||||
#define MEMP_NUM_TCP_PCB 4
|
||||
|
||||
/**
|
||||
* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections.
|
||||
* (requires the LWIP_TCP option)
|
||||
*/
|
||||
#define MEMP_NUM_TCP_PCB_LISTEN 4
|
||||
|
||||
/**
|
||||
* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments.
|
||||
* (requires the LWIP_TCP option)
|
||||
*/
|
||||
#define MEMP_NUM_TCP_SEG 16
|
||||
|
||||
/**
|
||||
* MEMP_NUM_REASSDATA: the number of simultaneously IP packets queued for
|
||||
* reassembly (whole packets, not fragments!)
|
||||
*/
|
||||
#define MEMP_NUM_REASSDATA 1
|
||||
|
||||
/**
|
||||
* MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing
|
||||
* packets (pbufs) that are waiting for an ARP request (to resolve
|
||||
* their destination address) to finish.
|
||||
* (requires the ARP_QUEUEING option)
|
||||
*/
|
||||
#define MEMP_NUM_ARP_QUEUE 2
|
||||
|
||||
/**
|
||||
* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts.
|
||||
* (requires NO_SYS==0)
|
||||
*/
|
||||
#define MEMP_NUM_SYS_TIMEOUT 3
|
||||
|
||||
/**
|
||||
* MEMP_NUM_NETBUF: the number of struct netbufs.
|
||||
* (only needed if you use the sequential API, like api_lib.c)
|
||||
*/
|
||||
#define MEMP_NUM_NETBUF 2
|
||||
|
||||
/**
|
||||
* MEMP_NUM_NETCONN: the number of struct netconns.
|
||||
* (only needed if you use the sequential API, like api_lib.c)
|
||||
*/
|
||||
#define MEMP_NUM_NETCONN 4
|
||||
|
||||
/**
|
||||
* MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used
|
||||
* for callback/timeout API communication.
|
||||
* (only needed if you use tcpip.c)
|
||||
*/
|
||||
#define MEMP_NUM_TCPIP_MSG_API 8
|
||||
|
||||
/**
|
||||
* MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used
|
||||
* for incoming packets.
|
||||
* (only needed if you use tcpip.c)
|
||||
*/
|
||||
#define MEMP_NUM_TCPIP_MSG_INPKT 8
|
||||
|
||||
/**
|
||||
* PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
|
||||
*/
|
||||
#define PBUF_POOL_SIZE 8
|
||||
|
||||
/*
|
||||
---------------------------------
|
||||
---------- ARP options ----------
|
||||
---------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_ARP==1: Enable ARP functionality.
|
||||
*/
|
||||
#define LWIP_ARP 1
|
||||
|
||||
/*
|
||||
--------------------------------
|
||||
---------- IP options ----------
|
||||
--------------------------------
|
||||
*/
|
||||
/**
|
||||
* IP_FORWARD==1: Enables the ability to forward IP packets across network
|
||||
* interfaces. If you are going to run lwIP on a device with only one network
|
||||
* interface, define this to 0.
|
||||
*/
|
||||
#define IP_FORWARD 0
|
||||
|
||||
/**
|
||||
* IP_OPTIONS: Defines the behavior for IP options.
|
||||
* IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped.
|
||||
* IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed).
|
||||
*/
|
||||
#define IP_OPTIONS_ALLOWED 1
|
||||
|
||||
/**
|
||||
* IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that
|
||||
* this option does not affect outgoing packet sizes, which can be controlled
|
||||
* via IP_FRAG.
|
||||
*/
|
||||
#define IP_REASSEMBLY 1
|
||||
|
||||
/**
|
||||
* IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note
|
||||
* that this option does not affect incoming packet sizes, which can be
|
||||
* controlled via IP_REASSEMBLY.
|
||||
*/
|
||||
#define IP_FRAG 1
|
||||
|
||||
/**
|
||||
* IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally)
|
||||
* a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived
|
||||
* in this time, the whole packet is discarded.
|
||||
*/
|
||||
#define IP_REASS_MAXAGE 3
|
||||
|
||||
/**
|
||||
* IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled.
|
||||
* Since the received pbufs are enqueued, be sure to configure
|
||||
* PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive
|
||||
* packets even if the maximum amount of fragments is enqueued for reassembly!
|
||||
*/
|
||||
#define IP_REASS_MAX_PBUFS 4
|
||||
|
||||
/**
|
||||
* IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP
|
||||
* fragmentation. Otherwise pbufs are allocated and reference the original
|
||||
* packet data to be fragmented.
|
||||
*/
|
||||
#define IP_FRAG_USES_STATIC_BUF 0
|
||||
|
||||
/**
|
||||
* IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers.
|
||||
*/
|
||||
#define IP_DEFAULT_TTL 255
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- ICMP options ----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_ICMP==1: Enable ICMP module inside the IP stack.
|
||||
* Be careful, disable that make your product non-compliant to RFC1122
|
||||
*/
|
||||
#define LWIP_ICMP 1
|
||||
|
||||
/*
|
||||
---------------------------------
|
||||
---------- RAW options ----------
|
||||
---------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_RAW==1: Enable application layer to hook into the IP layer itself.
|
||||
*/
|
||||
#define LWIP_RAW 1
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- DHCP options ----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_DHCP==1: Enable DHCP module.
|
||||
*/
|
||||
#define LWIP_DHCP 0
|
||||
|
||||
|
||||
/*
|
||||
------------------------------------
|
||||
---------- AUTOIP options ----------
|
||||
------------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_AUTOIP==1: Enable AUTOIP module.
|
||||
*/
|
||||
#define LWIP_AUTOIP 0
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- SNMP options ----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP
|
||||
* transport.
|
||||
*/
|
||||
#define LWIP_SNMP 0
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- IGMP options ----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_IGMP==1: Turn on IGMP module.
|
||||
*/
|
||||
#define LWIP_IGMP 0
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- DNS options -----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS
|
||||
* transport.
|
||||
*/
|
||||
#define LWIP_DNS 0
|
||||
|
||||
/*
|
||||
---------------------------------
|
||||
---------- UDP options ----------
|
||||
---------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_UDP==1: Turn on UDP.
|
||||
*/
|
||||
#define LWIP_UDP 1
|
||||
|
||||
/*
|
||||
---------------------------------
|
||||
---------- TCP options ----------
|
||||
---------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_TCP==1: Turn on TCP.
|
||||
*/
|
||||
#define LWIP_TCP 1
|
||||
|
||||
#define LWIP_LISTEN_BACKLOG 0
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- Pbuf options ----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
|
||||
* link level header. The default is 14, the standard value for
|
||||
* Ethernet.
|
||||
*/
|
||||
#define PBUF_LINK_HLEN 16
|
||||
|
||||
/**
|
||||
* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is
|
||||
* designed to accomodate single full size TCP frame in one pbuf, including
|
||||
* TCP_MSS, IP header, and link header.
|
||||
*
|
||||
*/
|
||||
#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN)
|
||||
|
||||
/*
|
||||
------------------------------------
|
||||
---------- LOOPIF options ----------
|
||||
------------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c
|
||||
*/
|
||||
#define LWIP_HAVE_LOOPIF 0
|
||||
|
||||
/*
|
||||
----------------------------------------------
|
||||
---------- Sequential layer options ----------
|
||||
----------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)
|
||||
*/
|
||||
#define LWIP_NETCONN 1
|
||||
|
||||
/*
|
||||
------------------------------------
|
||||
---------- Socket options ----------
|
||||
------------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_SOCKET==1: Enable Socket API (require to use sockets.c)
|
||||
*/
|
||||
#define LWIP_SOCKET 1
|
||||
|
||||
/*
|
||||
----------------------------------------
|
||||
---------- Statistics options ----------
|
||||
----------------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_STATS==1: Enable statistics collection in lwip_stats.
|
||||
*/
|
||||
#define LWIP_STATS 0
|
||||
/*
|
||||
---------------------------------
|
||||
---------- PPP options ----------
|
||||
---------------------------------
|
||||
*/
|
||||
/**
|
||||
* PPP_SUPPORT==1: Enable PPP.
|
||||
*/
|
||||
#define PPP_SUPPORT 0
|
||||
|
||||
|
||||
/* Misc */
|
||||
|
||||
#endif /* LWIP_LWIPOPTS_H */
|
||||
97
ext/lwip-contrib/ports/unix/lib/unixlib.c
Normal file
97
ext/lwip-contrib/ports/unix/lib/unixlib.c
Normal file
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* Author: Kieran Mansley <kjm25@cam.ac.uk>
|
||||
*
|
||||
* $Id: unixlib.c,v 1.10 2010/02/17 16:52:30 goldsimon Exp $
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* unixlib.c
|
||||
*
|
||||
* The initialisation functions for a shared library
|
||||
*
|
||||
* You may need to configure this file to your own needs - it is only an example
|
||||
* of how lwIP can be used as a self initialising shared library.
|
||||
*
|
||||
* In particular, you should change the gateway, ipaddr, and netmask to be the values
|
||||
* you would like the stack to use.
|
||||
*/
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
#include "lwip/init.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/mem.h"
|
||||
#include "lwip/memp.h"
|
||||
#include "lwip/pbuf.h"
|
||||
#include "lwip/tcp.h"
|
||||
#include "lwip/tcpip.h"
|
||||
#include "lwip/netif.h"
|
||||
#include "lwip/stats.h"
|
||||
#include "lwip/sockets.h"
|
||||
|
||||
#include "netif/tapif.h"
|
||||
|
||||
struct netif netif;
|
||||
|
||||
void _init(void);
|
||||
void _fini(void);
|
||||
|
||||
static void
|
||||
tcpip_init_done(void *arg)
|
||||
{
|
||||
ip_addr_t ipaddr, netmask, gateway;
|
||||
sys_sem_t *sem;
|
||||
sem = (sys_sem_t *)arg;
|
||||
|
||||
/*
|
||||
CHANGE THESE to suit your own network configuration:
|
||||
*/
|
||||
IP4_ADDR(&gateway, 192,168,1,1);
|
||||
IP4_ADDR(&ipaddr, 192,168,1,2);
|
||||
IP4_ADDR(&netmask, 255,255,255,0);
|
||||
|
||||
netif_set_default(netif_add(&netif, &ipaddr, &netmask, &gateway, NULL, tapif_init,
|
||||
tcpip_input));
|
||||
netif_set_up(&netif);
|
||||
#if LWIP_IPV6
|
||||
netif_create_ip6_linklocal_address(&netif, 1);
|
||||
#endif
|
||||
sys_sem_signal(sem);
|
||||
}
|
||||
|
||||
void _init(void){
|
||||
sys_sem_t sem;
|
||||
|
||||
if(sys_sem_new(&sem, 0) != ERR_OK) {
|
||||
LWIP_ASSERT("failed to create semaphore", 0);
|
||||
}
|
||||
tcpip_init(tcpip_init_done, &sem);
|
||||
sys_sem_wait(&sem);
|
||||
sys_sem_free(&sem);
|
||||
}
|
||||
|
||||
void _fini(void){
|
||||
}
|
||||
48
ext/lwip-contrib/ports/unix/minimal/Makefile
Normal file
48
ext/lwip-contrib/ports/unix/minimal/Makefile
Normal file
@@ -0,0 +1,48 @@
|
||||
#
|
||||
# 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 ipv4 compile: echop
|
||||
.PHONY: all
|
||||
|
||||
include ../Common.mk
|
||||
|
||||
clean:
|
||||
rm -f *.o $(LWIPLIBCOMMON) $(APPLIB) echop .depend* *.core core
|
||||
|
||||
depend dep: .depend
|
||||
|
||||
include .depend
|
||||
|
||||
.depend: main.c $(LWIPFILES) $(APPFILES)
|
||||
$(CCDEP) $(CFLAGS) -MM $^ > .depend || rm -f .depend
|
||||
|
||||
echop: .depend $(LWIPLIBCOMMON) $(APPLIB) main.o $(APPFILES)
|
||||
$(CC) $(CFLAGS) -o echop main.o -Wl,--start-group $(APPLIB) $(LWIPLIBCOMMON) -Wl,--end-group $(LDFLAGS)
|
||||
12
ext/lwip-contrib/ports/unix/minimal/README
Normal file
12
ext/lwip-contrib/ports/unix/minimal/README
Normal file
@@ -0,0 +1,12 @@
|
||||
This is an example of a very minimal lwIP project. It runs in a single
|
||||
thread and runs a single example application - an echo server. The
|
||||
echo application is implemented using the raw API. Additionally this
|
||||
raw API example hosts the SNMPv1 agent for development purposes.
|
||||
|
||||
In order to run the demo without root priviledges, you can create a
|
||||
preconfigured tap device in advance and then run the application with the
|
||||
interface passed in via an environment variable:
|
||||
|
||||
$ sudo ip tuntap add dev tap0 mode tap user YOUR-USER-NAME
|
||||
$ sudo ip a a dev tap0 192.168.0.1/24
|
||||
$ PRECONFIGURED_TAPIF=tap0 ./echop
|
||||
440
ext/lwip-contrib/ports/unix/minimal/lwipopts.h
Normal file
440
ext/lwip-contrib/ports/unix/minimal/lwipopts.h
Normal file
@@ -0,0 +1,440 @@
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* lwIP Options Configuration
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2004 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_LWIPOPTS_H
|
||||
#define LWIP_LWIPOPTS_H
|
||||
|
||||
/*
|
||||
-----------------------------------------------
|
||||
---------- Platform specific locking ----------
|
||||
-----------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* NO_SYS==1: Provides VERY minimal functionality. Otherwise,
|
||||
* use lwIP facilities.
|
||||
*/
|
||||
#define NO_SYS 1
|
||||
|
||||
/**
|
||||
* SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
|
||||
* critical regions during buffer allocation, deallocation and memory
|
||||
* allocation and deallocation.
|
||||
*/
|
||||
#define SYS_LIGHTWEIGHT_PROT 0
|
||||
|
||||
/*
|
||||
------------------------------------
|
||||
---------- Memory options ----------
|
||||
------------------------------------
|
||||
*/
|
||||
/**
|
||||
* MEM_ALIGNMENT: should be set to the alignment of the CPU
|
||||
* 4 byte alignment -> #define MEM_ALIGNMENT 4
|
||||
* 2 byte alignment -> #define MEM_ALIGNMENT 2
|
||||
*/
|
||||
#define MEM_ALIGNMENT 1U
|
||||
|
||||
/**
|
||||
* MEM_SIZE: the size of the heap memory. If the application will send
|
||||
* a lot of data that needs to be copied, this should be set high.
|
||||
*/
|
||||
#define MEM_SIZE 16000
|
||||
|
||||
|
||||
/*
|
||||
------------------------------------------------
|
||||
---------- Internal Memory Pool Sizes ----------
|
||||
------------------------------------------------
|
||||
*/
|
||||
/**
|
||||
* MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF).
|
||||
* If the application sends a lot of data out of ROM (or other static memory),
|
||||
* this should be set high.
|
||||
*/
|
||||
#define MEMP_NUM_PBUF 30
|
||||
|
||||
/**
|
||||
* MEMP_NUM_RAW_PCB: Number of raw connection PCBs
|
||||
* (requires the LWIP_RAW option)
|
||||
*/
|
||||
#define MEMP_NUM_RAW_PCB 4
|
||||
|
||||
/**
|
||||
* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
|
||||
* per active UDP "connection".
|
||||
* (requires the LWIP_UDP option)
|
||||
*/
|
||||
#define MEMP_NUM_UDP_PCB 4
|
||||
|
||||
/**
|
||||
* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections.
|
||||
* (requires the LWIP_TCP option)
|
||||
*/
|
||||
#define MEMP_NUM_TCP_PCB 2
|
||||
|
||||
/**
|
||||
* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections.
|
||||
* (requires the LWIP_TCP option)
|
||||
*/
|
||||
#define MEMP_NUM_TCP_PCB_LISTEN 8
|
||||
|
||||
/**
|
||||
* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments.
|
||||
* (requires the LWIP_TCP option)
|
||||
*/
|
||||
#define MEMP_NUM_TCP_SEG 16
|
||||
|
||||
/**
|
||||
* MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing
|
||||
* packets (pbufs) that are waiting for an ARP request (to resolve
|
||||
* their destination address) to finish.
|
||||
* (requires the ARP_QUEUEING option)
|
||||
*/
|
||||
#define MEMP_NUM_ARP_QUEUE 2
|
||||
|
||||
/**
|
||||
* MEMP_NUM_SYS_TIMEOUT: the number of simultaneously active timeouts.
|
||||
* The default number of timeouts is calculated here for all enabled modules.
|
||||
* The formula expects settings to be either '0' or '1'.
|
||||
*
|
||||
* To this default value, 1 was added for the snmp_increment timer.
|
||||
*/
|
||||
#define MEMP_NUM_SYS_TIMEOUT (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT + (LWIP_IPV6 ? (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD) : 0)) + 1
|
||||
|
||||
/**
|
||||
* MEMP_NUM_NETBUF: the number of struct netbufs.
|
||||
* (only needed if you use the sequential API, like api_lib.c)
|
||||
*/
|
||||
#define MEMP_NUM_NETBUF 0
|
||||
|
||||
/**
|
||||
* MEMP_NUM_NETCONN: the number of struct netconns.
|
||||
* (only needed if you use the sequential API, like api_lib.c)
|
||||
*/
|
||||
#define MEMP_NUM_NETCONN 0
|
||||
|
||||
/**
|
||||
* MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used
|
||||
* for callback/timeout API communication.
|
||||
* (only needed if you use tcpip.c)
|
||||
*/
|
||||
#define MEMP_NUM_TCPIP_MSG_API 0
|
||||
|
||||
/**
|
||||
* MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used
|
||||
* for incoming packets.
|
||||
* (only needed if you use tcpip.c)
|
||||
*/
|
||||
#define MEMP_NUM_TCPIP_MSG_INPKT 0
|
||||
|
||||
/**
|
||||
* PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
|
||||
*/
|
||||
#define PBUF_POOL_SIZE 32
|
||||
|
||||
/*
|
||||
---------------------------------
|
||||
---------- ARP options ----------
|
||||
---------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_ARP==1: Enable ARP functionality.
|
||||
*/
|
||||
#define LWIP_ARP 1
|
||||
|
||||
/*
|
||||
--------------------------------
|
||||
---------- IP options ----------
|
||||
--------------------------------
|
||||
*/
|
||||
/**
|
||||
* IP_FORWARD==1: Enables the ability to forward IP packets across network
|
||||
* interfaces. If you are going to run lwIP on a device with only one network
|
||||
* interface, define this to 0.
|
||||
*/
|
||||
#define IP_FORWARD 0
|
||||
|
||||
/**
|
||||
* IP_OPTIONS: Defines the behavior for IP options.
|
||||
* IP_OPTIONS==0_ALLOWED: All packets with IP options are dropped.
|
||||
* IP_OPTIONS==1_ALLOWED: IP options are allowed (but not parsed).
|
||||
*/
|
||||
#define IP_OPTIONS_ALLOWED 1
|
||||
|
||||
/**
|
||||
* IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that
|
||||
* this option does not affect outgoing packet sizes, which can be controlled
|
||||
* via IP_FRAG.
|
||||
*/
|
||||
#define IP_REASSEMBLY 1
|
||||
|
||||
/**
|
||||
* IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note
|
||||
* that this option does not affect incoming packet sizes, which can be
|
||||
* controlled via IP_REASSEMBLY.
|
||||
*/
|
||||
#define IP_FRAG 1
|
||||
|
||||
/**
|
||||
* IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally)
|
||||
* a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived
|
||||
* in this time, the whole packet is discarded.
|
||||
*/
|
||||
#define IP_REASS_MAXAGE 3
|
||||
|
||||
/**
|
||||
* IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled.
|
||||
* Since the received pbufs are enqueued, be sure to configure
|
||||
* PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive
|
||||
* packets even if the maximum amount of fragments is enqueued for reassembly!
|
||||
*/
|
||||
#define IP_REASS_MAX_PBUFS 10
|
||||
|
||||
/**
|
||||
* IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP
|
||||
* fragmentation. Otherwise pbufs are allocated and reference the original
|
||||
* packet data to be fragmented.
|
||||
*/
|
||||
#define IP_FRAG_USES_STATIC_BUF 0
|
||||
|
||||
/**
|
||||
* IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers.
|
||||
*/
|
||||
#define IP_DEFAULT_TTL 255
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- ICMP options ----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_ICMP==1: Enable ICMP module inside the IP stack.
|
||||
* Be careful, disable that make your product non-compliant to RFC1122
|
||||
*/
|
||||
#define LWIP_ICMP 1
|
||||
|
||||
/**
|
||||
* ICMP_TTL: Default value for Time-To-Live used by ICMP packets.
|
||||
*/
|
||||
#define ICMP_TTL (IP_DEFAULT_TTL)
|
||||
|
||||
/*
|
||||
---------------------------------
|
||||
---------- RAW options ----------
|
||||
---------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_RAW==1: Enable application layer to hook into the IP layer itself.
|
||||
*/
|
||||
#define LWIP_RAW 0
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- DHCP options ----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_DHCP==1: Enable DHCP module.
|
||||
*/
|
||||
#define LWIP_DHCP 0
|
||||
|
||||
/*
|
||||
------------------------------------
|
||||
---------- AUTOIP options ----------
|
||||
------------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_AUTOIP==1: Enable AUTOIP module.
|
||||
*/
|
||||
#define LWIP_AUTOIP 0
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- SNMP options ----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP
|
||||
* transport.
|
||||
*/
|
||||
#define LWIP_SNMP 1
|
||||
#define LWIP_MIB2_CALLBACKS 0
|
||||
#define MIB2_STATS 1
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- IGMP options ----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_IGMP==1: Turn on IGMP module.
|
||||
*/
|
||||
#define LWIP_IGMP 0
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- DNS options -----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS
|
||||
* transport.
|
||||
*/
|
||||
#define LWIP_DNS 0
|
||||
|
||||
/*
|
||||
---------------------------------
|
||||
---------- UDP options ----------
|
||||
---------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_UDP==1: Turn on UDP.
|
||||
*/
|
||||
#define LWIP_UDP 1
|
||||
|
||||
/**
|
||||
* LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP)
|
||||
*/
|
||||
#define LWIP_UDPLITE 0
|
||||
|
||||
/**
|
||||
* UDP_TTL: Default Time-To-Live value.
|
||||
*/
|
||||
#define UDP_TTL (IP_DEFAULT_TTL)
|
||||
|
||||
/*
|
||||
---------------------------------
|
||||
---------- TCP options ----------
|
||||
---------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_TCP==1: Turn on TCP.
|
||||
*/
|
||||
#define LWIP_TCP 1
|
||||
|
||||
/*
|
||||
----------------------------------
|
||||
---------- Pbuf options ----------
|
||||
----------------------------------
|
||||
*/
|
||||
/**
|
||||
* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
|
||||
* link level header. The default is 14, the standard value for
|
||||
* Ethernet.
|
||||
*/
|
||||
#define PBUF_LINK_HLEN 16
|
||||
|
||||
/*
|
||||
------------------------------------
|
||||
---------- LOOPIF options ----------
|
||||
------------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c
|
||||
*/
|
||||
#define LWIP_HAVE_LOOPIF 0
|
||||
|
||||
|
||||
/*
|
||||
----------------------------------------------
|
||||
---------- Sequential layer options ----------
|
||||
----------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)
|
||||
*/
|
||||
#define LWIP_NETCONN 0
|
||||
|
||||
/*
|
||||
------------------------------------
|
||||
---------- Socket options ----------
|
||||
------------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_SOCKET==1: Enable Socket API (require to use sockets.c)
|
||||
*/
|
||||
#define LWIP_SOCKET 0
|
||||
|
||||
/*
|
||||
----------------------------------------
|
||||
---------- Statistics options ----------
|
||||
----------------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_STATS==1: Enable statistics collection in lwip_stats.
|
||||
*/
|
||||
#define LWIP_STATS 1
|
||||
|
||||
/*
|
||||
---------------------------------------
|
||||
---------- Debugging options ----------
|
||||
---------------------------------------
|
||||
*/
|
||||
|
||||
#define TAPIF_DEBUG LWIP_DBG_ON
|
||||
#define TUNIF_DEBUG LWIP_DBG_OFF
|
||||
#define UNIXIF_DEBUG LWIP_DBG_OFF
|
||||
#define DELIF_DEBUG LWIP_DBG_OFF
|
||||
#define SIO_FIFO_DEBUG LWIP_DBG_OFF
|
||||
#define TCPDUMP_DEBUG LWIP_DBG_ON
|
||||
#define API_LIB_DEBUG LWIP_DBG_ON
|
||||
#define API_MSG_DEBUG LWIP_DBG_ON
|
||||
#define TCPIP_DEBUG LWIP_DBG_ON
|
||||
#define NETIF_DEBUG LWIP_DBG_ON
|
||||
#define SOCKETS_DEBUG LWIP_DBG_ON
|
||||
#define DEMO_DEBUG LWIP_DBG_ON
|
||||
#define IP_DEBUG LWIP_DBG_ON
|
||||
#define IP_REASS_DEBUG LWIP_DBG_ON
|
||||
#define RAW_DEBUG LWIP_DBG_ON
|
||||
#define ICMP_DEBUG LWIP_DBG_ON
|
||||
#define UDP_DEBUG LWIP_DBG_ON
|
||||
#define TCP_DEBUG LWIP_DBG_ON
|
||||
#define TCP_INPUT_DEBUG LWIP_DBG_ON
|
||||
#define TCP_OUTPUT_DEBUG LWIP_DBG_ON
|
||||
#define TCP_RTO_DEBUG LWIP_DBG_ON
|
||||
#define TCP_CWND_DEBUG LWIP_DBG_ON
|
||||
#define TCP_WND_DEBUG LWIP_DBG_ON
|
||||
#define TCP_FR_DEBUG LWIP_DBG_ON
|
||||
#define TCP_QLEN_DEBUG LWIP_DBG_ON
|
||||
#define TCP_RST_DEBUG LWIP_DBG_ON
|
||||
|
||||
extern unsigned char debug_flags;
|
||||
#define LWIP_DBG_TYPES_ON debug_flags
|
||||
|
||||
#endif /* LWIP_LWIPOPTS_H */
|
||||
224
ext/lwip-contrib/ports/unix/minimal/main.c
Normal file
224
ext/lwip-contrib/ports/unix/minimal/main.c
Normal file
@@ -0,0 +1,224 @@
|
||||
/*
|
||||
* 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>
|
||||
* RT timer modifications by Christiaan Simons
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <getopt.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "lwip/init.h"
|
||||
|
||||
#include "lwip/debug.h"
|
||||
|
||||
#include "lwip/mem.h"
|
||||
#include "lwip/memp.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/timeouts.h"
|
||||
|
||||
#include "lwip/stats.h"
|
||||
|
||||
#include "lwip/ip.h"
|
||||
#include "lwip/ip4_frag.h"
|
||||
#include "lwip/udp.h"
|
||||
#include "lwip/tcp.h"
|
||||
#include "netif/tapif.h"
|
||||
#include "netif/etharp.h"
|
||||
|
||||
#include "lwip/apps/snmp.h"
|
||||
#include "lwip/apps/snmp_mib2.h"
|
||||
|
||||
#include "apps/snmp_private_mib/private_mib.h"
|
||||
#include "apps/udpecho_raw/udpecho_raw.h"
|
||||
#include "apps/tcpecho_raw/tcpecho_raw.h"
|
||||
|
||||
/* (manual) host IP configuration */
|
||||
static ip4_addr_t ipaddr, netmask, gw;
|
||||
|
||||
#if LWIP_SNMP
|
||||
/* SNMP trap destination cmd option */
|
||||
static unsigned char trap_flag;
|
||||
static ip_addr_t trap_addr;
|
||||
|
||||
static const struct snmp_mib *mibs[] = {
|
||||
&mib2,
|
||||
&mib_private
|
||||
};
|
||||
#endif
|
||||
|
||||
/* nonstatic debug cmd option, exported in lwipopts.h */
|
||||
unsigned char debug_flags;
|
||||
|
||||
#if LWIP_SNMP
|
||||
/* enable == 1, disable == 2 */
|
||||
u8_t snmpauthentraps_set = 2;
|
||||
#endif
|
||||
|
||||
static struct option longopts[] = {
|
||||
/* turn on debugging output (if build with LWIP_DEBUG) */
|
||||
{"debug", no_argument, NULL, 'd'},
|
||||
/* help */
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
/* gateway address */
|
||||
{"gateway", required_argument, NULL, 'g'},
|
||||
/* ip address */
|
||||
{"ipaddr", required_argument, NULL, 'i'},
|
||||
/* netmask */
|
||||
{"netmask", required_argument, NULL, 'm'},
|
||||
/* ping destination */
|
||||
{"trap_destination", required_argument, NULL, 't'},
|
||||
/* new command line options go here! */
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
#define NUM_OPTS ((sizeof(longopts) / sizeof(struct option)) - 1)
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
unsigned char i;
|
||||
|
||||
printf("options:\n");
|
||||
for (i = 0; i < NUM_OPTS; i++) {
|
||||
printf("-%c --%s\n",longopts[i].val, longopts[i].name);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
struct netif netif;
|
||||
int ch;
|
||||
char ip_str[16] = {0}, nm_str[16] = {0}, gw_str[16] = {0};
|
||||
|
||||
/* startup defaults (may be overridden by one or more opts) */
|
||||
IP4_ADDR(&gw, 192,168,0,1);
|
||||
IP4_ADDR(&ipaddr, 192,168,0,2);
|
||||
IP4_ADDR(&netmask, 255,255,255,0);
|
||||
|
||||
#if LWIP_SNMP
|
||||
trap_flag = 0;
|
||||
#endif
|
||||
/* use debug flags defined by debug.h */
|
||||
debug_flags = LWIP_DBG_OFF;
|
||||
|
||||
while ((ch = getopt_long(argc, argv, "dhg:i:m:t:", longopts, NULL)) != -1) {
|
||||
switch (ch) {
|
||||
case 'd':
|
||||
debug_flags |= (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT);
|
||||
break;
|
||||
case 'h':
|
||||
usage();
|
||||
exit(0);
|
||||
break;
|
||||
case 'g':
|
||||
ip4addr_aton(optarg, &gw);
|
||||
break;
|
||||
case 'i':
|
||||
ip4addr_aton(optarg, &ipaddr);
|
||||
break;
|
||||
case 'm':
|
||||
ip4addr_aton(optarg, &netmask);
|
||||
break;
|
||||
case 't':
|
||||
#if LWIP_SNMP
|
||||
trap_flag = !0;
|
||||
/* @todo: remove this authentraps tweak
|
||||
when we have proper SET & non-volatile mem */
|
||||
snmpauthentraps_set = 1;
|
||||
ipaddr_aton(optarg, &trap_addr);
|
||||
strncpy(ip_str, ipaddr_ntoa(&trap_addr),sizeof(ip_str));
|
||||
printf("SNMP trap destination %s\n", ip_str);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
break;
|
||||
}
|
||||
}
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
strncpy(ip_str, ip4addr_ntoa(&ipaddr), sizeof(ip_str));
|
||||
strncpy(nm_str, ip4addr_ntoa(&netmask), sizeof(nm_str));
|
||||
strncpy(gw_str, ip4addr_ntoa(&gw), sizeof(gw_str));
|
||||
printf("Host at %s mask %s gateway %s\n", ip_str, nm_str, gw_str);
|
||||
|
||||
|
||||
#ifdef PERF
|
||||
perf_init("/tmp/minimal.perf");
|
||||
#endif /* PERF */
|
||||
|
||||
lwip_init();
|
||||
|
||||
printf("TCP/IP initialized.\n");
|
||||
|
||||
netif_add(&netif, &ipaddr, &netmask, &gw, NULL, tapif_init, ethernet_input);
|
||||
netif_set_default(&netif);
|
||||
netif_set_up(&netif);
|
||||
#if LWIP_IPV6
|
||||
netif_create_ip6_linklocal_address(&netif, 1);
|
||||
#endif
|
||||
|
||||
#if LWIP_SNMP
|
||||
/* initialize our private example MIB */
|
||||
lwip_privmib_init();
|
||||
|
||||
/* snmp_trap_dst_ip_set(0,&trap_addr); */
|
||||
/* snmp_trap_dst_enable(0,trap_flag); */
|
||||
|
||||
#if SNMP_LWIP_MIB2
|
||||
#if SNMP_USE_NETCONN
|
||||
snmp_threadsync_init(&snmp_mib2_lwip_locks, snmp_mib2_lwip_synchronizer);
|
||||
#endif
|
||||
snmp_mib2_set_syscontact_readonly((const u8_t*)"root", NULL);
|
||||
snmp_mib2_set_syslocation_readonly((const u8_t*)"lwIP development PC", NULL);
|
||||
snmp_mib2_set_sysdescr((const u8_t*)"minimal example", NULL);
|
||||
#endif /* SNMP_LWIP_MIB2 */
|
||||
|
||||
/* snmp_set_snmpenableauthentraps(&snmpauthentraps_set); */
|
||||
snmp_set_mibs(mibs, LWIP_ARRAYSIZE(mibs));
|
||||
snmp_init();
|
||||
#endif /* LWIP_SNMP */
|
||||
|
||||
udpecho_raw_init();
|
||||
tcpecho_raw_init();
|
||||
|
||||
printf("Applications started.\n");
|
||||
|
||||
|
||||
while (1) {
|
||||
/* poll netif, pass packet to lwIP */
|
||||
tapif_select(&netif);
|
||||
|
||||
sys_check_timeouts();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
135
ext/lwip/test/unit/lwipopts.h → ext/lwip-contrib/ports/unix/port/include/arch/cc.h
Executable file → Normal file
135
ext/lwip/test/unit/lwipopts.h → ext/lwip-contrib/ports/unix/port/include/arch/cc.h
Executable file → Normal file
@@ -1,65 +1,70 @@
|
||||
/*
|
||||
* 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: Simon Goldschmidt
|
||||
*
|
||||
*/
|
||||
#ifndef LWIP_HDR_LWIPOPTS_H
|
||||
#define LWIP_HDR_LWIPOPTS_H
|
||||
|
||||
/* Prevent having to link sys_arch.c (we don't test the API layers in unit tests) */
|
||||
#define NO_SYS 1
|
||||
#define SYS_LIGHTWEIGHT_PROT 0
|
||||
#define LWIP_NETCONN 0
|
||||
#define LWIP_SOCKET 0
|
||||
|
||||
/* Enable DHCP to test it, disable UDP checksum to easier inject packets */
|
||||
#define LWIP_DHCP 1
|
||||
|
||||
/* Minimal changes to opt.h required for tcp unit tests: */
|
||||
#define MEM_SIZE 16000
|
||||
#define TCP_SND_QUEUELEN 40
|
||||
#define MEMP_NUM_TCP_SEG TCP_SND_QUEUELEN
|
||||
#define TCP_SND_BUF (12 * TCP_MSS)
|
||||
#define TCP_WND (10 * TCP_MSS)
|
||||
#define LWIP_WND_SCALE 1
|
||||
#define TCP_RCV_SCALE 0
|
||||
#define PBUF_POOL_SIZE 400 /* pbuf tests need ~200KByte */
|
||||
|
||||
/* Enable IGMP and MDNS for MDNS tests */
|
||||
#define LWIP_IGMP 1
|
||||
#define LWIP_MDNS_RESPONDER 1
|
||||
#define LWIP_NUM_NETIF_CLIENT_DATA (LWIP_MDNS_RESPONDER)
|
||||
|
||||
/* Minimal changes to opt.h required for etharp unit tests: */
|
||||
#define ETHARP_SUPPORT_STATIC_ENTRIES 1
|
||||
|
||||
/* MIB2 stats are required to check IPv4 reassembly results */
|
||||
#define MIB2_STATS 1
|
||||
|
||||
#endif /* LWIP_HDR_LWIPOPTS_H */
|
||||
/*
|
||||
* 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
|
||||
|
||||
/* see https://sourceforge.net/p/predef/wiki/OperatingSystems/ */
|
||||
#if defined __ANDROID__
|
||||
#define LWIP_UNIX_ANDROID
|
||||
#elif defined __linux__
|
||||
#define LWIP_UNIX_LINUX
|
||||
#elif defined __APPLE__
|
||||
#define LWIP_UNIX_MACH
|
||||
#elif defined __OpenBSD__
|
||||
#define LWIP_UNIX_OPENBSD
|
||||
#elif defined __CYGWIN__
|
||||
#define LWIP_UNIX_CYGWIN
|
||||
#endif
|
||||
|
||||
#define LWIP_TIMEVAL_PRIVATE 0
|
||||
#include <sys/time.h>
|
||||
|
||||
#define LWIP_ERRNO_INCLUDE <errno.h>
|
||||
|
||||
#define LWIP_RAND() ((u32_t)rand())
|
||||
|
||||
/* different handling for unit test, normally not needed */
|
||||
#ifdef LWIP_NOASSERT_ON_ERROR
|
||||
#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \
|
||||
handler;}} while(0)
|
||||
#endif
|
||||
|
||||
#if defined(LWIP_UNIX_ANDROID) && defined(FD_SET)
|
||||
typedef __kernel_fd_set fd_set;
|
||||
#endif
|
||||
|
||||
struct sio_status_s;
|
||||
typedef struct sio_status_s sio_status_t;
|
||||
#define sio_fd_t sio_status_t*
|
||||
#define __sio_fd_t_defined
|
||||
|
||||
#endif /* LWIP_ARCH_CC_H */
|
||||
131
ext/lwip/test/fuzz/lwipopts.h → ext/lwip-contrib/ports/unix/port/include/arch/perf.h
Executable file → Normal file
131
ext/lwip/test/fuzz/lwipopts.h → ext/lwip-contrib/ports/unix/port/include/arch/perf.h
Executable file → Normal file
@@ -1,68 +1,63 @@
|
||||
/*
|
||||
* 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: Simon Goldschmidt
|
||||
*
|
||||
*/
|
||||
#ifndef LWIP_HDR_LWIPOPTS_H__
|
||||
#define LWIP_HDR_LWIPOPTS_H__
|
||||
|
||||
/* Prevent having to link sys_arch.c (we don't test the API layers in unit tests) */
|
||||
#define NO_SYS 1
|
||||
#define LWIP_NETCONN 0
|
||||
#define LWIP_SOCKET 0
|
||||
#define SYS_LIGHTWEIGHT_PROT 0
|
||||
|
||||
#define LWIP_IPV6 1
|
||||
#define IPV6_FRAG_COPYHEADER 1
|
||||
#define LWIP_IPV6_DUP_DETECT_ATTEMPTS 0
|
||||
|
||||
/* Enable DHCP to test it */
|
||||
#define LWIP_DHCP 1
|
||||
|
||||
/* Turn off checksum verification of fuzzed data */
|
||||
#define CHECKSUM_CHECK_IP 0
|
||||
#define CHECKSUM_CHECK_UDP 0
|
||||
#define CHECKSUM_CHECK_TCP 0
|
||||
#define CHECKSUM_CHECK_ICMP 0
|
||||
#define CHECKSUM_CHECK_ICMP6 0
|
||||
|
||||
/* Minimal changes to opt.h required for tcp unit tests: */
|
||||
#define MEM_SIZE 16000
|
||||
#define TCP_SND_QUEUELEN 40
|
||||
#define MEMP_NUM_TCP_SEG TCP_SND_QUEUELEN
|
||||
#define TCP_SND_BUF (12 * TCP_MSS)
|
||||
#define TCP_WND (10 * TCP_MSS)
|
||||
#define LWIP_WND_SCALE 1
|
||||
#define TCP_RCV_SCALE 0
|
||||
#define PBUF_POOL_SIZE 400 /* pbuf tests need ~200KByte */
|
||||
|
||||
/* Minimal changes to opt.h required for etharp unit tests: */
|
||||
#define ETHARP_SUPPORT_STATIC_ENTRIES 1
|
||||
|
||||
#endif /* LWIP_HDR_LWIPOPTS_H__ */
|
||||
/*
|
||||
* 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_PERF_H
|
||||
#define LWIP_ARCH_PERF_H
|
||||
|
||||
#include <sys/times.h>
|
||||
|
||||
#ifdef PERF
|
||||
#define PERF_START { \
|
||||
unsigned long __c1l, __c1h, __c2l, __c2h; \
|
||||
__asm__(".byte 0x0f, 0x31" : "=a" (__c1l), "=d" (__c1h))
|
||||
#define PERF_STOP(x) __asm__(".byte 0x0f, 0x31" : "=a" (__c2l), "=d" (__c2h)); \
|
||||
perf_print(__c1l, __c1h, __c2l, __c2h, x);}
|
||||
|
||||
/*#define PERF_START do { \
|
||||
struct tms __perf_start, __perf_end; \
|
||||
times(&__perf_start)
|
||||
#define PERF_STOP(x) times(&__perf_end); \
|
||||
perf_print_times(&__perf_start, &__perf_end, x);\
|
||||
} while(0)*/
|
||||
#else /* PERF */
|
||||
#define PERF_START /* null definition */
|
||||
#define PERF_STOP(x) /* null definition */
|
||||
#endif /* PERF */
|
||||
|
||||
void perf_print(unsigned long c1l, unsigned long c1h,
|
||||
unsigned long c2l, unsigned long c2h,
|
||||
char *key);
|
||||
|
||||
void perf_print_times(struct tms *start, struct tms *end, char *key);
|
||||
|
||||
void perf_init(char *fname);
|
||||
|
||||
#endif /* LWIP_ARCH_PERF_H */
|
||||
63
ext/lwip-contrib/ports/unix/port/include/arch/sys_arch.h
Normal file
63
ext/lwip-contrib/ports/unix/port/include/arch/sys_arch.h
Normal file
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
#define SYS_MBOX_NULL NULL
|
||||
#define SYS_SEM_NULL NULL
|
||||
|
||||
typedef u32_t sys_prot_t;
|
||||
|
||||
struct sys_sem;
|
||||
typedef struct sys_sem * sys_sem_t;
|
||||
#define sys_sem_valid(sem) (((sem) != NULL) && (*(sem) != NULL))
|
||||
#define sys_sem_valid_val(sem) ((sem) != NULL)
|
||||
#define sys_sem_set_invalid(sem) do { if((sem) != NULL) { *(sem) = NULL; }}while(0)
|
||||
#define sys_sem_set_invalid_val(sem) do { (sem) = NULL; }while(0)
|
||||
|
||||
struct sys_mutex;
|
||||
typedef struct sys_mutex * sys_mutex_t;
|
||||
#define sys_mutex_valid(mutex) sys_sem_valid(mutex)
|
||||
#define sys_mutex_set_invalid(mutex) sys_sem_set_invalid(mutex)
|
||||
|
||||
struct sys_mbox;
|
||||
typedef struct sys_mbox * sys_mbox_t;
|
||||
#define sys_mbox_valid(mbox) sys_sem_valid(mbox)
|
||||
#define sys_mbox_valid_val(mbox) sys_sem_valid_val(mbox)
|
||||
#define sys_mbox_set_invalid(mbox) sys_sem_set_invalid(mbox)
|
||||
#define sys_mbox_set_invalid_val(mbox) sys_sem_set_invalid_val(mbox)
|
||||
|
||||
struct sys_thread;
|
||||
typedef struct sys_thread * sys_thread_t;
|
||||
|
||||
#endif /* LWIP_ARCH_SYS_ARCH_H */
|
||||
|
||||
42
ext/lwip-contrib/ports/unix/port/include/netif/delif.h
Normal file
42
ext/lwip-contrib/ports/unix/port/include/netif/delif.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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_DELIF_H
|
||||
#define LWIP_DELIF_H
|
||||
|
||||
#include "lwip/netif.h"
|
||||
|
||||
#include "lwip/pbuf.h"
|
||||
|
||||
err_t delif_init(struct netif *netif);
|
||||
err_t delif_init_thread(struct netif *netif);
|
||||
|
||||
#endif /* LWIP_DELIF_H */
|
||||
41
ext/lwip-contrib/ports/unix/port/include/netif/dropif.h
Normal file
41
ext/lwip-contrib/ports/unix/port/include/netif/dropif.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* 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_DROPIF_H
|
||||
#define LWIP_DROPIF_H
|
||||
|
||||
#include "lwip/netif.h"
|
||||
|
||||
#include "lwip/pbuf.h"
|
||||
|
||||
err_t dropif_init(struct netif *netif);
|
||||
|
||||
#endif /* LWIP_DROPIF_H */
|
||||
54
ext/lwip-contrib/ports/unix/port/include/netif/fifo.h
Normal file
54
ext/lwip-contrib/ports/unix/port/include/netif/fifo.h
Normal file
@@ -0,0 +1,54 @@
|
||||
#ifndef FIFO_H
|
||||
#define FIFO_H
|
||||
|
||||
#include "lwip/sys.h"
|
||||
|
||||
/** How many bytes in fifo */
|
||||
#define FIFOSIZE 2048
|
||||
|
||||
/** fifo data structure, this one is passed to all fifo functions */
|
||||
typedef struct fifo_t {
|
||||
u8_t data[FIFOSIZE+10]; /* data segment, +10 is a hack probably not needed.. FIXME! */
|
||||
int dataslot; /* index to next char to be read */
|
||||
int emptyslot; /* index to next empty slot */
|
||||
int len; /* len probably not needed, may be calculated from dataslot and emptyslot in conjunction with FIFOSIZE */
|
||||
|
||||
sys_sem_t sem; /* semaphore protecting simultaneous data manipulation */
|
||||
sys_sem_t getSem; /* sepaphore used to signal new data if getWaiting is set */
|
||||
u8_t getWaiting; /* flag used to indicate that fifoget is waiting for data. fifoput is suposed to clear */
|
||||
/* this flag prior to signaling the getSem semaphore */
|
||||
} fifo_t;
|
||||
|
||||
|
||||
/**
|
||||
* Get a character from fifo
|
||||
* Blocking call.
|
||||
* @param fifo pointer to fifo data structure
|
||||
* @return character read from fifo
|
||||
*/
|
||||
u8_t fifoGet(fifo_t * fifo);
|
||||
|
||||
/**
|
||||
* Get a character from fifo
|
||||
* Non blocking call.
|
||||
* @param fifo pointer to fifo data structure
|
||||
* @return character read from fifo, or < zero if non was available
|
||||
*/
|
||||
s16_t fifoGetNonBlock(fifo_t * fifo);
|
||||
|
||||
/**
|
||||
* fifoput is called by the signalhandler when new data has arrived (or some other event is indicated)
|
||||
* fifoput reads directly from the serialport and is thus highly dependent on unix arch at this moment
|
||||
* @param fifo pointer to fifo data structure
|
||||
* @param fd unix file descriptor
|
||||
*/
|
||||
void fifoPut(fifo_t * fifo, int fd);
|
||||
|
||||
/**
|
||||
* fifoinit initiate fifo
|
||||
* @param fifo pointer to fifo data structure, allocated by the user
|
||||
*/
|
||||
void fifoInit(fifo_t * fifo);
|
||||
|
||||
#endif
|
||||
|
||||
26
ext/lwip-contrib/ports/unix/port/include/netif/list.h
Normal file
26
ext/lwip-contrib/ports/unix/port/include/netif/list.h
Normal file
@@ -0,0 +1,26 @@
|
||||
|
||||
#ifndef LWIP_LIST_H
|
||||
#define LWIP_LIST_H
|
||||
|
||||
struct elem;
|
||||
|
||||
struct list {
|
||||
struct elem *first, *last;
|
||||
int size, elems;
|
||||
};
|
||||
|
||||
struct elem {
|
||||
struct elem *next;
|
||||
void *data;
|
||||
};
|
||||
|
||||
struct list *list_new(int size);
|
||||
int list_push(struct list *list, void *data);
|
||||
void *list_pop(struct list *list);
|
||||
void *list_first(struct list *list);
|
||||
int list_elems(struct list *list);
|
||||
void list_delete(struct list *list);
|
||||
int list_remove(struct list *list, void *elem);
|
||||
void list_map(struct list *list, void (* func)(void *arg));
|
||||
|
||||
#endif
|
||||
72
ext/lwip/COPYING → ext/lwip-contrib/ports/unix/port/include/netif/pcapif.h
Executable file → Normal file
72
ext/lwip/COPYING → ext/lwip-contrib/ports/unix/port/include/netif/pcapif.h
Executable file → Normal file
@@ -1,33 +1,39 @@
|
||||
/*
|
||||
* 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>
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* 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_PCAPIF_H
|
||||
#define LWIP_PCAPIF_H
|
||||
|
||||
#include "lwip/netif.h"
|
||||
|
||||
err_t pcapif_init(struct netif *netif);
|
||||
|
||||
#endif /* LWIP_PCAPIF_H */
|
||||
60
ext/lwip-contrib/ports/unix/port/include/netif/sio.h
Normal file
60
ext/lwip-contrib/ports/unix/port/include/netif/sio.h
Normal file
@@ -0,0 +1,60 @@
|
||||
#ifndef SIO_UNIX_H
|
||||
#define SIO_UNIX_H
|
||||
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/netif.h"
|
||||
#include "netif/fifo.h"
|
||||
/*#include "netif/pppif.h"*/
|
||||
|
||||
struct sio_status_s {
|
||||
int fd;
|
||||
fifo_t myfifo;
|
||||
};
|
||||
|
||||
/* BAUDRATE is defined in sio.c as it is implementation specific */
|
||||
/** Baudrates */
|
||||
typedef enum sioBaudrates {
|
||||
SIO_BAUD_9600,
|
||||
SIO_BAUD_19200,
|
||||
SIO_BAUD_38400,
|
||||
SIO_BAUD_57600,
|
||||
SIO_BAUD_115200
|
||||
} sioBaudrates;
|
||||
|
||||
/**
|
||||
* Poll for a new character from incoming data stream
|
||||
* @param siostat siostatus struct, contains sio instance data, given by sio_open
|
||||
* @return char read from input stream, or < 0 if no char was available
|
||||
*/
|
||||
s16_t sio_poll(sio_status_t * siostat);
|
||||
|
||||
/**
|
||||
* Parse incoming characters until a string str is recieved, blocking call
|
||||
* @param str zero terminated string to expect
|
||||
* @param siostat siostatus struct, contains sio instance data, given by sio_open
|
||||
*/
|
||||
void sio_expect_string(u8_t *str, sio_status_t * siostat);
|
||||
|
||||
/**
|
||||
* Write a char to output data stream
|
||||
* @param str pointer to a zero terminated string
|
||||
* @param siostat siostatus struct, contains sio instance data, given by sio_open
|
||||
*/
|
||||
void sio_send_string(u8_t *str, sio_status_t * siostat);
|
||||
|
||||
/**
|
||||
* Flush outbuffer (send everything in buffer now), useful if some layer below is
|
||||
* holding on to data, waitng to fill a buffer
|
||||
* @param siostat siostatus struct, contains sio instance data, given by sio_open
|
||||
*/
|
||||
void sio_flush( sio_status_t * siostat );
|
||||
|
||||
/**
|
||||
* Change baudrate of port, may close and reopen port
|
||||
* @param baud new baudrate
|
||||
* @param siostat siostatus struct, contains sio instance data, given by sio_open
|
||||
*/
|
||||
void sio_change_baud( sioBaudrates baud, sio_status_t * siostat );
|
||||
|
||||
#endif
|
||||
|
||||
42
ext/lwip-contrib/ports/unix/port/include/netif/tapif.h
Normal file
42
ext/lwip-contrib/ports/unix/port/include/netif/tapif.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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_TAPIF_H
|
||||
#define LWIP_TAPIF_H
|
||||
|
||||
#include "lwip/netif.h"
|
||||
|
||||
err_t tapif_init(struct netif *netif);
|
||||
#if NO_SYS
|
||||
int tapif_select(struct netif *netif);
|
||||
#endif /* NO_SYS */
|
||||
|
||||
#endif /* LWIP_TAPIF_H */
|
||||
41
ext/lwip-contrib/ports/unix/port/include/netif/tcpdump.h
Normal file
41
ext/lwip-contrib/ports/unix/port/include/netif/tcpdump.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* 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_NETIF_TCPDUMP_H
|
||||
#define LWIP_NETIF_TCPDUMP_H
|
||||
|
||||
struct pbuf;
|
||||
struct netif;
|
||||
|
||||
void tcpdump_init(void);
|
||||
void tcpdump(struct pbuf *p, struct netif *netif);
|
||||
|
||||
#endif /* LWIP_NETIF_TCPDUMP_H */
|
||||
41
ext/lwip-contrib/ports/unix/port/include/netif/tunif.h
Normal file
41
ext/lwip-contrib/ports/unix/port/include/netif/tunif.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* 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_TUNIF_H
|
||||
#define LWIP_TUNIF_H
|
||||
|
||||
#include "lwip/netif.h"
|
||||
|
||||
#include "lwip/pbuf.h"
|
||||
|
||||
err_t tunif_init(struct netif *netif);
|
||||
|
||||
#endif /* LWIP_TUNIF_H */
|
||||
40
ext/lwip-contrib/ports/unix/port/include/netif/unixif.h
Normal file
40
ext/lwip-contrib/ports/unix/port/include/netif/unixif.h
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* 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_UNIXIF_H
|
||||
#define LWIP_UNIXIF_H
|
||||
|
||||
#include "lwip/netif.h"
|
||||
|
||||
err_t unixif_init_server(struct netif *netif);
|
||||
err_t unixif_init_client(struct netif *netif);
|
||||
|
||||
#endif /* LWIP_UNIXIF_H */
|
||||
384
ext/lwip-contrib/ports/unix/port/netif/delif.c
Normal file
384
ext/lwip-contrib/ports/unix/port/netif/delif.c
Normal file
@@ -0,0 +1,384 @@
|
||||
/*
|
||||
* 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/pbuf.h"
|
||||
|
||||
#if !NO_SYS
|
||||
|
||||
#include "lwip/debug.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "lwip/def.h"
|
||||
#include "netif/delif.h"
|
||||
|
||||
#ifdef LWIP_UNIX_LINUX
|
||||
#include "netif/tapif.h"
|
||||
#else /* LWIP_UNIX_LINUX */
|
||||
#include "netif/tunif.h"
|
||||
#endif /* LWIP_UNIX_LINUX */
|
||||
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/timeouts.h"
|
||||
|
||||
#ifndef DELIF_DEBUG
|
||||
#define DELIF_DEBUG LWIP_DBG_OFF
|
||||
#endif
|
||||
|
||||
#define DELIF_INPUT_DROPRATE 0.1
|
||||
#define DELIF_OUTPUT_DROPRATE 0.1
|
||||
|
||||
#define DELIF_INPUT_DELAY 500 /* Miliseconds. */
|
||||
#define DELIF_OUTPUT_DELAY 500 /* Miliseconds. */
|
||||
|
||||
#define DELIF_TIMEOUT 10
|
||||
|
||||
struct delif {
|
||||
err_t (* input)(struct pbuf *p, struct netif *inp);
|
||||
struct netif *netif;
|
||||
};
|
||||
|
||||
struct delif_pbuf {
|
||||
struct delif_pbuf *next;
|
||||
struct pbuf *p;
|
||||
ip_addr_t ipaddr;
|
||||
unsigned int time;
|
||||
};
|
||||
|
||||
static struct delif_pbuf *input_list = NULL;
|
||||
static struct delif_pbuf *output_list = NULL;
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
delif_input_timeout(void *arg)
|
||||
{
|
||||
struct netif *netif;
|
||||
struct delif *delif;
|
||||
struct delif_pbuf *dp;
|
||||
unsigned int timeout, now;
|
||||
|
||||
timeout = DELIF_TIMEOUT;
|
||||
|
||||
netif = (struct netif*)arg;
|
||||
delif = (struct delif*)netif->state;
|
||||
|
||||
/* Check if there is anything on the input list. */
|
||||
dp = input_list;
|
||||
while (dp != NULL) {
|
||||
now = sys_now();
|
||||
|
||||
if (dp->time <= now) {
|
||||
delif->input(dp->p, netif);
|
||||
if (dp->next != NULL) {
|
||||
if (dp->next->time > now) {
|
||||
timeout = dp->next->time - now;
|
||||
} else {
|
||||
timeout = 0;
|
||||
}
|
||||
LWIP_DEBUGF(DELIF_DEBUG, ("delif_output_timeout: timeout %u.\n", timeout));
|
||||
|
||||
}
|
||||
input_list = dp->next;
|
||||
free(dp);
|
||||
dp = input_list;
|
||||
} else {
|
||||
dp = dp->next;
|
||||
}
|
||||
}
|
||||
|
||||
sys_timeout(timeout, delif_input_timeout, arg);
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
delif_output_timeout(void *arg)
|
||||
{
|
||||
struct netif *netif;
|
||||
struct delif *delif;
|
||||
struct delif_pbuf *dp;
|
||||
unsigned int timeout, now;
|
||||
|
||||
timeout = DELIF_TIMEOUT;
|
||||
|
||||
netif = (struct netif*)arg;
|
||||
delif = (struct delif*)netif->state;
|
||||
|
||||
/* Check if there is anything on the output list. */
|
||||
dp = output_list;
|
||||
while (dp != NULL) {
|
||||
now = sys_now();
|
||||
if (dp->time <= now) {
|
||||
LWIP_DEBUGF(DELIF_DEBUG, ("delif_output_timeout: now %u dp->time %u\n",
|
||||
now, dp->time));
|
||||
|
||||
#if LWIP_IPV4
|
||||
if(!IP_IS_V6_VAL(dp->ipaddr)) {
|
||||
delif->netif->output(delif->netif, dp->p, ip_2_ip4(&dp->ipaddr));
|
||||
}
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
#if LWIP_IPV6
|
||||
if(IP_IS_V6_VAL(dp->ipaddr)) {
|
||||
delif->netif->output_ip6(delif->netif, dp->p, ip_2_ip6(&dp->ipaddr));
|
||||
}
|
||||
#endif /* LWIP_IPV6 */
|
||||
|
||||
if (dp->next != NULL) {
|
||||
if (dp->next->time > now) {
|
||||
timeout = dp->next->time - now;
|
||||
} else {
|
||||
timeout = 0;
|
||||
}
|
||||
LWIP_DEBUGF(DELIF_DEBUG, ("delif_output_timeout: timeout %u.\n", timeout));
|
||||
|
||||
}
|
||||
pbuf_free(dp->p);
|
||||
|
||||
output_list = dp->next;
|
||||
free(dp);
|
||||
dp = output_list;
|
||||
} else {
|
||||
dp = dp->next;
|
||||
}
|
||||
}
|
||||
|
||||
sys_timeout(timeout, delif_output_timeout, arg);
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static err_t
|
||||
delif_output(struct netif *netif, struct pbuf *p, const ip_addr_t *ipaddr)
|
||||
{
|
||||
struct delif_pbuf *dp, *np;
|
||||
char *data;
|
||||
|
||||
LWIP_UNUSED_ARG(netif);
|
||||
|
||||
LWIP_DEBUGF(DELIF_DEBUG, ("delif_output\n"));
|
||||
|
||||
#ifdef DELIF_OUTPUT_DROPRATE
|
||||
if (((double)rand()/(double)RAND_MAX) < DELIF_OUTPUT_DROPRATE) {
|
||||
LWIP_DEBUGF(DELIF_DEBUG, ("delif_output: Packet dropped\n"));
|
||||
return ERR_BUF;
|
||||
}
|
||||
#endif /* DELIF_OUTPUT_DROPRATE */
|
||||
|
||||
LWIP_DEBUGF(DELIF_DEBUG, ("delif_output\n"));
|
||||
|
||||
dp = (struct delif_pbuf*)malloc(sizeof(struct delif_pbuf));
|
||||
data = (char*)malloc(p->tot_len);
|
||||
|
||||
pbuf_copy_partial(p, data, p->tot_len, 0);
|
||||
|
||||
dp->p = pbuf_alloc(PBUF_LINK, 0, PBUF_ROM);
|
||||
dp->p->payload = data;
|
||||
dp->p->len = p->tot_len;
|
||||
dp->p->tot_len = p->tot_len;
|
||||
dp->ipaddr = *ipaddr;
|
||||
dp->time = sys_now() + DELIF_OUTPUT_DELAY;
|
||||
dp->next = NULL;
|
||||
if (output_list == NULL) {
|
||||
output_list = dp;
|
||||
} else {
|
||||
for(np = output_list; np->next != NULL; np = np->next);
|
||||
np->next = dp;
|
||||
}
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
#if LWIP_IPV4
|
||||
static err_t
|
||||
delif_output4(struct netif *netif, struct pbuf *p, const ip4_addr_t *ipaddr)
|
||||
{
|
||||
ip_addr_t ip;
|
||||
if (ipaddr != NULL) {
|
||||
ip_addr_copy_from_ip4(ip, *ipaddr);
|
||||
} else {
|
||||
ip = *IP_ADDR_ANY;
|
||||
}
|
||||
return delif_output(netif, p, &ip);
|
||||
}
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
#if LWIP_IPV6
|
||||
static err_t
|
||||
delif_output6(struct netif *netif, struct pbuf *p, const ip6_addr_t *ipaddr)
|
||||
{
|
||||
ip_addr_t ip;
|
||||
if (ipaddr != NULL) {
|
||||
ip_addr_copy_from_ip6(ip, *ipaddr);
|
||||
} else {
|
||||
ip = *IP6_ADDR_ANY;
|
||||
}
|
||||
return delif_output(netif, p, &ip);
|
||||
}
|
||||
#endif /* LWIP_IPV6 */
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static err_t
|
||||
delif_input(struct pbuf *p, struct netif *inp)
|
||||
{
|
||||
struct delif_pbuf *dp, *np;
|
||||
|
||||
LWIP_UNUSED_ARG(inp);
|
||||
|
||||
LWIP_DEBUGF(DELIF_DEBUG, ("delif_input\n"));
|
||||
#ifdef DELIF_INPUT_DROPRATE
|
||||
if (((double)rand()/(double)RAND_MAX) < DELIF_INPUT_DROPRATE) {
|
||||
LWIP_DEBUGF(DELIF_DEBUG, ("delif_input: Packet dropped\n"));
|
||||
pbuf_free(p);
|
||||
return ERR_OK;
|
||||
}
|
||||
#endif /* DELIF_INPUT_DROPRATE */
|
||||
|
||||
dp = (struct delif_pbuf*)malloc(sizeof(struct delif_pbuf));
|
||||
dp->p = p;
|
||||
dp->time = sys_now() + DELIF_INPUT_DELAY;
|
||||
dp->next = NULL;
|
||||
|
||||
if (input_list == NULL) {
|
||||
input_list = dp;
|
||||
} else {
|
||||
for(np = input_list; np->next != NULL; np = np->next);
|
||||
np->next = dp;
|
||||
}
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
err_t
|
||||
delif_init(struct netif *netif)
|
||||
{
|
||||
struct delif *del;
|
||||
|
||||
del = (struct delif*)malloc(sizeof(struct delif));
|
||||
if (!del) {
|
||||
return ERR_MEM;
|
||||
}
|
||||
netif->state = del;
|
||||
netif->name[0] = 'd';
|
||||
netif->name[1] = 'e';
|
||||
|
||||
#if LWIP_IPV4
|
||||
netif->output = delif_output4;
|
||||
#endif /* LWIP_IPV4 */
|
||||
#if LWIP_IPV6
|
||||
netif->output_ip6 = delif_output6;
|
||||
#endif /* LWIP_IPV6 */
|
||||
|
||||
del->netif = (struct netif*)malloc(sizeof(struct netif));
|
||||
if (!del->netif) {
|
||||
free(del);
|
||||
return ERR_MEM;
|
||||
}
|
||||
|
||||
#ifdef LWIP_UNIX_LINUX
|
||||
tapif_init(del->netif);
|
||||
#else /* LWIP_UNIX_LINUX */
|
||||
tunif_init(del->netif);
|
||||
#endif /* LWIP_UNIX_LINUX */
|
||||
|
||||
del->input = netif->input;
|
||||
del->netif->input = delif_input;
|
||||
|
||||
sys_timeout(DELIF_TIMEOUT, delif_input_timeout, netif);
|
||||
sys_timeout(DELIF_TIMEOUT, delif_output_timeout, netif);
|
||||
return ERR_OK;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
delif_thread(void *arg)
|
||||
{
|
||||
struct netif *netif = (struct netif*)arg;
|
||||
struct delif *del;
|
||||
sys_sem_t sem;
|
||||
|
||||
del = (struct delif*)netif->state;
|
||||
#ifdef LWIP_UNIX_LINUX
|
||||
tapif_init(del->netif);
|
||||
#else /* LWIP_UNIX_LINUX */
|
||||
tunif_init(del->netif);
|
||||
#endif /* LWIP_UNIX_LINUX */
|
||||
|
||||
sys_timeout(DELIF_TIMEOUT, delif_input_timeout, netif);
|
||||
sys_timeout(DELIF_TIMEOUT, delif_output_timeout, netif);
|
||||
|
||||
if(sys_sem_new(&sem, 0) != ERR_OK) {
|
||||
LWIP_ASSERT("Failed to create semaphore", 0);
|
||||
}
|
||||
sys_sem_wait(&sem);
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
err_t
|
||||
delif_init_thread(struct netif *netif)
|
||||
{
|
||||
struct delif *del;
|
||||
|
||||
LWIP_DEBUGF(DELIF_DEBUG, ("delif_init_thread\n"));
|
||||
|
||||
del = (struct delif*)malloc(sizeof(struct delif));
|
||||
if (!del) {
|
||||
return ERR_MEM;
|
||||
}
|
||||
|
||||
netif->state = del;
|
||||
netif->name[0] = 'd';
|
||||
netif->name[1] = 'e';
|
||||
|
||||
del->netif = (struct netif*)malloc(sizeof(struct netif));
|
||||
if (!del->netif) {
|
||||
free(del);
|
||||
return ERR_MEM;
|
||||
}
|
||||
|
||||
#if LWIP_IPV4
|
||||
netif->output = delif_output4;
|
||||
netif_set_addr(del->netif, netif_ip4_addr(netif), netif_ip4_netmask(netif), netif_ip4_gw(netif));
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
#if LWIP_IPV6
|
||||
{
|
||||
s8_t i;
|
||||
netif->output_ip6 = delif_output6;
|
||||
for(i=0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {
|
||||
netif_ip6_addr_set(del->netif, i, netif_ip6_addr(netif, i));
|
||||
}
|
||||
}
|
||||
#endif /* LWIP_IPV6 */
|
||||
|
||||
del->input = netif->input;
|
||||
del->netif->input = delif_input;
|
||||
|
||||
sys_thread_new("delif_thread", delif_thread, netif, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
return ERR_OK;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
#endif /* !NO_SYS */
|
||||
139
ext/lwip-contrib/ports/unix/port/netif/fifo.c
Normal file
139
ext/lwip-contrib/ports/unix/port/netif/fifo.c
Normal file
@@ -0,0 +1,139 @@
|
||||
/* Author: Magnus Ivarsson <magnus.ivarsson@volvo.com> */
|
||||
|
||||
/* ---------------------------------------------- */
|
||||
/* --- fifo 4 unix ------------------------------ */
|
||||
/* ---------------------------------------------- */
|
||||
#include "lwip/err.h"
|
||||
#include "netif/fifo.h"
|
||||
#include "lwip/debug.h"
|
||||
#include "lwip/def.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/arch.h"
|
||||
#include <unistd.h>
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
#ifndef SIO_FIFO_DEBUG
|
||||
#define SIO_FIFO_DEBUG LWIP_DBG_OFF
|
||||
#endif
|
||||
|
||||
u8_t fifoGet(fifo_t * fifo)
|
||||
{
|
||||
u8_t c;
|
||||
|
||||
sys_sem_wait(&fifo->sem); /* enter critical section */
|
||||
|
||||
if (fifo->dataslot == fifo->emptyslot)
|
||||
{
|
||||
fifo->getWaiting = TRUE; /* tell putFifo to signal us when data is available */
|
||||
sys_sem_signal(&fifo->sem); /* leave critical section (allow input from serial port..) */
|
||||
sys_sem_wait(&fifo->getSem); /* wait 4 data */
|
||||
sys_sem_wait(&fifo->sem); /* reenter critical section */
|
||||
}
|
||||
|
||||
c = fifo->data[fifo->dataslot++];
|
||||
fifo->len--;
|
||||
|
||||
if (fifo->dataslot == FIFOSIZE)
|
||||
{
|
||||
fifo->dataslot = 0;
|
||||
}
|
||||
sys_sem_signal(&fifo->sem); /* leave critical section */
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
s16_t fifoGetNonBlock(fifo_t * fifo)
|
||||
{
|
||||
u16_t c;
|
||||
|
||||
sys_sem_wait(&fifo->sem); /* enter critical section */
|
||||
|
||||
if (fifo->dataslot == fifo->emptyslot)
|
||||
{
|
||||
/* empty fifo */
|
||||
c = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
c = fifo->data[fifo->dataslot++];
|
||||
fifo->len--;
|
||||
|
||||
if (fifo->dataslot == FIFOSIZE)
|
||||
{
|
||||
fifo->dataslot = 0;
|
||||
}
|
||||
}
|
||||
sys_sem_signal(&fifo->sem); /* leave critical section */
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
void fifoPut(fifo_t * fifo, int fd)
|
||||
{
|
||||
/* FIXME: mutex around struct data.. */
|
||||
int cnt=0;
|
||||
|
||||
sys_sem_wait(&fifo->sem ); /* enter critical */
|
||||
|
||||
LWIP_DEBUGF( SIO_FIFO_DEBUG,("fifoput: len%d dat%d empt%d --> ", fifo->len, fifo->dataslot, fifo->emptyslot ) );
|
||||
|
||||
if ( fifo->emptyslot < fifo->dataslot )
|
||||
{
|
||||
cnt = read( fd, &fifo->data[fifo->emptyslot], fifo->dataslot - fifo->emptyslot );
|
||||
}
|
||||
else
|
||||
{
|
||||
cnt = read( fd, &fifo->data[fifo->emptyslot], FIFOSIZE-fifo->emptyslot );
|
||||
}
|
||||
fifo->emptyslot += cnt;
|
||||
fifo->len += cnt;
|
||||
|
||||
LWIP_DEBUGF( SIO_FIFO_DEBUG,("len%d dat%d empt%d\n", fifo->len, fifo->dataslot, fifo->emptyslot ) );
|
||||
|
||||
if ( fifo->len > FIFOSIZE )
|
||||
{
|
||||
printf( "ERROR: fifo overrun detected len=%d, flushing\n", fifo->len );
|
||||
fifo->dataslot = 0;
|
||||
fifo->emptyslot = 0;
|
||||
fifo->len = 0;
|
||||
}
|
||||
|
||||
if ( fifo->emptyslot == FIFOSIZE )
|
||||
{
|
||||
fifo->emptyslot = 0;
|
||||
LWIP_DEBUGF( SIO_FIFO_DEBUG, ("(WRAP) ") );
|
||||
|
||||
sys_sem_signal(&fifo->sem ); /* leave critical */
|
||||
fifoPut( fifo, fd );
|
||||
return;
|
||||
}
|
||||
if ( fifo->getWaiting )
|
||||
{
|
||||
fifo->getWaiting = FALSE;
|
||||
sys_sem_signal(&fifo->getSem );
|
||||
}
|
||||
|
||||
sys_sem_signal(&fifo->sem ); /* leave critical */
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void fifoInit(fifo_t * fifo)
|
||||
{
|
||||
fifo->dataslot = 0;
|
||||
fifo->emptyslot = 0;
|
||||
fifo->len = 0;
|
||||
if(sys_sem_new(&fifo->sem, 1) != ERR_OK) { /* critical section 1=free to enter */
|
||||
LWIP_ASSERT("Failed to create semaphore", 0);
|
||||
}
|
||||
if(sys_sem_new(&fifo->getSem, 0) != ERR_OK) { /* 0 = no one waiting */
|
||||
LWIP_ASSERT("Failed to create semaphore", 0);
|
||||
}
|
||||
fifo->getWaiting = FALSE;
|
||||
}
|
||||
153
ext/lwip-contrib/ports/unix/port/netif/list.c
Normal file
153
ext/lwip-contrib/ports/unix/port/netif/list.c
Normal file
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* 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 <stdlib.h>
|
||||
#include <netif/list.h>
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
struct list *
|
||||
list_new(int size)
|
||||
{
|
||||
struct list *list;
|
||||
list = (struct list *)malloc(sizeof(struct list));
|
||||
list->first = list->last = NULL;
|
||||
list->size = size;
|
||||
list->elems = 0;
|
||||
return list;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
int
|
||||
list_push(struct list *list, void *data)
|
||||
{
|
||||
struct elem *elem;
|
||||
|
||||
if (list->elems < list->size) {
|
||||
elem = (struct elem *)malloc(sizeof(struct elem));
|
||||
elem->data = data;
|
||||
elem->next = NULL;
|
||||
if (list->last != NULL) {
|
||||
list->last->next = elem;
|
||||
}
|
||||
list->last = elem;
|
||||
if (list->first == NULL) {
|
||||
list->first = elem;
|
||||
}
|
||||
list->elems++;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
void *
|
||||
list_pop(struct list *list)
|
||||
{
|
||||
struct elem *elem;
|
||||
void *data;
|
||||
|
||||
if (list->elems > 0) {
|
||||
elem = list->first;
|
||||
if (elem == list->last) {
|
||||
list->last = elem->next;
|
||||
}
|
||||
list->first = elem->next;
|
||||
|
||||
list->elems--;
|
||||
|
||||
data = elem->data;
|
||||
free(elem);
|
||||
|
||||
return data;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
void *
|
||||
list_first(struct list *list)
|
||||
{
|
||||
return list->first;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
int
|
||||
list_elems(struct list *list)
|
||||
{
|
||||
return list->elems;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
void
|
||||
list_delete(struct list *list)
|
||||
{
|
||||
while (list_pop(list) != NULL);
|
||||
free(list);
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
int
|
||||
list_remove(struct list *list, void *elem)
|
||||
{
|
||||
struct elem *e, *p;
|
||||
|
||||
p = NULL;
|
||||
for(e = list->first; e != NULL; e = e->next) {
|
||||
if (e->data == elem) {
|
||||
if (p != NULL) {
|
||||
p->next = e->next;
|
||||
} else {
|
||||
list->first = e->next;
|
||||
}
|
||||
if (list->last == e) {
|
||||
list->last = p;
|
||||
if (p != NULL) {
|
||||
p->next = NULL;
|
||||
}
|
||||
}
|
||||
free(e);
|
||||
list->elems--;
|
||||
return 1;
|
||||
}
|
||||
p = e;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
void
|
||||
list_map(struct list *list, void (* func)(void *arg))
|
||||
{
|
||||
struct elem *e;
|
||||
|
||||
for(e = list->first; e != NULL; e = e->next) {
|
||||
func(e->data);
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
216
ext/lwip-contrib/ports/unix/port/netif/pcapif.c
Normal file
216
ext/lwip-contrib/ports/unix/port/netif/pcapif.c
Normal file
@@ -0,0 +1,216 @@
|
||||
/*
|
||||
* 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 linux /* Apparently, this doesn't work under Linux. */
|
||||
|
||||
#include "lwip/debug.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/uio.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
#include <sys/stat.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <pcap.h>
|
||||
|
||||
#include "netif/etharp.h"
|
||||
|
||||
#include "lwip/stats.h"
|
||||
|
||||
#include "lwip/def.h"
|
||||
#include "lwip/mem.h"
|
||||
#include "lwip/pbuf.h"
|
||||
#include "netif/unixif.h"
|
||||
#include "lwip/sys.h"
|
||||
|
||||
#include "lwip/ip.h"
|
||||
|
||||
|
||||
#if defined(LWIP_DEBUG) && defined(LWIP_TCPDUMP)
|
||||
#include "netif/tcpdump.h"
|
||||
#endif /* LWIP_DEBUG && LWIP_TCPDUMP */
|
||||
|
||||
struct pcapif {
|
||||
pcap_t *pd;
|
||||
sys_sem_t sem;
|
||||
u8_t pkt[2048];
|
||||
u32_t len;
|
||||
u32_t lasttime;
|
||||
struct pbuf *p;
|
||||
struct eth_addr *ethaddr;
|
||||
};
|
||||
|
||||
static char errbuf[PCAP_ERRBUF_SIZE];
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static err_t
|
||||
pcapif_output(struct netif *netif, struct pbuf *p,
|
||||
ip_addr_t *ipaddr)
|
||||
{
|
||||
return ERR_OK;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
timeout(void *arg)
|
||||
{
|
||||
struct netif *netif;
|
||||
struct pcapif *pcapif;
|
||||
struct pbuf *p;
|
||||
struct eth_hdr *ethhdr;
|
||||
|
||||
netif = (struct netif *)arg;
|
||||
pcapif = netif->state;
|
||||
ethhdr = (struct eth_hdr *)pcapif->pkt;
|
||||
|
||||
|
||||
if (lwip_htons(ethhdr->type) != ETHTYPE_IP ||
|
||||
ip_lookup(pcapif->pkt + 14, netif)) {
|
||||
|
||||
/* We allocate a pbuf chain of pbufs from the pool. */
|
||||
p = pbuf_alloc(PBUF_LINK, pcapif->len, PBUF_POOL);
|
||||
|
||||
if (p != NULL) {
|
||||
pbuf_take(p, pcapif->pkt, pcapif->len);
|
||||
|
||||
#if defined(LWIP_DEBUG) && defined(LWIP_TCPDUMP)
|
||||
tcpdump(p, netif);
|
||||
#endif /* LWIP_DEBUG && LWIP_TCPDUMP */
|
||||
|
||||
ethhdr = p->payload;
|
||||
switch (lwip_htons(ethhdr->type)) {
|
||||
/* IP or ARP packet? */
|
||||
case ETHTYPE_IP:
|
||||
case ETHTYPE_ARP:
|
||||
#if PPPOE_SUPPORT
|
||||
/* PPPoE packet? */
|
||||
case ETHTYPE_PPPOEDISC:
|
||||
case ETHTYPE_PPPOE:
|
||||
#endif /* PPPOE_SUPPORT */
|
||||
/* full packet send to tcpip_thread to process */
|
||||
if (netif->input(p, netif) != ERR_OK) {
|
||||
LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
|
||||
pbuf_free(p);
|
||||
p = NULL;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
pbuf_free(p);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
printf("ip_lookup dropped\n");
|
||||
}
|
||||
|
||||
sys_sem_signal(&pcapif->sem);
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
callback(u_char *arg, const struct pcap_pkthdr *hdr, const u_char *pkt)
|
||||
{
|
||||
struct netif *netif;
|
||||
struct pcapif *pcapif;
|
||||
u32_t time, lasttime;
|
||||
|
||||
netif = (struct netif *)arg;
|
||||
pcapif = netif->state;
|
||||
|
||||
pcapif->len = hdr->len;
|
||||
|
||||
bcopy(pkt, pcapif->pkt, hdr->len);
|
||||
|
||||
time = hdr->ts.tv_sec * 1000 + hdr->ts.tv_usec / 1000;
|
||||
|
||||
lasttime = pcapif->lasttime;
|
||||
pcapif->lasttime = time;
|
||||
|
||||
|
||||
if (lasttime == 0) {
|
||||
sys_timeout(1000, timeout, netif);
|
||||
} else {
|
||||
sys_timeout(time - lasttime, timeout, netif);
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
pcapif_thread(void *arg)
|
||||
{
|
||||
struct netif *netif;
|
||||
struct pcapif *pcapif;
|
||||
netif = arg;
|
||||
pcapif = netif->state;
|
||||
|
||||
while (1) {
|
||||
pcap_loop(pcapif->pd, 1, callback, (u_char *)netif);
|
||||
sys_sem_wait(&pcapif->sem);
|
||||
if (pcapif->p != NULL) {
|
||||
netif->input(pcapif->p, netif);
|
||||
}
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
err_t
|
||||
pcapif_init(struct netif *netif)
|
||||
{
|
||||
struct pcapif *p;
|
||||
|
||||
p = malloc(sizeof(struct pcapif));
|
||||
if (p == NULL)
|
||||
return ERR_MEM;
|
||||
netif->state = p;
|
||||
netif->name[0] = 'p';
|
||||
netif->name[1] = 'c';
|
||||
netif->output = pcapif_output;
|
||||
|
||||
p->pd = pcap_open_offline("pcapdump", errbuf);
|
||||
if (p->pd == NULL) {
|
||||
printf("pcapif_init: failed %s\n", errbuf);
|
||||
return ERR_IF;
|
||||
}
|
||||
|
||||
if(sys_sem_new(&p->sem, 0) != ERR_OK) {
|
||||
LWIP_ASSERT("Failed to create semaphore", 0);
|
||||
}
|
||||
p->p = NULL;
|
||||
p->lasttime = 0;
|
||||
|
||||
sys_thread_new("pcapif_thread", pcapif_thread, netif, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
return ERR_OK;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
#endif /* linux */
|
||||
481
ext/lwip-contrib/ports/unix/port/netif/sio.c
Normal file
481
ext/lwip-contrib/ports/unix/port/netif/sio.c
Normal file
@@ -0,0 +1,481 @@
|
||||
/* Author: Magnus Ivarsson <magnus.ivarsson@volvo.com> */
|
||||
|
||||
/* to get rid of implicit function declarations */
|
||||
#define _XOPEN_SOURCE 600
|
||||
#define _GNU_SOURCE
|
||||
|
||||
#include "netif/sio.h"
|
||||
#include "netif/fifo.h"
|
||||
#include "lwip/debug.h"
|
||||
#include "lwip/def.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/arch.h"
|
||||
#include "lwip/sio.h"
|
||||
#include "netif/ppp/ppp_opts.h"
|
||||
|
||||
/* Following #undefs are here to keep compiler from issuing warnings
|
||||
about them being double defined. (They are defined in lwip/inet.h
|
||||
as well as the Unix #includes below.) */
|
||||
#undef htonl
|
||||
#undef ntohl
|
||||
#undef htons
|
||||
#undef ntohs
|
||||
#undef HTONL
|
||||
#undef NTOHL
|
||||
#undef HTONS
|
||||
#undef NTOHS
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#if defined(LWIP_UNIX_OPENBSD)
|
||||
#include <util.h>
|
||||
#endif
|
||||
#include <termios.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <sys/signal.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifndef LWIP_HAVE_SLIPIF
|
||||
#define LWIP_HAVE_SLIPIF 0
|
||||
#endif
|
||||
|
||||
#if (PPP_SUPPORT || LWIP_HAVE_SLIPIF) && defined(LWIP_UNIX_LINUX)
|
||||
#include <pty.h>
|
||||
#endif
|
||||
|
||||
/*#define BAUDRATE B19200 */
|
||||
/*#define BAUDRATE B57600 */
|
||||
#define BAUDRATE B115200
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
/* for all of you who dont define SIO_DEBUG in debug.h */
|
||||
#ifndef SIO_DEBUG
|
||||
#define SIO_DEBUG 0
|
||||
#endif
|
||||
|
||||
|
||||
/* typedef struct siostruct_t */
|
||||
/* { */
|
||||
/* sio_status_t *sio; */
|
||||
/* } siostruct_t; */
|
||||
|
||||
/** array of ((siostruct*)netif->state)->sio structs */
|
||||
static sio_status_t statusar[4];
|
||||
|
||||
#if ! (PPP_SUPPORT || LWIP_HAVE_SLIPIF)
|
||||
/* --private-functions----------------------------------------------------------------- */
|
||||
/**
|
||||
* Signal handler for ttyXX0 to indicate bytes received
|
||||
* one per interface is needed since we cannot send a instance number / pointer as callback argument (?)
|
||||
*/
|
||||
static void signal_handler_IO_0( int status )
|
||||
{
|
||||
LWIP_UNUSED_ARG(status);
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("SigHand: rxSignal channel 0\n"));
|
||||
fifoPut( &statusar[0].myfifo, statusar[0].fd );
|
||||
}
|
||||
|
||||
/**
|
||||
* Signal handler for ttyXX1 to indicate bytes received
|
||||
* one per interface is needed since we cannot send a instance number / pointer as callback argument (?)
|
||||
*/
|
||||
static void signal_handler_IO_1( int status )
|
||||
{
|
||||
LWIP_UNUSED_ARG(status);
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("SigHand: rxSignal channel 1\n"));
|
||||
fifoPut( &statusar[1].myfifo, statusar[1].fd );
|
||||
}
|
||||
#endif /* ! (PPP_SUPPORT || LWIP_HAVE_SLIPIF) */
|
||||
|
||||
/**
|
||||
* Initiation of serial device
|
||||
* @param device string with the device name and path, eg. "/dev/ttyS0"
|
||||
* @param devnum device number
|
||||
* @param siostat status
|
||||
* @return file handle to serial dev.
|
||||
*/
|
||||
static int sio_init( char * device, int devnum, sio_status_t * siostat )
|
||||
{
|
||||
struct termios oldtio,newtio;
|
||||
#if ! (PPP_SUPPORT || LWIP_HAVE_SLIPIF)
|
||||
struct sigaction saio; /* definition of signal action */
|
||||
#endif
|
||||
int fd;
|
||||
LWIP_UNUSED_ARG(siostat);
|
||||
LWIP_UNUSED_ARG(devnum);
|
||||
|
||||
/* open the device to be non-blocking (read will return immediately) */
|
||||
fd = open( device, O_RDWR | O_NOCTTY | O_NONBLOCK );
|
||||
if ( fd < 0 )
|
||||
{
|
||||
perror( device );
|
||||
exit( -1 );
|
||||
}
|
||||
|
||||
#if ! (PPP_SUPPORT || LWIP_HAVE_SLIPIF)
|
||||
/* install the signal handler before making the device asynchronous */
|
||||
switch ( devnum )
|
||||
{
|
||||
case 0:
|
||||
LWIP_DEBUGF( SIO_DEBUG, ("sioinit, signal_handler_IO_0\n") );
|
||||
saio.sa_handler = signal_handler_IO_0;
|
||||
break;
|
||||
case 1:
|
||||
LWIP_DEBUGF( SIO_DEBUG, ("sioinit, signal_handler_IO_1\n") );
|
||||
saio.sa_handler = signal_handler_IO_1;
|
||||
break;
|
||||
default:
|
||||
LWIP_DEBUGF( SIO_DEBUG,("sioinit, devnum not allowed\n") );
|
||||
break;
|
||||
}
|
||||
|
||||
saio.sa_flags = 0;
|
||||
#if defined(LWIP_UNIX_LINUX)
|
||||
saio.sa_restorer = NULL;
|
||||
#endif /* LWIP_UNIX_LINUX */
|
||||
sigaction( SIGIO,&saio,NULL );
|
||||
|
||||
/* allow the process to receive SIGIO */
|
||||
if ( fcntl( fd, F_SETOWN, getpid( ) ) != 0)
|
||||
{
|
||||
perror( device );
|
||||
exit( -1 );
|
||||
}
|
||||
/* Make the file descriptor asynchronous (the manual page says only
|
||||
O_APPEND and O_NONBLOCK, will work with F_SETFL...) */
|
||||
if ( fcntl( fd, F_SETFL, FASYNC ) != 0)
|
||||
{
|
||||
perror( device );
|
||||
exit( -1 );
|
||||
}
|
||||
#else
|
||||
if ( fcntl( fd, F_SETFL, 0 ) != 0)
|
||||
{
|
||||
perror( device );
|
||||
exit( -1 );
|
||||
}
|
||||
|
||||
#endif /* ! (PPP_SUPPORT || LWIP_HAVE_SLIPIF) */
|
||||
|
||||
tcgetattr( fd,&oldtio ); /* save current port settings */
|
||||
/* set new port settings */
|
||||
/* see 'man termios' for further settings */
|
||||
memset(&newtio, 0, sizeof(newtio));
|
||||
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD | CRTSCTS;
|
||||
newtio.c_iflag = 0;
|
||||
newtio.c_oflag = 0;
|
||||
newtio.c_lflag = 0; /*ECHO; */
|
||||
newtio.c_cc[VMIN] = 1; /* Read 1 byte at a time, no timer */
|
||||
newtio.c_cc[VTIME] = 0;
|
||||
|
||||
tcsetattr( fd,TCSANOW,&newtio );
|
||||
tcflush( fd, TCIOFLUSH );
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
static void sio_speed( int fd, int speed )
|
||||
{
|
||||
struct termios oldtio,newtio;
|
||||
/* int fd; */
|
||||
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_speed[%d]: baudcode:%d enter\n", fd, speed));
|
||||
|
||||
if ( fd < 0 )
|
||||
{
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_speed[%d]: fd ERROR\n", fd));
|
||||
exit( -1 );
|
||||
}
|
||||
|
||||
tcgetattr( fd,&oldtio ); /* get current port settings */
|
||||
|
||||
/* set new port settings
|
||||
* see 'man termios' for further settings */
|
||||
memset(&newtio, 0, sizeof(newtio));
|
||||
newtio.c_cflag = speed | CS8 | CLOCAL | CREAD; /* | CRTSCTS; */
|
||||
newtio.c_iflag = 0;
|
||||
newtio.c_oflag = 0;
|
||||
newtio.c_lflag = 0; /*ECHO; */
|
||||
newtio.c_cc[VMIN] = 1; /* Read 1 byte at a time, no timer */
|
||||
newtio.c_cc[VTIME] = 0;
|
||||
|
||||
tcsetattr( fd,TCSANOW,&newtio );
|
||||
tcflush( fd, TCIOFLUSH );
|
||||
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_speed[%d]: leave\n", fd));
|
||||
}
|
||||
|
||||
/* --public-functions----------------------------------------------------------------------------- */
|
||||
void sio_send( u8_t c, sio_status_t * siostat )
|
||||
{
|
||||
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio; */
|
||||
|
||||
if ( write( siostat->fd, &c, 1 ) <= 0 )
|
||||
{
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_send[%d]: write refused\n", siostat->fd));
|
||||
}
|
||||
}
|
||||
|
||||
void sio_send_string( u8_t *str, sio_status_t * siostat )
|
||||
{
|
||||
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio; */
|
||||
int len = strlen( (const char *)str );
|
||||
|
||||
if ( write( siostat->fd, str, len ) <= 0 )
|
||||
{
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_send_string[%d]: write refused\n", siostat->fd));
|
||||
}
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_send_string[%d]: sent: %s\n", siostat->fd, str));
|
||||
}
|
||||
|
||||
|
||||
void sio_flush( sio_status_t * siostat )
|
||||
{
|
||||
LWIP_UNUSED_ARG(siostat);
|
||||
/* not implemented in unix as it is not needed */
|
||||
/*sio_status_t * siostat = ((siostruct_t*)netif->state)->sio; */
|
||||
}
|
||||
|
||||
|
||||
#if ! (PPP_SUPPORT || LWIP_HAVE_SLIPIF)
|
||||
/*u8_t sio_recv( struct netif * netif )*/
|
||||
u8_t sio_recv( sio_status_t * siostat )
|
||||
{
|
||||
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio; */
|
||||
return fifoGet( &(siostat->myfifo) );
|
||||
}
|
||||
|
||||
s16_t sio_poll(sio_status_t * siostat)
|
||||
{
|
||||
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio;*/
|
||||
return fifoGetNonBlock( &(siostat->myfifo) );
|
||||
}
|
||||
|
||||
|
||||
void sio_expect_string( u8_t *str, sio_status_t * siostat )
|
||||
{
|
||||
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio;*/
|
||||
u8_t c;
|
||||
int finger=0;
|
||||
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_expect_string[%d]: %s\n", siostat->fd, str));
|
||||
while ( 1 )
|
||||
{
|
||||
c=fifoGet( &(siostat->myfifo) );
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("_%c", c));
|
||||
if ( c==str[finger] )
|
||||
{
|
||||
finger++;
|
||||
} else if ( finger > 0 )
|
||||
{
|
||||
/*it might fit in the beginning? */
|
||||
if ( str[0] == c )
|
||||
{
|
||||
finger = 1;
|
||||
}
|
||||
}
|
||||
if ( 0 == str[finger] )
|
||||
break; /* done, we have a match */
|
||||
}
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_expect_string[%d]: [match]\n", siostat->fd));
|
||||
}
|
||||
#endif /* ! (PPP_SUPPORT || LWIP_HAVE_SLIPIF) */
|
||||
|
||||
#if (PPP_SUPPORT || LWIP_HAVE_SLIPIF)
|
||||
u32_t sio_write(sio_status_t * siostat, u8_t *buf, u32_t size)
|
||||
{
|
||||
ssize_t wsz = write( siostat->fd, buf, size );
|
||||
return wsz < 0 ? 0 : wsz;
|
||||
}
|
||||
|
||||
u32_t sio_read(sio_status_t * siostat, u8_t *buf, u32_t size)
|
||||
{
|
||||
ssize_t rsz = read( siostat->fd, buf, size );
|
||||
return rsz < 0 ? 0 : rsz;
|
||||
}
|
||||
|
||||
void sio_read_abort(sio_status_t * siostat)
|
||||
{
|
||||
LWIP_UNUSED_ARG(siostat);
|
||||
printf("sio_read_abort[%d]: not yet implemented for unix\n", siostat->fd);
|
||||
}
|
||||
#endif /* (PPP_SUPPORT || LWIP_HAVE_SLIPIF) */
|
||||
|
||||
sio_fd_t sio_open(u8_t devnum)
|
||||
{
|
||||
char dev[20];
|
||||
|
||||
/* would be nice with dynamic memory alloc */
|
||||
sio_status_t * siostate = &statusar[ devnum ];
|
||||
/* siostruct_t * tmp; */
|
||||
|
||||
|
||||
/* tmp = (siostruct_t*)(netif->state); */
|
||||
/* tmp->sio = siostate; */
|
||||
|
||||
/* tmp = (siostruct_t*)(netif->state); */
|
||||
|
||||
/* ((sio_status_t*)(tmp->sio))->fd = 0; */
|
||||
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_open: for devnum %d\n", devnum));
|
||||
|
||||
#if ! (PPP_SUPPORT || LWIP_HAVE_SLIPIF)
|
||||
fifoInit( &siostate->myfifo );
|
||||
#endif /* ! PPP_SUPPORT */
|
||||
|
||||
snprintf( dev, sizeof(dev), "/dev/ttyS%d", devnum );
|
||||
|
||||
if ( (devnum == 1) || (devnum == 0) )
|
||||
{
|
||||
if ( ( siostate->fd = sio_init( dev, devnum, siostate ) ) == 0 )
|
||||
{
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_open: ERROR opening serial device dev=%s\n", dev));
|
||||
abort( );
|
||||
return NULL;
|
||||
}
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_open[%d]: dev=%s open.\n", siostate->fd, dev));
|
||||
}
|
||||
#if PPP_SUPPORT
|
||||
else if (devnum == 2) {
|
||||
pid_t childpid;
|
||||
char name[256];
|
||||
childpid = forkpty(&siostate->fd, name, NULL, NULL);
|
||||
if(childpid < 0) {
|
||||
perror("forkpty");
|
||||
exit (1);
|
||||
}
|
||||
if(childpid == 0) {
|
||||
execl("/usr/sbin/pppd", "pppd",
|
||||
"ms-dns", "198.168.100.7",
|
||||
"local", "crtscts",
|
||||
"debug",
|
||||
#ifdef LWIP_PPP_CHAP_TEST
|
||||
"auth",
|
||||
"require-chap",
|
||||
"remotename", "lwip",
|
||||
#else
|
||||
"noauth",
|
||||
#endif
|
||||
#if LWIP_IPV6
|
||||
"+ipv6",
|
||||
#endif
|
||||
"192.168.1.1:192.168.1.2",
|
||||
NULL);
|
||||
perror("execl pppd");
|
||||
exit (1);
|
||||
} else {
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_open[%d]: spawned pppd pid %d on %s\n",
|
||||
siostate->fd, childpid, name));
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
#if LWIP_HAVE_SLIPIF
|
||||
else if (devnum == 3) {
|
||||
pid_t childpid;
|
||||
/* create PTY pair */
|
||||
siostate->fd = posix_openpt(O_RDWR | O_NOCTTY);
|
||||
if (siostate->fd < 0) {
|
||||
perror("open pty master");
|
||||
exit (1);
|
||||
}
|
||||
if (grantpt(siostate->fd) != 0) {
|
||||
perror("grant pty master");
|
||||
exit (1);
|
||||
}
|
||||
if (unlockpt(siostate->fd) != 0) {
|
||||
perror("unlock pty master");
|
||||
exit (1);
|
||||
}
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_open[%d]: for %s\n",
|
||||
siostate->fd, ptsname(siostate->fd)));
|
||||
/* fork for slattach */
|
||||
childpid = fork();
|
||||
if(childpid < 0) {
|
||||
perror("fork");
|
||||
exit (1);
|
||||
}
|
||||
if(childpid == 0) {
|
||||
/* esteblish SLIP interface on host side connected to PTY slave */
|
||||
execl("/sbin/slattach", "slattach",
|
||||
"-d", "-v", "-L", "-p", "slip",
|
||||
ptsname(siostate->fd),
|
||||
NULL);
|
||||
perror("execl slattach");
|
||||
exit (1);
|
||||
} else {
|
||||
int ret;
|
||||
char buf[1024];
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_open[%d]: spawned slattach pid %d on %s\n",
|
||||
siostate->fd, childpid, ptsname(siostate->fd)));
|
||||
/* wait a moment for slattach startup */
|
||||
sleep(1);
|
||||
/* configure SLIP interface on host side as P2P interface */
|
||||
snprintf(buf, sizeof(buf),
|
||||
"/sbin/ifconfig sl0 mtu %d %s pointopoint %s up",
|
||||
SLIP_MAX_SIZE, "192.168.2.1", "192.168.2.2");
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_open[%d]: system(\"%s\");\n", siostate->fd, buf));
|
||||
ret = system(buf);
|
||||
if (ret < 0) {
|
||||
perror("ifconfig failed");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* LWIP_HAVE_SLIPIF */
|
||||
else
|
||||
{
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_open: device %s (%d) is not supported\n", dev, devnum));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return siostate;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
void sio_change_baud( sioBaudrates baud, sio_status_t * siostat )
|
||||
{
|
||||
/* sio_status_t * siostat = ((siostruct_t*)netif->state)->sio;*/
|
||||
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_change_baud[%d]\n", siostat->fd));
|
||||
|
||||
switch ( baud )
|
||||
{
|
||||
case SIO_BAUD_9600:
|
||||
sio_speed( siostat->fd, B9600 );
|
||||
break;
|
||||
case SIO_BAUD_19200:
|
||||
sio_speed( siostat->fd, B19200 );
|
||||
break;
|
||||
case SIO_BAUD_38400:
|
||||
sio_speed( siostat->fd, B38400 );
|
||||
break;
|
||||
case SIO_BAUD_57600:
|
||||
sio_speed( siostat->fd, B57600 );
|
||||
break;
|
||||
case SIO_BAUD_115200:
|
||||
sio_speed( siostat->fd, B115200 );
|
||||
break;
|
||||
|
||||
default:
|
||||
LWIP_DEBUGF(SIO_DEBUG, ("sio_change_baud[%d]: Unknown baudrate, code:%d\n",
|
||||
siostat->fd, baud));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
424
ext/lwip-contrib/ports/unix/port/netif/tapif.c
Normal file
424
ext/lwip-contrib/ports/unix/port/netif/tapif.c
Normal file
@@ -0,0 +1,424 @@
|
||||
/*
|
||||
* 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 <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/uio.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include "lwip/opt.h"
|
||||
|
||||
#include "lwip/debug.h"
|
||||
#include "lwip/def.h"
|
||||
#include "lwip/ip.h"
|
||||
#include "lwip/mem.h"
|
||||
#include "lwip/stats.h"
|
||||
#include "lwip/snmp.h"
|
||||
#include "lwip/pbuf.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/timeouts.h"
|
||||
#include "netif/etharp.h"
|
||||
#include "lwip/ethip6.h"
|
||||
|
||||
#if defined(LWIP_DEBUG) && defined(LWIP_TCPDUMP)
|
||||
#include "netif/tcpdump.h"
|
||||
#endif /* LWIP_DEBUG && LWIP_TCPDUMP */
|
||||
|
||||
#include "netif/tapif.h"
|
||||
|
||||
#define IFCONFIG_BIN "/sbin/ifconfig "
|
||||
|
||||
#if defined(LWIP_UNIX_LINUX)
|
||||
#include <sys/ioctl.h>
|
||||
#include <linux/if.h>
|
||||
#include <linux/if_tun.h>
|
||||
/*
|
||||
* Creating a tap interface requires special privileges. If the interfaces
|
||||
* is created in advance with `tunctl -u <user>` it can be opened as a regular
|
||||
* user. The network must already be configured. If DEVTAP_IF is defined it
|
||||
* will be opened instead of creating a new tap device.
|
||||
*
|
||||
* You can also use PRECONFIGURED_TAPIF environment variable to do so.
|
||||
*/
|
||||
#ifndef DEVTAP_DEFAULT_IF
|
||||
#define DEVTAP_DEFAULT_IF "tap0"
|
||||
#endif
|
||||
#ifndef DEVTAP
|
||||
#define DEVTAP "/dev/net/tun"
|
||||
#endif
|
||||
#define NETMASK_ARGS "netmask %d.%d.%d.%d"
|
||||
#define IFCONFIG_ARGS "tap0 inet %d.%d.%d.%d " NETMASK_ARGS
|
||||
#elif defined(LWIP_UNIX_OPENBSD)
|
||||
#define DEVTAP "/dev/tun0"
|
||||
#define NETMASK_ARGS "netmask %d.%d.%d.%d"
|
||||
#define IFCONFIG_ARGS "tun0 inet %d.%d.%d.%d " NETMASK_ARGS " link0"
|
||||
#else /* others */
|
||||
#define DEVTAP "/dev/tap0"
|
||||
#define NETMASK_ARGS "netmask %d.%d.%d.%d"
|
||||
#define IFCONFIG_ARGS "tap0 inet %d.%d.%d.%d " NETMASK_ARGS
|
||||
#endif
|
||||
|
||||
/* Define those to better describe your network interface. */
|
||||
#define IFNAME0 't'
|
||||
#define IFNAME1 'p'
|
||||
|
||||
#ifndef TAPIF_DEBUG
|
||||
#define TAPIF_DEBUG LWIP_DBG_OFF
|
||||
#endif
|
||||
|
||||
struct tapif {
|
||||
/* Add whatever per-interface state that is needed here. */
|
||||
int fd;
|
||||
};
|
||||
|
||||
/* Forward declarations. */
|
||||
static void tapif_input(struct netif *netif);
|
||||
#if !NO_SYS
|
||||
static void tapif_thread(void *arg);
|
||||
#endif /* !NO_SYS */
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
low_level_init(struct netif *netif)
|
||||
{
|
||||
struct tapif *tapif;
|
||||
#if LWIP_IPV4
|
||||
int ret;
|
||||
char buf[1024];
|
||||
#endif /* LWIP_IPV4 */
|
||||
char *preconfigured_tapif = getenv("PRECONFIGURED_TAPIF");
|
||||
|
||||
tapif = (struct tapif *)netif->state;
|
||||
|
||||
/* Obtain MAC address from network interface. */
|
||||
|
||||
/* (We just fake an address...) */
|
||||
netif->hwaddr[0] = 0x02;
|
||||
netif->hwaddr[1] = 0x12;
|
||||
netif->hwaddr[2] = 0x34;
|
||||
netif->hwaddr[3] = 0x56;
|
||||
netif->hwaddr[4] = 0x78;
|
||||
netif->hwaddr[5] = 0xab;
|
||||
netif->hwaddr_len = 6;
|
||||
|
||||
/* device capabilities */
|
||||
netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_IGMP;
|
||||
|
||||
tapif->fd = open(DEVTAP, O_RDWR);
|
||||
LWIP_DEBUGF(TAPIF_DEBUG, ("tapif_init: fd %d\n", tapif->fd));
|
||||
if (tapif->fd == -1) {
|
||||
#ifdef LWIP_UNIX_LINUX
|
||||
perror("tapif_init: try running \"modprobe tun\" or rebuilding your kernel with CONFIG_TUN; cannot open "DEVTAP);
|
||||
#else /* LWIP_UNIX_LINUX */
|
||||
perror("tapif_init: cannot open "DEVTAP);
|
||||
#endif /* LWIP_UNIX_LINUX */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#ifdef LWIP_UNIX_LINUX
|
||||
{
|
||||
struct ifreq ifr;
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
|
||||
if (preconfigured_tapif) {
|
||||
strncpy(ifr.ifr_name, preconfigured_tapif, sizeof(ifr.ifr_name));
|
||||
} else {
|
||||
strncpy(ifr.ifr_name, DEVTAP_DEFAULT_IF, sizeof(ifr.ifr_name));
|
||||
}
|
||||
ifr.ifr_name[sizeof(ifr.ifr_name)-1] = 0; /* ensure \0 termination */
|
||||
|
||||
ifr.ifr_flags = IFF_TAP|IFF_NO_PI;
|
||||
if (ioctl(tapif->fd, TUNSETIFF, (void *) &ifr) < 0) {
|
||||
perror("tapif_init: "DEVTAP" ioctl TUNSETIFF");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
#endif /* LWIP_UNIX_LINUX */
|
||||
|
||||
netif_set_link_up(netif);
|
||||
|
||||
if (preconfigured_tapif == NULL) {
|
||||
#if LWIP_IPV4
|
||||
snprintf(buf, 1024, IFCONFIG_BIN IFCONFIG_ARGS,
|
||||
ip4_addr1(netif_ip4_gw(netif)),
|
||||
ip4_addr2(netif_ip4_gw(netif)),
|
||||
ip4_addr3(netif_ip4_gw(netif)),
|
||||
ip4_addr4(netif_ip4_gw(netif))
|
||||
#ifdef NETMASK_ARGS
|
||||
,
|
||||
ip4_addr1(netif_ip4_netmask(netif)),
|
||||
ip4_addr2(netif_ip4_netmask(netif)),
|
||||
ip4_addr3(netif_ip4_netmask(netif)),
|
||||
ip4_addr4(netif_ip4_netmask(netif))
|
||||
#endif /* NETMASK_ARGS */
|
||||
);
|
||||
|
||||
LWIP_DEBUGF(TAPIF_DEBUG, ("tapif_init: system(\"%s\");\n", buf));
|
||||
ret = system(buf);
|
||||
if (ret < 0) {
|
||||
perror("ifconfig failed");
|
||||
exit(1);
|
||||
}
|
||||
if (ret != 0) {
|
||||
printf("ifconfig returned %d\n", ret);
|
||||
}
|
||||
#else /* LWIP_IPV4 */
|
||||
perror("todo: support IPv6 support for non-preconfigured tapif");
|
||||
exit(1);
|
||||
#endif /* LWIP_IPV4 */
|
||||
}
|
||||
|
||||
#if !NO_SYS
|
||||
sys_thread_new("tapif_thread", tapif_thread, netif, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
#endif /* !NO_SYS */
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/*
|
||||
* low_level_output():
|
||||
*
|
||||
* Should do the actual transmission of the packet. The packet is
|
||||
* contained in the pbuf that is passed to the function. This pbuf
|
||||
* might be chained.
|
||||
*
|
||||
*/
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
static err_t
|
||||
low_level_output(struct netif *netif, struct pbuf *p)
|
||||
{
|
||||
struct tapif *tapif = (struct tapif *)netif->state;
|
||||
char buf[1514];
|
||||
ssize_t written;
|
||||
|
||||
#if 0
|
||||
if (((double)rand()/(double)RAND_MAX) < 0.2) {
|
||||
printf("drop output\n");
|
||||
return ERR_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* initiate transfer(); */
|
||||
pbuf_copy_partial(p, buf, p->tot_len, 0);
|
||||
|
||||
/* signal that packet should be sent(); */
|
||||
written = write(tapif->fd, buf, p->tot_len);
|
||||
if (written < 0) {
|
||||
MIB2_STATS_NETIF_INC(netif, ifoutdiscards);
|
||||
perror("tapif: write");
|
||||
}
|
||||
else {
|
||||
MIB2_STATS_NETIF_ADD(netif, ifoutoctets, (u32_t)written);
|
||||
}
|
||||
return ERR_OK;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/*
|
||||
* low_level_input():
|
||||
*
|
||||
* Should allocate a pbuf and transfer the bytes of the incoming
|
||||
* packet from the interface into the pbuf.
|
||||
*
|
||||
*/
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static struct pbuf *
|
||||
low_level_input(struct netif *netif)
|
||||
{
|
||||
struct pbuf *p;
|
||||
u16_t len;
|
||||
ssize_t readlen;
|
||||
char buf[1514];
|
||||
struct tapif *tapif = (struct tapif *)netif->state;
|
||||
|
||||
/* Obtain the size of the packet and put it into the "len"
|
||||
variable. */
|
||||
readlen = read(tapif->fd, buf, sizeof(buf));
|
||||
if (readlen < 0) {
|
||||
perror("read returned -1");
|
||||
exit(1);
|
||||
}
|
||||
len = (u16_t)readlen;
|
||||
|
||||
MIB2_STATS_NETIF_ADD(netif, ifinoctets, len);
|
||||
|
||||
#if 0
|
||||
if (((double)rand()/(double)RAND_MAX) < 0.2) {
|
||||
printf("drop\n");
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* We allocate a pbuf chain of pbufs from the pool. */
|
||||
p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
|
||||
if (p != NULL) {
|
||||
pbuf_take(p, buf, len);
|
||||
/* acknowledge that packet has been read(); */
|
||||
} else {
|
||||
/* drop packet(); */
|
||||
MIB2_STATS_NETIF_INC(netif, ifindiscards);
|
||||
LWIP_DEBUGF(NETIF_DEBUG, ("tapif_input: could not allocate pbuf\n"));
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/*
|
||||
* tapif_input():
|
||||
*
|
||||
* This function should be called when a packet is ready to be read
|
||||
* from the interface. It uses the function low_level_input() that
|
||||
* should handle the actual reception of bytes from the network
|
||||
* interface.
|
||||
*
|
||||
*/
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
tapif_input(struct netif *netif)
|
||||
{
|
||||
struct pbuf *p = low_level_input(netif);
|
||||
|
||||
if (p == NULL) {
|
||||
#if LINK_STATS
|
||||
LINK_STATS_INC(link.recv);
|
||||
#endif /* LINK_STATS */
|
||||
LWIP_DEBUGF(TAPIF_DEBUG, ("tapif_input: low_level_input returned NULL\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (netif->input(p, netif) != ERR_OK) {
|
||||
LWIP_DEBUGF(NETIF_DEBUG, ("tapif_input: netif input error\n"));
|
||||
pbuf_free(p);
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/*
|
||||
* tapif_init():
|
||||
*
|
||||
* Should be called at the beginning of the program to set up the
|
||||
* network interface. It calls the function low_level_init() to do the
|
||||
* actual setup of the hardware.
|
||||
*
|
||||
*/
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
err_t
|
||||
tapif_init(struct netif *netif)
|
||||
{
|
||||
struct tapif *tapif = (struct tapif *)mem_malloc(sizeof(struct tapif));
|
||||
|
||||
if (tapif == NULL) {
|
||||
LWIP_DEBUGF(NETIF_DEBUG, ("tapif_init: out of memory for tapif\n"));
|
||||
return ERR_MEM;
|
||||
}
|
||||
netif->state = tapif;
|
||||
MIB2_INIT_NETIF(netif, snmp_ifType_other, 100000000);
|
||||
|
||||
netif->name[0] = IFNAME0;
|
||||
netif->name[1] = IFNAME1;
|
||||
#if LWIP_IPV4
|
||||
netif->output = etharp_output;
|
||||
#endif /* LWIP_IPV4 */
|
||||
#if LWIP_IPV6
|
||||
netif->output_ip6 = ethip6_output;
|
||||
#endif /* LWIP_IPV6 */
|
||||
netif->linkoutput = low_level_output;
|
||||
netif->mtu = 1500;
|
||||
|
||||
low_level_init(netif);
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
#if NO_SYS
|
||||
|
||||
int
|
||||
tapif_select(struct netif *netif)
|
||||
{
|
||||
fd_set fdset;
|
||||
int ret;
|
||||
struct timeval tv;
|
||||
struct tapif *tapif;
|
||||
u32_t msecs = sys_timeouts_sleeptime();
|
||||
|
||||
tapif = (struct tapif *)netif->state;
|
||||
|
||||
tv.tv_sec = msecs / 1000;
|
||||
tv.tv_usec = (msecs % 1000) * 1000;
|
||||
|
||||
FD_ZERO(&fdset);
|
||||
FD_SET(tapif->fd, &fdset);
|
||||
|
||||
ret = select(tapif->fd + 1, &fdset, NULL, NULL, &tv);
|
||||
if (ret > 0) {
|
||||
tapif_input(netif);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
#else /* NO_SYS */
|
||||
|
||||
static void
|
||||
tapif_thread(void *arg)
|
||||
{
|
||||
struct netif *netif;
|
||||
struct tapif *tapif;
|
||||
fd_set fdset;
|
||||
int ret;
|
||||
|
||||
netif = (struct netif *)arg;
|
||||
tapif = (struct tapif *)netif->state;
|
||||
|
||||
while(1) {
|
||||
FD_ZERO(&fdset);
|
||||
FD_SET(tapif->fd, &fdset);
|
||||
|
||||
/* Wait for a packet to arrive. */
|
||||
ret = select(tapif->fd + 1, &fdset, NULL, NULL, NULL);
|
||||
|
||||
if(ret == 1) {
|
||||
/* Handle incoming packet. */
|
||||
tapif_input(netif);
|
||||
} else if(ret == -1) {
|
||||
perror("tapif_thread: select");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* NO_SYS */
|
||||
216
ext/lwip-contrib/ports/unix/port/netif/tcpdump.c
Normal file
216
ext/lwip-contrib/ports/unix/port/netif/tcpdump.c
Normal file
@@ -0,0 +1,216 @@
|
||||
/*
|
||||
* 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 <stdio.h>
|
||||
|
||||
#include "lwip/opt.h"
|
||||
|
||||
#if (LWIP_IPV4 || LWIP_IPV6) && LWIP_TCP /* @todo: fix IPv6 */
|
||||
|
||||
#include <string.h> /* memcpy */
|
||||
#include "netif/tcpdump.h"
|
||||
#include "lwip/pbuf.h"
|
||||
#include "lwip/netif.h"
|
||||
#include "lwip/ip.h"
|
||||
#include "lwip/ip4.h"
|
||||
#include "lwip/ip6.h"
|
||||
#include "lwip/ip_addr.h"
|
||||
#include "lwip/priv/tcp_priv.h"
|
||||
#include "lwip/udp.h"
|
||||
#include "lwip/inet.h"
|
||||
#include "lwip/inet_chksum.h"
|
||||
|
||||
#ifndef TCPDUMP_DEBUG
|
||||
#define TCPDUMP_DEBUG LWIP_DBG_OFF
|
||||
#endif
|
||||
|
||||
static FILE *file = NULL;
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
void
|
||||
tcpdump_init(void)
|
||||
{
|
||||
#define TCPDUMP_FNAME "/tmp/tcpdump"
|
||||
file = fopen(TCPDUMP_FNAME, "w");
|
||||
if (file == NULL) {
|
||||
perror("tcpdump_init: cannot open \""TCPDUMP_FNAME"\" for writing");
|
||||
}
|
||||
LWIP_DEBUGF(TCPDUMP_DEBUG, ("tcpdump: file %s\n", TCPDUMP_FNAME));
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
void
|
||||
tcpdump(struct pbuf *p, struct netif* netif)
|
||||
{
|
||||
#if LWIP_IPV4
|
||||
ip_addr_t src, dst;
|
||||
struct ip_hdr *iphdr;
|
||||
#if LWIP_UDP
|
||||
struct udp_hdr *udphdr;
|
||||
#endif
|
||||
#if LWIP_TCP
|
||||
struct tcp_hdr *tcphdr;
|
||||
char flags[5];
|
||||
int i;
|
||||
int len;
|
||||
int offset;
|
||||
#endif
|
||||
|
||||
LWIP_UNUSED_ARG(netif); /* in case IPv6 is disabled */
|
||||
|
||||
if (file == NULL) {
|
||||
return;
|
||||
}
|
||||
iphdr = (struct ip_hdr *)p->payload;
|
||||
|
||||
#if LWIP_IPV6
|
||||
if(IPH_V(iphdr) == 6) {
|
||||
struct ip6_hdr *ip6hdr = (struct ip6_hdr*)iphdr;
|
||||
|
||||
/* create aligned copies if IPv6 src/dest addr */
|
||||
ip6_addr_copy_from_packed(*ip_2_ip6(&src), ip6hdr->src);
|
||||
ip6_addr_assign_zone(ip_2_ip6(&src), IP6_UNKNOWN, netif);
|
||||
IP_SET_TYPE_VAL(src, IPADDR_TYPE_V6);
|
||||
|
||||
ip6_addr_copy_from_packed(*ip_2_ip6(&dst), ip6hdr->dest);
|
||||
ip6_addr_assign_zone(ip_2_ip6(&dst), IP6_UNKNOWN, netif);
|
||||
IP_SET_TYPE_VAL(dst, IPADDR_TYPE_V6);
|
||||
|
||||
fprintf(file, "%s > %s: (IPv6, unsupported) ",
|
||||
ip_ntoa(&src),
|
||||
ip_ntoa(&dst));
|
||||
return; /* not supported */
|
||||
}
|
||||
#endif
|
||||
|
||||
if(IPH_V(iphdr) == 4) {
|
||||
ip_addr_copy_from_ip4(src, iphdr->src);
|
||||
ip_addr_copy_from_ip4(dst, iphdr->dest);
|
||||
}
|
||||
|
||||
switch (IPH_PROTO(iphdr)) {
|
||||
#if LWIP_TCP
|
||||
case IP_PROTO_TCP:
|
||||
tcphdr = (struct tcp_hdr *)((char *)iphdr + IPH_HL(iphdr));
|
||||
|
||||
pbuf_header(p, -IP_HLEN);
|
||||
if (ip_chksum_pseudo(p, IP_PROTO_TCP, p->tot_len, &src, &dst) != 0) {
|
||||
LWIP_DEBUGF(TCPDUMP_DEBUG, ("tcpdump: IP checksum failed!\n"));
|
||||
/*
|
||||
fprintf(file, "chksum 0x%lx ", tcphdr->chksum);
|
||||
tcphdr->chksum = 0;
|
||||
fprintf(file, "should be 0x%lx ", inet_chksum_pseudo(p, (ip_addr_t *)&(iphdr->src),
|
||||
(ip_addr_t *)&(iphdr->dest), IP_PROTO_TCP, p->tot_len));*/
|
||||
fprintf(file, "!chksum ");
|
||||
}
|
||||
|
||||
i = 0;
|
||||
if (TCPH_FLAGS(tcphdr) & TCP_SYN) {
|
||||
flags[i++] = 'S';
|
||||
}
|
||||
if (TCPH_FLAGS(tcphdr) & TCP_PSH) {
|
||||
flags[i++] = 'P';
|
||||
}
|
||||
if (TCPH_FLAGS(tcphdr) & TCP_FIN) {
|
||||
flags[i++] = 'F';
|
||||
}
|
||||
if (TCPH_FLAGS(tcphdr) & TCP_RST) {
|
||||
flags[i++] = 'R';
|
||||
}
|
||||
if (i == 0) {
|
||||
flags[i++] = '.';
|
||||
}
|
||||
flags[i++] = 0;
|
||||
|
||||
fprintf(file, "%s.%u > %s.%u: ",
|
||||
ip_ntoa(&src),
|
||||
lwip_ntohs(tcphdr->src),
|
||||
ip_ntoa(&dst),
|
||||
lwip_ntohs(tcphdr->dest));
|
||||
offset = TCPH_HDRLEN(tcphdr);
|
||||
|
||||
len = lwip_ntohs(IPH_LEN(iphdr)) - offset * 4 - IP_HLEN;
|
||||
if (len != 0 || flags[0] != '.') {
|
||||
fprintf(file, "%s %u:%u(%u) ", flags, lwip_ntohl(tcphdr->seqno),
|
||||
lwip_ntohl(tcphdr->seqno) + (u32_t)len, len);
|
||||
}
|
||||
if (TCPH_FLAGS(tcphdr) & TCP_ACK) {
|
||||
fprintf(file, "ack %u ", lwip_ntohl(tcphdr->ackno));
|
||||
}
|
||||
fprintf(file, "wnd %u\n", lwip_ntohs(tcphdr->wnd));
|
||||
|
||||
fflush(file);
|
||||
|
||||
pbuf_header(p, IP_HLEN);
|
||||
break;
|
||||
#endif /* LWIP_TCP */
|
||||
|
||||
#if LWIP_UDP
|
||||
case IP_PROTO_UDP:
|
||||
udphdr = (struct udp_hdr *)((char *)iphdr + IPH_HL(iphdr));
|
||||
|
||||
pbuf_header(p, -IP_HLEN);
|
||||
if (ip_chksum_pseudo(p, IP_PROTO_UDP, p->tot_len, &src, &dst) != 0) {
|
||||
LWIP_DEBUGF(TCPDUMP_DEBUG, ("tcpdump: IP checksum failed!\n"));
|
||||
/*
|
||||
fprintf(file, "chksum 0x%lx ", tcphdr->chksum);
|
||||
tcphdr->chksum = 0;
|
||||
fprintf(file, "should be 0x%lx ", ip_chksum_pseudo(p, &src, &dst, IP_PROTO_TCP, p->tot_len));*/
|
||||
fprintf(file, "!chksum ");
|
||||
}
|
||||
|
||||
fprintf(file, "%s.%u > %s.%u: ",
|
||||
ip_ntoa(&src),
|
||||
lwip_ntohs(udphdr->src),
|
||||
ip_ntoa(&dst),
|
||||
lwip_ntohs(udphdr->dest));
|
||||
fprintf(file, "U ");
|
||||
len = (int)(lwip_ntohs(IPH_LEN(iphdr)) - sizeof(struct udp_hdr) - IP_HLEN);
|
||||
fprintf(file, " %d\n", len);
|
||||
|
||||
fflush(file);
|
||||
|
||||
pbuf_header(p, IP_HLEN);
|
||||
break;
|
||||
#endif /* LWIP_UDP */
|
||||
default:
|
||||
LWIP_DEBUGF(TCPDUMP_DEBUG, ("unhandled IP protocol: %d\n", (int)IPH_PROTO(iphdr)));
|
||||
break;
|
||||
}
|
||||
#else
|
||||
LWIP_UNUSED_ARG(p);
|
||||
LWIP_UNUSED_ARG(netif);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* LWIP_IPV4 && LWIP_TCP */
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
302
ext/lwip-contrib/ports/unix/port/netif/tunif.c
Normal file
302
ext/lwip-contrib/ports/unix/port/netif/tunif.c
Normal file
@@ -0,0 +1,302 @@
|
||||
/*
|
||||
* 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 "netif/tunif.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/uio.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
|
||||
#include "lwip/debug.h"
|
||||
|
||||
#include "lwip/opt.h"
|
||||
#include "lwip/def.h"
|
||||
#include "lwip/ip.h"
|
||||
#include "lwip/mem.h"
|
||||
#include "lwip/netif.h"
|
||||
#include "lwip/pbuf.h"
|
||||
#include "lwip/sys.h"
|
||||
|
||||
#if LWIP_IPV4 /* @todo: IPv6 */
|
||||
#if !NO_SYS
|
||||
|
||||
#define IFNAME0 't'
|
||||
#define IFNAME1 'n'
|
||||
|
||||
#ifndef TUNIF_DEBUG
|
||||
#define TUNIF_DEBUG LWIP_DBG_OFF
|
||||
#endif
|
||||
|
||||
#define IFCONFIG_CALL "/sbin/ifconfig tun0 inet %d.%d.%d.%d %d.%d.%d.%d"
|
||||
|
||||
struct tunif {
|
||||
/* Add whatever per-interface state that is needed here. */
|
||||
int fd;
|
||||
};
|
||||
|
||||
/* Forward declarations. */
|
||||
static void tunif_input(struct netif *netif);
|
||||
static err_t tunif_output(struct netif *netif, struct pbuf *p,
|
||||
const ip4_addr_t *ipaddr);
|
||||
|
||||
static void tunif_thread(void *data);
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
low_level_init(struct netif *netif)
|
||||
{
|
||||
struct tunif *tunif;
|
||||
char buf[sizeof(IFCONFIG_CALL) + 50];
|
||||
|
||||
tunif = (struct tunif *)netif->state;
|
||||
|
||||
/* Obtain MAC address from network interface. */
|
||||
|
||||
/* Do whatever else is needed to initialize interface. */
|
||||
|
||||
tunif->fd = open("/dev/tun0", O_RDWR);
|
||||
LWIP_DEBUGF(TUNIF_DEBUG, ("tunif_init: fd %d\n", tunif->fd));
|
||||
if (tunif->fd == -1) {
|
||||
perror("tunif_init");
|
||||
exit(1);
|
||||
}
|
||||
sprintf(buf, IFCONFIG_CALL,
|
||||
ip4_addr1(netif_ip4_gw(netif)),
|
||||
ip4_addr2(netif_ip4_gw(netif)),
|
||||
ip4_addr3(netif_ip4_gw(netif)),
|
||||
ip4_addr4(netif_ip4_gw(netif)),
|
||||
ip4_addr1(netif_ip4_addr(netif)),
|
||||
ip4_addr2(netif_ip4_addr(netif)),
|
||||
ip4_addr3(netif_ip4_addr(netif)),
|
||||
ip4_addr4(netif_ip4_addr(netif)));
|
||||
|
||||
LWIP_DEBUGF(TUNIF_DEBUG, ("tunif_init: system(\"%s\");\n", buf));
|
||||
if (system(buf) == 0) {
|
||||
sys_thread_new("tunif_thread", tunif_thread, netif, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/*
|
||||
* low_level_output():
|
||||
*
|
||||
* Should do the actual transmission of the packet. The packet is
|
||||
* contained in the pbuf that is passed to the function. This pbuf
|
||||
* might be chained.
|
||||
*
|
||||
*/
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
static err_t
|
||||
low_level_output(struct tunif *tunif, struct pbuf *p)
|
||||
{
|
||||
char buf[1500];
|
||||
int rnd_val;
|
||||
|
||||
/* initiate transfer(); */
|
||||
|
||||
rnd_val = rand();
|
||||
if (((double)rnd_val/(double)RAND_MAX) < 0.4) {
|
||||
printf("drop\n");
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
pbuf_copy_partial(p, buf, p->tot_len, 0);
|
||||
|
||||
/* signal that packet should be sent(); */
|
||||
if (write(tunif->fd, buf, p->tot_len) == -1) {
|
||||
perror("tunif: write");
|
||||
}
|
||||
return ERR_OK;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/*
|
||||
* low_level_input():
|
||||
*
|
||||
* Should allocate a pbuf and transfer the bytes of the incoming
|
||||
* packet from the interface into the pbuf.
|
||||
*
|
||||
*/
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static struct pbuf *
|
||||
low_level_input(struct tunif *tunif)
|
||||
{
|
||||
struct pbuf *p;
|
||||
ssize_t len;
|
||||
char buf[1500];
|
||||
|
||||
/* Obtain the size of the packet and put it into the "len"
|
||||
variable. */
|
||||
len = read(tunif->fd, buf, sizeof(buf));
|
||||
if((len <= 0) || (len > 0xffff)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* if (((double)rand()/(double)RAND_MAX) < 0.1) {
|
||||
printf("drop\n");
|
||||
return NULL;
|
||||
}*/
|
||||
|
||||
/* We allocate a pbuf chain of pbufs from the pool. */
|
||||
p = pbuf_alloc(PBUF_LINK, (u16_t)len, PBUF_POOL);
|
||||
|
||||
if (p != NULL) {
|
||||
pbuf_take(p, buf, (u16_t)len);
|
||||
/* acknowledge that packet has been read(); */
|
||||
} else {
|
||||
/* drop packet(); */
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
tunif_thread(void *arg)
|
||||
{
|
||||
struct netif *netif;
|
||||
struct tunif *tunif;
|
||||
fd_set fdset;
|
||||
int ret;
|
||||
|
||||
netif = (struct netif *)arg;
|
||||
tunif = (struct tunif *)netif->state;
|
||||
|
||||
while (1) {
|
||||
FD_ZERO(&fdset);
|
||||
FD_SET(tunif->fd, &fdset);
|
||||
|
||||
/* Wait for a packet to arrive. */
|
||||
ret = select(tunif->fd + 1, &fdset, NULL, NULL, NULL);
|
||||
|
||||
if (ret == 1) {
|
||||
/* Handle incoming packet. */
|
||||
tunif_input(netif);
|
||||
} else if (ret == -1) {
|
||||
perror("tunif_thread: select");
|
||||
}
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/*
|
||||
* tunif_output():
|
||||
*
|
||||
* This function is called by the TCP/IP stack when an IP packet
|
||||
* should be sent. It calls the function called low_level_output() to
|
||||
* do the actuall transmission of the packet.
|
||||
*
|
||||
*/
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static err_t
|
||||
tunif_output(struct netif *netif, struct pbuf *p,
|
||||
const ip4_addr_t *ipaddr)
|
||||
{
|
||||
struct tunif *tunif;
|
||||
LWIP_UNUSED_ARG(ipaddr);
|
||||
|
||||
tunif = (struct tunif *)netif->state;
|
||||
|
||||
return low_level_output(tunif, p);
|
||||
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/*
|
||||
* tunif_input():
|
||||
*
|
||||
* This function should be called when a packet is ready to be read
|
||||
* from the interface. It uses the function low_level_input() that
|
||||
* should handle the actual reception of bytes from the network
|
||||
* interface.
|
||||
*
|
||||
*/
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
tunif_input(struct netif *netif)
|
||||
{
|
||||
struct tunif *tunif;
|
||||
struct pbuf *p;
|
||||
|
||||
|
||||
tunif = (struct tunif *)netif->state;
|
||||
|
||||
p = low_level_input(tunif);
|
||||
|
||||
if (p == NULL) {
|
||||
LWIP_DEBUGF(TUNIF_DEBUG, ("tunif_input: low_level_input returned NULL\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* CS: ip_lookup() was removed */
|
||||
if (ip_lookup(p->payload, netif)) {
|
||||
#endif
|
||||
netif->input(p, netif);
|
||||
#if 0
|
||||
}
|
||||
#endif
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/*
|
||||
* tunif_init():
|
||||
*
|
||||
* Should be called at the beginning of the program to set up the
|
||||
* network interface. It calls the function low_level_init() to do the
|
||||
* actual setup of the hardware.
|
||||
*
|
||||
*/
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
err_t
|
||||
tunif_init(struct netif *netif)
|
||||
{
|
||||
struct tunif *tunif;
|
||||
|
||||
tunif = (struct tunif *)mem_malloc(sizeof(struct tunif));
|
||||
if (!tunif) {
|
||||
return ERR_MEM;
|
||||
}
|
||||
netif->state = tunif;
|
||||
netif->name[0] = IFNAME0;
|
||||
netif->name[1] = IFNAME1;
|
||||
netif->output = tunif_output;
|
||||
|
||||
|
||||
low_level_init(netif);
|
||||
return ERR_OK;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
#endif /* !NO_SYS */
|
||||
#endif /* LWIP_IPV4 */
|
||||
500
ext/lwip-contrib/ports/unix/port/netif/unixif.c
Normal file
500
ext/lwip-contrib/ports/unix/port/netif/unixif.c
Normal file
@@ -0,0 +1,500 @@
|
||||
/*
|
||||
* 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/debug.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/uio.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
#include <sys/stat.h>
|
||||
/*#include <netinet/in.h> */
|
||||
/*#include <arpa/inet.h> */
|
||||
|
||||
|
||||
#include "lwip/stats.h"
|
||||
|
||||
#include "lwip/def.h"
|
||||
#include "lwip/mem.h"
|
||||
#include "lwip/pbuf.h"
|
||||
#include "netif/list.h"
|
||||
#include "netif/unixif.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/timeouts.h"
|
||||
|
||||
#if LWIP_IPV4 /* @todo: IPv6 */
|
||||
#if !NO_SYS
|
||||
|
||||
#include "netif/tcpdump.h"
|
||||
|
||||
#define UNIXIF_BPS 512000
|
||||
#define UNIXIF_QUEUELEN 6
|
||||
/*#define UNIXIF_DROP_FIRST */
|
||||
|
||||
#ifndef UNIXIF_DEBUG
|
||||
#define UNIXIF_DEBUG LWIP_DBG_OFF
|
||||
#endif
|
||||
|
||||
struct unixif_buf {
|
||||
struct pbuf *p;
|
||||
unsigned short len, tot_len;
|
||||
void *payload;
|
||||
};
|
||||
|
||||
struct unixif {
|
||||
int fd;
|
||||
sys_sem_t sem;
|
||||
struct list *q;
|
||||
};
|
||||
|
||||
static void unixif_thread(void *arg);
|
||||
static void unixif_thread2(void *arg);
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static int
|
||||
unix_socket_client(const char *name)
|
||||
{
|
||||
int fd;
|
||||
#if !defined(LWIP_UNIX_LINUX) && !defined(LWIP_UNIX_CYGWIN) && !defined(__CYGWIN__)
|
||||
int len;
|
||||
#endif
|
||||
struct sockaddr_un unix_addr;
|
||||
|
||||
/* create a Unix domain stream socket */
|
||||
if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
|
||||
perror("unixif: unix_socket_client: socket");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* fill socket address structure w/our address */
|
||||
memset(&unix_addr, 0, sizeof(unix_addr));
|
||||
unix_addr.sun_family = AF_UNIX;
|
||||
snprintf(unix_addr.sun_path, sizeof(unix_addr.sun_path), "%s%05d", "/var/tmp/", getpid());
|
||||
#if !defined(LWIP_UNIX_LINUX) && !defined(LWIP_UNIX_CYGWIN) && !defined(__CYGWIN__)
|
||||
len = sizeof(unix_addr.sun_len) + sizeof(unix_addr.sun_family) +
|
||||
strlen(unix_addr.sun_path) + 1;
|
||||
unix_addr.sun_len = len;
|
||||
#endif /* LWIP_UNIX_LINUX */
|
||||
|
||||
unlink(unix_addr.sun_path); /* in case it already exists */
|
||||
if (bind(fd, (struct sockaddr *) &unix_addr,
|
||||
sizeof(struct sockaddr_un)) < 0) {
|
||||
perror("unixif: unix_socket_client: socket");
|
||||
return(-1);
|
||||
}
|
||||
if (chmod(unix_addr.sun_path, S_IRWXU | S_IRWXO) < 0) {
|
||||
perror("unixif: unix_socket_client: socket");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* fill socket address structure w/server's addr */
|
||||
memset(&unix_addr, 0, sizeof(unix_addr));
|
||||
unix_addr.sun_family = AF_UNIX;
|
||||
strncpy(unix_addr.sun_path, name, sizeof(unix_addr.sun_path));
|
||||
unix_addr.sun_path[sizeof(unix_addr.sun_path)-1] = 0; /* ensure \0 termination */
|
||||
#if !defined(LWIP_UNIX_LINUX) && !defined(LWIP_UNIX_CYGWIN) && !defined(__CYGWIN__)
|
||||
len = sizeof(unix_addr.sun_len) + sizeof(unix_addr.sun_family) +
|
||||
strlen(unix_addr.sun_path) + 1;
|
||||
unix_addr.sun_len = len;
|
||||
#endif /* LWIP_UNIX_LINUX */
|
||||
if (connect(fd, (struct sockaddr *) &unix_addr,
|
||||
sizeof(struct sockaddr_un)) < 0) {
|
||||
perror("unixif: unix_socket_client: socket");
|
||||
return(-1);
|
||||
}
|
||||
return(fd);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static int
|
||||
unix_socket_server(const char *name)
|
||||
{
|
||||
int fd;
|
||||
#if !defined(LWIP_UNIX_LINUX) && !defined(LWIP_UNIX_CYGWIN) && !defined(__CYGWIN__)
|
||||
int len;
|
||||
#endif
|
||||
struct sockaddr_un unix_addr;
|
||||
|
||||
/* create a Unix domain stream socket */
|
||||
if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
|
||||
perror("unixif: unix_socket_server: socket");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
unlink(name); /* in case it already exists */
|
||||
|
||||
/* fill in socket address structure */
|
||||
memset(&unix_addr, 0, sizeof(unix_addr));
|
||||
unix_addr.sun_family = AF_UNIX;
|
||||
strncpy(unix_addr.sun_path, name, sizeof(unix_addr.sun_path));
|
||||
unix_addr.sun_path[sizeof(unix_addr.sun_path)-1] = 0; /* ensure \0 termination */
|
||||
#if !defined(LWIP_UNIX_LINUX) && !defined(LWIP_UNIX_CYGWIN) && !defined(__CYGWIN__)
|
||||
len = sizeof(unix_addr.sun_len) + sizeof(unix_addr.sun_family) +
|
||||
strlen(unix_addr.sun_path) + 1;
|
||||
unix_addr.sun_len = len;
|
||||
#endif /* LWIP_UNIX_LINUX */
|
||||
|
||||
/* bind the name to the descriptor */
|
||||
if (bind(fd, (struct sockaddr *) &unix_addr,
|
||||
sizeof(struct sockaddr_un)) < 0) {
|
||||
perror("unixif: unix_socket_server: bind");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
if (chmod(unix_addr.sun_path, S_IRWXU | S_IRWXO) < 0) {
|
||||
perror("unixif: unix_socket_server: chmod");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
if (listen(fd, 5) < 0) { /* tell kernel we're a server */
|
||||
perror("unixif: unix_socket_server: listen");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
return(fd);
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
unixif_input_handler(void *data)
|
||||
{
|
||||
struct netif *netif;
|
||||
struct unixif *unixif;
|
||||
char buf[1532];
|
||||
int plen;
|
||||
ssize_t len;
|
||||
u16_t len16;
|
||||
struct pbuf *p;
|
||||
|
||||
netif = (struct netif *)data;
|
||||
unixif = (struct unixif *)netif->state;
|
||||
|
||||
len = read(unixif->fd, &plen, sizeof(int));
|
||||
if (len < 0) {
|
||||
perror("unixif_irq_handler: read");
|
||||
abort();
|
||||
}
|
||||
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_irq_handler: len == %d plen == %d bytes\n", (int)len, plen));
|
||||
if (len == sizeof(int)) {
|
||||
|
||||
if (plen < 20 || plen > 1500) {
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("plen %d!\n", plen));
|
||||
return;
|
||||
}
|
||||
|
||||
len = read(unixif->fd, buf, (size_t)plen);
|
||||
if (len < 0) {
|
||||
perror("unixif_irq_handler: read");
|
||||
abort();
|
||||
}
|
||||
if (len != plen) {
|
||||
perror("unixif_irq_handler: read len != plen");
|
||||
abort();
|
||||
}
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_irq_handler: read %d bytes\n", (int)len));
|
||||
len16 = (u16_t)len;
|
||||
p = pbuf_alloc(PBUF_LINK, len16, PBUF_POOL);
|
||||
|
||||
if (p != NULL) {
|
||||
pbuf_take(p, buf, len16);
|
||||
LINK_STATS_INC(link.recv);
|
||||
#if LWIP_IPV4 && LWIP_TCP
|
||||
tcpdump(p, netif);
|
||||
#endif
|
||||
netif->input(p, netif);
|
||||
} else {
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_irq_handler: could not allocate pbuf\n"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
unixif_thread(void *arg)
|
||||
{
|
||||
struct netif *netif;
|
||||
struct unixif *unixif;
|
||||
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_thread: started.\n"));
|
||||
|
||||
netif = (struct netif *)arg;
|
||||
unixif = (struct unixif *)netif->state;
|
||||
|
||||
|
||||
while (1) {
|
||||
sys_sem_wait(&unixif->sem);
|
||||
unixif_input_handler(netif);
|
||||
}
|
||||
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
unixif_thread2(void *arg)
|
||||
{
|
||||
struct netif *netif;
|
||||
struct unixif *unixif;
|
||||
fd_set fdset;
|
||||
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_thread2: started.\n"));
|
||||
|
||||
netif = (struct netif *)arg;
|
||||
unixif = (struct unixif *)netif->state;
|
||||
|
||||
while (1) {
|
||||
FD_ZERO(&fdset);
|
||||
FD_SET(unixif->fd, &fdset);
|
||||
|
||||
if (select(unixif->fd + 1, &fdset, NULL, NULL, NULL) > 0) {
|
||||
sys_sem_signal(&unixif->sem);
|
||||
}
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void unixif_output_timeout(void *arg);
|
||||
|
||||
static err_t
|
||||
unixif_output(struct netif *netif, struct pbuf *p, const ip4_addr_t *ipaddr)
|
||||
{
|
||||
struct unixif *unixif;
|
||||
struct unixif_buf *buf;
|
||||
LWIP_UNUSED_ARG(ipaddr);
|
||||
|
||||
unixif = (struct unixif *)netif->state;
|
||||
|
||||
buf = (struct unixif_buf *)malloc(sizeof(struct unixif_buf));
|
||||
buf->p = p;
|
||||
buf->len = p->len;
|
||||
buf->tot_len = p->tot_len;
|
||||
buf->payload = p->payload;
|
||||
|
||||
if (list_elems(unixif->q) == 0) {
|
||||
pbuf_ref(p);
|
||||
list_push(unixif->q, buf);
|
||||
sys_timeout((u32_t)p->tot_len * 8000 / UNIXIF_BPS, unixif_output_timeout,
|
||||
netif);
|
||||
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_output: first on list\n"));
|
||||
|
||||
} else {
|
||||
pbuf_ref(p);
|
||||
if (list_push(unixif->q, buf) == 0) {
|
||||
#ifdef UNIXIF_DROP_FIRST
|
||||
struct unixif_buf *buf2;
|
||||
|
||||
buf2 = list_pop(unixif->q);
|
||||
pbuf_free(buf2->p);
|
||||
free(buf2);
|
||||
list_push(unixif->q, buf);
|
||||
#else
|
||||
free(buf);
|
||||
pbuf_free(p);
|
||||
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_output: drop\n"));
|
||||
|
||||
#endif /* UNIXIF_DROP_FIRST */
|
||||
LINK_STATS_INC(link.drop);
|
||||
|
||||
} else {
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_output: on list\n"));
|
||||
}
|
||||
|
||||
}
|
||||
return ERR_OK;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
unixif_output_timeout(void *arg)
|
||||
{
|
||||
struct pbuf *p, *q;
|
||||
int i, j, len;
|
||||
unsigned short plen, ptot_len;
|
||||
struct unixif_buf *buf;
|
||||
void *payload;
|
||||
struct netif *netif;
|
||||
struct unixif *unixif;
|
||||
char *data;
|
||||
|
||||
netif = (struct netif *)arg;
|
||||
unixif = (struct unixif *)netif->state;
|
||||
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_output_timeout\n"));
|
||||
|
||||
/* buf = unixif->q[0];
|
||||
unixif->q[0] = unixif->q[1];
|
||||
unixif->q[1] = NULL;*/
|
||||
buf = (struct unixif_buf *)list_pop(unixif->q);
|
||||
|
||||
p = buf->p;
|
||||
|
||||
plen = p->len;
|
||||
ptot_len = p->tot_len;
|
||||
payload = p->payload;
|
||||
|
||||
p->len = buf->len;
|
||||
p->tot_len = buf->tot_len;
|
||||
p->payload = buf->payload;
|
||||
|
||||
|
||||
if (p->tot_len == 0) {
|
||||
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("p->len!\n"));
|
||||
abort();
|
||||
}
|
||||
data = (char *)malloc(p->tot_len);
|
||||
|
||||
i = 0;
|
||||
for(q = p; q != NULL; q = q->next) {
|
||||
for(j = 0; j < q->len; j++) {
|
||||
data[i] = ((char *)q->payload)[j];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_output: sending %d (%d) bytes\n",
|
||||
p->len, p->tot_len));
|
||||
|
||||
len = p->tot_len;
|
||||
if (write(unixif->fd, &len, sizeof(int)) == -1) {
|
||||
perror("unixif_output: write");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (write(unixif->fd, data, p->tot_len) == -1) {
|
||||
perror("unixif_output: write");
|
||||
abort();
|
||||
}
|
||||
#if LWIP_IPV4 && LWIP_TCP
|
||||
tcpdump(p, netif);
|
||||
#endif
|
||||
LINK_STATS_INC(link.xmit);
|
||||
|
||||
free(data);
|
||||
free(buf);
|
||||
p->len = plen;
|
||||
p->tot_len = ptot_len;
|
||||
p->payload = payload;
|
||||
|
||||
pbuf_free(p);
|
||||
|
||||
/* if (unixif->q[0] != NULL) {
|
||||
sys_timeout(unixif->q[0]->tot_len * 8000 / UNIXIF_BPS,
|
||||
unixif_output_timeout, netif);
|
||||
}*/
|
||||
if (list_elems(unixif->q) > 0) {
|
||||
sys_timeout(((struct unixif_buf *)list_first(unixif->q))->tot_len *
|
||||
8000U / UNIXIF_BPS,
|
||||
unixif_output_timeout, netif);
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
err_t
|
||||
unixif_init_server(struct netif *netif)
|
||||
{
|
||||
int fd, fd2;
|
||||
struct sockaddr_un addr;
|
||||
socklen_t len;
|
||||
struct unixif *unixif;
|
||||
|
||||
fd = unix_socket_server("/tmp/unixif");
|
||||
|
||||
if (fd == -1) {
|
||||
perror("unixif_server");
|
||||
abort();
|
||||
}
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_server: fd %d\n", fd));
|
||||
|
||||
unixif = (struct unixif *)malloc(sizeof(struct unixif));
|
||||
if (!unixif) {
|
||||
return ERR_MEM;
|
||||
}
|
||||
netif->state = unixif;
|
||||
netif->name[0] = 'u';
|
||||
netif->name[1] = 'n';
|
||||
netif->output = unixif_output;
|
||||
unixif->q = list_new(UNIXIF_QUEUELEN);
|
||||
|
||||
printf("Now run ./simnode.\n");
|
||||
len = sizeof(addr);
|
||||
fd2 = accept(fd, (struct sockaddr *)&addr, &len);
|
||||
|
||||
if (fd2 == -1) {
|
||||
perror("unixif_accept");
|
||||
abort();
|
||||
}
|
||||
|
||||
LWIP_DEBUGF(UNIXIF_DEBUG, ("unixif_accept: %d\n", fd2));
|
||||
|
||||
unixif->fd = fd2;
|
||||
if(sys_sem_new(&unixif->sem, 0) != ERR_OK) {
|
||||
LWIP_ASSERT("Failed to create semaphore", 0);
|
||||
}
|
||||
sys_thread_new("unixif_thread", unixif_thread, netif, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
sys_thread_new("unixif_thread2", unixif_thread2, netif, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
return ERR_OK;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
err_t
|
||||
unixif_init_client(struct netif *netif)
|
||||
{
|
||||
struct unixif *unixif;
|
||||
unixif = (struct unixif *)malloc(sizeof(struct unixif));
|
||||
if (!unixif) {
|
||||
return ERR_MEM;
|
||||
}
|
||||
netif->state = unixif;
|
||||
netif->name[0] = 'u';
|
||||
netif->name[1] = 'n';
|
||||
netif->output = unixif_output;
|
||||
|
||||
unixif->fd = unix_socket_client("/tmp/unixif");
|
||||
if (unixif->fd == -1) {
|
||||
perror("unixif_init");
|
||||
abort();
|
||||
}
|
||||
unixif->q = list_new(UNIXIF_QUEUELEN);
|
||||
if(sys_sem_new(&unixif->sem, 0) != ERR_OK) {
|
||||
LWIP_ASSERT("Failed to create semaphore", 0);
|
||||
}
|
||||
sys_thread_new("unixif_thread", unixif_thread, netif, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
sys_thread_new("unixif_thread2", unixif_thread2, netif, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
return ERR_OK;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
#endif /* !NO_SYS */
|
||||
#endif /* LWIP_IPV4 */
|
||||
65
ext/lwip-contrib/ports/unix/port/perf.c
Normal file
65
ext/lwip-contrib/ports/unix/port/perf.c
Normal file
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* 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 "arch/perf.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
static FILE *f;
|
||||
|
||||
void
|
||||
perf_print(unsigned long c1l, unsigned long c1h,
|
||||
unsigned long c2l, unsigned long c2h,
|
||||
char *key)
|
||||
{
|
||||
unsigned long sub_ms, sub_ls;
|
||||
|
||||
sub_ms = c2h - c1h;
|
||||
sub_ls = c2l - c1l;
|
||||
if (c2l < c1l) sub_ms--;
|
||||
fprintf(f, "%s: %.8lu%.8lu\n", key, sub_ms, sub_ls);
|
||||
fflush(NULL);
|
||||
}
|
||||
|
||||
void
|
||||
perf_print_times(struct tms *start, struct tms *end, char *key)
|
||||
{
|
||||
fprintf(f, "%s: %lu\n", key, end->tms_stime - start->tms_stime);
|
||||
fflush(NULL);
|
||||
}
|
||||
|
||||
void
|
||||
perf_init(char *fname)
|
||||
{
|
||||
f = fopen(fname, "w");
|
||||
}
|
||||
|
||||
649
ext/lwip-contrib/ports/unix/port/sys_arch.c
Normal file
649
ext/lwip-contrib/ports/unix/port/sys_arch.c
Normal file
@@ -0,0 +1,649 @@
|
||||
/*
|
||||
* 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>
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Wed Apr 17 16:05:29 EDT 2002 (James Roth)
|
||||
*
|
||||
* - Fixed an unlikely sys_thread_new() race condition.
|
||||
*
|
||||
* - Made current_thread() work with threads which where
|
||||
* not created with sys_thread_new(). This includes
|
||||
* the main thread and threads made with pthread_create().
|
||||
*
|
||||
* - Catch overflows where more than SYS_MBOX_SIZE messages
|
||||
* are waiting to be read. The sys_mbox_post() routine
|
||||
* will block until there is more room instead of just
|
||||
* leaking messages.
|
||||
*/
|
||||
#include "lwip/debug.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <pthread.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "lwip/def.h"
|
||||
|
||||
#ifdef LWIP_UNIX_MACH
|
||||
#include <mach/mach.h>
|
||||
#include <mach/mach_time.h>
|
||||
#endif
|
||||
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/opt.h"
|
||||
#include "lwip/stats.h"
|
||||
|
||||
static void
|
||||
get_monotonic_time(struct timespec *ts)
|
||||
{
|
||||
#ifdef LWIP_UNIX_MACH
|
||||
/* darwin impl (no CLOCK_MONOTONIC) */
|
||||
uint64_t t = mach_absolute_time();
|
||||
mach_timebase_info_data_t timebase_info = {0, 0};
|
||||
mach_timebase_info(&timebase_info);
|
||||
uint64_t nano = (t * timebase_info.numer) / (timebase_info.denom);
|
||||
uint64_t sec = nano/1000000000L;
|
||||
nano -= sec * 1000000000L;
|
||||
ts->tv_sec = sec;
|
||||
ts->tv_nsec = nano;
|
||||
#else
|
||||
clock_gettime(CLOCK_MONOTONIC, ts);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !NO_SYS
|
||||
|
||||
static struct sys_thread *threads = NULL;
|
||||
static pthread_mutex_t threads_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
struct sys_mbox_msg {
|
||||
struct sys_mbox_msg *next;
|
||||
void *msg;
|
||||
};
|
||||
|
||||
#define SYS_MBOX_SIZE 128
|
||||
|
||||
struct sys_mbox {
|
||||
int first, last;
|
||||
void *msgs[SYS_MBOX_SIZE];
|
||||
struct sys_sem *not_empty;
|
||||
struct sys_sem *not_full;
|
||||
struct sys_sem *mutex;
|
||||
int wait_send;
|
||||
};
|
||||
|
||||
struct sys_sem {
|
||||
unsigned int c;
|
||||
pthread_condattr_t condattr;
|
||||
pthread_cond_t cond;
|
||||
pthread_mutex_t mutex;
|
||||
};
|
||||
|
||||
struct sys_mutex {
|
||||
pthread_mutex_t mutex;
|
||||
};
|
||||
|
||||
struct sys_thread {
|
||||
struct sys_thread *next;
|
||||
pthread_t pthread;
|
||||
};
|
||||
|
||||
#if SYS_LIGHTWEIGHT_PROT
|
||||
static pthread_mutex_t lwprot_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
static pthread_t lwprot_thread = (pthread_t)0xDEAD;
|
||||
static int lwprot_count = 0;
|
||||
#endif /* SYS_LIGHTWEIGHT_PROT */
|
||||
|
||||
static struct sys_sem *sys_sem_new_internal(u8_t count);
|
||||
static void sys_sem_free_internal(struct sys_sem *sem);
|
||||
|
||||
static u32_t cond_wait(pthread_cond_t * cond, pthread_mutex_t * mutex,
|
||||
u32_t timeout);
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Threads */
|
||||
static struct sys_thread *
|
||||
introduce_thread(pthread_t id)
|
||||
{
|
||||
struct sys_thread *thread;
|
||||
|
||||
thread = (struct sys_thread *)malloc(sizeof(struct sys_thread));
|
||||
|
||||
if (thread != NULL) {
|
||||
pthread_mutex_lock(&threads_mutex);
|
||||
thread->next = threads;
|
||||
thread->pthread = id;
|
||||
threads = thread;
|
||||
pthread_mutex_unlock(&threads_mutex);
|
||||
}
|
||||
|
||||
return thread;
|
||||
}
|
||||
|
||||
sys_thread_t
|
||||
sys_thread_new(const char *name, lwip_thread_fn function, void *arg, int stacksize, int prio)
|
||||
{
|
||||
int code;
|
||||
pthread_t tmp;
|
||||
struct sys_thread *st = NULL;
|
||||
LWIP_UNUSED_ARG(name);
|
||||
LWIP_UNUSED_ARG(stacksize);
|
||||
LWIP_UNUSED_ARG(prio);
|
||||
|
||||
code = pthread_create(&tmp,
|
||||
NULL,
|
||||
(void *(*)(void *))
|
||||
function,
|
||||
arg);
|
||||
|
||||
if (0 == code) {
|
||||
st = introduce_thread(tmp);
|
||||
}
|
||||
|
||||
if (NULL == st) {
|
||||
LWIP_DEBUGF(SYS_DEBUG, ("sys_thread_new: pthread_create %d, st = 0x%lx",
|
||||
code, (unsigned long)st));
|
||||
abort();
|
||||
}
|
||||
return st;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Mailbox */
|
||||
err_t
|
||||
sys_mbox_new(struct sys_mbox **mb, int size)
|
||||
{
|
||||
struct sys_mbox *mbox;
|
||||
LWIP_UNUSED_ARG(size);
|
||||
|
||||
mbox = (struct sys_mbox *)malloc(sizeof(struct sys_mbox));
|
||||
if (mbox == NULL) {
|
||||
return ERR_MEM;
|
||||
}
|
||||
mbox->first = mbox->last = 0;
|
||||
mbox->not_empty = sys_sem_new_internal(0);
|
||||
mbox->not_full = sys_sem_new_internal(0);
|
||||
mbox->mutex = sys_sem_new_internal(1);
|
||||
mbox->wait_send = 0;
|
||||
|
||||
SYS_STATS_INC_USED(mbox);
|
||||
*mb = mbox;
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
void
|
||||
sys_mbox_free(struct sys_mbox **mb)
|
||||
{
|
||||
if ((mb != NULL) && (*mb != SYS_MBOX_NULL)) {
|
||||
struct sys_mbox *mbox = *mb;
|
||||
SYS_STATS_DEC(mbox.used);
|
||||
sys_arch_sem_wait(&mbox->mutex, 0);
|
||||
|
||||
sys_sem_free_internal(mbox->not_empty);
|
||||
sys_sem_free_internal(mbox->not_full);
|
||||
sys_sem_free_internal(mbox->mutex);
|
||||
mbox->not_empty = mbox->not_full = mbox->mutex = NULL;
|
||||
/* LWIP_DEBUGF("sys_mbox_free: mbox 0x%lx\n", mbox); */
|
||||
free(mbox);
|
||||
}
|
||||
}
|
||||
|
||||
err_t
|
||||
sys_mbox_trypost(struct sys_mbox **mb, void *msg)
|
||||
{
|
||||
u8_t first;
|
||||
struct sys_mbox *mbox;
|
||||
LWIP_ASSERT("invalid mbox", (mb != NULL) && (*mb != NULL));
|
||||
mbox = *mb;
|
||||
|
||||
sys_arch_sem_wait(&mbox->mutex, 0);
|
||||
|
||||
LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_trypost: mbox %p msg %p\n",
|
||||
(void *)mbox, (void *)msg));
|
||||
|
||||
if ((mbox->last + 1) >= (mbox->first + SYS_MBOX_SIZE)) {
|
||||
sys_sem_signal(&mbox->mutex);
|
||||
return ERR_MEM;
|
||||
}
|
||||
|
||||
mbox->msgs[mbox->last % SYS_MBOX_SIZE] = msg;
|
||||
|
||||
if (mbox->last == mbox->first) {
|
||||
first = 1;
|
||||
} else {
|
||||
first = 0;
|
||||
}
|
||||
|
||||
mbox->last++;
|
||||
|
||||
if (first) {
|
||||
sys_sem_signal(&mbox->not_empty);
|
||||
}
|
||||
|
||||
sys_sem_signal(&mbox->mutex);
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
void
|
||||
sys_mbox_post(struct sys_mbox **mb, void *msg)
|
||||
{
|
||||
u8_t first;
|
||||
struct sys_mbox *mbox;
|
||||
LWIP_ASSERT("invalid mbox", (mb != NULL) && (*mb != NULL));
|
||||
mbox = *mb;
|
||||
|
||||
sys_arch_sem_wait(&mbox->mutex, 0);
|
||||
|
||||
LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_post: mbox %p msg %p\n", (void *)mbox, (void *)msg));
|
||||
|
||||
while ((mbox->last + 1) >= (mbox->first + SYS_MBOX_SIZE)) {
|
||||
mbox->wait_send++;
|
||||
sys_sem_signal(&mbox->mutex);
|
||||
sys_arch_sem_wait(&mbox->not_full, 0);
|
||||
sys_arch_sem_wait(&mbox->mutex, 0);
|
||||
mbox->wait_send--;
|
||||
}
|
||||
|
||||
mbox->msgs[mbox->last % SYS_MBOX_SIZE] = msg;
|
||||
|
||||
if (mbox->last == mbox->first) {
|
||||
first = 1;
|
||||
} else {
|
||||
first = 0;
|
||||
}
|
||||
|
||||
mbox->last++;
|
||||
|
||||
if (first) {
|
||||
sys_sem_signal(&mbox->not_empty);
|
||||
}
|
||||
|
||||
sys_sem_signal(&mbox->mutex);
|
||||
}
|
||||
|
||||
u32_t
|
||||
sys_arch_mbox_tryfetch(struct sys_mbox **mb, void **msg)
|
||||
{
|
||||
struct sys_mbox *mbox;
|
||||
LWIP_ASSERT("invalid mbox", (mb != NULL) && (*mb != NULL));
|
||||
mbox = *mb;
|
||||
|
||||
sys_arch_sem_wait(&mbox->mutex, 0);
|
||||
|
||||
if (mbox->first == mbox->last) {
|
||||
sys_sem_signal(&mbox->mutex);
|
||||
return SYS_MBOX_EMPTY;
|
||||
}
|
||||
|
||||
if (msg != NULL) {
|
||||
LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_tryfetch: mbox %p msg %p\n", (void *)mbox, *msg));
|
||||
*msg = mbox->msgs[mbox->first % SYS_MBOX_SIZE];
|
||||
}
|
||||
else{
|
||||
LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_tryfetch: mbox %p, null msg\n", (void *)mbox));
|
||||
}
|
||||
|
||||
mbox->first++;
|
||||
|
||||
if (mbox->wait_send) {
|
||||
sys_sem_signal(&mbox->not_full);
|
||||
}
|
||||
|
||||
sys_sem_signal(&mbox->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32_t
|
||||
sys_arch_mbox_fetch(struct sys_mbox **mb, void **msg, u32_t timeout)
|
||||
{
|
||||
u32_t time_needed = 0;
|
||||
struct sys_mbox *mbox;
|
||||
LWIP_ASSERT("invalid mbox", (mb != NULL) && (*mb != NULL));
|
||||
mbox = *mb;
|
||||
|
||||
/* The mutex lock is quick so we don't bother with the timeout
|
||||
stuff here. */
|
||||
sys_arch_sem_wait(&mbox->mutex, 0);
|
||||
|
||||
while (mbox->first == mbox->last) {
|
||||
sys_sem_signal(&mbox->mutex);
|
||||
|
||||
/* We block while waiting for a mail to arrive in the mailbox. We
|
||||
must be prepared to timeout. */
|
||||
if (timeout != 0) {
|
||||
time_needed = sys_arch_sem_wait(&mbox->not_empty, timeout);
|
||||
|
||||
if (time_needed == SYS_ARCH_TIMEOUT) {
|
||||
return SYS_ARCH_TIMEOUT;
|
||||
}
|
||||
} else {
|
||||
sys_arch_sem_wait(&mbox->not_empty, 0);
|
||||
}
|
||||
|
||||
sys_arch_sem_wait(&mbox->mutex, 0);
|
||||
}
|
||||
|
||||
if (msg != NULL) {
|
||||
LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_fetch: mbox %p msg %p\n", (void *)mbox, *msg));
|
||||
*msg = mbox->msgs[mbox->first % SYS_MBOX_SIZE];
|
||||
}
|
||||
else{
|
||||
LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_fetch: mbox %p, null msg\n", (void *)mbox));
|
||||
}
|
||||
|
||||
mbox->first++;
|
||||
|
||||
if (mbox->wait_send) {
|
||||
sys_sem_signal(&mbox->not_full);
|
||||
}
|
||||
|
||||
sys_sem_signal(&mbox->mutex);
|
||||
|
||||
return time_needed;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Semaphore */
|
||||
static struct sys_sem *
|
||||
sys_sem_new_internal(u8_t count)
|
||||
{
|
||||
struct sys_sem *sem;
|
||||
|
||||
sem = (struct sys_sem *)malloc(sizeof(struct sys_sem));
|
||||
if (sem != NULL) {
|
||||
sem->c = count;
|
||||
pthread_condattr_init(&(sem->condattr));
|
||||
#if !(defined(LWIP_UNIX_MACH) || (defined(LWIP_UNIX_ANDROID) && __ANDROID_API__ < 21))
|
||||
pthread_condattr_setclock(&(sem->condattr), CLOCK_MONOTONIC);
|
||||
#endif
|
||||
pthread_cond_init(&(sem->cond), &(sem->condattr));
|
||||
pthread_mutex_init(&(sem->mutex), NULL);
|
||||
}
|
||||
return sem;
|
||||
}
|
||||
|
||||
err_t
|
||||
sys_sem_new(struct sys_sem **sem, u8_t count)
|
||||
{
|
||||
SYS_STATS_INC_USED(sem);
|
||||
*sem = sys_sem_new_internal(count);
|
||||
if (*sem == NULL) {
|
||||
return ERR_MEM;
|
||||
}
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
static u32_t
|
||||
cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex, u32_t timeout)
|
||||
{
|
||||
struct timespec rtime1, rtime2, ts;
|
||||
int ret;
|
||||
|
||||
if (timeout == 0) {
|
||||
pthread_cond_wait(cond, mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Get a timestamp and add the timeout value. */
|
||||
get_monotonic_time(&rtime1);
|
||||
#if defined(LWIP_UNIX_MACH) || (defined(LWIP_UNIX_ANDROID) && __ANDROID_API__ < 21)
|
||||
ts.tv_sec = timeout / 1000L;
|
||||
ts.tv_nsec = (timeout % 1000L) * 1000000L;
|
||||
ret = pthread_cond_timedwait_relative_np(cond, mutex, &ts);
|
||||
#else
|
||||
ts.tv_sec = rtime1.tv_sec + timeout / 1000L;
|
||||
ts.tv_nsec = rtime1.tv_nsec + (timeout % 1000L) * 1000000L;
|
||||
if (ts.tv_nsec >= 1000000000L) {
|
||||
ts.tv_sec++;
|
||||
ts.tv_nsec -= 1000000000L;
|
||||
}
|
||||
|
||||
ret = pthread_cond_timedwait(cond, mutex, &ts);
|
||||
#endif
|
||||
if (ret == ETIMEDOUT) {
|
||||
return SYS_ARCH_TIMEOUT;
|
||||
}
|
||||
|
||||
/* Calculate for how long we waited for the cond. */
|
||||
get_monotonic_time(&rtime2);
|
||||
ts.tv_sec = rtime2.tv_sec - rtime1.tv_sec;
|
||||
ts.tv_nsec = rtime2.tv_nsec - rtime1.tv_nsec;
|
||||
if (ts.tv_nsec < 0) {
|
||||
ts.tv_sec--;
|
||||
ts.tv_nsec += 1000000000L;
|
||||
}
|
||||
return (u32_t)(ts.tv_sec * 1000L + ts.tv_nsec / 1000000L);
|
||||
}
|
||||
|
||||
u32_t
|
||||
sys_arch_sem_wait(struct sys_sem **s, u32_t timeout)
|
||||
{
|
||||
u32_t time_needed = 0;
|
||||
struct sys_sem *sem;
|
||||
LWIP_ASSERT("invalid sem", (s != NULL) && (*s != NULL));
|
||||
sem = *s;
|
||||
|
||||
pthread_mutex_lock(&(sem->mutex));
|
||||
while (sem->c <= 0) {
|
||||
if (timeout > 0) {
|
||||
time_needed = cond_wait(&(sem->cond), &(sem->mutex), timeout);
|
||||
|
||||
if (time_needed == SYS_ARCH_TIMEOUT) {
|
||||
pthread_mutex_unlock(&(sem->mutex));
|
||||
return SYS_ARCH_TIMEOUT;
|
||||
}
|
||||
/* pthread_mutex_unlock(&(sem->mutex));
|
||||
return time_needed; */
|
||||
} else {
|
||||
cond_wait(&(sem->cond), &(sem->mutex), 0);
|
||||
}
|
||||
}
|
||||
sem->c--;
|
||||
pthread_mutex_unlock(&(sem->mutex));
|
||||
return (u32_t)time_needed;
|
||||
}
|
||||
|
||||
void
|
||||
sys_sem_signal(struct sys_sem **s)
|
||||
{
|
||||
struct sys_sem *sem;
|
||||
LWIP_ASSERT("invalid sem", (s != NULL) && (*s != NULL));
|
||||
sem = *s;
|
||||
|
||||
pthread_mutex_lock(&(sem->mutex));
|
||||
sem->c++;
|
||||
|
||||
if (sem->c > 1) {
|
||||
sem->c = 1;
|
||||
}
|
||||
|
||||
pthread_cond_broadcast(&(sem->cond));
|
||||
pthread_mutex_unlock(&(sem->mutex));
|
||||
}
|
||||
|
||||
static void
|
||||
sys_sem_free_internal(struct sys_sem *sem)
|
||||
{
|
||||
pthread_cond_destroy(&(sem->cond));
|
||||
pthread_condattr_destroy(&(sem->condattr));
|
||||
pthread_mutex_destroy(&(sem->mutex));
|
||||
free(sem);
|
||||
}
|
||||
|
||||
void
|
||||
sys_sem_free(struct sys_sem **sem)
|
||||
{
|
||||
if ((sem != NULL) && (*sem != SYS_SEM_NULL)) {
|
||||
SYS_STATS_DEC(sem.used);
|
||||
sys_sem_free_internal(*sem);
|
||||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Mutex */
|
||||
/** Create a new mutex
|
||||
* @param mutex pointer to the mutex to create
|
||||
* @return a new mutex */
|
||||
err_t
|
||||
sys_mutex_new(struct sys_mutex **mutex)
|
||||
{
|
||||
struct sys_mutex *mtx;
|
||||
|
||||
mtx = (struct sys_mutex *)malloc(sizeof(struct sys_mutex));
|
||||
if (mtx != NULL) {
|
||||
pthread_mutex_init(&(mtx->mutex), NULL);
|
||||
*mutex = mtx;
|
||||
return ERR_OK;
|
||||
}
|
||||
else {
|
||||
return ERR_MEM;
|
||||
}
|
||||
}
|
||||
|
||||
/** Lock a mutex
|
||||
* @param mutex the mutex to lock */
|
||||
void
|
||||
sys_mutex_lock(struct sys_mutex **mutex)
|
||||
{
|
||||
pthread_mutex_lock(&((*mutex)->mutex));
|
||||
}
|
||||
|
||||
/** Unlock a mutex
|
||||
* @param mutex the mutex to unlock */
|
||||
void
|
||||
sys_mutex_unlock(struct sys_mutex **mutex)
|
||||
{
|
||||
pthread_mutex_unlock(&((*mutex)->mutex));
|
||||
}
|
||||
|
||||
/** Delete a mutex
|
||||
* @param mutex the mutex to delete */
|
||||
void
|
||||
sys_mutex_free(struct sys_mutex **mutex)
|
||||
{
|
||||
pthread_mutex_destroy(&((*mutex)->mutex));
|
||||
free(*mutex);
|
||||
}
|
||||
|
||||
#endif /* !NO_SYS */
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Time */
|
||||
u32_t
|
||||
sys_now(void)
|
||||
{
|
||||
struct timespec ts;
|
||||
|
||||
get_monotonic_time(&ts);
|
||||
return (u32_t)(ts.tv_sec * 1000L + ts.tv_nsec / 1000000L);
|
||||
}
|
||||
|
||||
u32_t
|
||||
sys_jiffies(void)
|
||||
{
|
||||
struct timespec ts;
|
||||
|
||||
get_monotonic_time(&ts);
|
||||
return (u32_t)(ts.tv_sec * 1000000000L + ts.tv_nsec);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Init */
|
||||
|
||||
void
|
||||
sys_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Critical section */
|
||||
#if SYS_LIGHTWEIGHT_PROT
|
||||
/** sys_prot_t sys_arch_protect(void)
|
||||
|
||||
This optional function does a "fast" critical region protection and returns
|
||||
the previous protection level. This function is only called during very short
|
||||
critical regions. An embedded system which supports ISR-based drivers might
|
||||
want to implement this function by disabling interrupts. Task-based systems
|
||||
might want to implement this by using a mutex or disabling tasking. This
|
||||
function should support recursive calls from the same task or interrupt. In
|
||||
other words, sys_arch_protect() could be called while already protected. In
|
||||
that case the return value indicates that it is already protected.
|
||||
|
||||
sys_arch_protect() is only required if your port is supporting an operating
|
||||
system.
|
||||
*/
|
||||
sys_prot_t
|
||||
sys_arch_protect(void)
|
||||
{
|
||||
/* Note that for the UNIX port, we are using a lightweight mutex, and our
|
||||
* own counter (which is locked by the mutex). The return code is not actually
|
||||
* used. */
|
||||
if (lwprot_thread != pthread_self())
|
||||
{
|
||||
/* We are locking the mutex where it has not been locked before *
|
||||
* or is being locked by another thread */
|
||||
pthread_mutex_lock(&lwprot_mutex);
|
||||
lwprot_thread = pthread_self();
|
||||
lwprot_count = 1;
|
||||
}
|
||||
else
|
||||
/* It is already locked by THIS thread */
|
||||
lwprot_count++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** void sys_arch_unprotect(sys_prot_t pval)
|
||||
|
||||
This optional function does a "fast" set of critical region protection to the
|
||||
value specified by pval. See the documentation for sys_arch_protect() for
|
||||
more information. This function is only required if your port is supporting
|
||||
an operating system.
|
||||
*/
|
||||
void
|
||||
sys_arch_unprotect(sys_prot_t pval)
|
||||
{
|
||||
LWIP_UNUSED_ARG(pval);
|
||||
if (lwprot_thread == pthread_self())
|
||||
{
|
||||
if (--lwprot_count == 0)
|
||||
{
|
||||
lwprot_thread = (pthread_t) 0xDEAD;
|
||||
pthread_mutex_unlock(&lwprot_mutex);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* SYS_LIGHTWEIGHT_PROT */
|
||||
15
ext/lwip-contrib/ports/unix/setup-tapif
Executable file
15
ext/lwip-contrib/ports/unix/setup-tapif
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Run me using "source setup-tapif" to get exported PRECONFIGURED_TAPIF variable
|
||||
# Alternatively, add "export PRECONFIGURED_TAPIF=tap0" to ~/.bashrc
|
||||
|
||||
# http://backreference.org/2010/03/26/tuntap-interface-tutorial/
|
||||
|
||||
# After executing this script, start unixsim/simhost.
|
||||
# Enter 192.168.0.2 or "http://simhost.local/" (Zeroconf)
|
||||
# in your webbrowser to see simhost webpage.
|
||||
|
||||
sudo ip tuntap add dev tap0 mode tap user `whoami`
|
||||
sudo ip link set tap0 up
|
||||
sudo ip addr add 192.168.0.1/24 dev tap0
|
||||
export PRECONFIGURED_TAPIF=tap0
|
||||
59
ext/lwip-contrib/ports/unix/unixsim/Makefile
Normal file
59
ext/lwip-contrib/ports/unix/unixsim/Makefile
Normal file
@@ -0,0 +1,59 @@
|
||||
#
|
||||
# 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: simhost simrouter simnode makefsdata
|
||||
.PHONY: all
|
||||
|
||||
include ../Common.mk
|
||||
|
||||
MAKEFSDATAOBJS=$(notdir $(MAKEFSDATAFILES:.c=.o))
|
||||
|
||||
clean:
|
||||
rm -f *.o $(LWIPLIBCOMMON) $(APPLIB) simhost simnode simrouter *.s .depend* *.core core
|
||||
|
||||
depend dep: .depend
|
||||
|
||||
include .depend
|
||||
|
||||
.depend: simhost.c simnode.c simrouter.c $(LWIPFILES) $(APPFILES) $(MAKEFSDATAFILES)
|
||||
$(CCDEP) $(CFLAGS) -MM $^ > .depend || rm -f .depend
|
||||
|
||||
simhost: .depend $(LWIPLIBCOMMON) $(APPLIB) simhost.o
|
||||
$(CC) $(CFLAGS) -o simhost simhost.o -Wl,--start-group $(APPLIB) $(LWIPLIBCOMMON) -Wl,--end-group $(LDFLAGS)
|
||||
|
||||
simrouter: .depend $(LWIPLIBCOMMON) $(APPLIB) simrouter.o
|
||||
$(CC) $(CFLAGS) -o simrouter simrouter.o -Wl,--start-group $(APPLIB) $(LWIPLIBCOMMON) -Wl,--end-group $(LDFLAGS)
|
||||
|
||||
simnode: .depend $(LWIPLIBCOMMON) $(APPLIB) simnode.o
|
||||
$(CC) $(CFLAGS) -o simnode simnode.o -Wl,--start-group $(APPLIB) $(LWIPLIBCOMMON) -Wl,--end-group $(LDFLAGS)
|
||||
|
||||
makefsdata: .depend $(MAKEFSDATAOBJS)
|
||||
$(CC) $(CFLAGS) -o makefsdata $(MAKEFSDATAOBJS)
|
||||
61
ext/lwip-contrib/ports/unix/unixsim/README
Normal file
61
ext/lwip-contrib/ports/unix/unixsim/README
Normal file
@@ -0,0 +1,61 @@
|
||||
This directory contains an example of how a project using lwIP might
|
||||
look. It is also the development platform of lwIP, since it can be run
|
||||
as a user process under FreeBSD or Linux. There are also a number of
|
||||
example applications (including a simple web server) in the apps/
|
||||
directory.
|
||||
|
||||
Some short instructions on how to build and run lwIP on a FreeBSD or
|
||||
Linux host. For FreeBSD, the tap interface must be enabled in the
|
||||
kernel configuration and the kernel must be recompiled. The tap
|
||||
interface is enabled by adding the line "pseudo-device tap" in the
|
||||
kernel configuration. See Chapter 9 in the FreeBSD handbook for
|
||||
instructions on how to build a custom FreeBSD kernel.
|
||||
|
||||
For Linux you might need to create a device node with
|
||||
|
||||
> mknod /dev/net/tun c 10 200
|
||||
|
||||
* Compile the code. This must be done by using GNU Make. Under
|
||||
FreeBSD, GNU Make can be found in the ports collection under
|
||||
/usr/ports/devel/gmake (type "make install distclean" to
|
||||
install). Under Linux, GNU Make is the default "make".
|
||||
|
||||
> gmake (FreeBSD)
|
||||
|
||||
> make (Linux)
|
||||
|
||||
* The compilation process produces the executable file "simhost". To
|
||||
run this, you have to be root.
|
||||
|
||||
> su (Type password for the root account)
|
||||
# ./simhost
|
||||
|
||||
* The lwIP TCP/IP stack is now running with IP address
|
||||
192.168.0.2. Some things that you can try:
|
||||
|
||||
To see the packets that are going to and from the lwIP stack, run
|
||||
tcpdump:
|
||||
|
||||
# tcpdump -l -n -i tap0
|
||||
|
||||
You can ping lwIP:
|
||||
|
||||
> ping 192.168.0.2
|
||||
|
||||
For a telnet shell, run:
|
||||
|
||||
> telnet 192.168.0.2
|
||||
|
||||
Finally, "simhost" also includes a simple web server; the URL is
|
||||
of course http://192.168.0.2/.
|
||||
|
||||
* Simhost has some extra features that can be
|
||||
selected with command line options.
|
||||
|
||||
To enable runtime debug output (project must be build with -DLWIP_DEBUG):
|
||||
|
||||
# ./simhost -d
|
||||
|
||||
To ping any host, e.g. the gateway:
|
||||
|
||||
# ./simhost -p 192.168.0.1
|
||||
49
ext/lwip-contrib/ports/unix/unixsim/lwip_hooks.h
Normal file
49
ext/lwip-contrib/ports/unix/unixsim/lwip_hooks.h
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* 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_HOOKS_H
|
||||
#define LWIP_HOOKS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "addons/tcp_isn/tcp_isn.h"
|
||||
|
||||
#define LWIP_HOOK_TCP_ISN lwip_hook_tcp_isn
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* LWIP_HOOKS_H */
|
||||
|
||||
374
ext/lwip-contrib/ports/unix/unixsim/lwipopts.h
Normal file
374
ext/lwip-contrib/ports/unix/unixsim/lwipopts.h
Normal file
@@ -0,0 +1,374 @@
|
||||
/*
|
||||
* 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_LWIPOPTS_H
|
||||
#define LWIP_LWIPOPTS_H
|
||||
|
||||
#include "lwip/arch.h"
|
||||
|
||||
#define LWIP_HOOK_FILENAME "lwip_hooks.h"
|
||||
|
||||
#define LWIP_IPV4 1
|
||||
#define LWIP_IPV6 1
|
||||
|
||||
#define LWIP_DBG_MIN_LEVEL 0
|
||||
#define LWIP_COMPAT_SOCKETS 1
|
||||
#define TAPIF_DEBUG LWIP_DBG_ON
|
||||
#define TUNIF_DEBUG LWIP_DBG_OFF
|
||||
#define UNIXIF_DEBUG LWIP_DBG_OFF
|
||||
#define DELIF_DEBUG LWIP_DBG_OFF
|
||||
#define SIO_FIFO_DEBUG LWIP_DBG_OFF
|
||||
#define TCPDUMP_DEBUG LWIP_DBG_ON
|
||||
|
||||
#define SLIP_DEBUG LWIP_DBG_OFF
|
||||
#define PPP_DEBUG LWIP_DBG_OFF
|
||||
#define MEM_DEBUG LWIP_DBG_OFF
|
||||
#define MEMP_DEBUG LWIP_DBG_OFF
|
||||
#define PBUF_DEBUG LWIP_DBG_OFF
|
||||
#define API_LIB_DEBUG LWIP_DBG_ON
|
||||
#define API_MSG_DEBUG LWIP_DBG_ON
|
||||
#define TCPIP_DEBUG LWIP_DBG_ON
|
||||
#define NETIF_DEBUG LWIP_DBG_ON
|
||||
#define SOCKETS_DEBUG LWIP_DBG_ON
|
||||
#define DEMO_DEBUG LWIP_DBG_ON
|
||||
#define IP_DEBUG LWIP_DBG_ON
|
||||
#define IP_REASS_DEBUG LWIP_DBG_ON
|
||||
#define RAW_DEBUG LWIP_DBG_ON
|
||||
#define ICMP_DEBUG LWIP_DBG_ON
|
||||
#define UDP_DEBUG LWIP_DBG_ON
|
||||
#define TCP_DEBUG LWIP_DBG_ON
|
||||
#define TCP_INPUT_DEBUG LWIP_DBG_ON
|
||||
#define TCP_OUTPUT_DEBUG LWIP_DBG_ON
|
||||
#define TCP_RTO_DEBUG LWIP_DBG_ON
|
||||
#define TCP_CWND_DEBUG LWIP_DBG_ON
|
||||
#define TCP_WND_DEBUG LWIP_DBG_ON
|
||||
#define TCP_FR_DEBUG LWIP_DBG_ON
|
||||
#define TCP_QLEN_DEBUG LWIP_DBG_ON
|
||||
#define TCP_RST_DEBUG LWIP_DBG_ON
|
||||
|
||||
extern unsigned char debug_flags;
|
||||
#define LWIP_DBG_TYPES_ON debug_flags
|
||||
|
||||
#define NO_SYS 0
|
||||
#define LWIP_SOCKET (NO_SYS==0)
|
||||
#define LWIP_NETCONN (NO_SYS==0)
|
||||
#define SO_REUSE 1
|
||||
#define IP_SOF_BROADCAST_RECV 1
|
||||
#define IP_SOF_BROADCAST 1
|
||||
#define SO_REUSE_RXTOALL 1
|
||||
#define LWIP_SO_RCVTIMEO (LWIP_SOCKET)
|
||||
|
||||
/* ---------- Memory options ---------- */
|
||||
/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
|
||||
lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
|
||||
byte alignment -> define MEM_ALIGNMENT to 2. */
|
||||
/* MSVC port: intel processors don't need 4-byte alignment,
|
||||
but are faster that way! */
|
||||
#define MEM_ALIGNMENT 4U
|
||||
|
||||
/* MEM_SIZE: the size of the heap memory. If the application will send
|
||||
a lot of data that needs to be copied, this should be set high. */
|
||||
#define MEM_SIZE 10240
|
||||
|
||||
/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
|
||||
sends a lot of data out of ROM (or other static memory), this
|
||||
should be set high. */
|
||||
#define MEMP_NUM_PBUF 16
|
||||
/* MEMP_NUM_RAW_PCB: the number of UDP protocol control blocks. One
|
||||
per active RAW "connection". */
|
||||
#define MEMP_NUM_RAW_PCB 3
|
||||
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
|
||||
per active UDP "connection". */
|
||||
#define MEMP_NUM_UDP_PCB 6
|
||||
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
|
||||
connections. */
|
||||
#define MEMP_NUM_TCP_PCB 5
|
||||
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
|
||||
connections. */
|
||||
#define MEMP_NUM_TCP_PCB_LISTEN 8
|
||||
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
|
||||
segments. */
|
||||
#define MEMP_NUM_TCP_SEG 16
|
||||
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
|
||||
timeouts. */
|
||||
#define MEMP_NUM_SYS_TIMEOUT 17
|
||||
|
||||
/* The following four are used only with the sequential API and can be
|
||||
set to 0 if the application only will use the raw API. */
|
||||
/* MEMP_NUM_NETBUF: the number of struct netbufs. */
|
||||
#define MEMP_NUM_NETBUF 2
|
||||
/* MEMP_NUM_NETCONN: the number of struct netconns. */
|
||||
#define MEMP_NUM_NETCONN 10
|
||||
/* MEMP_NUM_TCPIP_MSG_*: the number of struct tcpip_msg, which is used
|
||||
for sequential API communication and incoming packets. Used in
|
||||
src/api/tcpip.c. */
|
||||
#define MEMP_NUM_TCPIP_MSG_API 16
|
||||
#define MEMP_NUM_TCPIP_MSG_INPKT 16
|
||||
|
||||
#define MEMP_OVERFLOW_CHECK 1
|
||||
|
||||
/* ---------- Pbuf options ---------- */
|
||||
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
|
||||
#define PBUF_POOL_SIZE 200
|
||||
|
||||
/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
|
||||
#define PBUF_POOL_BUFSIZE 128
|
||||
|
||||
/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
|
||||
link level header. */
|
||||
#define PBUF_LINK_HLEN 16u
|
||||
|
||||
/** SYS_LIGHTWEIGHT_PROT
|
||||
* define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection
|
||||
* for certain critical regions during buffer allocation, deallocation and memory
|
||||
* allocation and deallocation.
|
||||
*/
|
||||
#define SYS_LIGHTWEIGHT_PROT 1
|
||||
|
||||
#define LWIP_TCPIP_TIMEOUT 1
|
||||
|
||||
/* ---------- TCP options ---------- */
|
||||
#define LWIP_TCP 1
|
||||
#define LWIP_ALTCP (LWIP_TCP)
|
||||
#define TCP_TTL 255
|
||||
|
||||
#ifdef LWIP_HAVE_MBEDTLS
|
||||
#define LWIP_ALTCP_TLS (LWIP_TCP)
|
||||
#define LWIP_ALTCP_TLS_MBEDTLS (LWIP_TCP)
|
||||
#endif
|
||||
|
||||
#define TCP_LISTEN_BACKLOG 1
|
||||
|
||||
/* Controls if TCP should queue segments that arrive out of
|
||||
order. Define to 0 if your device is low on memory. */
|
||||
#define TCP_QUEUE_OOSEQ 1
|
||||
|
||||
/* TCP Maximum segment size. */
|
||||
#define TCP_MSS 1024
|
||||
|
||||
/* TCP sender buffer space (bytes). */
|
||||
#define TCP_SND_BUF 2048
|
||||
|
||||
/* TCP sender buffer space (pbufs). This must be at least = 2 *
|
||||
TCP_SND_BUF/TCP_MSS for things to work. */
|
||||
#define TCP_SND_QUEUELEN (4 * TCP_SND_BUF/TCP_MSS)
|
||||
|
||||
/* TCP writable space (bytes). This must be less than or equal
|
||||
to TCP_SND_BUF. It is the amount of space which must be
|
||||
available in the tcp snd_buf for select to return writable */
|
||||
#define TCP_SNDLOWAT (TCP_SND_BUF/2)
|
||||
|
||||
/* TCP receive window. */
|
||||
#define TCP_WND 8096
|
||||
|
||||
/* Maximum number of retransmissions of data segments. */
|
||||
#define TCP_MAXRTX 12
|
||||
|
||||
/* Maximum number of retransmissions of SYN segments. */
|
||||
#define TCP_SYNMAXRTX 4
|
||||
|
||||
/* ---------- ARP options ---------- */
|
||||
#define LWIP_ARP 1
|
||||
#define ARP_TABLE_SIZE 10
|
||||
#define ARP_QUEUEING 1
|
||||
|
||||
/* ---------- IP options ---------- */
|
||||
/* Define IP_FORWARD to 1 if you wish to have the ability to forward
|
||||
IP packets across network interfaces. If you are going to run lwIP
|
||||
on a device with only one network interface, define this to 0. */
|
||||
#define IP_FORWARD 1
|
||||
|
||||
|
||||
/* IP reassembly and segmentation.These are orthogonal even
|
||||
* if they both deal with IP fragments */
|
||||
#define IP_REASSEMBLY 1
|
||||
#define IP_REASS_MAX_PBUFS 10
|
||||
#define MEMP_NUM_REASSDATA 10
|
||||
#define IP_FRAG 1
|
||||
#define IPV6_FRAG_COPYHEADER 1
|
||||
#define LWIP_IPV6_FRAG 1
|
||||
|
||||
#define LWIP_IGMP (LWIP_IPV4)
|
||||
|
||||
/* ---------- ICMP options ---------- */
|
||||
#define ICMP_TTL 255
|
||||
|
||||
/* ---------- DHCP options ---------- */
|
||||
/* Define LWIP_DHCP to 1 if you want DHCP configuration of
|
||||
interfaces. */
|
||||
#define LWIP_DHCP 0
|
||||
|
||||
#define LWIP_DHCP_GET_NTP_SRV (LWIP_DHCP)
|
||||
|
||||
/* 1 if you want to do an ARP check on the offered address
|
||||
(recommended if using DHCP). */
|
||||
#define DHCP_DOES_ARP_CHECK (LWIP_DHCP)
|
||||
|
||||
/* ---------- AUTOIP options ------- */
|
||||
#define LWIP_AUTOIP (LWIP_DHCP)
|
||||
#define LWIP_DHCP_AUTOIP_COOP (LWIP_DHCP)
|
||||
#define LWIP_DHCP_AUTOIP_COOP_TRIES 3
|
||||
|
||||
/* ---------- SNTP options --------- */
|
||||
extern void sntp_set_system_time(u32_t sec);
|
||||
#define SNTP_SET_SYSTEM_TIME(s) sntp_set_system_time(s)
|
||||
|
||||
/* ---------- SNMP options ---------- */
|
||||
#define LWIP_SNMP (LWIP_UDP)
|
||||
#ifdef LWIP_HAVE_MBEDTLS
|
||||
#define LWIP_SNMP_V3 (LWIP_SNMP)
|
||||
#endif
|
||||
#define MIB2_STATS (LWIP_SNMP)
|
||||
#define SNMP_USE_NETCONN (LWIP_NETCONN)
|
||||
#define SNMP_USE_RAW (!LWIP_NETCONN)
|
||||
|
||||
/* ---------- DNS options ---------- */
|
||||
#define LWIP_DNS 1
|
||||
|
||||
/* ---------- MDNS options ---------- */
|
||||
#define LWIP_MDNS_RESPONDER 1
|
||||
#define LWIP_NUM_NETIF_CLIENT_DATA (LWIP_MDNS_RESPONDER)
|
||||
|
||||
/* ---------- UDP options ---------- */
|
||||
#define LWIP_UDP 1
|
||||
#define UDP_TTL 255
|
||||
|
||||
/* ---------- RAW options ---------- */
|
||||
#define LWIP_RAW 1
|
||||
#define RAW_TTL 255
|
||||
|
||||
/* ---------- Statistics options ---------- */
|
||||
/* individual STATS options can be turned off by defining them to 0
|
||||
* (e.g #define TCP_STATS 0). All of them are turned off if LWIP_STATS
|
||||
* is 0
|
||||
* */
|
||||
|
||||
#define LWIP_STATS 1
|
||||
|
||||
#define LWIP_NETIF_API 1
|
||||
#define LWIP_NETIF_STATUS_CALLBACK 1
|
||||
#define LWIP_NETIF_EXT_STATUS_CALLBACK 1
|
||||
#define LWIP_NETIF_HOSTNAME 0
|
||||
|
||||
/* ---------- SLIP options ---------- */
|
||||
|
||||
#define LWIP_HAVE_SLIPIF 1 /* Set > 0 for SLIP */
|
||||
|
||||
/* Maximum packet size that is received by this netif */
|
||||
#define SLIP_MAX_SIZE 1500
|
||||
#define sio_tryread sio_read
|
||||
|
||||
/* ---------- 6LoWPAN options ---------- */
|
||||
#define LWIP_6LOWPAN 1
|
||||
|
||||
/* ---------- PPP options ---------- */
|
||||
|
||||
#define PPP_SUPPORT 1 /* Set > 0 for PPP */
|
||||
#define MPPE_SUPPORT PPP_SUPPORT
|
||||
#define PPPOE_SUPPORT PPP_SUPPORT
|
||||
#define PPPOL2TP_SUPPORT PPP_SUPPORT
|
||||
#define PPPOS_SUPPORT PPP_SUPPORT
|
||||
|
||||
#if PPP_SUPPORT > 0
|
||||
|
||||
#define NUM_PPP 1 /* Max PPP sessions. */
|
||||
|
||||
|
||||
/* Select modules to enable. Ideally these would be set in the makefile but
|
||||
* we're limited by the command line length so you need to modify the settings
|
||||
* in this file.
|
||||
*/
|
||||
#define PAP_SUPPORT 1 /* Set > 0 for PAP. */
|
||||
#define CHAP_SUPPORT 1 /* Set > 0 for CHAP. */
|
||||
#define MSCHAP_SUPPORT 0 /* Set > 0 for MSCHAP (NOT FUNCTIONAL!) */
|
||||
#define CBCP_SUPPORT 0 /* Set > 0 for CBCP (NOT FUNCTIONAL!) */
|
||||
#define CCP_SUPPORT 0 /* Set > 0 for CCP (NOT FUNCTIONAL!) */
|
||||
#define VJ_SUPPORT 1 /* Set > 0 for VJ header compression. */
|
||||
#define MD5_SUPPORT 1 /* Set > 0 for MD5 (see also CHAP) */
|
||||
|
||||
|
||||
/*
|
||||
* Timeouts.
|
||||
*/
|
||||
#define FSM_DEFTIMEOUT 6 /* Timeout time in seconds */
|
||||
#define FSM_DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */
|
||||
#define FSM_DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */
|
||||
#define FSM_DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */
|
||||
|
||||
#define UPAP_DEFTIMEOUT 6 /* Timeout (seconds) for retransmitting req */
|
||||
#define UPAP_DEFREQTIME 30 /* Time to wait for auth-req from peer */
|
||||
|
||||
#define CHAP_DEFTIMEOUT 6 /* Timeout time in seconds */
|
||||
#define CHAP_DEFTRANSMITS 10 /* max # times to send challenge */
|
||||
|
||||
|
||||
/* Interval in seconds between keepalive echo requests, 0 to disable. */
|
||||
#if 1
|
||||
#define LCP_ECHOINTERVAL 0
|
||||
#else
|
||||
#define LCP_ECHOINTERVAL 10
|
||||
#endif
|
||||
|
||||
/* Number of unanswered echo requests before failure. */
|
||||
#define LCP_MAXECHOFAILS 3
|
||||
|
||||
/* Max Xmit idle time (in jiffies) before resend flag char. */
|
||||
#define PPP_MAXIDLEFLAG 100
|
||||
|
||||
/*
|
||||
* Packet sizes
|
||||
*
|
||||
* Note - lcp shouldn't be allowed to negotiate stuff outside these
|
||||
* limits. See lcp.h in the pppd directory.
|
||||
* (XXX - these constants should simply be shared by lcp.c instead
|
||||
* of living in lcp.h)
|
||||
*/
|
||||
#define PPP_MTU 1500 /* Default MTU (size of Info field) */
|
||||
#if 0
|
||||
#define PPP_MAXMTU 65535 - (PPP_HDRLEN + PPP_FCSLEN)
|
||||
#else
|
||||
#define PPP_MAXMTU 1500 /* Largest MTU we allow */
|
||||
#endif
|
||||
#define PPP_MINMTU 64
|
||||
#define PPP_MRU 1500 /* default MRU = max length of info field */
|
||||
#define PPP_MAXMRU 1500 /* Largest MRU we allow */
|
||||
#define PPP_DEFMRU 296 /* Try for this */
|
||||
#define PPP_MINMRU 128 /* No MRUs below this */
|
||||
|
||||
|
||||
#define MAXNAMELEN 256 /* max length of hostname or name for auth */
|
||||
#define MAXSECRETLEN 256 /* max length of password or secret */
|
||||
|
||||
#endif /* PPP_SUPPORT > 0 */
|
||||
|
||||
#define LWIP_HTTPD_SSI 1
|
||||
|
||||
#endif /* LWIP_LWIPOPTS_H */
|
||||
670
ext/lwip-contrib/ports/unix/unixsim/simhost.c
Normal file
670
ext/lwip-contrib/ports/unix/unixsim/simhost.c
Normal file
@@ -0,0 +1,670 @@
|
||||
/*
|
||||
* 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 <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <getopt.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "lwip/opt.h"
|
||||
|
||||
#include "lwip/init.h"
|
||||
|
||||
#include "lwip/mem.h"
|
||||
#include "lwip/memp.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/timeouts.h"
|
||||
|
||||
#include "lwip/ip_addr.h"
|
||||
|
||||
#include "lwip/dns.h"
|
||||
#include "lwip/dhcp.h"
|
||||
|
||||
#include "lwip/stats.h"
|
||||
|
||||
#include "lwip/tcp.h"
|
||||
#include "lwip/inet_chksum.h"
|
||||
|
||||
#include "lwip/tcpip.h"
|
||||
#include "lwip/sockets.h"
|
||||
|
||||
#include "netif/tapif.h"
|
||||
#include "netif/tunif.h"
|
||||
|
||||
#include "netif/unixif.h"
|
||||
#include "netif/dropif.h"
|
||||
#include "netif/pcapif.h"
|
||||
|
||||
#include "netif/tcpdump.h"
|
||||
|
||||
#ifndef LWIP_HAVE_SLIPIF
|
||||
#define LWIP_HAVE_SLIPIF 0
|
||||
#endif
|
||||
#if LWIP_HAVE_SLIPIF
|
||||
#include "netif/slipif.h"
|
||||
#define SLIP_PTY_TEST 1
|
||||
#endif
|
||||
|
||||
#if PPP_SUPPORT
|
||||
#include "netif/ppp/pppos.h"
|
||||
#include "lwip/sio.h"
|
||||
#define PPP_PTY_TEST 1
|
||||
#include <termios.h>
|
||||
#endif
|
||||
|
||||
#include "lwip/ip_addr.h"
|
||||
#include "arch/perf.h"
|
||||
|
||||
#include "lwip/apps/httpd.h"
|
||||
#include "apps/udpecho/udpecho.h"
|
||||
#include "apps/tcpecho/tcpecho.h"
|
||||
#include "apps/shell/shell.h"
|
||||
#include "apps/chargen/chargen.h"
|
||||
#include "apps/netio/netio.h"
|
||||
#include "apps/ping/ping.h"
|
||||
#include "lwip/apps/netbiosns.h"
|
||||
#include "lwip/apps/mdns.h"
|
||||
#include "lwip/apps/sntp.h"
|
||||
#include "lwip/apps/snmp.h"
|
||||
#include "lwip/apps/snmp_mib2.h"
|
||||
#include "apps/snmp_private_mib/private_mib.h"
|
||||
#include "lwip/apps/snmpv3.h"
|
||||
#include "apps/snmp_v3/snmpv3_dummy.h"
|
||||
#include "lwip/apps/snmp_snmpv2_framework.h"
|
||||
#include "lwip/apps/snmp_snmpv2_usm.h"
|
||||
#include "lwip/apps/tftp_server.h"
|
||||
#include "addons/tcp_isn/tcp_isn.h"
|
||||
|
||||
#if LWIP_RAW
|
||||
#include "lwip/icmp.h"
|
||||
#include "lwip/raw.h"
|
||||
#endif
|
||||
|
||||
#if LWIP_SNMP
|
||||
static const struct snmp_mib *mibs[] = {
|
||||
&mib2,
|
||||
&mib_private
|
||||
#if LWIP_SNMP_V3
|
||||
, &snmpframeworkmib
|
||||
, &snmpusmmib
|
||||
#endif
|
||||
};
|
||||
#endif /* LWIP_SNMP */
|
||||
|
||||
#if LWIP_IPV4
|
||||
/* (manual) host IP configuration */
|
||||
static ip_addr_t ipaddr, netmask, gw;
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
struct netif netif;
|
||||
|
||||
/* ping out destination cmd option */
|
||||
static unsigned char ping_flag;
|
||||
static ip_addr_t ping_addr;
|
||||
|
||||
/* nonstatic debug cmd option, exported in lwipopts.h */
|
||||
unsigned char debug_flags;
|
||||
|
||||
/** @todo add options for selecting netif, starting DHCP client etc */
|
||||
static struct option longopts[] = {
|
||||
/* turn on debugging output (if build with LWIP_DEBUG) */
|
||||
{"debug", no_argument, NULL, 'd'},
|
||||
/* help */
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
#if LWIP_IPV4
|
||||
/* gateway address */
|
||||
{"gateway", required_argument, NULL, 'g'},
|
||||
/* ip address */
|
||||
{"ipaddr", required_argument, NULL, 'i'},
|
||||
/* netmask */
|
||||
{"netmask", required_argument, NULL, 'm'},
|
||||
/* ping destination */
|
||||
{"ping", required_argument, NULL, 'p'},
|
||||
#endif /* LWIP_IPV4 */
|
||||
/* new command line options go here! */
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
#define NUM_OPTS ((sizeof(longopts) / sizeof(struct option)) - 1)
|
||||
|
||||
static void init_netifs(void);
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
unsigned char i;
|
||||
|
||||
printf("options:\n");
|
||||
for (i = 0; i < NUM_OPTS; i++) {
|
||||
printf("-%c --%s\n",longopts[i].val, longopts[i].name);
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void
|
||||
tcp_debug_timeout(void *data)
|
||||
{
|
||||
LWIP_UNUSED_ARG(data);
|
||||
#if TCP_DEBUG
|
||||
tcp_debug_print_pcbs();
|
||||
#endif /* TCP_DEBUG */
|
||||
sys_timeout(5000, tcp_debug_timeout, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
sntp_set_system_time(u32_t sec)
|
||||
{
|
||||
char buf[32];
|
||||
struct tm current_time_val;
|
||||
time_t current_time = (time_t)sec;
|
||||
|
||||
localtime_r(¤t_time, ¤t_time_val);
|
||||
|
||||
strftime(buf, sizeof(buf), "%d.%m.%Y %H:%M:%S", ¤t_time_val);
|
||||
printf("SNTP time: %s\n", buf);
|
||||
}
|
||||
|
||||
#if LWIP_MDNS_RESPONDER
|
||||
static void
|
||||
srv_txt(struct mdns_service *service, void *txt_userdata)
|
||||
{
|
||||
err_t res;
|
||||
LWIP_UNUSED_ARG(txt_userdata);
|
||||
|
||||
res = mdns_resp_add_service_txtitem(service, "path=/", 6);
|
||||
LWIP_ERROR("mdns add service txt failed\n", (res == ERR_OK), return);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if LWIP_UDP
|
||||
|
||||
static void*
|
||||
tftp_open(const char* fname, const char* mode, u8_t is_write)
|
||||
{
|
||||
LWIP_UNUSED_ARG(mode);
|
||||
|
||||
if (is_write) {
|
||||
return (void*)fopen(fname, "wb");
|
||||
} else {
|
||||
return (void*)fopen(fname, "rb");
|
||||
}
|
||||
}
|
||||
static void
|
||||
tftp_close(void* handle)
|
||||
{
|
||||
fclose((FILE*)handle);
|
||||
}
|
||||
static int
|
||||
tftp_read(void* handle, void* buf, int bytes)
|
||||
{
|
||||
int ret = fread(buf, 1, bytes, (FILE*)handle);
|
||||
if (ret <= 0) {
|
||||
return -1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
static int
|
||||
tftp_write(void* handle, struct pbuf* p)
|
||||
{
|
||||
while (p != NULL) {
|
||||
if (fwrite(p->payload, 1, p->len, (FILE*)handle) != (size_t)p->len) {
|
||||
return -1;
|
||||
}
|
||||
p = p->next;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct tftp_context tftp = {
|
||||
tftp_open,
|
||||
tftp_close,
|
||||
tftp_read,
|
||||
tftp_write
|
||||
};
|
||||
|
||||
#endif /* LWIP_UDP */
|
||||
|
||||
static void
|
||||
tcpip_init_done(void *arg)
|
||||
{
|
||||
sys_sem_t *sem;
|
||||
sem = (sys_sem_t *)arg;
|
||||
|
||||
init_netifs();
|
||||
|
||||
#if LWIP_IPV4
|
||||
netbiosns_set_name("simhost");
|
||||
netbiosns_init();
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
sntp_setoperatingmode(SNTP_OPMODE_POLL);
|
||||
#if LWIP_DHCP
|
||||
sntp_servermode_dhcp(1); /* get SNTP server via DHCP */
|
||||
#else /* LWIP_DHCP */
|
||||
#if LWIP_IPV4
|
||||
sntp_setserver(0, netif_ip_gw4(&netif));
|
||||
#endif /* LWIP_IPV4 */
|
||||
#endif /* LWIP_DHCP */
|
||||
sntp_init();
|
||||
|
||||
#if LWIP_SNMP
|
||||
lwip_privmib_init();
|
||||
#if SNMP_LWIP_MIB2
|
||||
#if SNMP_USE_NETCONN
|
||||
snmp_threadsync_init(&snmp_mib2_lwip_locks, snmp_mib2_lwip_synchronizer);
|
||||
#endif /* SNMP_USE_NETCONN */
|
||||
snmp_mib2_set_syscontact_readonly((const u8_t*)"root", NULL);
|
||||
snmp_mib2_set_syslocation_readonly((const u8_t*)"lwIP development PC", NULL);
|
||||
snmp_mib2_set_sysdescr((const u8_t*)"simhost", NULL);
|
||||
#endif /* SNMP_LWIP_MIB2 */
|
||||
|
||||
#if LWIP_SNMP_V3
|
||||
snmpv3_dummy_init();
|
||||
#endif
|
||||
|
||||
snmp_set_mibs(mibs, LWIP_ARRAYSIZE(mibs));
|
||||
snmp_init();
|
||||
#endif /* LWIP_SNMP */
|
||||
|
||||
#if LWIP_MDNS_RESPONDER
|
||||
mdns_resp_init();
|
||||
mdns_resp_add_netif(&netif, "simhost", 3600);
|
||||
mdns_resp_add_service(&netif, "myweb", "_http", DNSSD_PROTO_TCP, 80, 3600, srv_txt, NULL);
|
||||
#endif
|
||||
|
||||
#if LWIP_UDP
|
||||
tftp_init(&tftp);
|
||||
#endif /* LWIP_UDP */
|
||||
|
||||
sys_sem_signal(sem);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
#if LWIP_HAVE_SLIPIF
|
||||
/* (manual) host IP configuration */
|
||||
#if LWIP_IPV4
|
||||
static ip_addr_t ipaddr_slip, netmask_slip, gw_slip;
|
||||
#endif /* LWIP_IPV4 */
|
||||
struct netif slipif;
|
||||
#endif /* LWIP_HAVE_SLIPIF */
|
||||
|
||||
#if PPP_SUPPORT
|
||||
sio_fd_t ppp_sio;
|
||||
ppp_pcb *ppp;
|
||||
struct netif pppos_netif;
|
||||
|
||||
static void
|
||||
pppos_rx_thread(void *arg)
|
||||
{
|
||||
u32_t len;
|
||||
u8_t buffer[128];
|
||||
LWIP_UNUSED_ARG(arg);
|
||||
|
||||
/* Please read the "PPPoS input path" chapter in the PPP documentation. */
|
||||
while (1) {
|
||||
len = sio_read(ppp_sio, buffer, sizeof(buffer));
|
||||
if (len > 0) {
|
||||
/* Pass received raw characters from PPPoS to be decoded through lwIP
|
||||
* TCPIP thread using the TCPIP API. This is thread safe in all cases
|
||||
* but you should avoid passing data byte after byte. */
|
||||
pppos_input_tcpip(ppp, buffer, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ppp_link_status_cb(ppp_pcb *pcb, int err_code, void *ctx)
|
||||
{
|
||||
struct netif *pppif = ppp_netif(pcb);
|
||||
LWIP_UNUSED_ARG(ctx);
|
||||
|
||||
switch(err_code) {
|
||||
case PPPERR_NONE: /* No error. */
|
||||
{
|
||||
#if LWIP_DNS
|
||||
const ip_addr_t *ns;
|
||||
#endif /* LWIP_DNS */
|
||||
fprintf(stderr, "ppp_link_status_cb: PPPERR_NONE\n\r");
|
||||
#if LWIP_IPV4
|
||||
fprintf(stderr, " our_ip4addr = %s\n\r", ip4addr_ntoa(netif_ip4_addr(pppif)));
|
||||
fprintf(stderr, " his_ipaddr = %s\n\r", ip4addr_ntoa(netif_ip4_gw(pppif)));
|
||||
fprintf(stderr, " netmask = %s\n\r", ip4addr_ntoa(netif_ip4_netmask(pppif)));
|
||||
#endif /* LWIP_IPV4 */
|
||||
#if LWIP_IPV6
|
||||
fprintf(stderr, " our_ip6addr = %s\n\r", ip6addr_ntoa(netif_ip6_addr(pppif, 0)));
|
||||
#endif /* LWIP_IPV6 */
|
||||
|
||||
#if LWIP_DNS
|
||||
ns = dns_getserver(0);
|
||||
fprintf(stderr, " dns1 = %s\n\r", ipaddr_ntoa(ns));
|
||||
ns = dns_getserver(1);
|
||||
fprintf(stderr, " dns2 = %s\n\r", ipaddr_ntoa(ns));
|
||||
#endif /* LWIP_DNS */
|
||||
#if PPP_IPV6_SUPPORT
|
||||
fprintf(stderr, " our6_ipaddr = %s\n\r", ip6addr_ntoa(netif_ip6_addr(pppif, 0)));
|
||||
#endif /* PPP_IPV6_SUPPORT */
|
||||
}
|
||||
break;
|
||||
|
||||
case PPPERR_PARAM: /* Invalid parameter. */
|
||||
printf("ppp_link_status_cb: PPPERR_PARAM\n");
|
||||
break;
|
||||
|
||||
case PPPERR_OPEN: /* Unable to open PPP session. */
|
||||
printf("ppp_link_status_cb: PPPERR_OPEN\n");
|
||||
break;
|
||||
|
||||
case PPPERR_DEVICE: /* Invalid I/O device for PPP. */
|
||||
printf("ppp_link_status_cb: PPPERR_DEVICE\n");
|
||||
break;
|
||||
|
||||
case PPPERR_ALLOC: /* Unable to allocate resources. */
|
||||
printf("ppp_link_status_cb: PPPERR_ALLOC\n");
|
||||
break;
|
||||
|
||||
case PPPERR_USER: /* User interrupt. */
|
||||
printf("ppp_link_status_cb: PPPERR_USER\n");
|
||||
break;
|
||||
|
||||
case PPPERR_CONNECT: /* Connection lost. */
|
||||
printf("ppp_link_status_cb: PPPERR_CONNECT\n");
|
||||
break;
|
||||
|
||||
case PPPERR_AUTHFAIL: /* Failed authentication challenge. */
|
||||
printf("ppp_link_status_cb: PPPERR_AUTHFAIL\n");
|
||||
break;
|
||||
|
||||
case PPPERR_PROTOCOL: /* Failed to meet protocol. */
|
||||
printf("ppp_link_status_cb: PPPERR_PROTOCOL\n");
|
||||
break;
|
||||
|
||||
case PPPERR_PEERDEAD: /* Connection timeout. */
|
||||
printf("ppp_link_status_cb: PPPERR_PEERDEAD\n");
|
||||
break;
|
||||
|
||||
case PPPERR_IDLETIMEOUT: /* Idle Timeout. */
|
||||
printf("ppp_link_status_cb: PPPERR_IDLETIMEOUT\n");
|
||||
break;
|
||||
|
||||
case PPPERR_CONNECTTIME: /* PPPERR_CONNECTTIME. */
|
||||
printf("ppp_link_status_cb: PPPERR_CONNECTTIME\n");
|
||||
break;
|
||||
|
||||
case PPPERR_LOOPBACK: /* Connection timeout. */
|
||||
printf("ppp_link_status_cb: PPPERR_LOOPBACK\n");
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("ppp_link_status_cb: unknown errCode %d\n", err_code);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static u32_t
|
||||
ppp_output_cb(ppp_pcb *pcb, u8_t *data, u32_t len, void *ctx)
|
||||
{
|
||||
LWIP_UNUSED_ARG(pcb);
|
||||
LWIP_UNUSED_ARG(ctx);
|
||||
return sio_write(ppp_sio, data, len);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if LWIP_NETIF_STATUS_CALLBACK
|
||||
static void
|
||||
netif_status_callback(struct netif *nif)
|
||||
{
|
||||
printf("NETIF: %c%c%d is %s\n", nif->name[0], nif->name[1], nif->num,
|
||||
netif_is_up(nif) ? "UP" : "DOWN");
|
||||
#if LWIP_IPV4
|
||||
printf("IPV4: Host at %s ", ip4addr_ntoa(netif_ip4_addr(nif)));
|
||||
printf("mask %s ", ip4addr_ntoa(netif_ip4_netmask(nif)));
|
||||
printf("gateway %s\n", ip4addr_ntoa(netif_ip4_gw(nif)));
|
||||
#endif /* LWIP_IPV4 */
|
||||
#if LWIP_IPV6
|
||||
printf("IPV6: Host at %s\n", ip6addr_ntoa(netif_ip6_addr(nif, 0)));
|
||||
#endif /* LWIP_IPV6 */
|
||||
#if LWIP_NETIF_HOSTNAME
|
||||
printf("FQDN: %s\n", netif_get_hostname(nif));
|
||||
#endif /* LWIP_NETIF_HOSTNAME */
|
||||
}
|
||||
#endif /* LWIP_NETIF_STATUS_CALLBACK */
|
||||
|
||||
static void
|
||||
init_netifs(void)
|
||||
{
|
||||
#if LWIP_HAVE_SLIPIF
|
||||
#if SLIP_PTY_TEST
|
||||
u8_t siodev_slip = 3;
|
||||
#else
|
||||
u8_t siodev_slip = 0;
|
||||
#endif
|
||||
|
||||
#if LWIP_IPV4
|
||||
netif_add(&slipif, ip_2_ip4(&ipaddr_slip), ip_2_ip4(&netmask_slip), ip_2_ip4(&gw_slip),
|
||||
(void*)&siodev_slip, slipif_init, tcpip_input);
|
||||
#else /* LWIP_IPV4 */
|
||||
netif_add(&slipif, (void*)&siodev_slip, slipif_init, tcpip_input);
|
||||
#endif /* LWIP_IPV4 */
|
||||
#if LWIP_IPV6
|
||||
netif_create_ip6_linklocal_address(&slipif, 1);
|
||||
#endif
|
||||
#if LWIP_NETIF_STATUS_CALLBACK
|
||||
netif_set_status_callback(&slipif, netif_status_callback);
|
||||
#endif /* LWIP_NETIF_STATUS_CALLBACK */
|
||||
netif_set_link_up(&slipif);
|
||||
netif_set_up(&slipif);
|
||||
#endif /* LWIP_HAVE_SLIPIF */
|
||||
|
||||
#if PPP_SUPPORT
|
||||
#if PPP_PTY_TEST
|
||||
ppp_sio = sio_open(2);
|
||||
#else
|
||||
ppp_sio = sio_open(0);
|
||||
#endif
|
||||
if(!ppp_sio)
|
||||
{
|
||||
perror("Error opening device: ");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ppp = pppos_create(&pppos_netif, ppp_output_cb, ppp_link_status_cb, NULL);
|
||||
if (!ppp)
|
||||
{
|
||||
printf("Could not create PPP control interface");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#ifdef LWIP_PPP_CHAP_TEST
|
||||
ppp_set_auth(ppp, PPPAUTHTYPE_CHAP, "lwip", "mysecret");
|
||||
#endif
|
||||
|
||||
ppp_connect(ppp, 0);
|
||||
|
||||
#if LWIP_NETIF_STATUS_CALLBACK
|
||||
netif_set_status_callback(&pppos_netif, netif_status_callback);
|
||||
#endif /* LWIP_NETIF_STATUS_CALLBACK */
|
||||
#endif /* PPP_SUPPORT */
|
||||
|
||||
#if LWIP_IPV4
|
||||
#if LWIP_DHCP
|
||||
IP_ADDR4(&gw, 0,0,0,0);
|
||||
IP_ADDR4(&ipaddr, 0,0,0,0);
|
||||
IP_ADDR4(&netmask, 0,0,0,0);
|
||||
#endif /* LWIP_DHCP */
|
||||
netif_add(&netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw), NULL, tapif_init, tcpip_input);
|
||||
#else /* LWIP_IPV4 */
|
||||
netif_add(&netif, NULL, tapif_init, tcpip_input);
|
||||
#endif /* LWIP_IPV4 */
|
||||
#if LWIP_IPV6
|
||||
netif_create_ip6_linklocal_address(&netif, 1);
|
||||
netif.ip6_autoconfig_enabled = 1;
|
||||
#endif
|
||||
#if LWIP_NETIF_STATUS_CALLBACK
|
||||
netif_set_status_callback(&netif, netif_status_callback);
|
||||
#endif /* LWIP_NETIF_STATUS_CALLBACK */
|
||||
netif_set_default(&netif);
|
||||
netif_set_up(&netif);
|
||||
|
||||
#if LWIP_DHCP
|
||||
dhcp_start(&netif);
|
||||
#endif /* LWIP_DHCP */
|
||||
|
||||
#if 0
|
||||
/* Only used for testing purposes: */
|
||||
netif_add(&ipaddr, &netmask, &gw, NULL, pcapif_init, tcpip_input);
|
||||
#endif
|
||||
|
||||
#if LWIP_TCP
|
||||
netio_init();
|
||||
#endif
|
||||
#if LWIP_TCP && LWIP_NETCONN
|
||||
tcpecho_init();
|
||||
shell_init();
|
||||
httpd_init();
|
||||
#endif
|
||||
#if LWIP_UDP && LWIP_NETCONN
|
||||
udpecho_init();
|
||||
#endif
|
||||
#if LWIP_SOCKET
|
||||
chargen_init();
|
||||
#endif
|
||||
/* sys_timeout(5000, tcp_debug_timeout, NULL);*/
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
main_thread(void *arg)
|
||||
{
|
||||
sys_sem_t sem;
|
||||
LWIP_UNUSED_ARG(arg);
|
||||
|
||||
lwip_init_tcp_isn(sys_now(), (u8_t*)&netif);
|
||||
|
||||
if(sys_sem_new(&sem, 0) != ERR_OK) {
|
||||
LWIP_ASSERT("Failed to create semaphore", 0);
|
||||
}
|
||||
tcpip_init(tcpip_init_done, &sem);
|
||||
sys_sem_wait(&sem);
|
||||
printf("TCP/IP initialized.\n");
|
||||
|
||||
#if LWIP_SOCKET
|
||||
if (ping_flag) {
|
||||
ping_init(&ping_addr);
|
||||
}
|
||||
#endif
|
||||
|
||||
printf("Applications started.\n");
|
||||
|
||||
#ifdef MEM_PERF
|
||||
mem_perf_init("/tmp/memstats.client");
|
||||
#endif /* MEM_PERF */
|
||||
#if 0
|
||||
stats_display();
|
||||
#endif
|
||||
#if PPP_SUPPORT
|
||||
/* Block forever. */
|
||||
sys_thread_new("pppos_rx_thread", pppos_rx_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
sys_sem_wait(&sem);
|
||||
#endif
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int ch;
|
||||
char ip_str[IPADDR_STRLEN_MAX] = {0};
|
||||
|
||||
/* startup defaults (may be overridden by one or more opts) */
|
||||
#if LWIP_IPV4
|
||||
IP_ADDR4(&gw, 192,168, 0,1);
|
||||
IP_ADDR4(&netmask, 255,255,255,0);
|
||||
IP_ADDR4(&ipaddr, 192,168, 0,2);
|
||||
#if LWIP_HAVE_SLIPIF
|
||||
IP_ADDR4(&gw_slip, 192,168, 2, 1);
|
||||
IP_ADDR4(&netmask_slip, 255,255,255,255);
|
||||
IP_ADDR4(&ipaddr_slip, 192,168, 2, 2);
|
||||
#endif
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
ping_flag = 0;
|
||||
/* use debug flags defined by debug.h */
|
||||
debug_flags = LWIP_DBG_OFF;
|
||||
|
||||
while ((ch = getopt_long(argc, argv, "dhg:i:m:p:", longopts, NULL)) != -1) {
|
||||
switch (ch) {
|
||||
case 'd':
|
||||
debug_flags |= (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT);
|
||||
break;
|
||||
case 'h':
|
||||
usage();
|
||||
exit(0);
|
||||
break;
|
||||
#if LWIP_IPV4
|
||||
case 'g':
|
||||
ipaddr_aton(optarg, &gw);
|
||||
break;
|
||||
case 'i':
|
||||
ipaddr_aton(optarg, &ipaddr);
|
||||
break;
|
||||
case 'm':
|
||||
ipaddr_aton(optarg, &netmask);
|
||||
break;
|
||||
#endif /* LWIP_IPV4 */
|
||||
case 'p':
|
||||
ping_flag = !0;
|
||||
ipaddr_aton(optarg, &ping_addr);
|
||||
strncpy(ip_str,ipaddr_ntoa(&ping_addr),sizeof(ip_str));
|
||||
ip_str[sizeof(ip_str)-1] = 0; /* ensure \0 termination */
|
||||
printf("Using %s to ping\n", ip_str);
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
break;
|
||||
}
|
||||
}
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
#ifdef PERF
|
||||
perf_init("/tmp/simhost.perf");
|
||||
#endif /* PERF */
|
||||
|
||||
printf("System initialized.\n");
|
||||
|
||||
sys_thread_new("main_thread", main_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
pause();
|
||||
return 0;
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
181
ext/lwip-contrib/ports/unix/unixsim/simnode.c
Normal file
181
ext/lwip-contrib/ports/unix/unixsim/simnode.c
Normal file
@@ -0,0 +1,181 @@
|
||||
/*
|
||||
* 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/debug.h"
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
#include "lwip/mem.h"
|
||||
#include "lwip/memp.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/tcp.h"
|
||||
#include "lwip/priv/tcp_priv.h" /* for tcp_debug_print_pcbs() */
|
||||
#include "lwip/timeouts.h"
|
||||
|
||||
#include "lwip/stats.h"
|
||||
|
||||
|
||||
#include "lwip/tcpip.h"
|
||||
|
||||
|
||||
#include "netif/unixif.h"
|
||||
#include "netif/dropif.h"
|
||||
|
||||
#include "netif/tcpdump.h"
|
||||
|
||||
#include "lwip/ip_addr.h"
|
||||
|
||||
#include "arch/perf.h"
|
||||
|
||||
#include "lwip/apps/httpd.h"
|
||||
#include "apps/udpecho/udpecho.h"
|
||||
#include "apps/tcpecho/tcpecho.h"
|
||||
#include "apps/shell/shell.h"
|
||||
|
||||
#if LWIP_IPV4 /* @todo: IPv6 */
|
||||
|
||||
/* nonstatic debug cmd option, exported in lwipopts.h */
|
||||
unsigned char debug_flags;
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
tcp_timeout(void *data)
|
||||
{
|
||||
LWIP_UNUSED_ARG(data);
|
||||
#if TCP_DEBUG && LWIP_TCP
|
||||
tcp_debug_print_pcbs();
|
||||
#endif /* TCP_DEBUG */
|
||||
sys_timeout(5000, tcp_timeout, NULL);
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
struct netif netif_unix;
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
tcpip_init_done(void *arg)
|
||||
{
|
||||
ip4_addr_t ipaddr, netmask, gw;
|
||||
sys_sem_t *sem;
|
||||
sem = (sys_sem_t *)arg;
|
||||
|
||||
IP4_ADDR(&gw, 192,168,1,1);
|
||||
IP4_ADDR(&ipaddr, 192,168,1,2);
|
||||
IP4_ADDR(&netmask, 255,255,255,0);
|
||||
|
||||
netif_set_default(netif_add(&netif_unix, &ipaddr, &netmask, &gw, NULL, unixif_init_client,
|
||||
tcpip_input));
|
||||
netif_set_up(&netif_unix);
|
||||
#if LWIP_IPV6
|
||||
netif_create_ip6_linklocal_address(&netif_unix, 1);
|
||||
#endif
|
||||
/* netif_set_default(netif_add(&ipaddr, &netmask, &gw, NULL, sioslipif_init1,
|
||||
tcpip_input)); */
|
||||
|
||||
#if LWIP_NETCONN
|
||||
tcpecho_init();
|
||||
shell_init();
|
||||
#if LWIP_IPV4 && LWIP_TCP
|
||||
httpd_init();
|
||||
#endif
|
||||
udpecho_init();
|
||||
#endif
|
||||
|
||||
printf("Applications started.\n");
|
||||
|
||||
sys_timeout(5000, tcp_timeout, NULL);
|
||||
|
||||
sys_sem_signal(sem);
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
static void
|
||||
main_thread(void *arg)
|
||||
{
|
||||
sys_sem_t sem;
|
||||
LWIP_UNUSED_ARG(arg);
|
||||
|
||||
if(sys_sem_new(&sem, 0) != ERR_OK) {
|
||||
LWIP_ASSERT("Failed to create semaphore", 0);
|
||||
}
|
||||
tcpip_init(tcpip_init_done, &sem);
|
||||
sys_sem_wait(&sem);
|
||||
printf("TCP/IP initialized.\n");
|
||||
|
||||
#ifdef MEM_PERF
|
||||
mem_perf_init("/tmp/memstats.client");
|
||||
#endif /* MEM_PERF */
|
||||
|
||||
/* Block forever. */
|
||||
sys_sem_wait(&sem);
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#ifdef PERF
|
||||
perf_init("/tmp/client.perf");
|
||||
#endif /* PERF */
|
||||
|
||||
#if LWIP_IPV4 && LWIP_TCP
|
||||
tcpdump_init();
|
||||
#endif
|
||||
|
||||
printf("System initialized.\n");
|
||||
|
||||
sys_thread_new("main_thread", main_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
pause();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* LWIP_IPV4 */
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
LWIP_UNUSED_ARG(argc);
|
||||
LWIP_UNUSED_ARG(argv);
|
||||
|
||||
printf("simnode only works with IPv4\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
/* dummy, because SNTP is pulled in via LWIP_DHCP_GET_NTP_SRV */
|
||||
void
|
||||
sntp_set_system_time(u32_t sec)
|
||||
{
|
||||
LWIP_UNUSED_ARG(sec);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
203
ext/lwip-contrib/ports/unix/unixsim/simrouter.c
Normal file
203
ext/lwip-contrib/ports/unix/unixsim/simrouter.c
Normal file
@@ -0,0 +1,203 @@
|
||||
/*
|
||||
* 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/debug.h"
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
#include "lwip/mem.h"
|
||||
#include "lwip/memp.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/tcp.h"
|
||||
#include "lwip/priv/tcp_priv.h" /* for tcp_debug_print_pcbs() */
|
||||
#include "lwip/timeouts.h"
|
||||
|
||||
#include "lwip/stats.h"
|
||||
|
||||
|
||||
#include "lwip/tcpip.h"
|
||||
|
||||
#include "netif/tapif.h"
|
||||
|
||||
#include "netif/unixif.h"
|
||||
#include "netif/dropif.h"
|
||||
|
||||
#include "netif/tcpdump.h"
|
||||
|
||||
|
||||
#include "lwip/ip_addr.h"
|
||||
|
||||
#include "arch/perf.h"
|
||||
|
||||
#include "lwip/apps/httpd.h"
|
||||
#include "apps/udpecho/udpecho.h"
|
||||
#include "apps/tcpecho/tcpecho.h"
|
||||
#include "apps/shell/shell.h"
|
||||
|
||||
#if LWIP_IPV4 /* @todo: IPv6 */
|
||||
|
||||
/* nonstatic debug cmd option, exported in lwipopts.h */
|
||||
unsigned char debug_flags;
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
tcp_timeout(void *data)
|
||||
{
|
||||
LWIP_UNUSED_ARG(data);
|
||||
#if TCP_DEBUG && LWIP_TCP
|
||||
tcp_debug_print_pcbs();
|
||||
#endif /* TCP_DEBUG */
|
||||
sys_timeout(5000, tcp_timeout, NULL);
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
||||
struct netif netif_tap, netif_unix;
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
static void
|
||||
tcpip_init_done(void *arg)
|
||||
{
|
||||
ip4_addr_t ipaddr, netmask, gw;
|
||||
sys_sem_t *sem;
|
||||
sem = (sys_sem_t *)arg;
|
||||
|
||||
IP4_ADDR(&gw, 192,168,0,1);
|
||||
IP4_ADDR(&ipaddr, 192,168,0,2);
|
||||
IP4_ADDR(&netmask, 255,255,255,0);
|
||||
|
||||
netif_set_default(netif_add(&netif_tap, &ipaddr, &netmask, &gw, NULL, tapif_init,
|
||||
tcpip_input));
|
||||
netif_set_up(&netif_tap);
|
||||
#if LWIP_IPV6
|
||||
netif_create_ip6_linklocal_address(&netif_tap, 1);
|
||||
#endif
|
||||
|
||||
IP4_ADDR(&gw, 192,168,1,1);
|
||||
IP4_ADDR(&ipaddr, 192,168,1,1);
|
||||
IP4_ADDR(&netmask, 255,255,255,0);
|
||||
netif_set_default(netif_add(&netif_unix, &ipaddr, &netmask, &gw, NULL, unixif_init_server,
|
||||
tcpip_input));
|
||||
netif_set_up(&netif_unix);
|
||||
#if LWIP_IPV6
|
||||
netif_create_ip6_linklocal_address(&netif_unix, 1);
|
||||
#endif
|
||||
|
||||
if(system("route add 192.168.1.1 192.168.0.2") != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(system("route add 192.168.1.2 192.168.0.2") != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*netif_set_default(netif_add(&ipaddr, &netmask, &gw, NULL, sioslipif_init1,
|
||||
tcpip_input)); */
|
||||
|
||||
#if LWIP_NETCONN
|
||||
tcpecho_init();
|
||||
shell_init();
|
||||
#if LWIP_IPV4 && LWIP_TCP
|
||||
httpd_init();
|
||||
#endif
|
||||
udpecho_init();
|
||||
#endif
|
||||
|
||||
printf("Applications started.\n");
|
||||
|
||||
sys_timeout(5000, tcp_timeout, NULL);
|
||||
|
||||
sys_sem_signal(sem);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
main_thread(void *arg)
|
||||
{
|
||||
sys_sem_t sem;
|
||||
LWIP_UNUSED_ARG(arg);
|
||||
|
||||
if(sys_sem_new(&sem, 0) != ERR_OK) {
|
||||
LWIP_ASSERT("Failed to create semaphore", 0);
|
||||
}
|
||||
tcpip_init(tcpip_init_done, &sem);
|
||||
sys_sem_wait(&sem);
|
||||
printf("TCP/IP initialized.\n");
|
||||
|
||||
#ifdef MEM_PERF
|
||||
mem_perf_init("/tmp/memstats.client");
|
||||
#endif /* MEM_PERF */
|
||||
/* Block forever. */
|
||||
sys_sem_wait(&sem);
|
||||
}
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
#ifdef PERF
|
||||
perf_init("/tmp/client.perf");
|
||||
#endif /* PERF */
|
||||
|
||||
#if LWIP_IPV4 && LWIP_TCP
|
||||
tcpdump_init();
|
||||
#endif
|
||||
|
||||
printf("System initialized.\n");
|
||||
sys_thread_new("main_thread", main_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||
pause();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* LWIP_IPV4 */
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
LWIP_UNUSED_ARG(argc);
|
||||
LWIP_UNUSED_ARG(argv);
|
||||
|
||||
printf("simrouter only works with IPv4\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
/* dummy, because SNTP is pulled in via LWIP_DHCP_GET_NTP_SRV */
|
||||
void
|
||||
sntp_set_system_time(u32_t sec)
|
||||
{
|
||||
LWIP_UNUSED_ARG(sec);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
1
ext/lwip-contrib/ports/win32/check/check_stdint.h
Normal file
1
ext/lwip-contrib/ports/win32/check/check_stdint.h
Normal file
@@ -0,0 +1 @@
|
||||
/* deliberateliy empty */
|
||||
30
ext/lwip-contrib/ports/win32/check/config.h
Normal file
30
ext/lwip-contrib/ports/win32/check/config.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/* 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 snprintf _snprintf
|
||||
|
||||
#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>
|
||||
|
||||
typedef unsigned int clockid_t;
|
||||
typedef unsigned int timer_t;
|
||||
#define STRUCT_TIMESPEC_DEFINITION_MISSING
|
||||
9
ext/lwip-contrib/ports/win32/check/stdbool.h
Normal file
9
ext/lwip-contrib/ports/win32/check/stdbool.h
Normal file
@@ -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
|
||||
12
ext/lwip-contrib/ports/win32/check/sys/time.h
Normal file
12
ext/lwip-contrib/ports/win32/check/sys/time.h
Normal file
@@ -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
|
||||
64
ext/lwip-contrib/ports/win32/check/time.c
Normal file
64
ext/lwip-contrib/ports/win32/check/time.c
Normal file
@@ -0,0 +1,64 @@
|
||||
#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;
|
||||
local_result = localtime (timer);
|
||||
|
||||
if (local_result == NULL || result == NULL)
|
||||
return NULL;
|
||||
|
||||
memcpy(result, local_result, sizeof (result));
|
||||
return result;
|
||||
}
|
||||
7
ext/lwip-contrib/ports/win32/check/unistd.h
Normal file
7
ext/lwip-contrib/ports/win32/check/unistd.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#ifndef LWIP_UNISTD_H
|
||||
#define LWIP_UNISTD_H
|
||||
|
||||
/* include io.h for read() and write() */
|
||||
#include <io.h>
|
||||
|
||||
#endif
|
||||
1
ext/lwip-contrib/ports/win32/include/arch/bpstruct.h
Normal file
1
ext/lwip-contrib/ports/win32/include/arch/bpstruct.h
Normal file
@@ -0,0 +1 @@
|
||||
#pragma pack(push,1)
|
||||
92
ext/lwip-contrib/ports/win32/include/arch/cc.h
Normal file
92
ext/lwip-contrib/ports/win32/include/arch/cc.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* 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' */
|
||||
#endif
|
||||
|
||||
#define LWIP_PROVIDE_ERRNO
|
||||
|
||||
/* 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)) { \
|
||||
printf("Assertion \"%s\" failed at line %d in %s\n", message, __LINE__, __FILE__); \
|
||||
fflush(NULL);handler;} } while(0)
|
||||
|
||||
#ifdef _MSC_VER
|
||||
/* C runtime functions redefined */
|
||||
#define snprintf _snprintf
|
||||
#define strdup _strdup
|
||||
#endif
|
||||
|
||||
#ifndef LWIP_NORAND
|
||||
extern unsigned int sys_win_rand(void);
|
||||
#define LWIP_RAND() (sys_win_rand())
|
||||
#endif
|
||||
|
||||
#define PPP_INCLUDE_SETTINGS_HEADER
|
||||
|
||||
#endif /* LWIP_ARCH_CC_H */
|
||||
1
ext/lwip-contrib/ports/win32/include/arch/epstruct.h
Normal file
1
ext/lwip-contrib/ports/win32/include/arch/epstruct.h
Normal file
@@ -0,0 +1 @@
|
||||
#pragma pack(pop)
|
||||
40
ext/lwip-contrib/ports/win32/include/arch/perf.h
Normal file
40
ext/lwip-contrib/ports/win32/include/arch/perf.h
Normal file
@@ -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 */
|
||||
80
ext/lwip-contrib/ports/win32/include/arch/sys_arch.h
Normal file
80
ext/lwip-contrib/ports/win32/include/arch/sys_arch.h
Normal file
@@ -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>
|
||||
*
|
||||
*/
|
||||
#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()
|
||||
|
||||
int lwip_win32_keypressed(void);
|
||||
|
||||
#endif /* LWIP_ARCH_SYS_ARCH_H */
|
||||
|
||||
308
ext/lwip-contrib/ports/win32/include/lwipopts.h
Normal file
308
ext/lwip-contrib/ports/win32/include/lwipopts.h
Normal file
@@ -0,0 +1,308 @@
|
||||
/*
|
||||
* 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_LWIPOPTS_H
|
||||
#define LWIP_LWIPOPTS_H
|
||||
|
||||
#define LWIP_IPV4 1
|
||||
#define LWIP_IPV6 1
|
||||
|
||||
#define NO_SYS 0
|
||||
#define LWIP_SOCKET (NO_SYS==0)
|
||||
#define LWIP_NETCONN (NO_SYS==0)
|
||||
#define LWIP_NETIF_API (NO_SYS==0)
|
||||
|
||||
#define LWIP_IGMP LWIP_IPV4
|
||||
#define LWIP_ICMP LWIP_IPV4
|
||||
|
||||
#define LWIP_SNMP LWIP_UDP
|
||||
#define MIB2_STATS LWIP_SNMP
|
||||
#ifdef LWIP_HAVE_MBEDTLS
|
||||
#define LWIP_SNMP_V3 (LWIP_SNMP)
|
||||
#endif
|
||||
|
||||
#define LWIP_DNS LWIP_UDP
|
||||
#define LWIP_MDNS_RESPONDER LWIP_UDP
|
||||
|
||||
#define LWIP_NUM_NETIF_CLIENT_DATA (LWIP_MDNS_RESPONDER)
|
||||
|
||||
#define LWIP_HAVE_LOOPIF 1
|
||||
#define LWIP_NETIF_LOOPBACK 1
|
||||
#define LWIP_LOOPBACK_MAX_PBUFS 10
|
||||
|
||||
#define TCP_LISTEN_BACKLOG 1
|
||||
|
||||
#define LWIP_COMPAT_SOCKETS 1
|
||||
#define LWIP_SO_RCVTIMEO 1
|
||||
#define LWIP_SO_RCVBUF 1
|
||||
|
||||
#define LWIP_TCPIP_CORE_LOCKING 1
|
||||
|
||||
#define LWIP_NETIF_LINK_CALLBACK 1
|
||||
#define LWIP_NETIF_STATUS_CALLBACK 1
|
||||
|
||||
#ifdef LWIP_DEBUG
|
||||
|
||||
#define LWIP_DBG_MIN_LEVEL 0
|
||||
#define PPP_DEBUG LWIP_DBG_OFF
|
||||
#define MEM_DEBUG LWIP_DBG_OFF
|
||||
#define MEMP_DEBUG LWIP_DBG_OFF
|
||||
#define PBUF_DEBUG LWIP_DBG_OFF
|
||||
#define API_LIB_DEBUG LWIP_DBG_OFF
|
||||
#define API_MSG_DEBUG LWIP_DBG_OFF
|
||||
#define TCPIP_DEBUG LWIP_DBG_OFF
|
||||
#define NETIF_DEBUG LWIP_DBG_OFF
|
||||
#define SOCKETS_DEBUG LWIP_DBG_OFF
|
||||
#define DNS_DEBUG LWIP_DBG_OFF
|
||||
#define AUTOIP_DEBUG LWIP_DBG_OFF
|
||||
#define DHCP_DEBUG LWIP_DBG_OFF
|
||||
#define IP_DEBUG LWIP_DBG_OFF
|
||||
#define IP_REASS_DEBUG LWIP_DBG_OFF
|
||||
#define ICMP_DEBUG LWIP_DBG_OFF
|
||||
#define IGMP_DEBUG LWIP_DBG_OFF
|
||||
#define UDP_DEBUG LWIP_DBG_OFF
|
||||
#define TCP_DEBUG LWIP_DBG_OFF
|
||||
#define TCP_INPUT_DEBUG LWIP_DBG_OFF
|
||||
#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF
|
||||
#define TCP_RTO_DEBUG LWIP_DBG_OFF
|
||||
#define TCP_CWND_DEBUG LWIP_DBG_OFF
|
||||
#define TCP_WND_DEBUG LWIP_DBG_OFF
|
||||
#define TCP_FR_DEBUG LWIP_DBG_OFF
|
||||
#define TCP_QLEN_DEBUG LWIP_DBG_OFF
|
||||
#define TCP_RST_DEBUG LWIP_DBG_OFF
|
||||
#endif
|
||||
|
||||
#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT)
|
||||
|
||||
|
||||
/* ---------- Memory options ---------- */
|
||||
/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
|
||||
lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
|
||||
byte alignment -> define MEM_ALIGNMENT to 2. */
|
||||
/* MSVC port: intel processors don't need 4-byte alignment,
|
||||
but are faster that way! */
|
||||
#define MEM_ALIGNMENT 4U
|
||||
|
||||
/* MEM_SIZE: the size of the heap memory. If the application will send
|
||||
a lot of data that needs to be copied, this should be set high. */
|
||||
#define MEM_SIZE 10240
|
||||
|
||||
/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
|
||||
sends a lot of data out of ROM (or other static memory), this
|
||||
should be set high. */
|
||||
#define MEMP_NUM_PBUF 16
|
||||
/* MEMP_NUM_RAW_PCB: the number of UDP protocol control blocks. One
|
||||
per active RAW "connection". */
|
||||
#define MEMP_NUM_RAW_PCB 3
|
||||
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
|
||||
per active UDP "connection". */
|
||||
#define MEMP_NUM_UDP_PCB 4
|
||||
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
|
||||
connections. */
|
||||
#define MEMP_NUM_TCP_PCB 5
|
||||
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
|
||||
connections. */
|
||||
#define MEMP_NUM_TCP_PCB_LISTEN 8
|
||||
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
|
||||
segments. */
|
||||
#define MEMP_NUM_TCP_SEG 16
|
||||
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
|
||||
timeouts. */
|
||||
#define MEMP_NUM_SYS_TIMEOUT 17
|
||||
|
||||
/* The following four are used only with the sequential API and can be
|
||||
set to 0 if the application only will use the raw API. */
|
||||
/* MEMP_NUM_NETBUF: the number of struct netbufs. */
|
||||
#define MEMP_NUM_NETBUF 2
|
||||
/* MEMP_NUM_NETCONN: the number of struct netconns. */
|
||||
#define MEMP_NUM_NETCONN 10
|
||||
/* MEMP_NUM_TCPIP_MSG_*: the number of struct tcpip_msg, which is used
|
||||
for sequential API communication and incoming packets. Used in
|
||||
src/api/tcpip.c. */
|
||||
#define MEMP_NUM_TCPIP_MSG_API 16
|
||||
#define MEMP_NUM_TCPIP_MSG_INPKT 16
|
||||
|
||||
|
||||
/* ---------- Pbuf options ---------- */
|
||||
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
|
||||
#define PBUF_POOL_SIZE 160
|
||||
|
||||
/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
|
||||
#define PBUF_POOL_BUFSIZE 128
|
||||
|
||||
/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
|
||||
link level header. */
|
||||
#define PBUF_LINK_HLEN 16
|
||||
|
||||
/** SYS_LIGHTWEIGHT_PROT
|
||||
* define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection
|
||||
* for certain critical regions during buffer allocation, deallocation and memory
|
||||
* allocation and deallocation.
|
||||
*/
|
||||
#define SYS_LIGHTWEIGHT_PROT (NO_SYS==0)
|
||||
|
||||
|
||||
/* ---------- TCP options ---------- */
|
||||
#define LWIP_TCP 1
|
||||
#define TCP_TTL 255
|
||||
|
||||
#define LWIP_ALTCP (LWIP_TCP)
|
||||
#ifdef LWIP_HAVE_MBEDTLS
|
||||
#define LWIP_ALTCP_TLS (LWIP_TCP)
|
||||
#define LWIP_ALTCP_TLS_MBEDTLS (LWIP_TCP)
|
||||
#endif
|
||||
|
||||
|
||||
/* Controls if TCP should queue segments that arrive out of
|
||||
order. Define to 0 if your device is low on memory. */
|
||||
#define TCP_QUEUE_OOSEQ 1
|
||||
|
||||
/* TCP Maximum segment size. */
|
||||
#define TCP_MSS 1024
|
||||
|
||||
/* TCP sender buffer space (bytes). */
|
||||
#define TCP_SND_BUF 2048
|
||||
|
||||
/* TCP sender buffer space (pbufs). This must be at least = 2 *
|
||||
TCP_SND_BUF/TCP_MSS for things to work. */
|
||||
#define TCP_SND_QUEUELEN (4 * TCP_SND_BUF/TCP_MSS)
|
||||
|
||||
/* TCP writable space (bytes). This must be less than or equal
|
||||
to TCP_SND_BUF. It is the amount of space which must be
|
||||
available in the tcp snd_buf for select to return writable */
|
||||
#define TCP_SNDLOWAT (TCP_SND_BUF/2)
|
||||
|
||||
/* TCP receive window. */
|
||||
#define TCP_WND 8096
|
||||
|
||||
/* Maximum number of retransmissions of data segments. */
|
||||
#define TCP_MAXRTX 12
|
||||
|
||||
/* Maximum number of retransmissions of SYN segments. */
|
||||
#define TCP_SYNMAXRTX 4
|
||||
|
||||
|
||||
/* ---------- ARP options ---------- */
|
||||
#define LWIP_ARP 1
|
||||
#define ARP_TABLE_SIZE 10
|
||||
#define ARP_QUEUEING 1
|
||||
|
||||
|
||||
/* ---------- IP options ---------- */
|
||||
/* Define IP_FORWARD to 1 if you wish to have the ability to forward
|
||||
IP packets across network interfaces. If you are going to run lwIP
|
||||
on a device with only one network interface, define this to 0. */
|
||||
#define IP_FORWARD 1
|
||||
|
||||
/* IP reassembly and segmentation.These are orthogonal even
|
||||
* if they both deal with IP fragments */
|
||||
#define IP_REASSEMBLY 1
|
||||
#define IP_REASS_MAX_PBUFS 10
|
||||
#define MEMP_NUM_REASSDATA 10
|
||||
#define IP_FRAG 1
|
||||
|
||||
|
||||
/* ---------- ICMP options ---------- */
|
||||
#define ICMP_TTL 255
|
||||
|
||||
|
||||
/* ---------- DHCP options ---------- */
|
||||
/* Define LWIP_DHCP to 1 if you want DHCP configuration of
|
||||
interfaces. */
|
||||
#define LWIP_DHCP LWIP_UDP
|
||||
|
||||
/* 1 if you want to do an ARP check on the offered address
|
||||
(recommended). */
|
||||
#define DHCP_DOES_ARP_CHECK (LWIP_DHCP)
|
||||
|
||||
|
||||
/* ---------- AUTOIP options ------- */
|
||||
#define LWIP_AUTOIP (LWIP_DHCP)
|
||||
#define LWIP_DHCP_AUTOIP_COOP (LWIP_DHCP && LWIP_AUTOIP)
|
||||
|
||||
|
||||
/* ---------- UDP options ---------- */
|
||||
#define LWIP_UDP 1
|
||||
#define LWIP_UDPLITE LWIP_UDP
|
||||
#define UDP_TTL 255
|
||||
|
||||
|
||||
/* ---------- RAW options ---------- */
|
||||
#define LWIP_RAW 1
|
||||
|
||||
|
||||
/* ---------- Statistics options ---------- */
|
||||
|
||||
#define LWIP_STATS 1
|
||||
#define LWIP_STATS_DISPLAY 1
|
||||
|
||||
#if LWIP_STATS
|
||||
#define LINK_STATS 1
|
||||
#define IP_STATS 1
|
||||
#define ICMP_STATS 1
|
||||
#define IGMP_STATS 1
|
||||
#define IPFRAG_STATS 1
|
||||
#define UDP_STATS 1
|
||||
#define TCP_STATS 1
|
||||
#define MEM_STATS 1
|
||||
#define MEMP_STATS 1
|
||||
#define PBUF_STATS 1
|
||||
#define SYS_STATS 1
|
||||
#endif /* LWIP_STATS */
|
||||
|
||||
|
||||
/* ---------- PPP options ---------- */
|
||||
|
||||
#define PPP_SUPPORT 1 /* Set > 0 for PPP */
|
||||
|
||||
#if PPP_SUPPORT
|
||||
|
||||
#define NUM_PPP 1 /* Max PPP sessions. */
|
||||
|
||||
|
||||
/* Select modules to enable. Ideally these would be set in the makefile but
|
||||
* we're limited by the command line length so you need to modify the settings
|
||||
* in this file.
|
||||
*/
|
||||
#define PPPOE_SUPPORT 1
|
||||
#define PPPOS_SUPPORT 1
|
||||
|
||||
#define PAP_SUPPORT 1 /* Set > 0 for PAP. */
|
||||
#define CHAP_SUPPORT 1 /* Set > 0 for CHAP. */
|
||||
#define MSCHAP_SUPPORT 0 /* Set > 0 for MSCHAP */
|
||||
#define CBCP_SUPPORT 0 /* Set > 0 for CBCP (NOT FUNCTIONAL!) */
|
||||
#define CCP_SUPPORT 0 /* Set > 0 for CCP */
|
||||
#define VJ_SUPPORT 1 /* Set > 0 for VJ header compression. */
|
||||
#define MD5_SUPPORT 1 /* Set > 0 for MD5 (see also CHAP) */
|
||||
|
||||
#endif /* PPP_SUPPORT */
|
||||
|
||||
#endif /* LWIP_LWIPOPTS_H */
|
||||
6
ext/lwip-contrib/ports/win32/include/ppp_settings.h
Normal file
6
ext/lwip-contrib/ports/win32/include/ppp_settings.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (disable: 4242) /* PPP only: conversion from 'x' to 'y', possible loss of data */
|
||||
#pragma warning (disable: 4244) /* PPP only: conversion from 'x' to 'y', possible loss of data (again?) */
|
||||
#pragma warning (disable: 4310) /* PPP only: cast truncates constant value */
|
||||
#pragma warning (disable: 4706) /* PPP only: assignment within conditional expression */
|
||||
#endif /* MSC_VER */
|
||||
72
ext/lwip-contrib/ports/win32/lwipcfg_msvc.h.example
Normal file
72
ext/lwip-contrib/ports/win32/lwipcfg_msvc.h.example
Normal file
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* Additional settings for the win32 port.
|
||||
* Copy this to lwipcfg_msvc.h and make the config changes you need.
|
||||
*/
|
||||
|
||||
/* configuration for this port */
|
||||
#define PPP_USERNAME "Admin"
|
||||
#define PPP_PASSWORD "pass"
|
||||
|
||||
/** Define this to the index of the windows network adapter to use */
|
||||
#define PACKET_LIB_ADAPTER_NR 1
|
||||
/** Define this to the GUID of the windows network adapter to use
|
||||
* or NOT define this if you want PACKET_LIB_ADAPTER_NR to be used */
|
||||
/*#define PACKET_LIB_ADAPTER_GUID "00000000-0000-0000-0000-000000000000"*/
|
||||
/*#define PACKET_LIB_GET_ADAPTER_NETADDRESS(addr) IP4_ADDR((addr), 192,168,1,0)*/
|
||||
/*#define PACKET_LIB_QUIET*/
|
||||
|
||||
/* If these 2 are not defined, the corresponding config setting is used */
|
||||
/* #define USE_DHCP 0 */
|
||||
/* #define USE_AUTOIP 0 */
|
||||
|
||||
/* #define USE_PCAPIF 1 */
|
||||
#define LWIP_PORT_INIT_IPADDR(addr) IP4_ADDR((addr), 192,168,1,200)
|
||||
#define LWIP_PORT_INIT_GW(addr) IP4_ADDR((addr), 192,168,1,1)
|
||||
#define LWIP_PORT_INIT_NETMASK(addr) IP4_ADDR((addr), 255,255,255,0)
|
||||
|
||||
/* remember to change this MAC address to suit your needs!
|
||||
the last octet will be increased by netif->num for each netif */
|
||||
#define LWIP_MAC_ADDR_BASE {0x00,0x01,0x02,0x03,0x04,0x05}
|
||||
|
||||
/* #define USE_SLIPIF 0 */
|
||||
/* #define SIO_USE_COMPORT 0 */
|
||||
#ifdef USE_SLIPIF
|
||||
#if USE_SLIPIF
|
||||
#define LWIP_PORT_INIT_SLIP1_IPADDR(addr) IP4_ADDR((addr), 192, 168, 2, 2)
|
||||
#define LWIP_PORT_INIT_SLIP1_GW(addr) IP4_ADDR((addr), 192, 168, 2, 1)
|
||||
#define LWIP_PORT_INIT_SLIP1_NETMASK(addr) IP4_ADDR((addr), 255, 255, 255, 0)
|
||||
#if USE_SLIPIF > 1
|
||||
#define LWIP_PORT_INIT_SLIP2_IPADDR(addr) IP4_ADDR((addr), 192, 168, 2, 1)
|
||||
#define LWIP_PORT_INIT_SLIP2_GW(addr) IP4_ADDR((addr), 0, 0, 0, 0)
|
||||
#define LWIP_PORT_INIT_SLIP2_NETMASK(addr) IP4_ADDR((addr), 255, 255, 255, 0)*/
|
||||
#endif /* USE_SLIPIF > 1 */
|
||||
#endif /* USE_SLIPIF */
|
||||
#endif /* USE_SLIPIF */
|
||||
|
||||
/* configuration for applications */
|
||||
|
||||
#define LWIP_CHARGEN_APP 0
|
||||
#define LWIP_DNS_APP 0
|
||||
#define LWIP_HTTPD_APP 0
|
||||
/* Set this to 1 to use the netconn http server,
|
||||
* otherwise the raw api server will be used. */
|
||||
/*#define LWIP_HTTPD_APP_NETCONN */
|
||||
#define LWIP_NETBIOS_APP 0
|
||||
#define LWIP_NETIO_APP 0
|
||||
#define LWIP_PING_APP 0
|
||||
#define LWIP_RTP_APP 0
|
||||
#define LWIP_SHELL_APP 0
|
||||
#define LWIP_SNTP_APP 0
|
||||
#define LWIP_SOCKET_EXAMPLES_APP 0
|
||||
#define LWIP_TCPECHO_APP 0
|
||||
/* Set this to 1 to use the netconn tcpecho server,
|
||||
* otherwise the raw api server will be used. */
|
||||
/*#define LWIP_TCPECHO_APP_NETCONN */
|
||||
#define LWIP_UDPECHO_APP 0
|
||||
#define LWIP_LWIPERF_APP 0
|
||||
|
||||
/*#define USE_DHCP 1*/
|
||||
/*#define USE_AUTOIP 1*/
|
||||
|
||||
/* define this to your custom application-init function */
|
||||
/* #define LWIP_APP_INIT my_app_init() */
|
||||
20
ext/lwip-contrib/ports/win32/lwippools.h
Normal file
20
ext/lwip-contrib/ports/win32/lwippools.h
Normal file
@@ -0,0 +1,20 @@
|
||||
/* OPTIONAL: Pools to replace heap allocation
|
||||
* Optional: Pools can be used instead of the heap for mem_malloc. If
|
||||
* so, these should be defined here, in increasing order according to
|
||||
* the pool element size.
|
||||
*
|
||||
* LWIP_MALLOC_MEMPOOL(number_elements, element_size)
|
||||
*/
|
||||
#if MEM_USE_POOLS
|
||||
LWIP_MALLOC_MEMPOOL_START
|
||||
LWIP_MALLOC_MEMPOOL(100, 256)
|
||||
LWIP_MALLOC_MEMPOOL(50, 512)
|
||||
LWIP_MALLOC_MEMPOOL(20, 1024)
|
||||
LWIP_MALLOC_MEMPOOL(20, 1536)
|
||||
LWIP_MALLOC_MEMPOOL_END
|
||||
#endif /* MEM_USE_POOLS */
|
||||
|
||||
/* Optional: Your custom pools can go here if you would like to use
|
||||
* lwIP's memory pools for anything else.
|
||||
*/
|
||||
LWIP_MEMPOOL(SYS_MBOX, 22, 100, "SYS_MBOX")
|
||||
50
ext/lwip-contrib/ports/win32/mingw/Common.mk
Normal file
50
ext/lwip-contrib/ports/win32/mingw/Common.mk
Normal file
@@ -0,0 +1,50 @@
|
||||
#
|
||||
# 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
|
||||
ARCHFILES=$(LWIPARCH)/sys_arch.c $(LWIPARCH)/test.c $(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)
|
||||
48
ext/lwip-contrib/ports/win32/mingw/Makefile
Normal file
48
ext/lwip-contrib/ports/win32/mingw/Makefile
Normal file
@@ -0,0 +1,48 @@
|
||||
#
|
||||
# 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 ipv4 compile: test
|
||||
.PHONY: all
|
||||
|
||||
include Common.mk
|
||||
|
||||
clean:
|
||||
cmd /c del /q *.o $(LWIPLIBCOMMON) $(APPLIB) test.exe *.s .depend* *.map
|
||||
|
||||
depend dep: .depend
|
||||
|
||||
include .depend
|
||||
|
||||
.depend: $(LWIPFILES) $(APPFILES)
|
||||
$(CCDEP) $(CFLAGS) -MM $^ > .depend || cmd /c del .depend
|
||||
|
||||
test: .depend $(LWIPLIBCOMMON) $(APPLIB) test.o
|
||||
$(CC) $(CFLAGS) -o test test.o -Wl,--start-group $(APPLIB) $(LWIPLIBCOMMON) -Wl,--end-group $(LDFLAGS) -Xlinker -Map=test.map
|
||||
100
ext/lwip-contrib/ports/win32/msvc/libcheck.vcxproj
Normal file
100
ext/lwip-contrib/ports/win32/msvc/libcheck.vcxproj
Normal file
@@ -0,0 +1,100 @@
|
||||
<?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>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</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'">$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</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>
|
||||
96
ext/lwip-contrib/ports/win32/msvc/libcheck.vcxproj.filters
Normal file
96
ext/lwip-contrib/ports/win32/msvc/libcheck.vcxproj.filters
Normal file
@@ -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>
|
||||
552
ext/lwip-contrib/ports/win32/msvc/lwIP.vcxproj
Normal file
552
ext/lwip-contrib/ports/win32/msvc/lwIP.vcxproj
Normal file
@@ -0,0 +1,552 @@
|
||||
<?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>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</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)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(Configuration)\$(ProjectName)\</IntDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">.\$(Configuration)\unittests\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">.\$(Configuration)\$(ProjectName)\unittests\</IntDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">.\$(Configuration)\unittests\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">.\$(Configuration)\$(ProjectName)\unittests\</IntDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;..\..\..\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>EnableAllWarnings</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>..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;..\..\..\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>EnableAllWarnings</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>..\..\..\..\lwip\test\unit;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>LWIP_NORAND;_LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>EnableAllWarnings</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>..\..\..\..\lwip\test\unit;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>LWIP_NORAND;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<ProgramDataBaseFileName>$(IntDir)$(ProjectName).pdb</ProgramDataBaseFileName>
|
||||
<WarningLevel>EnableAllWarnings</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="..\..\..\..\lwip\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="..\..\..\..\lwip\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="..\..\..\..\lwip\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="..\..\..\..\lwip\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="..\..\..\..\lwip\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="..\..\..\..\lwip\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="..\..\..\..\lwip\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="..\..\..\..\lwip\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="..\..\..\..\lwip\CHANGELOG" />
|
||||
<None Include="..\..\..\..\lwip\COPYING" />
|
||||
<None Include="..\..\..\..\lwip\doc\contrib.txt" />
|
||||
<None Include="..\..\..\..\lwip\doc\doxygen\generate.bat" />
|
||||
<None Include="..\..\..\..\lwip\doc\doxygen\generate.sh" />
|
||||
<None Include="..\..\..\..\lwip\doc\doxygen\lwip.Doxyfile" />
|
||||
<None Include="..\..\..\..\lwip\doc\FILES" />
|
||||
<None Include="..\..\..\..\lwip\doc\mdns.txt" />
|
||||
<None Include="..\..\..\..\lwip\doc\ppp.txt" />
|
||||
<None Include="..\..\..\..\lwip\doc\rawapi.txt" />
|
||||
<None Include="..\..\..\..\lwip\doc\savannah.txt" />
|
||||
<None Include="..\..\..\..\lwip\doc\sys_arch.txt" />
|
||||
<None Include="..\..\..\..\lwip\FILES" />
|
||||
<None Include="..\..\..\..\lwip\README" />
|
||||
<None Include="..\..\..\..\lwip\UPGRADING" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\..\lwip\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="..\..\..\..\lwip\src\api\api_lib.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\api\api_msg.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\api\err.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\api\if_api.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\api\netbuf.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\api\netdb.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\api\netifapi.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\api\sockets.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\api\tcpip.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\altcp_tls\altcp_tls_mbedtls.c">
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\..\mbedtls\include;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\..\mbedtls\include;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">..\..\..\..\mbedtls\include;..\..\..\..\lwip\test\unit;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">..\..\..\..\mbedtls\include;..\..\..\..\lwip\test\unit;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\altcp_tls\altcp_tls_mbedtls_mem.c">
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\..\mbedtls\include;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\..\mbedtls\include;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;..\..\..\apps\snmp_private_mib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug unittests|Win32'">..\..\..\..\mbedtls\include;..\..\..\..\lwip\test\unit;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release unittests|Win32'">..\..\..\..\mbedtls\include;..\..\..\..\lwip\test\unit;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\lwiperf\lwiperf.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\mqtt\mqtt.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\netbiosns\netbiosns.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\smtp\smtp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_snmpv2_framework.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_snmpv2_usm.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\sntp\sntp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\tftp\tftp_server.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\altcp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\altcp_tcp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\def.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\dns.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\inet_chksum.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\init.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\mem.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\memp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\netif.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\pbuf.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\raw.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\stats.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\sys.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\tcp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\tcp_in.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\tcp_out.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\udp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv4\autoip.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv4\dhcp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv4\etharp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv4\icmp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv4\igmp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv4\ip4.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv4\ip4_addr.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv6\dhcp6.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv6\ethip6.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv6\icmp6.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv6\inet6.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv6\ip6.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv6\ip6_addr.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv6\ip6_frag.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv6\mld6.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv6\nd6.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\bridgeif.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ethernet.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ethernetif.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\lowpan6.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\slipif.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\auth.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\ccp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\chap-md5.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\chap-new.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\chap_ms.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\demand.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\eap.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\ecp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\eui64.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\fsm.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\ipcp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\ipv6cp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\lcp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\magic.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\mppe.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\multilink.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\ppp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\pppcrypt.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\pppoe.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\pppol2tp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\pppos.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\upap.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\utils.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\vj.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\polarssl\arc4.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\polarssl\des.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\polarssl\md4.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\polarssl\md5.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\polarssl\sha1.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\httpd\fs.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\httpd\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="..\..\..\..\lwip\src\apps\httpd\httpd.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_asn1.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_core.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_mib2.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_msg.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_netconn.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_pbuf_stream.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_raw.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_scalar.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_table.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_threadsync.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_traps.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ip.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmpv3.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_mib2_icmp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_mib2_interfaces.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_mib2_ip.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_mib2_snmp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_mib2_system.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_mib2_tcp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmp_mib2_udp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\netif\ppp\pppapi.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\ipv4\ip4_frag.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\core\timeouts.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\mdns\mdns.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\src\apps\snmp\snmpv3_mbedtls.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="..\..\..\..\lwip\doc\doxygen\main_page.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\apps\altcp_tls\altcp_tls_mbedtls_mem.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\apps\altcp_tls\altcp_tls_mbedtls_structs.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\apps\snmp\snmp_msg.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\compat\stdc\errno.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\compat\posix\arpa\inet.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\compat\posix\netdb.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\compat\posix\net\if.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\compat\posix\sys\socket.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\altcp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\altcp_tcp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\altcp_tls.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\altcp_tls_mbedtls_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\lwiperf.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\mdns_priv.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\mqtt.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\mqtt_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\mqtt_priv.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\netbiosns.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\netbiosns_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\smtp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\smtp_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\snmp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\snmp_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\snmp_snmpv2_framework.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\snmp_snmpv2_usm.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\sntp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\sntp_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\tftp_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\tftp_server.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\errno.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\if_api.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\ip6_zone.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\priv\altcp_priv.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\priv\api_msg.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\priv\memp_priv.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\priv\memp_std.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\priv\nd6_priv.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\priv\sockets_priv.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\priv\tcpip_priv.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\priv\tcp_priv.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\api.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\arch.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\autoip.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\debug.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\def.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\dhcp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\dhcp6.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\dns.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\err.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\ethip6.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\icmp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\icmp6.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\igmp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\inet.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\inet_chksum.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\init.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\ip.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\ip4.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\ip4_addr.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\ip6.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\ip6_addr.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\ip6_frag.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\ip_addr.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\mem.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\memp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\mld6.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\nd6.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\netbuf.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\netdb.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\netif.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\netifapi.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\opt.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\pbuf.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\etharp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\iana.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\ieee.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\igmp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\raw.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\sio.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\snmp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\sockets.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\stats.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\sys.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\tcp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\tcpip.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\udp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\bridgeif.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\bridgeif_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\etharp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ethernet.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\lowpan6.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\lowpan6_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\slipif.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\ccp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\chap-md5.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\chap-new.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\chap_ms.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\eap.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\ecp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\eui64.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\fsm.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\ipcp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\ipv6cp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\lcp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\magic.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\mppe.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\ppp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\ppp_impl.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\ppp_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\pppcrypt.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\pppdebug.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\pppoe.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\pppol2tp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\pppos.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\upap.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\vj.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\polarssl\arc4.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\polarssl\des.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\polarssl\md4.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\polarssl\md5.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\polarssl\sha1.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\apps\httpd\fsdata.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\apps\httpd\httpd_structs.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\apps\snmp\snmp_asn1.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\apps\snmp\snmp_core_priv.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\apps\snmp\snmp_pbuf_stream.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\snmp_core.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\snmp_mib2.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\snmp_scalar.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\snmp_table.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\snmp_threadsync.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\netif\ppp\pppapi.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\fs.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\httpd.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\httpd_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\snmpv3.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\etharp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\ip4_frag.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\timeouts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\mdns.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\apps\mdns_opts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\autoip.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\dhcp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\dns.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\ip.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\ip4.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\apps\snmp\snmpv3_priv.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\ethernet.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\icmp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\icmp6.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\ip6.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\mld6.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\nd6.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\tcp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\src\include\lwip\prot\udp.h" />
|
||||
<ClInclude Include="..\include\arch\bpstruct.h" />
|
||||
<ClInclude Include="..\include\arch\cc.h" />
|
||||
<ClInclude Include="..\include\arch\epstruct.h" />
|
||||
<ClInclude Include="..\lwipcfg_msvc.h" />
|
||||
<ClInclude Include="..\include\lwipopts.h" />
|
||||
<ClInclude Include="..\lwippools.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>
|
||||
1002
ext/lwip-contrib/ports/win32/msvc/lwIP.vcxproj.filters
Normal file
1002
ext/lwip-contrib/ports/win32/msvc/lwIP.vcxproj.filters
Normal file
File diff suppressed because it is too large
Load Diff
37
ext/lwip-contrib/ports/win32/msvc/lwIP_Test.sln
Normal file
37
ext/lwip-contrib/ports/win32/msvc/lwIP_Test.sln
Normal file
@@ -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
|
||||
183
ext/lwip-contrib/ports/win32/msvc/lwIP_Test.vcxproj
Normal file
183
ext/lwip-contrib/ports/win32/msvc/lwIP_Test.vcxproj
Normal file
@@ -0,0 +1,183 @@
|
||||
<?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>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</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>..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;..\..\..;%(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>EnableAllWarnings</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;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<ProgramDatabaseFile>.\Release/test.pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Midl>
|
||||
<TypeLibraryName>.\Debug/test.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;..\..\..;%(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>EnableAllWarnings</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;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\addons\ipv6_static_routing\ip6_route_table.c" />
|
||||
<ClCompile Include="..\..\..\addons\tcp_isn\tcp_isn.c" />
|
||||
<ClCompile Include="..\..\..\apps\snmp_v3\snmpv3_dummy.c" />
|
||||
<ClCompile Include="..\..\..\apps\tcpecho_raw\tcpecho_raw.c" />
|
||||
<ClCompile Include="..\..\..\apps\udpecho_raw\udpecho_raw.c" />
|
||||
<ClCompile Include="..\test.c">
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<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="..\..\..\apps\snmp_private_mib\lwip_prvmib.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\snmp_v3\snmpv3_dummy.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\snmp_private_mib\private_mib.h" />
|
||||
<ClInclude Include="..\..\..\apps\udpecho_raw\udpecho_raw.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>
|
||||
123
ext/lwip-contrib/ports/win32/msvc/lwIP_Test.vcxproj.filters
Normal file
123
ext/lwip-contrib/ports/win32/msvc/lwIP_Test.vcxproj.filters
Normal file
@@ -0,0 +1,123 @@
|
||||
<?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>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\test.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<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="..\..\..\apps\snmp_private_mib\lwip_prvmib.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="..\..\..\apps\snmp_v3\snmpv3_dummy.c">
|
||||
<Filter>Source Files\apps</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="..\..\..\apps\snmp_private_mib\private_mib.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="..\..\..\apps\snmp_v3\snmpv3_dummy.h">
|
||||
<Filter>Source Files\apps</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\..\addons\ipv6_static_routing\README">
|
||||
<Filter>Source Files\addons\ipv6_static_routing</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
111
ext/lwip-contrib/ports/win32/msvc/lwIP_pcapif.vcxproj
Normal file
111
ext/lwip-contrib/ports/win32/msvc/lwIP_pcapif.vcxproj
Normal file
@@ -0,0 +1,111 @@
|
||||
<?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>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</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>..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;.\;$(PCAP_DIR)\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>EnableAllWarnings</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>..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;.\;$(PCAP_DIR)\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>EnableAllWarnings</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>
|
||||
@@ -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>
|
||||
31
ext/lwip-contrib/ports/win32/msvc/lwIP_unittests.sln
Normal file
31
ext/lwip-contrib/ports/win32/msvc/lwIP_unittests.sln
Normal file
@@ -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
|
||||
131
ext/lwip-contrib/ports/win32/msvc/lwip_unittests.vcxproj
Normal file
131
ext/lwip-contrib/ports/win32/msvc/lwip_unittests.vcxproj
Normal file
@@ -0,0 +1,131 @@
|
||||
<?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>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</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'">$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\check;..\..\..\..\check\src;..\..\..\..\lwip\test\unit;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_LIB;WIN32;_DEBUG;LWIP_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>true</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<WarningLevel>EnableAllWarnings</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;..\..\..\..\lwip\test\unit;..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\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="..\..\..\..\lwip\test\unit\api\test_sockets.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\arch\sys_arch.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\core\test_mem.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\core\test_pbuf.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\ip4\test_ip4.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\mdns\test_mdns.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\mqtt\test_mqtt.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\tcp\tcp_helper.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\tcp\test_tcp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\tcp\test_tcp_oos.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\udp\test_udp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\etharp\test_etharp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\dhcp\test_dhcp.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\lwip_unittests.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\api\test_sockets.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\arch\sys_arch.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\core\test_mem.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\core\test_pbuf.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\ip4\test_ip4.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\mdns\test_mdns.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\mqtt\test_mqtt.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\tcp\tcp_helper.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\tcp\test_tcp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\tcp\test_tcp_oos.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\udp\test_udp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\etharp\test_etharp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\dhcp\test_dhcp.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\lwip_check.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\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>
|
||||
120
ext/lwip-contrib/ports/win32/msvc/lwip_unittests.vcxproj.filters
Normal file
120
ext/lwip-contrib/ports/win32/msvc/lwip_unittests.vcxproj.filters
Normal file
@@ -0,0 +1,120 @@
|
||||
<?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>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\core\test_mem.c">
|
||||
<Filter>core</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\core\test_pbuf.c">
|
||||
<Filter>core</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\tcp\tcp_helper.c">
|
||||
<Filter>tcp</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\tcp\test_tcp.c">
|
||||
<Filter>tcp</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\tcp\test_tcp_oos.c">
|
||||
<Filter>tcp</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\udp\test_udp.c">
|
||||
<Filter>udp</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\etharp\test_etharp.c">
|
||||
<Filter>etharp</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\dhcp\test_dhcp.c">
|
||||
<Filter>dhcp</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\lwip_unittests.c" />
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\mdns\test_mdns.c">
|
||||
<Filter>mdns</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\api\test_sockets.c">
|
||||
<Filter>api</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\arch\sys_arch.c">
|
||||
<Filter>arch</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\mqtt\test_mqtt.c">
|
||||
<Filter>mqtt</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\lwip\test\unit\ip4\test_ip4.c">
|
||||
<Filter>ip4</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\core\test_mem.h">
|
||||
<Filter>core</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\core\test_pbuf.h">
|
||||
<Filter>core</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\tcp\tcp_helper.h">
|
||||
<Filter>tcp</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\tcp\test_tcp.h">
|
||||
<Filter>tcp</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\tcp\test_tcp_oos.h">
|
||||
<Filter>tcp</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\udp\test_udp.h">
|
||||
<Filter>udp</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\etharp\test_etharp.h">
|
||||
<Filter>etharp</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\dhcp\test_dhcp.h">
|
||||
<Filter>dhcp</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\lwip_check.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\lwipopts.h" />
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\mdns\test_mdns.h">
|
||||
<Filter>mdns</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\api\test_sockets.h">
|
||||
<Filter>api</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\arch\sys_arch.h">
|
||||
<Filter>arch</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\mqtt\test_mqtt.h">
|
||||
<Filter>mqtt</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\lwip\test\unit\ip4\test_ip4.h">
|
||||
<Filter>ip4</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
99
ext/lwip-contrib/ports/win32/msvc/makefsdata.vcxproj
Normal file
99
ext/lwip-contrib/ports/win32/msvc/makefsdata.vcxproj
Normal file
@@ -0,0 +1,99 @@
|
||||
<?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="..\..\..\..\lwip\src\apps\httpd\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>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</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>..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;%(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>..\..\..\..\lwip\src\include;..\..\..\..\lwip\src\include\ipv4;..\..\..\..\lwip\src\include\ipv6;..\include;%(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>
|
||||
14
ext/lwip-contrib/ports/win32/msvc/makefsdata.vcxproj.filters
Normal file
14
ext/lwip-contrib/ports/win32/msvc/makefsdata.vcxproj.filters
Normal file
@@ -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="..\..\..\..\lwip\src\apps\httpd\makefsdata\makefsdata.c">
|
||||
<Filter>Quelldateien</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
1083
ext/lwip-contrib/ports/win32/pcapif.c
Normal file
1083
ext/lwip-contrib/ports/win32/pcapif.c
Normal file
File diff suppressed because it is too large
Load Diff
32
ext/lwip-contrib/ports/win32/pcapif.h
Normal file
32
ext/lwip-contrib/ports/win32/pcapif.h
Normal file
@@ -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 */
|
||||
105
ext/lwip-contrib/ports/win32/pcapif_helper.c
Normal file
105
ext/lwip-contrib/ports/win32/pcapif_helper.c
Normal file
@@ -0,0 +1,105 @@
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
|
||||
#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);
|
||||
}
|
||||
|
||||
#endif /* WIN32 */
|
||||
25
ext/lwip-contrib/ports/win32/pcapif_helper.h
Normal file
25
ext/lwip-contrib/ports/win32/pcapif_helper.h
Normal file
@@ -0,0 +1,25 @@
|
||||
#ifndef LWIP_PCAPIF_HELPER_H
|
||||
#define LWIP_PCAPIF_HELPER_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);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* LWIP_PCAPIF_HELPER_H */
|
||||
24
ext/lwip-contrib/ports/win32/readme.txt
Normal file
24
ext/lwip-contrib/ports/win32/readme.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
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 or the Makefile in the 'mingw' subdir.
|
||||
|
||||
For both compilers:
|
||||
- the lwIP core repository must be in a folder "lwip" next to the "contrib" folder
|
||||
- you have to set an environment variable PCAP_DIR pointing to the WinPcap Developer's
|
||||
Pack (containing 'include' and 'lib')
|
||||
|
||||
You also will have to copy the file 'lwipcfg_msvc.h.example' to
|
||||
'lwipcfg_msvc.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.
|
||||
304
ext/lwip-contrib/ports/win32/sio.c
Normal file
304
ext/lwip-contrib/ports/win32/sio.c
Normal file
@@ -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_msvc.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, 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;
|
||||
}
|
||||
612
ext/lwip-contrib/ports/win32/sys_arch.c
Normal file
612
ext/lwip-contrib/ports/win32/sys_arch.c
Normal file
@@ -0,0 +1,612 @@
|
||||
/*
|
||||
* 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>
|
||||
|
||||
/* These functions are used from NO_SYS also, for precise timer triggering */
|
||||
LARGE_INTEGER freq, sys_start_time;
|
||||
#define SYS_INITIALIZED() (freq.QuadPart != 0)
|
||||
|
||||
DWORD netconn_sem_tls_index;
|
||||
|
||||
HCRYPTPROV hcrypt;
|
||||
u32_t sys_win_rand(void)
|
||||
{
|
||||
u32_t ret;
|
||||
if (CryptGenRandom(hcrypt, sizeof(ret), (BYTE*)&ret)) {
|
||||
return ret;
|
||||
}
|
||||
LWIP_ASSERT("CryptGenRandom failed", 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
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)) {
|
||||
err = GetLastError();
|
||||
char errbuf[128];
|
||||
snprintf(errbuf, sizeof(errbuf), "CryptAcquireContext failed with error %d", (int)err);
|
||||
LWIP_UNUSED_ARG(err);
|
||||
LWIP_ASSERT(errbuf, 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)
|
||||
{
|
||||
return (u32_t)sys_get_ms_longlong();
|
||||
}
|
||||
|
||||
CRITICAL_SECTION critSec;
|
||||
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sys_arch_unprotect(sys_prot_t pval)
|
||||
{
|
||||
LWIP_UNUSED_ARG(pval);
|
||||
LeaveCriticalSection(&critSec);
|
||||
}
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
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) {
|
||||
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... */
|
||||
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_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;
|
||||
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_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_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_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)
|
||||
{
|
||||
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 void 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
|
||||
}
|
||||
|
||||
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, (LPTHREAD_START_ROUTINE)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;
|
||||
}
|
||||
|
||||
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_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_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);
|
||||
|
||||
/* 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);
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
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();
|
||||
if ((ret = WaitForSingleObject(q->sem, timeout)) == 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);
|
||||
|
||||
if ((ret = WaitForSingleObject(q->sem, 0)) == 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_ARCH_TIMEOUT;
|
||||
}
|
||||
}
|
||||
|
||||
#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) {
|
||||
if(rec.EventType == KEY_EVENT) {
|
||||
if(rec.Event.KeyEvent.bKeyDown) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
ReadConsoleInput(h, &rec, 1, &num);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
788
ext/lwip-contrib/ports/win32/test.c
Normal file
788
ext/lwip-contrib/ports/win32/test.c
Normal file
@@ -0,0 +1,788 @@
|
||||
/*
|
||||
* Copyright (c) 2001,2002 Florian Schulze.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the authors nor the names of the contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* test.c - This file is part of lwIP test
|
||||
*
|
||||
*/
|
||||
|
||||
/* C runtime includes */
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
|
||||
/* lwIP core includes */
|
||||
#include "lwip/opt.h"
|
||||
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/timeouts.h"
|
||||
#include "lwip/debug.h"
|
||||
#include "lwip/stats.h"
|
||||
#include "lwip/init.h"
|
||||
#include "lwip/tcpip.h"
|
||||
#include "lwip/netif.h"
|
||||
#include "lwip/api.h"
|
||||
|
||||
#include "lwip/tcp.h"
|
||||
#include "lwip/udp.h"
|
||||
#include "lwip/dns.h"
|
||||
#include "lwip/dhcp.h"
|
||||
#include "lwip/autoip.h"
|
||||
|
||||
/* lwIP netif includes */
|
||||
#include "lwip/etharp.h"
|
||||
#include "netif/ethernet.h"
|
||||
|
||||
/* applications includes */
|
||||
#include "lwip/apps/lwiperf.h"
|
||||
#include "lwip/apps/netbiosns.h"
|
||||
#include "lwip/apps/sntp.h"
|
||||
#include "lwip/apps/httpd.h"
|
||||
#include "lwip/apps/mdns.h"
|
||||
#include "lwip/apps/snmp.h"
|
||||
#include "apps/httpserver/httpserver-netconn.h"
|
||||
#include "apps/netio/netio.h"
|
||||
#include "apps/ping/ping.h"
|
||||
#include "apps/rtp/rtp.h"
|
||||
#include "apps/chargen/chargen.h"
|
||||
#include "apps/shell/shell.h"
|
||||
#include "apps/tcpecho/tcpecho.h"
|
||||
#include "apps/udpecho/udpecho.h"
|
||||
#include "apps/tcpecho_raw/tcpecho_raw.h"
|
||||
#include "apps/socket_examples/socket_examples.h"
|
||||
#include "apps/snmp_v3/snmpv3_dummy.h"
|
||||
|
||||
#if NO_SYS
|
||||
/* ... then we need information about the timer intervals: */
|
||||
#include "lwip/ip4_frag.h"
|
||||
#include "lwip/igmp.h"
|
||||
#endif /* NO_SYS */
|
||||
|
||||
#include "netif/ppp/ppp_opts.h"
|
||||
#if PPP_SUPPORT
|
||||
/* PPP includes */
|
||||
#include "lwip/sio.h"
|
||||
#include "netif/ppp/pppapi.h"
|
||||
#include "netif/ppp/pppos.h"
|
||||
#include "netif/ppp/pppoe.h"
|
||||
#if !NO_SYS && !LWIP_PPP_API
|
||||
#error With NO_SYS==0, LWIP_PPP_API==1 is required.
|
||||
#endif
|
||||
#endif /* PPP_SUPPORT */
|
||||
|
||||
/* include the port-dependent configuration */
|
||||
#include "lwipcfg_msvc.h"
|
||||
|
||||
/** Define this to 1 to enable a PCAP interface as default interface. */
|
||||
#ifndef USE_PCAPIF
|
||||
#define USE_PCAPIF 1
|
||||
#endif
|
||||
|
||||
/** Define this to 1 to enable a PPP interface. */
|
||||
#ifndef USE_PPP
|
||||
#define USE_PPP 0
|
||||
#endif
|
||||
|
||||
/** Define this to 1 or 2 to support 1 or 2 SLIP interfaces. */
|
||||
#ifndef USE_SLIPIF
|
||||
#define USE_SLIPIF 0
|
||||
#endif
|
||||
|
||||
/** Use an ethernet adapter? Default to enabled if PCAPIF or PPPoE are used. */
|
||||
#ifndef USE_ETHERNET
|
||||
#define USE_ETHERNET (USE_PCAPIF || PPPOE_SUPPORT)
|
||||
#endif
|
||||
|
||||
/** Use an ethernet adapter for TCP/IP? By default only if PCAPIF is used. */
|
||||
#ifndef USE_ETHERNET_TCPIP
|
||||
#define USE_ETHERNET_TCPIP (USE_PCAPIF)
|
||||
#endif
|
||||
|
||||
#if USE_ETHERNET
|
||||
#include "pcapif.h"
|
||||
#endif /* USE_ETHERNET */
|
||||
#if USE_SLIPIF
|
||||
#include <netif/slipif.h>
|
||||
#endif /* USE_SLIPIF */
|
||||
|
||||
#ifndef USE_DHCP
|
||||
#define USE_DHCP LWIP_DHCP
|
||||
#endif
|
||||
#ifndef USE_AUTOIP
|
||||
#define USE_AUTOIP LWIP_AUTOIP
|
||||
#endif
|
||||
|
||||
/* globales variables for netifs */
|
||||
#if USE_ETHERNET
|
||||
/* THE ethernet interface */
|
||||
struct netif netif;
|
||||
#if LWIP_DHCP
|
||||
/* dhcp struct for the ethernet netif */
|
||||
struct dhcp netif_dhcp;
|
||||
#endif /* LWIP_DHCP */
|
||||
#if LWIP_AUTOIP
|
||||
/* autoip struct for the ethernet netif */
|
||||
struct autoip netif_autoip;
|
||||
#endif /* LWIP_AUTOIP */
|
||||
#endif /* USE_ETHERNET */
|
||||
#if USE_PPP
|
||||
/* THE PPP PCB */
|
||||
ppp_pcb *ppp;
|
||||
/* THE PPP interface */
|
||||
struct netif ppp_netif;
|
||||
/* THE PPP descriptor */
|
||||
u8_t sio_idx = 0;
|
||||
sio_fd_t ppp_sio;
|
||||
#endif /* USE_PPP */
|
||||
#if USE_SLIPIF
|
||||
struct netif slipif1;
|
||||
#if USE_SLIPIF > 1
|
||||
struct netif slipif2;
|
||||
#endif /* USE_SLIPIF > 1 */
|
||||
#endif /* USE_SLIPIF */
|
||||
|
||||
|
||||
#if USE_PPP
|
||||
static void
|
||||
pppLinkStatusCallback(ppp_pcb *pcb, int errCode, void *ctx)
|
||||
{
|
||||
struct netif *pppif = ppp_netif(pcb);
|
||||
LWIP_UNUSED_ARG(ctx);
|
||||
|
||||
switch(errCode) {
|
||||
case PPPERR_NONE: { /* No error. */
|
||||
printf("pppLinkStatusCallback: PPPERR_NONE\n");
|
||||
#if LWIP_IPV4
|
||||
printf(" our_ipaddr = %s\n", ip4addr_ntoa(netif_ip4_addr(pppif)));
|
||||
printf(" his_ipaddr = %s\n", ip4addr_ntoa(netif_ip4_gw(pppif)));
|
||||
printf(" netmask = %s\n", ip4addr_ntoa(netif_ip4_netmask(pppif)));
|
||||
#endif /* LWIP_IPV4 */
|
||||
#if LWIP_DNS
|
||||
printf(" dns1 = %s\n", ipaddr_ntoa(dns_getserver(0)));
|
||||
printf(" dns2 = %s\n", ipaddr_ntoa(dns_getserver(1)));
|
||||
#endif /* LWIP_DNS */
|
||||
#if PPP_IPV6_SUPPORT
|
||||
printf(" our6_ipaddr = %s\n", ip6addr_ntoa(netif_ip6_addr(pppif, 0)));
|
||||
#endif /* PPP_IPV6_SUPPORT */
|
||||
break;
|
||||
}
|
||||
case PPPERR_PARAM: { /* Invalid parameter. */
|
||||
printf("pppLinkStatusCallback: PPPERR_PARAM\n");
|
||||
break;
|
||||
}
|
||||
case PPPERR_OPEN: { /* Unable to open PPP session. */
|
||||
printf("pppLinkStatusCallback: PPPERR_OPEN\n");
|
||||
break;
|
||||
}
|
||||
case PPPERR_DEVICE: { /* Invalid I/O device for PPP. */
|
||||
printf("pppLinkStatusCallback: PPPERR_DEVICE\n");
|
||||
break;
|
||||
}
|
||||
case PPPERR_ALLOC: { /* Unable to allocate resources. */
|
||||
printf("pppLinkStatusCallback: PPPERR_ALLOC\n");
|
||||
break;
|
||||
}
|
||||
case PPPERR_USER: { /* User interrupt. */
|
||||
printf("pppLinkStatusCallback: PPPERR_USER\n");
|
||||
break;
|
||||
}
|
||||
case PPPERR_CONNECT: { /* Connection lost. */
|
||||
printf("pppLinkStatusCallback: PPPERR_CONNECT\n");
|
||||
break;
|
||||
}
|
||||
case PPPERR_AUTHFAIL: { /* Failed authentication challenge. */
|
||||
printf("pppLinkStatusCallback: PPPERR_AUTHFAIL\n");
|
||||
break;
|
||||
}
|
||||
case PPPERR_PROTOCOL: { /* Failed to meet protocol. */
|
||||
printf("pppLinkStatusCallback: PPPERR_PROTOCOL\n");
|
||||
break;
|
||||
}
|
||||
case PPPERR_PEERDEAD: { /* Connection timeout */
|
||||
printf("pppLinkStatusCallback: PPPERR_PEERDEAD\n");
|
||||
break;
|
||||
}
|
||||
case PPPERR_IDLETIMEOUT: { /* Idle Timeout */
|
||||
printf("pppLinkStatusCallback: PPPERR_IDLETIMEOUT\n");
|
||||
break;
|
||||
}
|
||||
case PPPERR_CONNECTTIME: { /* Max connect time reached */
|
||||
printf("pppLinkStatusCallback: PPPERR_CONNECTTIME\n");
|
||||
break;
|
||||
}
|
||||
case PPPERR_LOOPBACK: { /* Loopback detected */
|
||||
printf("pppLinkStatusCallback: PPPERR_LOOPBACK\n");
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
printf("pppLinkStatusCallback: unknown errCode %d\n", errCode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if PPPOS_SUPPORT
|
||||
static u32_t
|
||||
ppp_output_cb(ppp_pcb *pcb, u8_t *data, u32_t len, void *ctx)
|
||||
{
|
||||
LWIP_UNUSED_ARG(pcb);
|
||||
LWIP_UNUSED_ARG(ctx);
|
||||
return sio_write(ppp_sio, data, len);
|
||||
}
|
||||
#endif /* PPPOS_SUPPORT */
|
||||
#endif /* USE_PPP */
|
||||
|
||||
#if LWIP_NETIF_STATUS_CALLBACK
|
||||
static void
|
||||
status_callback(struct netif *state_netif)
|
||||
{
|
||||
if (netif_is_up(state_netif)) {
|
||||
#if LWIP_IPV4
|
||||
printf("status_callback==UP, local interface IP is %s\n", ip4addr_ntoa(netif_ip4_addr(state_netif)));
|
||||
#else
|
||||
printf("status_callback==UP\n");
|
||||
#endif
|
||||
#if LWIP_MDNS_RESPONDER
|
||||
mdns_resp_netif_settings_changed(state_netif);
|
||||
#endif
|
||||
} else {
|
||||
printf("status_callback==DOWN\n");
|
||||
}
|
||||
}
|
||||
#endif /* LWIP_NETIF_STATUS_CALLBACK */
|
||||
|
||||
#if LWIP_NETIF_LINK_CALLBACK
|
||||
static void
|
||||
link_callback(struct netif *state_netif)
|
||||
{
|
||||
if (netif_is_link_up(state_netif)) {
|
||||
printf("link_callback==UP\n");
|
||||
} else {
|
||||
printf("link_callback==DOWN\n");
|
||||
}
|
||||
}
|
||||
#endif /* LWIP_NETIF_LINK_CALLBACK */
|
||||
|
||||
/* This function initializes all network interfaces */
|
||||
static void
|
||||
msvc_netif_init(void)
|
||||
{
|
||||
#if LWIP_IPV4 && USE_ETHERNET
|
||||
ip4_addr_t ipaddr, netmask, gw;
|
||||
#endif /* LWIP_IPV4 && USE_ETHERNET */
|
||||
#if USE_SLIPIF
|
||||
u8_t num_slip1 = 0;
|
||||
#if LWIP_IPV4
|
||||
ip4_addr_t ipaddr_slip1, netmask_slip1, gw_slip1;
|
||||
#endif
|
||||
#if USE_SLIPIF > 1
|
||||
u8_t num_slip2 = 1;
|
||||
#if LWIP_IPV4
|
||||
ip4_addr_t ipaddr_slip2, netmask_slip2, gw_slip2;
|
||||
#endif
|
||||
#endif /* USE_SLIPIF > 1 */
|
||||
#endif /* USE_SLIPIF */
|
||||
#if USE_DHCP || USE_AUTOIP
|
||||
err_t err;
|
||||
#endif
|
||||
|
||||
#if USE_PPP
|
||||
const char *username = NULL, *password = NULL;
|
||||
#ifdef PPP_USERNAME
|
||||
username = PPP_USERNAME;
|
||||
#endif
|
||||
#ifdef PPP_PASSWORD
|
||||
password = PPP_PASSWORD;
|
||||
#endif
|
||||
printf("ppp_connect: COM%d\n", (int)sio_idx);
|
||||
#if PPPOS_SUPPORT
|
||||
ppp_sio = sio_open(sio_idx);
|
||||
if (ppp_sio == NULL) {
|
||||
printf("sio_open error\n");
|
||||
} else {
|
||||
ppp = pppos_create(&ppp_netif, ppp_output_cb, pppLinkStatusCallback, NULL);
|
||||
if (ppp == NULL) {
|
||||
printf("pppos_create error\n");
|
||||
} else {
|
||||
ppp_set_auth(ppp, PPPAUTHTYPE_ANY, username, password);
|
||||
ppp_connect(ppp, 0);
|
||||
}
|
||||
}
|
||||
#endif /* PPPOS_SUPPORT */
|
||||
#endif /* USE_PPP */
|
||||
|
||||
#if USE_ETHERNET
|
||||
#if LWIP_IPV4
|
||||
#define NETIF_ADDRS &ipaddr, &netmask, &gw,
|
||||
ip4_addr_set_zero(&gw);
|
||||
ip4_addr_set_zero(&ipaddr);
|
||||
ip4_addr_set_zero(&netmask);
|
||||
#if USE_ETHERNET_TCPIP
|
||||
#if USE_DHCP
|
||||
printf("Starting lwIP, local interface IP is dhcp-enabled\n");
|
||||
#elif USE_AUTOIP
|
||||
printf("Starting lwIP, local interface IP is autoip-enabled\n");
|
||||
#else /* USE_DHCP */
|
||||
LWIP_PORT_INIT_GW(&gw);
|
||||
LWIP_PORT_INIT_IPADDR(&ipaddr);
|
||||
LWIP_PORT_INIT_NETMASK(&netmask);
|
||||
printf("Starting lwIP, local interface IP is %s\n", ip4addr_ntoa(&ipaddr));
|
||||
#endif /* USE_DHCP */
|
||||
#endif /* USE_ETHERNET_TCPIP */
|
||||
#else /* LWIP_IPV4 */
|
||||
#define NETIF_ADDRS
|
||||
printf("Starting lwIP, IPv4 disable\n");
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
#if NO_SYS
|
||||
netif_set_default(netif_add(&netif, NETIF_ADDRS NULL, pcapif_init, netif_input));
|
||||
#else /* NO_SYS */
|
||||
netif_set_default(netif_add(&netif, NETIF_ADDRS NULL, pcapif_init, tcpip_input));
|
||||
#endif /* NO_SYS */
|
||||
#if LWIP_IPV6
|
||||
netif_create_ip6_linklocal_address(&netif, 1);
|
||||
printf("ip6 linklocal address: ");
|
||||
ip6_addr_debug_print(0xFFFFFFFF & ~LWIP_DBG_HALT, netif_ip6_addr(&netif, 0));
|
||||
printf("\n");
|
||||
#endif /* LWIP_IPV6 */
|
||||
#if LWIP_NETIF_STATUS_CALLBACK
|
||||
netif_set_status_callback(&netif, status_callback);
|
||||
#endif /* LWIP_NETIF_STATUS_CALLBACK */
|
||||
#if LWIP_NETIF_LINK_CALLBACK
|
||||
netif_set_link_callback(&netif, link_callback);
|
||||
#endif /* LWIP_NETIF_LINK_CALLBACK */
|
||||
|
||||
#if USE_ETHERNET_TCPIP
|
||||
#if LWIP_AUTOIP
|
||||
autoip_set_struct(&netif, &netif_autoip);
|
||||
#endif /* LWIP_AUTOIP */
|
||||
#if LWIP_DHCP
|
||||
dhcp_set_struct(&netif, &netif_dhcp);
|
||||
#endif /* LWIP_DHCP */
|
||||
netif_set_up(&netif);
|
||||
#if USE_DHCP
|
||||
err = dhcp_start(&netif);
|
||||
LWIP_ASSERT("dhcp_start failed", err == ERR_OK);
|
||||
#elif USE_AUTOIP
|
||||
err = autoip_start(&netif);
|
||||
LWIP_ASSERT("autoip_start failed", err == ERR_OK);
|
||||
#endif /* USE_DHCP */
|
||||
#else /* USE_ETHERNET_TCPIP */
|
||||
/* Use ethernet for PPPoE only */
|
||||
netif.flags &= ~(NETIF_FLAG_ETHARP | NETIF_FLAG_IGMP); /* no ARP */
|
||||
netif.flags |= NETIF_FLAG_ETHERNET; /* but pure ethernet */
|
||||
#endif /* USE_ETHERNET_TCPIP */
|
||||
|
||||
#if USE_PPP && PPPOE_SUPPORT
|
||||
/* start PPPoE after ethernet netif is added! */
|
||||
ppp = pppoe_create(&ppp_netif, &netif, NULL, NULL, pppLinkStatusCallback, NULL);
|
||||
if (ppp == NULL) {
|
||||
printf("pppos_create error\n");
|
||||
} else {
|
||||
ppp_set_auth(ppp, PPPAUTHTYPE_ANY, username, password);
|
||||
ppp_connect(ppp, 0);
|
||||
}
|
||||
#endif /* USE_PPP && PPPOE_SUPPORT */
|
||||
|
||||
#endif /* USE_ETHERNET */
|
||||
#if USE_SLIPIF
|
||||
#if LWIP_IPV4
|
||||
#define SLIP1_ADDRS &ipaddr_slip1, &netmask_slip1, &gw_slip1,
|
||||
LWIP_PORT_INIT_SLIP1_IPADDR(&ipaddr_slip1);
|
||||
LWIP_PORT_INIT_SLIP1_GW(&gw_slip1);
|
||||
LWIP_PORT_INIT_SLIP1_NETMASK(&netmask_slip1);
|
||||
printf("Starting lwIP slipif, local interface IP is %s\n", ip4addr_ntoa(&ipaddr_slip1));
|
||||
#else
|
||||
#define SLIP1_ADDRS
|
||||
printf("Starting lwIP slipif\n");
|
||||
#endif
|
||||
#if defined(SIO_USE_COMPORT) && SIO_USE_COMPORT
|
||||
num_slip1++; /* COM ports cannot be 0-based */
|
||||
#endif
|
||||
netif_add(&slipif1, SLIP1_ADDRS &num_slip1, slipif_init, ip_input);
|
||||
#if !USE_ETHERNET
|
||||
netif_set_default(&slipif1);
|
||||
#endif /* !USE_ETHERNET */
|
||||
#if LWIP_IPV6
|
||||
netif_create_ip6_linklocal_address(&slipif1, 1);
|
||||
printf("SLIP ip6 linklocal address: ");
|
||||
ip6_addr_debug_print(0xFFFFFFFF & ~LWIP_DBG_HALT, netif_ip6_addr(&slipif1, 0));
|
||||
printf("\n");
|
||||
#endif /* LWIP_IPV6 */
|
||||
#if LWIP_NETIF_STATUS_CALLBACK
|
||||
netif_set_status_callback(&slipif1, status_callback);
|
||||
#endif /* LWIP_NETIF_STATUS_CALLBACK */
|
||||
#if LWIP_NETIF_LINK_CALLBACK
|
||||
netif_set_link_callback(&slipif1, link_callback);
|
||||
#endif /* LWIP_NETIF_LINK_CALLBACK */
|
||||
netif_set_up(&slipif1);
|
||||
|
||||
#if USE_SLIPIF > 1
|
||||
#if LWIP_IPV4
|
||||
#define SLIP2_ADDRS &ipaddr_slip2, &netmask_slip2, &gw_slip2,
|
||||
LWIP_PORT_INIT_SLIP2_IPADDR(&ipaddr_slip2);
|
||||
LWIP_PORT_INIT_SLIP2_GW(&gw_slip2);
|
||||
LWIP_PORT_INIT_SLIP2_NETMASK(&netmask_slip2);
|
||||
printf("Starting lwIP SLIP if #2, local interface IP is %s\n", ip4addr_ntoa(&ipaddr_slip2));
|
||||
#else
|
||||
#define SLIP2_ADDRS
|
||||
printf("Starting lwIP SLIP if #2\n");
|
||||
#endif
|
||||
#if defined(SIO_USE_COMPORT) && SIO_USE_COMPORT
|
||||
num_slip2++; /* COM ports cannot be 0-based */
|
||||
#endif
|
||||
netif_add(&slipif2, SLIP2_ADDRS &num_slip2, slipif_init, ip_input);
|
||||
#if LWIP_IPV6
|
||||
netif_create_ip6_linklocal_address(&slipif1, 1);
|
||||
printf("SLIP2 ip6 linklocal address: ");
|
||||
ip6_addr_debug_print(0xFFFFFFFF & ~LWIP_DBG_HALT, netif_ip6_addr(&slipif2, 0));
|
||||
printf("\n");
|
||||
#endif /* LWIP_IPV6 */
|
||||
#if LWIP_NETIF_STATUS_CALLBACK
|
||||
netif_set_status_callback(&slipif2, status_callback);
|
||||
#endif /* LWIP_NETIF_STATUS_CALLBACK */
|
||||
#if LWIP_NETIF_LINK_CALLBACK
|
||||
netif_set_link_callback(&slipif2, link_callback);
|
||||
#endif /* LWIP_NETIF_LINK_CALLBACK */
|
||||
netif_set_up(&slipif2);
|
||||
#endif /* USE_SLIPIF > 1*/
|
||||
#endif /* USE_SLIPIF */
|
||||
}
|
||||
|
||||
#if LWIP_DNS_APP && LWIP_DNS
|
||||
static void
|
||||
dns_found(const char *name, const ip_addr_t *addr, void *arg)
|
||||
{
|
||||
LWIP_UNUSED_ARG(arg);
|
||||
printf("%s: %s\n", name, addr ? ipaddr_ntoa(addr) : "<not found>");
|
||||
}
|
||||
|
||||
static void
|
||||
dns_dorequest(void *arg)
|
||||
{
|
||||
const char* dnsname = "3com.com";
|
||||
ip_addr_t dnsresp;
|
||||
LWIP_UNUSED_ARG(arg);
|
||||
|
||||
if (dns_gethostbyname(dnsname, &dnsresp, dns_found, 0) == ERR_OK) {
|
||||
dns_found(dnsname, &dnsresp, 0);
|
||||
}
|
||||
}
|
||||
#endif /* LWIP_DNS_APP && LWIP_DNS */
|
||||
|
||||
#if LWIP_LWIPERF_APP
|
||||
static void
|
||||
lwiperf_report(void *arg, enum lwiperf_report_type report_type,
|
||||
const ip_addr_t* local_addr, u16_t local_port, const ip_addr_t* remote_addr, u16_t remote_port,
|
||||
u32_t bytes_transferred, u32_t ms_duration, u32_t bandwidth_kbitpsec)
|
||||
{
|
||||
LWIP_UNUSED_ARG(arg);
|
||||
LWIP_UNUSED_ARG(local_addr);
|
||||
LWIP_UNUSED_ARG(local_port);
|
||||
|
||||
printf("IPERF report: type=%d, remote: %s:%d, total bytes: %lu, duration in ms: %lu, kbits/s: %lu\n",
|
||||
(int)report_type, ipaddr_ntoa(remote_addr), (int)remote_port, bytes_transferred, ms_duration, bandwidth_kbitpsec);
|
||||
}
|
||||
#endif /* LWIP_LWIPERF_APP */
|
||||
|
||||
#if LWIP_MDNS_RESPONDER
|
||||
static void srv_txt(struct mdns_service *service, void *txt_userdata)
|
||||
{
|
||||
err_t res = mdns_resp_add_service_txtitem(service, "path=/", 6);
|
||||
LWIP_ERROR("mdns add service txt failed\n", (res == ERR_OK), return);
|
||||
LWIP_UNUSED_ARG(txt_userdata);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* This function initializes applications */
|
||||
static void
|
||||
apps_init(void)
|
||||
{
|
||||
#if LWIP_DNS_APP && LWIP_DNS
|
||||
/* wait until the netif is up (for dhcp, autoip or ppp) */
|
||||
sys_timeout(5000, dns_dorequest, NULL);
|
||||
#endif /* LWIP_DNS_APP && LWIP_DNS */
|
||||
|
||||
#if LWIP_CHARGEN_APP && LWIP_SOCKET
|
||||
chargen_init();
|
||||
#endif /* LWIP_CHARGEN_APP && LWIP_SOCKET */
|
||||
|
||||
#if LWIP_PING_APP && LWIP_RAW && LWIP_ICMP
|
||||
ping_init(&netif.gw);
|
||||
#endif /* LWIP_PING_APP && LWIP_RAW && LWIP_ICMP */
|
||||
|
||||
#if LWIP_NETBIOS_APP && LWIP_UDP
|
||||
netbiosns_init();
|
||||
#ifndef NETBIOS_LWIP_NAME
|
||||
#if LWIP_NETIF_HOSTNAME
|
||||
netbiosns_set_name(netif_default->hostname);
|
||||
#else
|
||||
netbiosns_set_name("NETBIOSLWIPDEV");
|
||||
#endif
|
||||
#endif
|
||||
#endif /* LWIP_NETBIOS_APP && LWIP_UDP */
|
||||
|
||||
#if LWIP_HTTPD_APP && LWIP_TCP
|
||||
#ifdef LWIP_HTTPD_APP_NETCONN
|
||||
http_server_netconn_init();
|
||||
#else /* LWIP_HTTPD_APP_NETCONN */
|
||||
httpd_init();
|
||||
#endif /* LWIP_HTTPD_APP_NETCONN */
|
||||
#endif /* LWIP_HTTPD_APP && LWIP_TCP */
|
||||
|
||||
#if LWIP_MDNS_RESPONDER
|
||||
mdns_resp_init();
|
||||
#if LWIP_NETIF_HOSTNAME
|
||||
mdns_resp_add_netif(netif_default, netif_default->hostname, 3600);
|
||||
#else
|
||||
mdns_resp_add_netif(netif_default, "lwip", 3600);
|
||||
#endif
|
||||
mdns_resp_add_service(netif_default, "lwipweb", "_http", DNSSD_PROTO_TCP, HTTPD_SERVER_PORT, 3600, srv_txt, NULL);
|
||||
#endif
|
||||
|
||||
#if LWIP_NETIO_APP && LWIP_TCP
|
||||
netio_init();
|
||||
#endif /* LWIP_NETIO_APP && LWIP_TCP */
|
||||
|
||||
#if LWIP_RTP_APP && LWIP_SOCKET && LWIP_IGMP
|
||||
rtp_init();
|
||||
#endif /* LWIP_RTP_APP && LWIP_SOCKET && LWIP_IGMP */
|
||||
|
||||
#if LWIP_SNTP_APP
|
||||
sntp_init();
|
||||
#endif /* LWIP_SNTP_APP */
|
||||
|
||||
#if LWIP_SHELL_APP && LWIP_NETCONN
|
||||
shell_init();
|
||||
#endif /* LWIP_SHELL_APP && LWIP_NETCONN */
|
||||
#if LWIP_TCPECHO_APP
|
||||
#if LWIP_NETCONN && defined(LWIP_TCPECHO_APP_NETCONN)
|
||||
tcpecho_init();
|
||||
#else /* LWIP_NETCONN && defined(LWIP_TCPECHO_APP_NETCONN) */
|
||||
tcpecho_raw_init();
|
||||
#endif
|
||||
#endif /* LWIP_TCPECHO_APP && LWIP_NETCONN */
|
||||
#if LWIP_UDPECHO_APP && LWIP_NETCONN
|
||||
udpecho_init();
|
||||
#endif /* LWIP_UDPECHO_APP && LWIP_NETCONN */
|
||||
#if LWIP_LWIPERF_APP
|
||||
lwiperf_start_tcp_server_default(lwiperf_report, NULL);
|
||||
#endif
|
||||
#if LWIP_SOCKET_EXAMPLES_APP && LWIP_SOCKET
|
||||
socket_examples_init();
|
||||
#endif /* LWIP_SOCKET_EXAMPLES_APP && LWIP_SOCKET */
|
||||
#if LWIP_SNMP && LWIP_UDP
|
||||
#if LWIP_SNMP_V3
|
||||
snmpv3_dummy_init();
|
||||
#endif
|
||||
snmp_init();
|
||||
#endif /* LWIP_SNMP && LWIP_UDP */
|
||||
#ifdef LWIP_APP_INIT
|
||||
LWIP_APP_INIT();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* This function initializes this lwIP test. When NO_SYS=1, this is done in
|
||||
* the main_loop context (there is no other one), when NO_SYS=0, this is done
|
||||
* in the tcpip_thread context */
|
||||
static void
|
||||
test_init(void * arg)
|
||||
{ /* remove compiler warning */
|
||||
#if NO_SYS
|
||||
LWIP_UNUSED_ARG(arg);
|
||||
#else /* NO_SYS */
|
||||
sys_sem_t *init_sem;
|
||||
LWIP_ASSERT("arg != NULL", arg != NULL);
|
||||
init_sem = (sys_sem_t*)arg;
|
||||
#endif /* NO_SYS */
|
||||
|
||||
/* init randomizer again (seed per thread) */
|
||||
srand((unsigned int)time(0));
|
||||
|
||||
/* init network interfaces */
|
||||
msvc_netif_init();
|
||||
|
||||
/* init apps */
|
||||
apps_init();
|
||||
|
||||
#if !NO_SYS
|
||||
sys_sem_signal(init_sem);
|
||||
#endif /* !NO_SYS */
|
||||
}
|
||||
|
||||
/* This is somewhat different to other ports: we have a main loop here:
|
||||
* a dedicated task that waits for packets to arrive. This would normally be
|
||||
* done from interrupt context with embedded hardware, but we don't get an
|
||||
* interrupt in windows for that :-) */
|
||||
static void
|
||||
main_loop(void)
|
||||
{
|
||||
#if !NO_SYS
|
||||
err_t err;
|
||||
sys_sem_t init_sem;
|
||||
#endif /* NO_SYS */
|
||||
#if USE_PPP
|
||||
#if !USE_ETHERNET
|
||||
int count;
|
||||
u8_t rxbuf[1024];
|
||||
#endif
|
||||
volatile int callClosePpp = 0;
|
||||
#endif /* USE_PPP */
|
||||
|
||||
/* initialize lwIP stack, network interfaces and applications */
|
||||
#if NO_SYS
|
||||
lwip_init();
|
||||
test_init(NULL);
|
||||
#else /* NO_SYS */
|
||||
err = sys_sem_new(&init_sem, 0);
|
||||
LWIP_ASSERT("failed to create init_sem", err == ERR_OK);
|
||||
LWIP_UNUSED_ARG(err);
|
||||
tcpip_init(test_init, &init_sem);
|
||||
/* we have to wait for initialization to finish before
|
||||
* calling update_adapter()! */
|
||||
sys_sem_wait(&init_sem);
|
||||
sys_sem_free(&init_sem);
|
||||
#endif /* NO_SYS */
|
||||
|
||||
#if (LWIP_SOCKET || LWIP_NETCONN) && LWIP_NETCONN_SEM_PER_THREAD
|
||||
netconn_thread_init();
|
||||
#endif
|
||||
|
||||
/* MAIN LOOP for driver update (and timers if NO_SYS) */
|
||||
while (!lwip_win32_keypressed()) {
|
||||
#if NO_SYS
|
||||
/* handle timers (already done in tcpip.c when NO_SYS=0) */
|
||||
sys_check_timeouts();
|
||||
#endif /* NO_SYS */
|
||||
|
||||
#if USE_ETHERNET
|
||||
#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 */
|
||||
#else /* USE_ETHERNET */
|
||||
/* try to read characters from serial line and pass them to PPPoS */
|
||||
count = sio_read(ppp_sio, (u8_t*)rxbuf, 1024);
|
||||
if(count > 0) {
|
||||
pppos_input(ppp, rxbuf, count);
|
||||
} else {
|
||||
/* nothing received, give other tasks a chance to run */
|
||||
sys_msleep(1);
|
||||
}
|
||||
|
||||
#endif /* USE_ETHERNET */
|
||||
#if USE_SLIPIF
|
||||
slipif_poll(&slipif1);
|
||||
#if USE_SLIPIF > 1
|
||||
slipif_poll(&slipif2);
|
||||
#endif /* USE_SLIPIF > 1 */
|
||||
#endif /* USE_SLIPIF */
|
||||
#if ENABLE_LOOPBACK && !LWIP_NETIF_LOOPBACK_MULTITHREADING
|
||||
/* check for loopback packets on all netifs */
|
||||
netif_poll_all();
|
||||
#endif /* ENABLE_LOOPBACK && !LWIP_NETIF_LOOPBACK_MULTITHREADING */
|
||||
#if USE_PPP
|
||||
{
|
||||
int do_hup = 0;
|
||||
if(do_hup) {
|
||||
ppp_close(ppp, 1);
|
||||
do_hup = 0;
|
||||
}
|
||||
}
|
||||
if(callClosePpp && ppp) {
|
||||
/* make sure to disconnect PPP before stopping the program... */
|
||||
callClosePpp = 0;
|
||||
#if NO_SYS
|
||||
ppp_close(ppp, 0);
|
||||
#else
|
||||
pppapi_close(ppp, 0);
|
||||
#endif
|
||||
ppp = NULL;
|
||||
}
|
||||
#endif /* USE_PPP */
|
||||
}
|
||||
|
||||
#if USE_PPP
|
||||
if(ppp) {
|
||||
u32_t started;
|
||||
printf("Closing PPP connection...\n");
|
||||
/* make sure to disconnect PPP before stopping the program... */
|
||||
#if NO_SYS
|
||||
ppp_close(ppp, 0);
|
||||
#else
|
||||
pppapi_close(ppp, 0);
|
||||
#endif
|
||||
ppp = NULL;
|
||||
/* Wait for some time to let PPP finish... */
|
||||
started = sys_now();
|
||||
do
|
||||
{
|
||||
#if USE_ETHERNET && !PCAPIF_RX_USE_THREAD
|
||||
pcapif_poll(&netif);
|
||||
#else /* USE_ETHERNET && !PCAPIF_RX_USE_THREAD */
|
||||
sys_msleep(50);
|
||||
#endif /* USE_ETHERNET && !PCAPIF_RX_USE_THREAD */
|
||||
/* @todo: need a better check here: only wait until PPP is down */
|
||||
} while(sys_now() - started < 5000);
|
||||
}
|
||||
#endif /* USE_PPP */
|
||||
#if (LWIP_SOCKET || LWIP_NETCONN) && LWIP_NETCONN_SEM_PER_THREAD
|
||||
netconn_thread_cleanup();
|
||||
#endif
|
||||
#if USE_ETHERNET
|
||||
/* release the pcap library... */
|
||||
pcapif_shutdown(&netif);
|
||||
#endif /* USE_ETHERNET */
|
||||
}
|
||||
|
||||
#if USE_PPP && PPPOS_SUPPORT
|
||||
int main(int argc, char **argv)
|
||||
#else /* USE_PPP && PPPOS_SUPPORT */
|
||||
int main(void)
|
||||
#endif /* USE_PPP && PPPOS_SUPPORT */
|
||||
{
|
||||
#if USE_PPP && PPPOS_SUPPORT
|
||||
if(argc > 1) {
|
||||
sio_idx = (u8_t)atoi(argv[1]);
|
||||
}
|
||||
printf("Using serial port %d for PPP\n", sio_idx);
|
||||
#endif /* USE_PPP && PPPOS_SUPPORT */
|
||||
/* no stdio-buffering, please! */
|
||||
setvbuf(stdout, NULL,_IONBF, 0);
|
||||
|
||||
main_loop();
|
||||
|
||||
return 0;
|
||||
}
|
||||
4295
ext/lwip/CHANGELOG
4295
ext/lwip/CHANGELOG
File diff suppressed because it is too large
Load Diff
@@ -1,5 +0,0 @@
|
||||
src/ - The source code for the lwIP TCP/IP stack.
|
||||
doc/ - The documentation for lwIP.
|
||||
test/ - Some code to test whether the sources do what they should.
|
||||
|
||||
See also the FILES file in each subdirectory.
|
||||
100
ext/lwip/README
100
ext/lwip/README
@@ -1,100 +0,0 @@
|
||||
INTRODUCTION
|
||||
|
||||
lwIP is a small independent implementation of the TCP/IP protocol
|
||||
suite that has been developed by Adam Dunkels at the Computer and
|
||||
Networks Architectures (CNA) lab at the Swedish Institute of Computer
|
||||
Science (SICS).
|
||||
|
||||
The focus of the lwIP TCP/IP implementation is to reduce the RAM usage
|
||||
while still having a full scale TCP. This making lwIP suitable for use
|
||||
in embedded systems with tens of kilobytes of free RAM and room for
|
||||
around 40 kilobytes of code ROM.
|
||||
|
||||
|
||||
FEATURES
|
||||
|
||||
* IP (Internet Protocol, IPv4 and IPv6) including packet forwarding over
|
||||
multiple network interfaces
|
||||
* ICMP (Internet Control Message Protocol) for network maintenance and debugging
|
||||
* IGMP (Internet Group Management Protocol) for multicast traffic management
|
||||
* MLD (Multicast listener discovery for IPv6). Aims to be compliant with
|
||||
RFC 2710. No support for MLDv2
|
||||
* ND (Neighbor discovery and stateless address autoconfiguration for IPv6).
|
||||
Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862
|
||||
(Address autoconfiguration)
|
||||
* UDP (User Datagram Protocol) including experimental UDP-lite extensions
|
||||
* TCP (Transmission Control Protocol) with congestion control, RTT estimation
|
||||
and fast recovery/fast retransmit
|
||||
* raw/native API for enhanced performance
|
||||
* Optional Berkeley-like socket API
|
||||
* DNS (Domain names resolver)
|
||||
|
||||
|
||||
APPLICATIONS
|
||||
|
||||
* HTTP server with SSI and CGI
|
||||
* SNMPv2c agent with MIB compiler (Simple Network Management Protocol)
|
||||
* SNTP (Simple network time protocol)
|
||||
* NetBIOS name service responder
|
||||
* MDNS (Multicast DNS) responder
|
||||
* iPerf server implementation
|
||||
|
||||
|
||||
LICENSE
|
||||
|
||||
lwIP is freely available under a BSD license.
|
||||
|
||||
|
||||
DEVELOPMENT
|
||||
|
||||
lwIP has grown into an excellent TCP/IP stack for embedded devices,
|
||||
and developers using the stack often submit bug fixes, improvements,
|
||||
and additions to the stack to further increase its usefulness.
|
||||
|
||||
Development of lwIP is hosted on Savannah, a central point for
|
||||
software development, maintenance and distribution. Everyone can
|
||||
help improve lwIP by use of Savannah's interface, Git and the
|
||||
mailing list. A core team of developers will commit changes to the
|
||||
Git source tree.
|
||||
|
||||
The lwIP TCP/IP stack is maintained in the 'lwip' Git module and
|
||||
contributions (such as platform ports) are in the 'contrib' Git module.
|
||||
|
||||
See doc/savannah.txt for details on Git server access for users and
|
||||
developers.
|
||||
|
||||
The current Git trees are web-browsable:
|
||||
http://git.savannah.gnu.org/cgit/lwip.git
|
||||
http://git.savannah.gnu.org/cgit/lwip/lwip-contrib.git
|
||||
|
||||
Submit patches and bugs via the lwIP project page:
|
||||
http://savannah.nongnu.org/projects/lwip/
|
||||
|
||||
Continuous integration builds (GCC, clang):
|
||||
https://travis-ci.org/yarrick/lwip-merged
|
||||
|
||||
|
||||
DOCUMENTATION
|
||||
|
||||
Self documentation of the source code is regularly extracted from the current
|
||||
Git sources and is available from this web page:
|
||||
http://www.nongnu.org/lwip/
|
||||
|
||||
There is now a constantly growing wiki about lwIP at
|
||||
http://lwip.wikia.com/wiki/LwIP_Wiki
|
||||
|
||||
Also, there are mailing lists you can subscribe at
|
||||
http://savannah.nongnu.org/mail/?group=lwip
|
||||
plus searchable archives:
|
||||
http://lists.nongnu.org/archive/html/lwip-users/
|
||||
http://lists.nongnu.org/archive/html/lwip-devel/
|
||||
|
||||
lwIP was originally written by Adam Dunkels:
|
||||
http://dunkels.com/adam/
|
||||
|
||||
Reading Adam's papers, the files in docs/, browsing the source code
|
||||
documentation and browsing the mailing list archives is a good way to
|
||||
become familiar with the design of lwIP.
|
||||
|
||||
Adam Dunkels <adam@sics.se>
|
||||
Leon Woestenberg <leon.woestenberg@gmx.net>
|
||||
@@ -1,243 +0,0 @@
|
||||
This file lists major changes between release versions that require
|
||||
ports or applications to be changed. Use it to update a port or an
|
||||
application written for an older version of lwIP to correctly work
|
||||
with newer versions.
|
||||
|
||||
|
||||
(git master)
|
||||
|
||||
* [Enter new changes just after this line - do not remove this line]
|
||||
|
||||
(2.0.2)
|
||||
|
||||
++ Application changes:
|
||||
|
||||
* slipif: The way to pass serial port number has changed. netif->num is not
|
||||
supported any more, netif->state is interpreted as an u8_t port number now
|
||||
(it's not a POINTER to an u8_t any more!)
|
||||
|
||||
(2.0.1)
|
||||
|
||||
++ Application changes:
|
||||
|
||||
* UDP does NOT receive multicast traffic from ALL netifs on an UDP PCB bound to a specific
|
||||
netif any more. Users need to bind to IP_ADDR_ANY to receive multicast traffic and compare
|
||||
ip_current_netif() to the desired netif for every packet.
|
||||
See bug #49662 for an explanation.
|
||||
|
||||
(2.0.0)
|
||||
|
||||
++ Application changes:
|
||||
|
||||
* Changed netif "up" flag handling to be an administrative flag (as opposed to the previous meaning of
|
||||
"ip4-address-valid", a netif will now not be used for transmission if not up) -> even a DHCP netif
|
||||
has to be set "up" before starting the DHCP client
|
||||
* Added IPv6 support (dual-stack or IPv4/IPv6 only)
|
||||
* Changed ip_addr_t to be a union in dual-stack mode (use ip4_addr_t where referring to IPv4 only).
|
||||
* Major rewrite of SNMP (added MIB parser that creates code stubs for custom MIBs);
|
||||
supports SNMPv2c (experimental v3 support)
|
||||
* Moved some core applications from contrib repository to src/apps (and include/lwip/apps)
|
||||
|
||||
+++ Raw API:
|
||||
* Changed TCP listen backlog: removed tcp_accepted(), added the function pair tcp_backlog_delayed()/
|
||||
tcp_backlog_accepted() to explicitly delay backlog handling on a connection pcb
|
||||
|
||||
+++ Socket API:
|
||||
* Added an implementation for posix sendmsg()
|
||||
* Added LWIP_FIONREAD_LINUXMODE that makes ioctl/FIONREAD return the size of the next pending datagram
|
||||
|
||||
++ Port changes
|
||||
|
||||
+++ new files:
|
||||
* MANY new and moved files!
|
||||
* Added src/Filelists.mk for use in Makefile projects
|
||||
* Continued moving stack-internal parts from abc.h to abc_priv.h in sub-folder "priv"
|
||||
to let abc.h only contain the actual application programmer's API
|
||||
|
||||
+++ sys layer:
|
||||
* Made LWIP_TCPIP_CORE_LOCKING==1 the default as it usually performs better than
|
||||
the traditional message passing (although with LWIP_COMPAT_MUTEX you are still
|
||||
open to priority inversion, so this is not recommended any more)
|
||||
* Added LWIP_NETCONN_SEM_PER_THREAD to use one "op_completed" semaphore per thread
|
||||
instead of using one per netconn (these semaphores are used even with core locking
|
||||
enabled as some longer lasting functions like big writes still need to delay)
|
||||
* Added generalized abstraction for itoa(), strnicmp(), stricmp() and strnstr()
|
||||
in def.h (to be overridden in cc.h) instead of config
|
||||
options for netbiosns, httpd, dns, etc. ...
|
||||
* New abstraction for hton* and ntoh* functions in def.h.
|
||||
To override them, use the following in cc.h:
|
||||
#define lwip_htons(x) <your_htons>
|
||||
#define lwip_htonl(x) <your_htonl>
|
||||
|
||||
+++ new options:
|
||||
* TODO
|
||||
|
||||
+++ new pools:
|
||||
* Added LWIP_MEMPOOL_* (declare/init/alloc/free) to declare private memp pools
|
||||
that share memp.c code but do not have to be made global via lwippools.h
|
||||
* Added pools for IPv6, MPU_COMPATIBLE, dns-api, netif-api, etc.
|
||||
* added hook LWIP_HOOK_MEMP_AVAILABLE() to get informed when a memp pool was empty and an item
|
||||
is now available
|
||||
|
||||
* Signature of LWIP_HOOK_VLAN_SET macro was changed
|
||||
|
||||
* LWIP_DECLARE_MEMORY_ALIGNED() may be used to declare aligned memory buffers (mem/memp)
|
||||
or to move buffers to dedicated memory using compiler attributes
|
||||
|
||||
* Standard C headers are used to define sized types and printf formatters
|
||||
(disable by setting LWIP_NO_STDINT_H=1 or LWIP_NO_INTTYPES_H=1 if your compiler
|
||||
does not support these)
|
||||
|
||||
|
||||
++ Major bugfixes/improvements
|
||||
|
||||
* Added IPv6 support (dual-stack or IPv4/IPv6 only)
|
||||
* Major rewrite of PPP (incl. keep-up with apache pppd)
|
||||
see doc/ppp.txt for an upgrading how-to
|
||||
* Major rewrite of SNMP (incl. MIB parser)
|
||||
* Fixed timing issues that might have lead to losing a DHCP lease
|
||||
* Made rx processing path more robust against crafted errors
|
||||
* TCP window scaling support
|
||||
* modification of api modules to support FreeRTOS-MPU (don't pass stack-pointers to other threads)
|
||||
* made DNS client more robust
|
||||
* support PBUF_REF for RX packets
|
||||
* LWIP_NETCONN_FULLDUPLEX allows netconn/sockets to be used for reading/writing from separate
|
||||
threads each (needs LWIP_NETCONN_SEM_PER_THREAD)
|
||||
* Moved and reordered stats (mainly memp/mib2)
|
||||
|
||||
(1.4.0)
|
||||
|
||||
++ Application changes:
|
||||
|
||||
* Replaced struct ip_addr by typedef ip_addr_t (struct ip_addr is kept for
|
||||
compatibility to old applications, but will be removed in the future).
|
||||
|
||||
* Renamed mem_realloc() to mem_trim() to prevent confusion with realloc()
|
||||
|
||||
+++ Raw API:
|
||||
* Changed the semantics of tcp_close() (since it was rather a
|
||||
shutdown before): Now the application does *NOT* get any calls to the recv
|
||||
callback (aside from NULL/closed) after calling tcp_close()
|
||||
|
||||
* When calling tcp_abort() from a raw API TCP callback function,
|
||||
make sure you return ERR_ABRT to prevent accessing unallocated memory.
|
||||
(ERR_ABRT now means the applicaiton has called tcp_abort!)
|
||||
|
||||
+++ Netconn API:
|
||||
* Changed netconn_receive() and netconn_accept() to return
|
||||
err_t, not a pointer to new data/netconn.
|
||||
|
||||
+++ Socket API:
|
||||
* LWIP_SO_RCVTIMEO: when accept() or recv() time out, they
|
||||
now set errno to EWOULDBLOCK/EAGAIN, not ETIMEDOUT.
|
||||
|
||||
* Added a minimal version of posix fctl() to have a
|
||||
standardised way to set O_NONBLOCK for nonblocking sockets.
|
||||
|
||||
+++ all APIs:
|
||||
* correctly implemented SO(F)_REUSEADDR
|
||||
|
||||
++ Port changes
|
||||
|
||||
+++ new files:
|
||||
|
||||
* Added 4 new files: def.c, timers.c, timers.h, tcp_impl.h:
|
||||
|
||||
* Moved stack-internal parts of tcp.h to tcp_impl.h, tcp.h now only contains
|
||||
the actual application programmer's API
|
||||
|
||||
* Separated timer implementation from sys.h/.c, moved to timers.h/.c;
|
||||
Added timer implementation for NO_SYS==1, set NO_SYS_NO_TIMERS==1 if you
|
||||
still want to use your own timer implementation for NO_SYS==0 (as before).
|
||||
|
||||
+++ sys layer:
|
||||
|
||||
* Converted mbox- and semaphore-functions to take pointers to sys_mbox_t/
|
||||
sys_sem_t;
|
||||
|
||||
* Converted sys_mbox_new/sys_sem_new to take pointers and return err_t;
|
||||
|
||||
* Added Mutex concept in sys_arch (define LWIP_COMPAT_MUTEX to let sys.h use
|
||||
binary semaphores instead of mutexes - as before)
|
||||
|
||||
+++ new options:
|
||||
|
||||
* Don't waste memory when chaining segments, added option TCP_OVERSIZE to
|
||||
prevent creating many small pbufs when calling tcp_write with many small
|
||||
blocks of data. Instead, pbufs are allocated larger than needed and the
|
||||
space is used for later calls to tcp_write.
|
||||
|
||||
* Added LWIP_NETIF_TX_SINGLE_PBUF to always copy to try to create single pbufs
|
||||
in tcp_write/udp_send.
|
||||
|
||||
* Added an additional option LWIP_ETHERNET to support ethernet without ARP
|
||||
(necessary for pure PPPoE)
|
||||
|
||||
* Add MEMP_SEPARATE_POOLS to place memory pools in separate arrays. This may
|
||||
be used to place these pools into user-defined memory by using external
|
||||
declaration.
|
||||
|
||||
* Added TCP_SNDQUEUELOWAT corresponding to TCP_SNDLOWAT
|
||||
|
||||
+++ new pools:
|
||||
|
||||
* Netdb uses a memp pool for allocating memory when getaddrinfo() is called,
|
||||
so MEMP_NUM_NETDB has to be set accordingly.
|
||||
|
||||
* DNS_LOCAL_HOSTLIST_IS_DYNAMIC uses a memp pool instead of the heap, so
|
||||
MEMP_NUM_LOCALHOSTLIST has to be set accordingly.
|
||||
|
||||
* Snmp-agent uses a memp pools instead of the heap, so MEMP_NUM_SNMP_* have
|
||||
to be set accordingly.
|
||||
|
||||
* PPPoE uses a MEMP pool instead of the heap, so MEMP_NUM_PPPOE_INTERFACES
|
||||
has to be set accordingly
|
||||
|
||||
* Integrated loopif into netif.c - loopif does not have to be created by the
|
||||
port any more, just define LWIP_HAVE_LOOPIF to 1.
|
||||
|
||||
* Added define LWIP_RAND() for lwip-wide randomization (needs to be defined
|
||||
in cc.h, e.g. used by igmp)
|
||||
|
||||
* Added printf-formatter X8_F to printf u8_t as hex
|
||||
|
||||
* The heap now may be moved to user-defined memory by defining
|
||||
LWIP_RAM_HEAP_POINTER as a void pointer to that memory's address
|
||||
|
||||
* added autoip_set_struct() and dhcp_set_struct() to let autoip and dhcp work
|
||||
with user-allocated structs instead of calling mem_malloc
|
||||
|
||||
* Added const char* name to mem- and memp-stats for easier debugging.
|
||||
|
||||
* Calculate the TCP/UDP checksum while copying to only fetch data once:
|
||||
Define LWIP_CHKSUM_COPY to a memcpy-like function that returns the checksum
|
||||
|
||||
* Added SO_REUSE_RXTOALL to pass received UDP broadcast/multicast packets to
|
||||
more than one pcb.
|
||||
|
||||
* Changed the semantics of ARP_QUEUEING==0: ARP_QUEUEING now cannot be turned
|
||||
off any more, if this is set to 0, only one packet (the most recent one) is
|
||||
queued (like demanded by RFC 1122).
|
||||
|
||||
|
||||
++ Major bugfixes/improvements
|
||||
|
||||
* Implemented tcp_shutdown() to only shut down one end of a connection
|
||||
* Implemented shutdown() at socket- and netconn-level
|
||||
* Added errorset support to select() + improved select speed overhead
|
||||
* Merged pppd to v2.3.11 (including some backported bugfixes from 2.4.x)
|
||||
* Added timer implementation for NO_SYS==1 (may be disabled with NO_SYS_NO_TIMERS==1
|
||||
* Use macros defined in ip_addr.h to work with IP addresses
|
||||
* Implemented many nonblocking socket/netconn functions
|
||||
* Fixed ARP input processing: only add a new entry if a request was directed as us
|
||||
* mem_realloc() to mem_trim() to prevent confusion with realloc()
|
||||
* Some improvements for AutoIP (don't route/forward link-local addresses, don't break
|
||||
existing connections when assigning a routable address)
|
||||
* Correctly handle remote side overrunning our rcv_wnd in ooseq case
|
||||
* Removed packing from ip_addr_t, the packed version is now only used in protocol headers
|
||||
* Corrected PBUF_POOL_BUFSIZE for ports where ETH_PAD_SIZE > 0
|
||||
* Added support for static ARP table entries
|
||||
|
||||
(STABLE-1.3.2)
|
||||
|
||||
* initial version of this file
|
||||
@@ -1,9 +0,0 @@
|
||||
doxygen/ - Configuration files and scripts to create the lwIP doxygen source
|
||||
documentation (found at http://www.nongnu.org/lwip/)
|
||||
|
||||
savannah.txt - How to obtain the current development source code.
|
||||
contrib.txt - How to contribute to lwIP as a developer.
|
||||
rawapi.txt - The documentation for the core API of lwIP.
|
||||
Also provides an overview about the other APIs and multithreading.
|
||||
sys_arch.txt - The documentation for a system abstraction layer of lwIP.
|
||||
ppp.txt - Documentation of the PPP interface for lwIP.
|
||||
@@ -1,122 +0,0 @@
|
||||
void
|
||||
eth_mac_irq()
|
||||
{
|
||||
/* Service MAC IRQ here */
|
||||
|
||||
/* Allocate pbuf from pool (avoid using heap in interrupts) */
|
||||
struct pbuf* p = pbuf_alloc(PBUF_RAW, eth_data_count, PBUF_POOL);
|
||||
|
||||
if(p != NULL) {
|
||||
/* Copy ethernet frame into pbuf */
|
||||
pbuf_take(p, eth_data, eth_data_count);
|
||||
|
||||
/* Put in a queue which is processed in main loop */
|
||||
if(!queue_try_put(&queue, p)) {
|
||||
/* queue is full -> packet loss */
|
||||
pbuf_free(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static err_t
|
||||
netif_output(struct netif *netif, struct pbuf *p)
|
||||
{
|
||||
LINK_STATS_INC(link.xmit);
|
||||
|
||||
/* Update SNMP stats (only if you use SNMP) */
|
||||
MIB2_STATS_NETIF_ADD(netif, ifoutoctets, p->tot_len);
|
||||
int unicast = ((p->payload[0] & 0x01) == 0);
|
||||
if (unicast) {
|
||||
MIB2_STATS_NETIF_INC(netif, ifoutucastpkts);
|
||||
} else {
|
||||
MIB2_STATS_NETIF_INC(netif, ifoutnucastpkts);
|
||||
}
|
||||
|
||||
lock_interrupts();
|
||||
pbuf_copy_partial(p, mac_send_buffer, p->tot_len, 0);
|
||||
/* Start MAC transmit here */
|
||||
unlock_interrupts();
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
static void
|
||||
netif_status_callback(struct netif *netif)
|
||||
{
|
||||
printf("netif status changed %s\n", ip4addr_ntoa(netif_ip4_addr(netif)));
|
||||
}
|
||||
|
||||
static err_t
|
||||
netif_init(struct netif *netif)
|
||||
{
|
||||
netif->linkoutput = netif_output;
|
||||
netif->output = etharp_output;
|
||||
netif->output_ip6 = ethip6_output;
|
||||
netif->mtu = ETHERNET_MTU;
|
||||
netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET | NETIF_FLAG_IGMP | NETIF_FLAG_MLD6;
|
||||
MIB2_INIT_NETIF(netif, snmp_ifType_ethernet_csmacd, 100000000);
|
||||
|
||||
SMEMCPY(netif->hwaddr, your_mac_address_goes_here, sizeof(netif->hwaddr));
|
||||
netif->hwaddr_len = sizeof(netif->hwaddr);
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
void
|
||||
main(void)
|
||||
{
|
||||
struct netif netif;
|
||||
|
||||
lwip_init();
|
||||
|
||||
netif_add(&netif, IP4_ADDR_ANY, IP4_ADDR_ANY, IP4_ADDR_ANY, NULL, netif_init, netif_input);
|
||||
netif.name[0] = 'e';
|
||||
netif.name[1] = '0';
|
||||
netif_create_ip6_linklocal_address(&netif, 1);
|
||||
netif.ip6_autoconfig_enabled = 1;
|
||||
netif_set_status_callback(&netif, netif_status_callback);
|
||||
netif_set_default(&netif);
|
||||
netif_set_up(&netif);
|
||||
|
||||
/* Start DHCP and HTTPD */
|
||||
dhcp_start(&netif );
|
||||
httpd_init();
|
||||
|
||||
while(1) {
|
||||
/* Check link state, e.g. via MDIO communication with PHY */
|
||||
if(link_state_changed()) {
|
||||
if(link_is_up()) {
|
||||
netif_set_link_up(&netif);
|
||||
} else {
|
||||
netif_set_link_down(&netif);
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for received frames, feed them to lwIP */
|
||||
lock_interrupts();
|
||||
struct pbuf* p = queue_try_get(&queue);
|
||||
unlock_interrupts();
|
||||
|
||||
if(p != NULL) {
|
||||
LINK_STATS_INC(link.recv);
|
||||
|
||||
/* Update SNMP stats (only if you use SNMP) */
|
||||
MIB2_STATS_NETIF_ADD(netif, ifinoctets, p->tot_len);
|
||||
int unicast = ((p->payload[0] & 0x01) == 0);
|
||||
if (unicast) {
|
||||
MIB2_STATS_NETIF_INC(netif, ifinucastpkts);
|
||||
} else {
|
||||
MIB2_STATS_NETIF_INC(netif, ifinnucastpkts);
|
||||
}
|
||||
|
||||
if(netif.input(p, &netif) != ERR_OK) {
|
||||
pbuf_free(p);
|
||||
}
|
||||
}
|
||||
|
||||
/* Cyclic lwIP timers check */
|
||||
sys_check_timeouts();
|
||||
|
||||
/* your application goes here */
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
1 Introduction
|
||||
|
||||
This document describes some guidelines for people participating
|
||||
in lwIP development.
|
||||
|
||||
2 How to contribute to lwIP
|
||||
|
||||
Here is a short list of suggestions to anybody working with lwIP and
|
||||
trying to contribute bug reports, fixes, enhancements, platform ports etc.
|
||||
First of all as you may already know lwIP is a volunteer project so feedback
|
||||
to fixes or questions might often come late. Hopefully the bug and patch tracking
|
||||
features of Savannah help us not lose users' input.
|
||||
|
||||
2.1 Source code style:
|
||||
|
||||
1. do not use tabs.
|
||||
2. indentation is two spaces per level (i.e. per tab).
|
||||
3. end debug messages with a trailing newline (\n).
|
||||
4. one space between keyword and opening bracket.
|
||||
5. no space between function and opening bracket.
|
||||
6. one space and no newline before opening curly braces of a block.
|
||||
7. closing curly brace on a single line.
|
||||
8. spaces surrounding assignment and comparisons.
|
||||
9. don't initialize static and/or global variables to zero, the compiler takes care of that.
|
||||
10. use current source code style as further reference.
|
||||
|
||||
2.2 Source code documentation style:
|
||||
|
||||
1. JavaDoc compliant and Doxygen compatible.
|
||||
2. Function documentation above functions in .c files, not .h files.
|
||||
(This forces you to synchronize documentation and implementation.)
|
||||
3. Use current documentation style as further reference.
|
||||
|
||||
2.3 Bug reports and patches:
|
||||
|
||||
1. Make sure you are reporting bugs or send patches against the latest
|
||||
sources. (From the latest release and/or the current Git sources.)
|
||||
2. If you think you found a bug make sure it's not already filed in the
|
||||
bugtracker at Savannah.
|
||||
3. If you have a fix put the patch on Savannah. If it is a patch that affects
|
||||
both core and arch specific stuff please separate them so that the core can
|
||||
be applied separately while leaving the other patch 'open'. The preferred way
|
||||
is to NOT touch archs you can't test and let maintainers take care of them.
|
||||
This is a good way to see if they are used at all - the same goes for unix
|
||||
netifs except tapif.
|
||||
4. Do not file a bug and post a fix to it to the patch area. Either a bug report
|
||||
or a patch will be enough.
|
||||
If you correct an existing bug then attach the patch to the bug rather than creating a new entry in the patch area.
|
||||
5. Patches should be specific to a single change or to related changes. Do not mix bugfixes with spelling and other
|
||||
trivial fixes unless the bugfix is trivial too. Do not reorganize code and rename identifiers in the same patch you
|
||||
change behaviour if not necessary. A patch is easier to read and understand if it's to the point and short than
|
||||
if it's not to the point and long :) so the chances for it to be applied are greater.
|
||||
|
||||
2.4 Platform porters:
|
||||
|
||||
1. If you have ported lwIP to a platform (an OS, a uC/processor or a combination of these) and
|
||||
you think it could benefit others[1] you might want discuss this on the mailing list. You
|
||||
can also ask for Git access to submit and maintain your port in the contrib Git module.
|
||||
@@ -1 +0,0 @@
|
||||
doxygen lwip.Doxyfile
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
doxygen lwip.Doxyfile
|
||||
@@ -1,132 +0,0 @@
|
||||
/**
|
||||
* @defgroup lwip lwIP
|
||||
*
|
||||
* @defgroup infrastructure Infrastructure
|
||||
*
|
||||
* @defgroup callbackstyle_api Callback-style APIs
|
||||
* Non thread-safe APIs, callback style for maximum performance and minimum
|
||||
* memory footprint.
|
||||
*
|
||||
* @defgroup sequential_api Sequential-style APIs
|
||||
* Sequential-style APIs, blocking functions. More overhead, but can be called
|
||||
* from any thread except TCPIP thread.
|
||||
*
|
||||
* @defgroup addons Addons
|
||||
*
|
||||
* @defgroup apps Applications
|
||||
*/
|
||||
|
||||
/**
|
||||
* @mainpage Overview
|
||||
* @verbinclude "README"
|
||||
*/
|
||||
|
||||
/**
|
||||
* @page upgrading Upgrading
|
||||
* @verbinclude "UPGRADING"
|
||||
*/
|
||||
|
||||
/**
|
||||
* @page changelog Changelog
|
||||
* @verbinclude "CHANGELOG"
|
||||
*/
|
||||
|
||||
/**
|
||||
* @page contrib How to contribute to lwIP
|
||||
* @verbinclude "contrib.txt"
|
||||
*/
|
||||
|
||||
/**
|
||||
* @page pitfalls Common pitfalls
|
||||
*
|
||||
* Multiple Execution Contexts in lwIP code
|
||||
* ========================================
|
||||
*
|
||||
* The most common source of lwIP problems is to have multiple execution contexts
|
||||
* inside the lwIP code.
|
||||
*
|
||||
* lwIP can be used in two basic modes: @ref lwip_nosys (no OS/RTOS
|
||||
* running on target system) or @ref lwip_os (there is an OS running
|
||||
* on the target system).
|
||||
*
|
||||
* Mainloop Mode
|
||||
* -------------
|
||||
* In mainloop mode, only @ref callbackstyle_api can be used.
|
||||
* The user has two possibilities to ensure there is only one
|
||||
* exection context at a time in lwIP:
|
||||
*
|
||||
* 1) Deliver RX ethernet packets directly in interrupt context to lwIP
|
||||
* by calling netif->input directly in interrupt. This implies all lwIP
|
||||
* callback functions are called in IRQ context, which may cause further
|
||||
* problems in application code: IRQ is blocked for a long time, multiple
|
||||
* execution contexts in application code etc. When the application wants
|
||||
* to call lwIP, it only needs to disable interrupts during the call.
|
||||
* If timers are involved, even more locking code is needed to lock out
|
||||
* timer IRQ and ethernet IRQ from each other, assuming these may be nested.
|
||||
*
|
||||
* 2) Run lwIP in a mainloop. There is example code here: @ref lwip_nosys.
|
||||
* lwIP is _ONLY_ called from mainloop callstacks here. The ethernet IRQ
|
||||
* has to put received telegrams into a queue which is polled in the
|
||||
* mainloop. Ensure lwIP is _NEVER_ called from an interrupt, e.g.
|
||||
* some SPI IRQ wants to forward data to udp_send() or tcp_write()!
|
||||
*
|
||||
* OS Mode
|
||||
* -------
|
||||
* In OS mode, @ref callbackstyle_api AND @ref sequential_api can be used.
|
||||
* @ref sequential_api are designed to be called from threads other than
|
||||
* the TCPIP thread, so there is nothing to consider here.
|
||||
* But @ref callbackstyle_api functions must _ONLY_ be called from
|
||||
* TCPIP thread. It is a common error to call these from other threads
|
||||
* or from IRQ contexts. Ethernet RX needs to deliver incoming packets
|
||||
* in the correct way by sending a message to TCPIP thread, this is
|
||||
* implemented in tcpip_input().
|
||||
* Again, ensure lwIP is _NEVER_ called from an interrupt, e.g.
|
||||
* some SPI IRQ wants to forward data to udp_send() or tcp_write()!
|
||||
*
|
||||
* 1) tcpip_callback() can be used get called back from TCPIP thread,
|
||||
* it is safe to call any @ref callbackstyle_api from there.
|
||||
*
|
||||
* 2) Use @ref LWIP_TCPIP_CORE_LOCKING. All @ref callbackstyle_api
|
||||
* functions can be called when lwIP core lock is aquired, see
|
||||
* @ref LOCK_TCPIP_CORE() and @ref UNLOCK_TCPIP_CORE().
|
||||
* These macros cannot be used in an interrupt context!
|
||||
* Note the OS must correctly handle priority inversion for this.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @page bugs Reporting bugs
|
||||
* Please report bugs in the lwIP bug tracker at savannah.\n
|
||||
* BEFORE submitting, please check if the bug has already been reported!\n
|
||||
* https://savannah.nongnu.org/bugs/?group=lwip
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup lwip_nosys Mainloop mode ("NO_SYS")
|
||||
* @ingroup lwip
|
||||
* Use this mode if you do not run an OS on your system. \#define NO_SYS to 1.
|
||||
* Feed incoming packets to netif->input(pbuf, netif) function from mainloop,
|
||||
* *not* *from* *interrupt* *context*. You can allocate a @ref pbuf in interrupt
|
||||
* context and put them into a queue which is processed from mainloop.\n
|
||||
* Call sys_check_timeouts() periodically in the mainloop.\n
|
||||
* Porting: implement all functions in @ref sys_time, @ref sys_prot and
|
||||
* @ref compiler_abstraction.\n
|
||||
* You can only use @ref callbackstyle_api in this mode.\n
|
||||
* Sample code:\n
|
||||
* @include NO_SYS_SampleCode.c
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup lwip_os OS mode (TCPIP thread)
|
||||
* @ingroup lwip
|
||||
* Use this mode if you run an OS on your system. It is recommended to
|
||||
* use an RTOS that correctly handles priority inversion and
|
||||
* to use @ref LWIP_TCPIP_CORE_LOCKING.\n
|
||||
* Porting: implement all functions in @ref sys_layer.\n
|
||||
* You can use @ref callbackstyle_api together with @ref tcpip_callback,
|
||||
* and all @ref sequential_api.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @page raw_api lwIP API
|
||||
* @verbinclude "rawapi.txt"
|
||||
*/
|
||||
@@ -1,10 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Redirection</title>
|
||||
<meta http-equiv="refresh" content="0; url=html/index.html" />
|
||||
</head>
|
||||
<body>
|
||||
<a href="html/index.html">index.html</a>
|
||||
</body>
|
||||
</html>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user