Compare commits

...

3532 Commits

Author SHA1 Message Date
sg
33955c636d Set LWIP_VERSION_RC to RC1 2016-04-27 22:04:51 +02:00
Dirk Ziegelmeier
2e05856f90 Fix bug #47641: lwIP would accept IPv6 source addresses from the network that are mapped IPv4 adresses 2016-04-27 21:35:34 +02:00
Dirk Ziegelmeier
30e6f908ee Fix bug #47512: MPU_COMPATIBLE may fail on empty pool 2016-04-27 21:14:17 +02:00
Dirk Ziegelmeier
e653ac9db7 Remove netconn_recved() call - it was only needed in sockets implementation and contributed to bug #47512
Simon and I think it can be removed - the receive window handling get a little less precise, but that should be OK for a lightweight stack.
Receive window is now updated with the whole pbuf size (instead of only count of read bytes from socket) as soon as socket implementation gets a pbuf from netconn layer.
Work on bug #47512: MPU_COMPATIBLE may fail on empty pool (still not finished)
2016-04-27 21:02:16 +02:00
Dirk Ziegelmeier
21354af674 Work on bug #47512: MPU_COMPATIBLE may fail on empty pool (still not finished) 2016-04-27 12:49:06 +02:00
goldsimon
c981b726f8 fixed bug #47601 (wrong NS request at DAD) 2016-04-27 10:19:13 +02:00
Dirk Ziegelmeier
21e6e1c824 Fix compile errors found by Erik Ekman's Travis-CI 2016-04-26 22:09:23 +02:00
Dirk Ziegelmeier
b07031479c Revert "tcpip_send_msg_wait_sem() can return void now due to my last changes"
My brain was asleep

This reverts commit 475be665ff.
2016-04-26 22:03:18 +02:00
Dirk Ziegelmeier
475be665ff tcpip_send_msg_wait_sem() can return void now due to my last changes 2016-04-26 21:40:19 +02:00
Dirk Ziegelmeier
3d38af5174 Work on bug #47512: MPU_COMPATIBLE may fail on empty pool (not finished!) 2016-04-26 21:33:02 +02:00
Dirk Ziegelmeier
b28a80375b Fix bug #47446: tcpip api calls: fail if mbox is invalid instead of returning an error 2016-04-26 21:09:03 +02:00
Dirk Ziegelmeier
a5d4a27ae1 Fix compile warnings (==errors) in new httpd 2016-04-26 20:53:25 +02:00
goldsimon
afd9ee9147 fixed bug #47743 (Closing listening tcp pcb is not posible without assert) 2016-04-26 13:27:17 +02:00
Dirk Ziegelmeier
afd1bb938e Fix compile of Simon's last change on MSVC 2016-04-26 13:19:32 +02:00
goldsimon
025d5591eb httpd improvements: added persistent connections, improved asynchronous read mode, compile-time deflate compression, new CGI mode, SSI handler can be called with tag string (instead of tag index) 2016-04-26 13:00:27 +02:00
Dirk Ziegelmeier
7d77a52ea5 Fix compile when PPP is not enabled - Macro MEMP_NUM_PPP_PCB always needs to be #defined 2016-04-25 22:24:33 +02:00
Dirk Ziegelmeier
2b5250dd9d Fix bug #47507: PPP API does not support LWIP_MPU_COMPATIBLE
I'd be glad if someone would test it :-)
Sylvain, if you don't like this patch feel free to revert it
2016-04-25 21:23:14 +02:00
Dirk Ziegelmeier
8ce49499ae tcpip_priv.h: More API improvements 2016-04-25 21:21:16 +02:00
Dirk Ziegelmeier
5a123a3405 tcpip_priv.h: More flexible API by including return value in API_VAR_ALLOC macro 2016-04-25 21:00:28 +02:00
Dirk Ziegelmeier
0d0b935d3d tcpip_priv.h: Add helper macros for APIs that use private mempools 2016-04-25 20:51:26 +02:00
Dirk Ziegelmeier
2be86fbc3e Fix compile of api_lib.c when LWIP_MPU_COMPATIBLE is enabled 2016-04-25 20:50:14 +02:00
Dirk Ziegelmeier
bb908366a5 More PPP cleanups 2016-04-25 20:08:29 +02:00
Dirk Ziegelmeier
73d8f14ebd Fix compile when PPP is not enabled 2016-04-25 20:08:29 +02:00
Dirk Ziegelmeier
ffa340a68c task #13907: PPP cleanups: Move PPP mempools out of lwIP core to PPP code 2016-04-25 20:08:29 +02:00
Dirk Ziegelmeier
b8b83c2994 Move some definitions from tcpip_priv.h to better places since they are of "public interest" (LWIP core locking mode, watchdog trigger) 2016-04-23 10:24:17 +02:00
Dirk Ziegelmeier
4d1a2e6699 Fix projects without PPP do not compile any more 2016-04-22 06:24:01 +02:00
Sylvain Rochet
15fbfb7363 PPP, remove useless ppp_init function
Simon says:

ppp_init() does not seem to be used. The only thing it does is calling
magic_init(), which is not required because it its called again later
from ppp_input().

Also, the time from startup is rather constant, so calling sys_jiffies()
from ppp_init() does not create a random number.
2016-04-21 23:25:48 +02:00
Sylvain Rochet
54f7cae12c PPP, fix reserved identifier violation (removed leading underscores from header include guards) 2016-04-21 23:15:49 +02:00
Dirk Ziegelmeier
76d25befb4 Work on task #13907 PPP cleanups: Move PPP options from opt.h to dedicated ppp_opts.h file 2016-04-21 22:28:14 +02:00
Dirk Ziegelmeier
749f7fae1a Move PPP API files to netif/ppp subdir 2016-04-21 21:47:26 +02:00
Dirk Ziegelmeier
61d07f88f0 Fix bug #47749: #define ETHARP_TRUST_IP_MAC does not compile 2016-04-21 21:21:56 +02:00
Joel Cunningham
8ac1b4825a udp: use netif addr as src for multicast sockets
Sockets bound to a multicast address could not transmit multicast
packets because the pcb local address did not match the netif address
even if the outgoing netif was resolved correctly.

To correct the issue, pcbs with a multicast local address will use
the outgoing netif address as the source address in IPv4.
2016-04-18 16:36:13 -04:00
Dirk Ziegelmeier
87354abf0f snmpv3_mbedtls.c: snmpv3_crypt() is only needed when LWIP_SNMP_V3_CRYPTO is enabled 2016-04-14 08:26:29 +02:00
Dirk Ziegelmeier
0b6370b9b8 SNMPv3: Make receiving DES encrypted frames work, sending still fails because of broken padding 2016-04-11 22:04:28 +02:00
Dirk Ziegelmeier
92f5da8412 two minor fixes in snmpv3_mbedtls.c 2016-04-07 06:58:58 +02:00
Dirk Ziegelmeier
309e072238 Create new IP_IS_V4 macros and use them at instead of !IP_IS_V6 - since we now have an IPADDR_ANY_TYPE, just checking for !V6 does not mean it is V4 2016-04-06 22:31:31 +02:00
Dirk Ziegelmeier
ab2c65549d Avoid divisions / module in SNMP code on stupid compilers
Signed-off-by: goldsimon <goldsimon@gmx.de>
2016-04-06 11:16:54 +02:00
sg
ca1b8288de prepare for overriding current timeout implementation: all stack-internal caclic timers are avaliable in the lwip_cyclic_timers array 2016-04-05 23:01:57 +02:00
sg
8c7f513f4d patch #8358: allow more combinations of listening PCB for IPv6 2016-04-05 22:04:19 +02:00
sg
16c70dd60e fixed bug# 43739 (Accept not reporting errors about aborted connections): netconn_accept() returns ERR_ABRT (sockets: ECONNABORTED) for aborted connections, ERR_CLSD (sockets: EINVAL) if the listening netconn is closed, which better seems to follow the standard 2016-04-05 21:42:10 +02:00
sg
03e9c88488 fixed bug #47625 (Error in compilation of C++ source using netifapi macros) by changing NULL define for __cplusplus 2016-04-05 21:04:06 +02:00
sg
0731eda0b3 make autoip_supplied_address() take a const pointer, too 2016-04-05 20:38:11 +02:00
Dirk Ziegelmeier
083c6123d6 snmpv3_dummy.c: Add newline at end of file 2016-04-05 13:18:54 +02:00
Dirk Ziegelmeier
12a4cae404 Apply [patch #8969] from Freddie Chopin: Constify netif in dhcp_supplied_address() 2016-04-05 13:18:27 +02:00
Dirk Ziegelmeier
3a26e8b6cc Fix build when snmpv3 is not available. One more thanks, Erik :-) 2016-04-04 22:10:59 +02:00
Dirk Ziegelmeier
28652d4d51 Fix build when mbedtls is not available :-) Thanks Erik! 2016-04-04 22:07:50 +02:00
Dirk Ziegelmeier
b67427bd3b Commit Elias Oenal's SNMPv3 work, with some restructuring:
- The abstraction from crypto framework was not well suitable to MBEDTLS, so I decided to move everything into an own file.
- I removed several #defines and created function prototypes instead - this is more type-safe, and users don't need to reinvent the function signatures.
- Header files were splitted into a public and a private part.
- Only SNMPv3 authentication was tested, privacy not yet.
2016-04-04 18:55:32 +02:00
Dirk Ziegelmeier
3a7c998f91 Fix bug #47592: pppapi_do_ppp_set_notify_phase_callback has invalid parameter type
... and one more I missed in my conversion yesterday
2016-04-01 10:38:27 +02:00
Dirk Ziegelmeier
141aeaab3d Fix shadowing warning (when compiling in C++) in TCPIP call API. Reported by Freddie Chopin. 2016-03-31 19:52:20 +02:00
Dirk Ziegelmeier
c8b65f6c1d Fix #define IPADDR_STRLEN_MAX in IPv6 only and dual-stack case 2016-03-30 11:20:54 +02:00
Dirk Ziegelmeier
d70d9bf866 SNTP: Add function to get SNTP enabled state 2016-03-30 11:20:16 +02:00
Dirk Ziegelmeier
4bd57882b0 Fix SNMP compile on Win32 due to missing #includes 2016-03-29 16:51:33 +02:00
Dirk Ziegelmeier
52fdc6bb3e Partly apply Elias Oenal's SNMP V3 patch, part 2: Add SNMPv3 support routines. Crypto does not work yet. 2016-03-29 10:28:33 +02:00
Dirk Ziegelmeier
d0c3baf340 Partly apply Elias Oenal's SNMP V3 patch. There is more to come, the work is incomplete at the moment and does not compile when LWIP_SNMP_V3 is enabled. 2016-03-29 10:28:33 +02:00
Dirk Ziegelmeier
6f43057662 Update changelog 2016-03-29 10:28:33 +02:00
Dirk Ziegelmeier
d8784a77b7 Fix bug #47556: snmp agent uses wrong err 'ERR_ABRT' - use ERR_ARG as old code. Was tested to be != ERR_OK only, so actual code did not matter 2016-03-28 16:57:36 +02:00
sg
27f03798b9 Fixed possible problems with tcp_backlog_delayed/tcp_backlog_accepted 2016-03-25 16:19:39 +01:00
goldsimon
5b0a47ca87 removed unused return values of tcp_listen_input & tcp_timewait_input; fixed unused variable warning 2016-03-24 15:06:31 +01:00
Dirk Ziegelmeier
9b0a0841e9 Fix compile of snmp/snmp_mib2.c - don't know why I didn't notice yesterday... 2016-03-24 14:31:33 +01:00
goldsimon
0b4bc5ea31 minor whitespace change only 2016-03-24 07:15:27 +01:00
Dirk Ziegelmeier
cab341976e SNMP: Reduce #includes of snmp_mib2.c 2016-03-23 22:36:02 +01:00
Dirk Ziegelmeier
52a3bf5d43 SNMP: Cleanups after my last changes 2016-03-23 22:32:47 +01:00
Dirk Ziegelmeier
63c2dc926e SNMP: Move MIB2 ip subtree to separate file to get snmp_mib2.c smaller 2016-03-23 22:32:47 +01:00
Dirk Ziegelmeier
cc477361ad SNMP: Move MIB2 system subtree to separate file to get snmp_mib2.c smaller 2016-03-23 22:32:47 +01:00
Dirk Ziegelmeier
377885581f SNMP: Move MIB2 interfaces subtree to separate file to get snmp_mib2.c smaller 2016-03-23 22:32:47 +01:00
Dirk Ziegelmeier
7321420d8c SNMP: Move MIB2 ICMP subtree to separate file to get snmp_mib2.c smaller 2016-03-23 22:32:47 +01:00
Dirk Ziegelmeier
9466d64a9a SNMP: Move MIB2 TCP subtree to separate file to get snmp_mib2.c smaller 2016-03-23 22:32:47 +01:00
Dirk Ziegelmeier
d929a4b17e SNMP: Move MIB2 UDP subtree to separate file to get snmp_mib2.c smaller 2016-03-23 22:32:46 +01:00
Dirk Ziegelmeier
945607e094 SNMP: Move MIB2 SNMP subtree to separate file to get snmp_mib2.c smaller 2016-03-23 22:32:46 +01:00
sg
7721b20179 call accept-callback with ERR_MEM when allocating a pcb fails on passive open to inform the application about this error; ATTENTION: applications have to handle NULL pcb in accept callback! 2016-03-23 21:57:38 +01:00
sg
c6b742812d fixed bug #38203: DHCP options are not recorded in all DHCP ack messages (patch by Florent Matignon) 2016-03-23 21:06:52 +01:00
goldsimon
85d5fbdc7f lwip_accept: fixed returning EOPNOTSUPP instead of -1 (EOPNOTSUPP is set as socket error) 2016-03-23 14:27:40 +01:00
Axel Lin
449fc98a55 tcp_alloc(): Remove superfluous initialization for pcb->keep_cnt_sent
It's already done by memset(0). This was missed in commit 5794ac2340
"tcp_alloc(): remove explicit =0 already done by memset(0)", fix it.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-03-23 14:26:32 +01:00
Dirk Ziegelmeier
7e7f2f31ff Cleanup and simplify tcpip_api_call() implementation a bit 2016-03-22 21:52:11 +01:00
Dirk Ziegelmeier
a1fc91afa8 Fix newly introduced tcpip_api_call did not return correct return value 2016-03-22 21:34:05 +01:00
goldsimon
c39ef75cb3 ... and another compiler error: tcp_nagle_enable() must stay at tcpflags_t, not using u16_t 2016-03-22 15:58:00 +01:00
goldsimon
7bda462031 fixed wrong commit: compatibility-define tcp_accepted() was accidentally commented-out 2016-03-22 15:54:14 +01:00
Dirk Ziegelmeier
f97bf85fd6 udp.c: Allow udp_connect() on a dual-stack UDP PCB (type IPADDR_TYPE_ANY). This may be useful in some applications - no need to keep separate storage for target IP. 2016-03-22 15:12:16 +01:00
Dirk Ziegelmeier
a9c7ead6b7 Update git ignore list for LwipMibCompiler 2016-03-22 15:07:07 +01:00
sg
dd80759bb9 tcp: changed accept handling to be done internally: the application does not have to call tcp_accepted() any more. Instead, when delaying accept (e.g. sockets do), call tcp_backlog_delayed()/tcp_backlog_accepted() (fixes bug #46696) 2016-03-22 07:30:44 +01:00
sg
a1c78ea7bf ignore dns response parsing errors, only abort resolving for correct responses or error responses from correct server (bug #47459) 2016-03-22 07:22:17 +01:00
sg
5794ac2340 tcp_alloc(): remove explicit =0 already done by memset(0) 2016-03-18 22:05:17 +01:00
sg
44e1a2d8e2 define tcp_backlog_set() as dummy-define when backlog feature is disable 2016-03-18 20:05:04 +01:00
Joel Cunningham
3a62a45bcd Fix year in recent CHANGELOG entries
The year in the recent bugfix entries was 2013 instead of 2016
2016-03-18 10:09:25 -05:00
sg
149bb36805 fixed bug #47448 (netconn/socket leak if RST is received during close) 2016-03-17 21:49:01 +01:00
Joel Cunningham
93ccba9bcb don't fail closing a socket/netconn when failing to allocate the FIN segment; blocking the calling thread for a while is better than risking leaking a netconn/socket (see bug #46701)
Signed-off-by: sg <goldsimon@gmx.de>
2016-03-17 21:00:18 +01:00
sg
b24e5cd1c8 fixed compiling netconn_write_partly with LWIP_SO_SNDTIMEO==1 after recent api implementation changes (bug #47436, patch by William Hayes) 2016-03-17 20:15:22 +01:00
Dirk Ziegelmeier
7fbb5fc82a Fix netconn API in core locking mode 2016-03-17 09:31:50 +01:00
Dirk Ziegelmeier
464a8c9794 Delete script to compile MOBA MIB 2016-03-17 08:27:45 +01:00
Dirk Ziegelmeier
7aea739f87 PPPAPI: Don't return garbage in *_create calls in case tcpip_api_call() fails;
Let some functions return err_t instead of void because tcpip_api_call() may fail
2016-03-16 23:01:05 +01:00
sg
852d5b9c80 Optimize tcp_output runtime by not calling ip_route() for every segment sent 2016-03-16 22:31:33 +01:00
sg
b4d7238eb8 tcp_output_segment: don't count retransmitted segments in mib2.tcpoutsegs by detecting p->payload != tcphdr pointer; don't try to retransmit segments where p->ref != 1 (as it is invalid to mess up p->len/p->payload when we don't have exclusive access to the pbuf) 2016-03-16 22:22:20 +01:00
Dirk Ziegelmeier
ee87d28252 Rename tcpip_apimsg to netconn_apimsg (better suits naming convention in api_lib.c) 2016-03-16 22:02:47 +01:00
Dirk Ziegelmeier
6ffe12cede Readd struct protoype in api.h 2016-03-16 21:57:25 +01:00
Dirk Ziegelmeier
d6adc1f6cb Rename tcpip_send_api_msg to tcpip_send_msg_wait_sem (hopefully a little bit clearer name) 2016-03-16 21:57:24 +01:00
sg
5f8b5cbb20 reset rto timer on fast retransmission (see task #13757, patch by Joel Cunningham) 2016-03-16 21:49:37 +01:00
sg
7b9cb98bbb LWIP_TCPIP_CORE_LOCKING_INPUT is not experimental any more, as well 2016-03-16 21:48:47 +01:00
Dirk Ziegelmeier
222eb25eb5 Accidentally committed my MIB compiler test, sorry! 2016-03-16 21:38:22 +01:00
Dirk Ziegelmeier
dbfdb13166 LwipMibCompiler: Set MIB compiler as startup project instead of MIB viewer 2016-03-16 21:35:21 +01:00
Dirk Ziegelmeier
d38cdccbcd netconn API: Remove api_msg wrapper struct, it is not needed any more 2016-03-16 21:35:21 +01:00
Dirk Ziegelmeier
2575c7fb5f netconn API: Cleanup, remove lots of #defines, take advantage of new tcpip_send_api_msg function feature to abstract core locking away 2016-03-16 21:35:21 +01:00
Dirk Ziegelmeier
ea174560b1 tcpip.c tcpip_send_api_msg: Handle core locking case internally 2016-03-16 21:35:21 +01:00
Dirk Ziegelmeier
bc51dddcaf Add some comments to functions and #defines. According to Simon, LWIP core locking is not experimental any more. 2016-03-16 21:35:21 +01:00
sg
f09dec5fb7 ethernetif.c: implement SNMP counters, simplify input function: no need to check ethType, ethernet_input() already does this 2016-03-16 21:26:31 +01:00
sg
8e8571da6a fixed bug #46384 Segment size calculation bug with MSS != TCP_MSS 2016-03-16 16:56:15 +01:00
Dirk Ziegelmeier
0d576aa521 Fix bug #47426 incorrect typecast in pppapi.c 2016-03-16 12:37:08 +01:00
goldsimon
0e1b401abe sntp: fixed constness for SNTP_SERVER_DNS==1 2016-03-14 14:29:26 +01:00
Dirk Ziegelmeier
bf7fc41e0f LwipMibCompiler: Add windows command line example 2016-03-14 12:13:44 +01:00
Dirk Ziegelmeier
90bc1da434 LwipMibCompiler: Don't generate empty root nodes 2016-03-14 12:13:24 +01:00
Dirk Ziegelmeier
dc98e31e4d LwipMibCompiler: MibTree: Adapt coding style to the rest of the C# project 2016-03-14 12:13:05 +01:00
Dirk Ziegelmeier
1d7996dc47 tcpip API calls: Implement LWIP_NETCONN_SEM_PER_THREAD support for ALL API calls 2016-03-13 19:43:49 +01:00
Dirk Ziegelmeier
2b3db52c70 pppol2tp.c: Avoid an #ifdef - there is a new UDP API function that can be used here 2016-03-12 12:26:23 +01:00
Jan Breuer
b65a22b32a LwipMibCompiler: Don't preserve upper case on generated variables 2016-03-12 09:09:26 +01:00
Jan Breuer
b849e52c17 LwipMibCompiler: preserve upper case in comments 2016-03-12 09:09:22 +01:00
Jan Breuer
588b11185a LwipMibCompiler: Remove false positive root entities 2016-03-12 09:05:19 +01:00
Jan Breuer
dfc963880a LwipMibCompiler: Fix generating SnmpScalarArrayNode callbacks 2016-03-12 09:03:41 +01:00
Dirk Ziegelmeier
00975769a0 Minor TCPIP API call functions cleanup 2016-03-10 22:44:31 +01:00
Dirk Ziegelmeier
f7a3d6cca5 Port PPP API to new simple tcpip API call method 2016-03-10 22:44:25 +01:00
Dirk Ziegelmeier
8f71795844 Port netifapi to new simple tcpip API call method 2016-03-10 22:42:21 +01:00
Dirk Ziegelmeier
8106413644 tcpip.c: Implement an easier way for TCPIP API calls - client code does not have to deal with semaphores and core locking any more 2016-03-10 22:42:21 +01:00
sg
5e472badf1 Work on bug #44595: remove check for recvmbox != NULL from netconn_recv() to let it return ERR_CLSD for half-closed TCP connections 2016-03-10 21:20:25 +01:00
Axel Lin
2a2f92f7c2 Make ERR_IS_FATAL() test first fatal error instead of last non-fatal error
This way, we don't need to update ERR_IS_FATAL() every time new non-fatal error
is added. Also drop 2 empty lines so the error constants present in 2 groups,
non-fatal errors and fatal errors.
2016-03-10 07:21:34 +01:00
Dirk Ziegelmeier
f3b7bca3cf Fix bug #47370: Port DNS client to IPv6 2016-03-09 19:25:06 +01:00
Dirk Ziegelmeier
9fbf5a4004 SNMP: Support LWIP_TCPIP_CORE_LOCKING sync method 2016-03-09 08:39:56 +01:00
sg
5d637360cc fixed ERR_IS_FATAL() after changing ERR_IF to non-fatal 2016-03-08 21:04:21 +01:00
Dirk Ziegelmeier
7d8f0c781f Fix wrong usage of LWIP_NETCONN_SEM_PER_THREAD macro in api_msg.h 2016-03-08 19:53:37 +01:00
Dirk Ziegelmeier
a212210c35 Add missing #include in memp.c 2016-03-08 19:53:01 +01:00
Dirk Ziegelmeier
ba40925335 tcpip_send_api_msg function is only needed in non-core-locking mode 2016-03-08 19:41:32 +01:00
Dirk Ziegelmeier
eab92ccb03 netifapi: Eliminate wrapper struct netifapi_msg and rename netifapi_msg_msg to netifapi_msg 2016-03-08 19:41:32 +01:00
Dirk Ziegelmeier
fc17d02451 Fix compile with LWIP_TCPIP_CORE_LOCKING 2016-03-08 19:41:32 +01:00
Dirk Ziegelmeier
37d514c949 Minor cleanups in #includes and comments 2016-03-08 19:41:32 +01:00
Dirk Ziegelmeier
a4297ef0fd Reduce includes of tcpip_priv.h 2016-03-08 19:41:32 +01:00
Dirk Ziegelmeier
c65eca58c9 Decouple tcpip.c/tcpip_priv.h from netconn API 2016-03-08 19:41:32 +01:00
Dirk Ziegelmeier
18bb74e5c5 Decouple tcpip.c/tcpip_priv.h from PPP API
PPP API can now be moved to netif/ppp subdir
2016-03-08 19:41:32 +01:00
Dirk Ziegelmeier
af1978fa4e Implement generic API message handling
Add generic tcpip_send_api_msg function
Let netif API and netconn API use it
Decouple tcpip.c and tcpip_priv.h from netif API
2016-03-08 19:41:32 +01:00
sg
5cf802eda0 dns_gethostbyname: return error code if no valid server is set instead of calling the 'found' callback in this case (fixes bug #46887) 2016-03-07 19:47:39 +01:00
Joel Cunningham
80cc988f2f Optimize sendmsg UDP pbuf chain creation
This commit optimizes the sendmsg UDP pbuf chain creation by not
allocating/freeing a netbuf per io vector and instead building a pbuf
chain directly in the sockets layer
2016-03-07 09:26:58 -06:00
sg
076795562e fixed typo in one of the last commits 2016-03-06 20:59:50 +01:00
sg
f5fef6eebc fixed bug #45353: IPv6 router / neighbor relationship is not always consistent - patch by Stian Sebastian Skjelstad 2016-03-06 14:48:41 +01:00
sg
375ec36246 ERR_IF is not necessarily a fatal error (fixes bug #46338: UDP netconns block after fatal error) 2016-03-05 16:15:04 +01:00
sg
b00a17059a fixed icmp_send_response with LWIP_HOOK_IP4_ROUTE_SRC enabled 2016-03-05 15:57:40 +01:00
Dirk Ziegelmeier
bcab7fef84 netifapi.c: Fix compile when IPv4 is not enabled 2016-03-05 15:55:53 +01:00
sg
d2bb569ee4 bug #46094: moved IPv4 routing hook functions down so that they implement actual routing (source-based IPv4 routing is not affected by this change) 2016-03-05 15:52:39 +01:00
Dirk Ziegelmeier
52b426a343 ip_addr.h: Use IP_GET_TYPE macro in other macros 2016-03-05 14:35:29 +01:00
Dirk Ziegelmeier
f4fbc90217 netifapi: Do not pass NULL pointers for IP addresses to subsequent functions
Same as in my last commits - this avoids errors in lwIP code where ip addresses are dereferenced (e.g. for IP type checking) without handling thinking about NULL pointers.
2016-03-05 14:35:29 +01:00
sg
e0ab8c581d fixed bug #46093: Move IP6_ROUTE() hook to after LL processing 2016-03-05 14:11:24 +01:00
Dirk Ziegelmeier
094cdf1c7b netconn: Create API macros to get/set IPV6ONLY flag 2016-03-04 23:06:33 +01:00
Dirk Ziegelmeier
814577fcc6 snmp: Fix snmp_oid_to_ip for IPADDR_ANY_TYPE ips 2016-03-04 22:46:54 +01:00
Dirk Ziegelmeier
15925b66c6 Fix ip_addr_cmp to correctly compare IPADDR_ANY_TYPE ips 2016-03-04 22:46:18 +01:00
Dirk Ziegelmeier
925b280fd2 Apply patch from Elias Önal to fix a few datatypes in SNMP MIB2 2016-03-04 22:35:09 +01:00
sg
6b405eccd0 Tried to fix bug #47270 by accepting all ipv4 multicast packets (at IP level) when LWIP_IGMP is disabled 2016-03-04 21:57:47 +01:00
goldsimon
15326cdbad Added macro to get the ip address type 2016-03-04 09:07:50 +01:00
Dirk Ziegelmeier
bd0b51c9ef Fix my previous netconn_do_listen changes in lwip_netconn_do_listen 2016-03-03 23:16:01 +01:00
Dirk Ziegelmeier
9a4c66006e Fix compile error in raw.c (possible unused arg) 2016-03-03 22:55:42 +01:00
Dirk Ziegelmeier
1c52780b62 snmp_netconn: Use new "socket-like" netconn API dual-stack implementation 2016-03-03 22:52:43 +01:00
Dirk Ziegelmeier
bee5515e9a netconn API: Reimplement dual-stack API to be socket-like.
When IPv6 ANY address is used and the NETCONN_FLAG_IPV6_V6ONLY is NOT set, bind/listen on/to IP_ANY_TYPE
2016-03-03 22:52:04 +01:00
Dirk Ziegelmeier
0a7f404d09 api_lib.c: Don't propagate NULL pointers as ip address to subsequent functions 2016-03-03 22:49:55 +01:00
Dirk Ziegelmeier
1dea649cff Fix comment in tcp.c 2016-03-03 22:48:10 +01:00
Dirk Ziegelmeier
7396d8818b Implement dual-stack in RAW API in the same way as in UDP and TCP 2016-03-03 22:47:27 +01:00
Dirk Ziegelmeier
2d80af1dcb Minor code cleanup in udp.c 2016-03-03 22:44:01 +01:00
Dirk Ziegelmeier
b5cd90a342 Add compatibility macro for tcp_new_ip6() 2016-03-03 21:04:00 +01:00
Dirk Ziegelmeier
5358380c5f Apply patch from Derek Pravala: Fix segfault in ip6_route when there is no default netif 2016-03-03 16:12:20 +01:00
Dirk Ziegelmeier
eead3a7038 Simon says: dual-stack does not work on iperf because there IPs encoded in the payloads and IPv6 is not supported there in the current lwIP implementation -> revert 2016-03-03 13:06:55 +01:00
Dirk Ziegelmeier
ce370ec48f Compile fix lwiperf.c after my last change 2016-03-03 12:23:34 +01:00
Dirk Ziegelmeier
24ebf6bd6f Implement dual-stack in lwiperf, netbiosns and sntp 2016-03-03 12:15:57 +01:00
Dirk Ziegelmeier
b0d4386744 Adapt HTTP server to new dual-stack API 2016-03-02 23:47:09 +01:00
Dirk Ziegelmeier
0c673b6a44 Implement new style TCP dual-stack in netconn API 2016-03-02 23:46:22 +01:00
Dirk Ziegelmeier
e89b48d23f raw.c: Avoid NULL pointer dereference 2016-03-02 23:44:51 +01:00
Dirk Ziegelmeier
f9ce31f98b TCP: Implement dual stack support using new IP_ANY_TYPE introduced at UDP 2016-03-02 23:14:33 +01:00
Dirk Ziegelmeier
bd131e5e4b ip_addr.h: Update ip_addr_copy macro to correctly copy new IP_ANY_TYPE address 2016-03-02 23:11:34 +01:00
Dirk Ziegelmeier
f3132c5290 udp: Fix possible NULL pointer dereference, update comments 2016-03-02 23:10:43 +01:00
Dirk Ziegelmeier
babb247e2a SNMP MIB2: Fix temporary OID buffer size some tables have been too small 2016-03-02 23:09:51 +01:00
Dirk Ziegelmeier
cc4f94f415 lowpan6: Fix incorrect array bounds check (found by Coverity) 2016-03-02 19:45:15 +01:00
Dirk Ziegelmeier
9885d5d9f5 Apply patch from Simon to fix buffer overflow handling tcp_in.c which was discovered by Coverity 2016-02-29 23:34:52 +01:00
Dirk Ziegelmeier
8e5663a32f Minor: Avoid ip_input() call indirection for when only IPv4 or IPv6 are enabled 2016-02-29 22:17:42 +01:00
Dirk Ziegelmeier
4bbfc3857a Implement dual-stack in SNMP for netconn API 2016-02-29 19:31:19 +01:00
Dirk Ziegelmeier
5404ce3c0a Implement support for UDP IP_ANY_TYPE in netconn API 2016-02-29 19:31:19 +01:00
Dirk Ziegelmeier
2289673a30 Implement support for IP_ANY_TYPE in SNMP 2016-02-29 19:31:19 +01:00
Dirk Ziegelmeier
6aed6e659f Rework DHCP PCB handling: Old code registered one UDP PCB per netif where DHCP was active and there was a special case in udp_input() for this. New implementation uses one PCB for all netifs and removes special case in udp_input().
The old approach called udp_bind() on each of the PCBs, which puts them into udp_pcbs list. The PCBs were iterated on all non-DHCP udp_inputs() with no effect.
My cleanup removes the special handling in udp.c, and uses only one DHCP UDP PCB to catch all DHCP messages from all netifs. The dhcp_recv function then checks whether ip_current_input_netif() has DHCP enabled - if not, the message is ignored. The PCB is only created/registered when one or more PCBs have DHCP enabled.
2016-02-29 19:31:19 +01:00
Dirk Ziegelmeier
42c92f80f1 Add compatibility macro for udp_new_ip6() 2016-02-29 13:25:13 +01:00
goldsimon
fa16ee8dcb cleaned up includes a bit after IPv6 changes 2016-02-29 09:27:59 +01:00
Dirk Ziegelmeier
70f3e5ed05 Cleanup: Create new file ip.c and move dual-stack code from ipv4 and ipv6 folder in there 2016-02-26 23:04:51 +01:00
Dirk Ziegelmeier
2dc8f59bf4 Fix compile when PPPOE is enabled 2016-02-26 22:50:44 +01:00
Dirk Ziegelmeier
d5778bad2f No need for dual-stack code in ip4.c and icmp.c -> use ip4 only versions 2016-02-26 22:50:20 +01:00
goldsimon
81c8121551 minor: fixed compiler warning "unary minus operator is applied to an unsigned expression" 2016-02-26 15:23:04 +01:00
goldsimon
97b7555119 bring back ETHARP_HWADDR_LEN (if anyone uses it) 2016-02-26 14:21:03 +01:00
Dirk Ziegelmeier
a5214abd04 udp: udp_send and udp_send_chksum: Check for PCB NULL pointer and PCB must not be the new IP_ANY_TYPE, but a real IPv4 and IPv6 address 2016-02-26 09:20:50 +01:00
goldsimon
bf8bcfafe2 revert accidentally committed comment from a649a3eb50 2016-02-26 08:59:50 +01:00
Joel Cunningham
8cb64698aa Allow backlog to be updated
This commit adds support to the sockets and netconn layer to update the
backlog by calling listen when the netconn is already in the listen state.
When backlog is not enabled, the call returns successfully

This commit also introduces a macro for setting the backlog value that
prevents a 0 sized (invalid) backlog
2016-02-25 15:19:52 -06:00
sg
163d7f9791 added ethernet.c to Filelists.mk 2016-02-25 22:11:16 +01:00
sg
a649a3eb50 dual-stack fix: moved common definitions/code for ethernet used by etharp and ethip6 to new files ethernet.h/.c 2016-02-25 22:10:28 +01:00
Joel Cunningham
2a8398dfb8 Fix bug in FIONREAD handling in LINUXMODE
Fix a bug in the socket API's ioctl for FIONREAD. If the socket's
lastdata was assigned the function returned without error but did not
update the argument pointer.

The cast type for argp was also changed to int to conform with the
other SO_RCVBUF handling.
2016-02-25 12:53:12 -06:00
Dirk Ziegelmeier
fd891081c4 minor: Cleanups in raw/tcp/udp code by using macros and reducing #ifdefs 2016-02-24 23:04:25 +01:00
Dirk Ziegelmeier
953b7bdd59 Implement UDP dual-stack PCB support
Create special IP address type "IPADDR_TYPE_ANY" for it.
SNMP uses new feature in non-netconn mode.

TODO: Same for TCP & RAW, adapt NETCONN to use this feature
2016-02-24 22:37:01 +01:00
sg
1dde3d6e56 Fixed bug #46524: "Device as dhcp server does not work after upgrade to lwip-1.4.1" 2016-02-24 22:13:58 +01:00
sg
ec49b68b38 minor: udp_input/local_match: coding style, added comments 2016-02-24 22:04:59 +01:00
sg
68590c2b27 minor/coding style: lowpan6_opts.h: tabs->spaces, trim trailing spaces 2016-02-24 22:03:40 +01:00
Dirk Ziegelmeier
ac4b089b18 udp.c: Further udp_input simplifications
- Move local PCB matching code in a function that can be reused in SO_REUSE && SO_REUSE_RXTOALL case.
- Some checks have been written in the dual-stack version and then repeated with the ipv6-only version. Example:
IPv6 only: ip6_addr_ismulticast(ip6_current_dest_addr())
IPv4 AND IPv6: ip_addr_ismulticast(ip_current_dest_addr())
2016-02-24 19:57:20 +01:00
Dirk Ziegelmeier
005c196ed8 udp.c: Simplify and cleanup input PCB matching 2016-02-24 19:13:30 +01:00
Dirk Ziegelmeier
3b5803ec9a sys.h: Avoid un #defined LWIP_COMPAT_MUTEX macro (usually #defined in arch/sys_arch.h) 2016-02-23 15:49:58 +01:00
Dirk Ziegelmeier
fd4a109ffa lowpan6.c: Implement SNMP counters 2016-02-23 13:01:46 +01:00
Dirk Ziegelmeier
481d350bf3 lwip/stats.h: Add some comments to MIB2 variables to explain correct usage a bit 2016-02-23 12:08:31 +01:00
Dirk Ziegelmeier
d121ea84d0 Add note about 6LoWPAN in src/netif/FILES 2016-02-23 11:46:28 +01:00
goldsimon
a5ac41c203 lowpan6: fixed compiler warning when casting u16_t to u8_t 2016-02-23 11:28:54 +01:00
goldsimon
e4457335b8 minor: tried to fix coding style in lowpan6.c 2016-02-23 10:36:16 +01:00
Dirk Ziegelmeier
680f8f31ab I don't know why I have a diff here (I guess line ending problems like in my last lowpan6.c commit)... 2016-02-23 10:20:05 +01:00
Dirk Ziegelmeier
6650eb4cd2 snmp_traps.c: Fix compile on Win32 - missing string.h include
Catch possible strlen returnvalue > 0xffff
2016-02-23 10:06:46 +01:00
Dirk Ziegelmeier
799fe7a5ba Fix shadowing warning in lowpan6.c - found by Erik Ekman's Travis CI
https://travis-ci.org/yarrick/lwip-merged
2016-02-23 08:58:34 +01:00
Dirk Ziegelmeier
9a4d7b9956 Use netif_input_fn typedef instead of creating a new one in tcpip.h 2016-02-22 21:10:50 +01:00
Dirk Ziegelmeier
fe8d2ba72f Eliminate tcpip_pppos_input function 2016-02-22 21:00:00 +01:00
Dirk Ziegelmeier
e90591bb78 Add note to CHANGELOG about 6LoWPAN 2016-02-22 20:46:15 +01:00
Dirk Ziegelmeier
e2a3565971 Initial import of Ivan Delamer's 6LoWPAN implementation with slight modifications to allow compiling in IPv6 only mode 2016-02-22 20:44:32 +01:00
Dirk Ziegelmeier
aeab047ede slipif: Fix compile when only IPv6 is enabled 2016-02-22 20:43:32 +01:00
Dirk Ziegelmeier
777e667f08 Add generic tcpip_inpkt function that can be called to make last changes really usable 2016-02-22 20:18:10 +01:00
Dirk Ziegelmeier
fa6f068fd1 Eliminate TCPIP_MSG_INPKT_PPPOS message type.
Fix my last commit, I accidentally unchecked the wrong file in commit dialog
2016-02-22 17:47:01 +01:00
Dirk Ziegelmeier
439ae629e0 Change TCPIP INPKT API message to take a function pointer. Allows integration of other protocols without extending lwIP core (e.g. 6LoWPAN)
Remove unused sem member of struct tcpip_msg
2016-02-22 17:39:01 +01:00
Dirk Ziegelmeier
17fad79f71 Two compile fixes after eliminating isipv6 member in PCBs 2016-02-22 17:07:17 +01:00
Dirk Ziegelmeier
d8531a2407 Cleanup NETCONNTYPE_ISIPV6 macro 2016-02-22 13:55:27 +01:00
Dirk Ziegelmeier
c805843e64 Change signature of ip_output, ip_output_if, ip_output_if_src, ip_output_hinted, ip_route, ip_netif_get_local_ip, ip_route_get_local_ip and tcp_eff_send_mss not to take an isipv6 parameter. Use the IP version of the destination address instead. 2016-02-22 13:38:40 +01:00
Dirk Ziegelmeier
880f1008d6 Together with Simon: Eliminate last instances of isipv6 member in pcbs;
Don't allow NULL pointers (IPv4 ANY) in connect() and sendto() functions as destinations since this does not make sense.
2016-02-22 13:03:51 +01:00
Dirk Ziegelmeier
be9cd800b0 Review with Simon: Init TCP/UDP/RAW PCBs with correct IP types in _new functions to make my changes work correct 2016-02-22 11:16:13 +01:00
Dirk Ziegelmeier
0106cf7ae0 Review with Simon: Remove dead code (since 2003) 2016-02-22 10:18:19 +01:00
Dirk Ziegelmeier
50303eea23 Reduce PCB_ISIPV6 macro usage some more 2016-02-21 19:59:08 +01:00
Dirk Ziegelmeier
339e82d7aa Eliminate IP_PCB_IPVER_EQ macro 2016-02-21 19:45:51 +01:00
Dirk Ziegelmeier
5a25652c21 Eliminate IP_PCB_IPVER_INPUT_MATCH macro 2016-02-21 19:21:36 +01:00
Dirk Ziegelmeier
8f675c37fc Reduce usage of PCB IP version flag in UDP code. Maybe we can figure out a good way for dual-stack UDP when we manage to remove the flag (nearly) entirely from the code. 2016-02-20 20:54:58 +01:00
Dirk Ziegelmeier
5809b01388 Reduce usage of PCB IP version flag in raw and tcp code. Maybe we can figure out a good way for dual-stack UDP when we manage to remove the flag (nearly) entirely from the code. 2016-02-20 20:40:04 +01:00
Dirk Ziegelmeier
f104d68569 PPP: Init SNMP members of PPP netifs 2016-02-19 23:51:18 +01:00
Dirk Ziegelmeier
10edba936b Fix tcp pcb access after it was freed in tcp.c - found by Coverity 2016-02-19 23:28:09 +01:00
Dirk Ziegelmeier
bbb5e99f25 Fix netconn access after it was freed in lwiperf - found by Coverity 2016-02-19 23:26:06 +01:00
Joel Cunningham
ea94549cb2 Optimize lwip_selscan()
This makes a couple of simple re-arrangements in lwip_selscan() that
should improve performance in the following ways:

  1) The old code linearly walked all sockets to maxfd regardless of
     whether they were set in the fd set. The process involved
     acquiring sys arch protect, looking up the socket, and then
     checking if the socket was present in any of the fd sets. On
     systems with lots of sockets and a heavy SYS_ARCH_PROTECT
     infrastructure (a mutex) this can result in a lot of extra work.
     Now we skip this process for any fd that is not in the input sets
  2) If the socket from tryget_socket() is NULL we no longer continue
     and compare the input fd sets with a zeroed out set of events
  3) We no longer need to zero out our event sets because they are
     only accessed when tryget_socket() is successful

lwip_selscan() is called at most once per select call and sometimes up to three times
2016-02-18 13:17:45 -06:00
sg
9a97a80efc Fixed bug #47154 lwip_netconn_do_writemore doesn't clear conn->write_offset on fatal/routing error. 2016-02-18 19:46:20 +01:00
goldsimon
e4cac595c2 Check TCP_SNDLOWAT for too high value (near u16_t overflow) - fixes bug #46948 2016-02-18 09:36:55 +01:00
Dirk Ziegelmeier
cf3d7def33 Let MIB compiler generate const structs, too (see last commit) 2016-02-17 08:14:16 +01:00
Dirk Ziegelmeier
24bc77a935 Found some struct instances that can be const 2016-02-16 22:31:59 +01:00
Joel Cunningham
9dd1c81d41 Update lwip_selscan documentation
lwip_selscan() documentation indicated exceptset is not used, which is no
longer accurate
2016-02-12 15:00:41 -06:00
Dirk Ziegelmeier
cddd3b552a etharp.c: Make MAX_AGE of an ARP entry configurable 2016-02-11 09:38:17 +01:00
Dirk Ziegelmeier
5aa5563622 snmp_msg.c: Fix unchecked return value. Found by Coverity. 2016-02-10 21:57:57 +01:00
Dirk Ziegelmeier
09b850cc6f snmp_threadsync.c: Fix ignored return value of mutex/semaphore creation. Found by Coverity. 2016-02-10 21:55:50 +01:00
Dirk Ziegelmeier
273d609bac mem.c: Fix unintended sign extension (found by Coverity)
sign_extension: Suspicious implicit sign extension: count with type unsigned short (16 bits, unsigned) is promoted in count * size to type int (32 bits, signed), then sign-extended to type unsigned long (64 bits, unsigned). If count * size is greater than 0x7FFFFFFF, the upper bits of the result will all be 1.
2016-02-10 21:21:08 +01:00
Dirk Ziegelmeier
288b4564e4 DNS: Fix potential array out of bounds access. Variable nanswers may contain bogus values. (found by Coverity) 2016-02-10 20:41:31 +01:00
Dirk Ziegelmeier
78a36df901 Netconn: Fix potential NULL pointer dereference (found by Coverity) 2016-02-10 20:39:12 +01:00
Dirk Ziegelmeier
1c1587eef6 ICMP: Fix responses were always sent to default netif because of uninitialized source IP (found by Coverity) 2016-02-10 20:35:58 +01:00
Dirk Ziegelmeier
11b810721a ICMP: Fix unused value in icmp_input (found by Coverity) 2016-02-10 20:34:44 +01:00
Dirk Ziegelmeier
e5eba61cf0 SNMP: Correctly name a global variable 2016-02-10 20:32:50 +01:00
Dirk Ziegelmeier
54a2c13b2e SNMP: Fix compile in dual-stack configuration 2016-02-06 00:21:06 +01:00
Dirk Ziegelmeier
b2410e428a SNMP: Remove comment about traps in README 2016-02-04 16:22:43 +01:00
Dirk Ziegelmeier
208f24a20c SNMP: Add some comments in thread sync code 2016-02-04 16:20:46 +01:00
Dirk Ziegelmeier
8cd33a5e41 SNMP: Implement basic SNMPv1 traps; Remove IPv6 support in RAW API again until there is a clean solution for dual-stack UDP 2016-02-04 16:19:59 +01:00
Dirk Ziegelmeier
905a434179 snmp_pbuf_stream: Reduce code duplication. Most is already implemented in lwIP pbuf framework. 2016-02-03 08:39:41 +01:00
Dirk Ziegelmeier
222155d7e2 pbuf: Make pbuf_skip function public, so it can be used in SNMP code 2016-02-03 08:37:04 +01:00
Dirk Ziegelmeier
28549e35fe SNMP: Update threadsync not to use mem_malloc - memory can be instantiated statically since it is only needed once per threadsync instance 2016-02-02 22:31:59 +01:00
Dirk Ziegelmeier
8f6cfa8769 Private mempools: Add missing include for LWIP_MEM_ALIGN_SIZE in memp_priv.h 2016-02-02 22:28:21 +01:00
Axel Lin
f411a34af5 stats: Add proper #if guard to prevent unused-variable warning for memp_names
The usages of memp_names are under either LWIP_DEBUG in stats_init,
or under LWIP_STATS_DISPLAY in stats_display_memp.

Fix below build warning:
lwip/src/core/stats.c:53:21: error: 'memp_names' defined but not used [-Werror=unused-variable]
static const char * memp_names[] = {
^
cc1: all warnings being treated as errors

Reported-by: David Fernandez
Fixes: 2f2a75a6d9fd ("stats: Move memp_names table out of stats_init/stats_display_memp functions")
Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-31 13:48:38 +01:00
Philipp Toelke
1de8d432d4 httpd: fix sending of data from send_headers 2016-01-29 09:26:29 +01:00
Axel Lin
515a4cad73 Clear addr_hint pointer after calling ip_output_if() in tcp_zero_window_probe()
This was missed in commit aa0e41c389
("task #12178: hardware checksum capabilities can be configured per netif"),
fix it.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-29 09:21:58 +01:00
Sylvain Rochet
4beacc4ca0 PPP, VJ, fixed TCP retransmission
We used to modify in place the packet payload during compression but TCP
stack requires that we don't change the packet payload, therefore we now
copy the whole packet before compression.

Signed-off-by: Sylvain Rochet <gradator@gradator.net>
2016-01-24 20:07:54 +01:00
Sylvain Rochet
9c7231ee75 PPP, VJ, move pbuf length check so all TYPE_IP return value are within the same code block
Prepare for VJ packet copy, reorder a bit VJ compressor so all TYPE_IP
return value are within the same code block. We do that because we don't
need to copy the packet if we are not able to compress it.

Signed-off-by: Sylvain Rochet <gradator@gradator.net>
2016-01-24 19:36:19 +01:00
Sylvain Rochet
e31902dc4c PPP, prepare for chained compressors (e.g. VJ+MPPE) requiring packet copy
lwIP TCP stack requires that we don't change the packet payload in netif
output functions in order to resend the pbuf if we don't receive a TCP
ACK in time, therefore we copy the whole packet before compression or
encryption.

It gets tricky because we should keep track of whether we previously
copied the buffer in PPP output netif function in order to free the
previous pbuf if necessary, BUT the first pbuf passed to the netif
output function must not be freed.

The worst case is VJ compression followed by MPPE encryption, in this
case we should free the packet allocated by VJ compressor after MPPE
encryption and we should free the packet allocated by MPPE encrypter
after calling the PPP low level output function.

Signed-off-by: Sylvain Rochet <gradator@gradator.net>
2016-01-24 17:48:57 +01:00
Sylvain Rochet
53853a25b0 PPP, report full packet size in VJ debug output
Signed-off-by: Sylvain Rochet <gradator@gradator.net>
2016-01-24 02:16:03 +01:00
Sylvain Rochet
858bce7b4e PPP, VJ, code cleaning
Using lwIP types instead of u_ types.
Removed useless register modifier on variable.
Removed trailing spaces.

Signed-off-by: Sylvain Rochet <gradator@gradator.net>
2016-01-24 01:38:26 +01:00
Sylvain Rochet
77d355560f PPP, VJ, fix header offset calculation on LP64/ILP64 systems
long type on LP64/ILP64 systems (such as x86_64 on Linux) is 8 byte
long, this leads to wrong offsets in packets header calculation.

Fixed it by using u32_t lwIP type instead of long type.

Signed-off-by: Sylvain Rochet <gradator@gradator.net>
2016-01-24 01:38:26 +01:00
Sylvain Rochet
733758a909 tcp: fixed TCPH_UNSET_FLAG macro
This macro is only used by VJ support in PPP and was always wrong since
its introduction in commit e4a6d199fe. It's almost only used to clear
the PSH TCP flag when necessary. This flag was probably less common
about a decade ago so that would be the reason why it goes unnoticed for
so long.

Fixes: e4a6d199fe "Merged from DEVEL into main tree."
Signed-off-by: Sylvain Rochet <gradator@gradator.net>
2016-01-24 01:38:26 +01:00
Dirk Ziegelmeier
90df2111b7 SNMP: Add missing closing braces in #ifdef __cplusplus case 2016-01-22 13:28:11 +01:00
Stephan Linz
31732631fc PPP: CCP: add error debug messages for dropped packets due to missing transmit or receive CCP method
It might be difficult to investigate the reason of dropped packets when
there is no debug notification of what is happening, thus, add error
debug messages for dropped packets due to missing transmit or receive
CCP method.

Signed-off-by: Stephan Linz <linz@li-pro.net>
[gradator@gradator.net: improved messages]
Signed-off-by: Sylvain Rochet <gradator@gradator.net>
2016-01-20 21:55:37 +01:00
Sylvain Rochet
c4d78e6422 PPP, PPPoL2TP, fix double free of L2TP pcb in pppol2tp_create error path
ppp_free() calls the low level protocol destroy function, pppol2tp_destroy()
here, which freed the l2tp pcb, followed by pppol2tp_create which also freed
the pcb.

Fixing it by reordering the L2TP init so we don't have to call ppp_free()
anymore.

Signed-off-by: Sylvain Rochet <gradator@gradator.net>
2016-01-20 21:12:37 +01:00
Wayne Uroda
52463fa25b PPP, PPPoS, fix dereference of uninitialised pppos->in_head pointer
When I create a new PPP connection, I am seeing a hardfault (segfault)
coming from pbuf_free.

I traced the problem to an invalid in_head field of the pppos_pcb structure.
The field is invalid because the memory is never cleared to zero after the
pppos_pcb structure is created in pppos_create().

I was able to fix the issue by adding a memset after the memp_malloc call.

Signed-off-by: Sylvain Rochet <gradator@gradator.net>
2016-01-20 20:50:08 +01:00
Joel Cunningham
96373f6959 Define LWIP_CHKSUM_COPY_ALGORITHM when port provides LWIP_CHKSUM_COPY macro
When the port has LWIP_CHECKSUM_ON_COPY enabled and provides
a definition of LWIP_CHKSUM_COPY, the existing logic left
LWIP_CHKSUM_COPY_ALGORITHM undefined

In this case we want it to be defined to 0 since none of the copy
checksum algorithms provided are being used

This commit also introduces indentation matching LWIP_CHKSUM to
improve the readability of the code
2016-01-20 11:34:25 -06:00
Joel Cunningham
0a67c06b51 Fix type on snmp_set_test_ok to be snmp_err_t
This function was returning values from snmp_err_t but wasn't
upgraded to using the typedef after commit babce70

This resulted in compilation failure on MSVC 2013
2016-01-20 11:18:35 -06:00
Dirk Ziegelmeier
babce70c95 SNMP: Convert SNMP error #defines to an enum and fix type mismatches discovered by conversion; Convert SNMP_NEXT_OID_STATUS to an enum 2016-01-20 10:53:59 +01:00
Dirk Ziegelmeier
4cf509989f SNMP: Fix variable naming in snmp_pbuf_stream 2016-01-20 10:53:15 +01:00
Sylvain Rochet
6185bf6f61 PPP: CCP: don't drop output packets if CCP negotiated that we don't compress on our side
CCP might negotiate to not compress if peers cannot agree on a
compressor, therefore if the null compressor is chosen we must pass
packets as is instead of dropping them.

Reported-by: Stephan Linz <linz@li-pro.net>
Fixes: 987f6237c4 "PPP, MPPE, drop input/output packets if we couldn't find the chosen decompressor/compressor"
Signed-off-by: Sylvain Rochet <gradator@gradator.net>
2016-01-19 23:51:47 +01:00
Stephan Linz
2c31beb6e7 IPv4: fix some meaningless debug messages
Signed-off-by: Stephan Linz <linz@li-pro.net>
2016-01-18 21:34:13 +01:00
Stephan Linz
9f3270afaf PPP: fix typo in debug message
Signed-off-by: Stephan Linz <linz@li-pro.net>
2016-01-18 21:33:17 +01:00
Axel Lin
fe2cfe2dba raw: Fix build error
IP6_HLEN is only defined when LWIP_IPV6, IP_HLEN is only defined when LWIP_IPV4.
This fixes build error in !LWIP_IPV4 || !LWIP_IPV6 cases.

Fixes: f2c7e9c939 ("raw: Remove unnecessary #if guard around PCB_ISIPV6() calls")
Reported-by: Erik Ekman
Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-18 16:02:01 +01:00
Sylvain Rochet
1ee574944c PPP, Documentation, fixed mistake about pppos_input_sys
Woops, pppos_input_sys is an internal function which must not be called
from lwIP user application. The correct function to use is
pppos_input_tcpip.
2016-01-18 12:45:40 +01:00
Stephan Linz
80375e68dd ip_frag: fix compiler warnings, unused variable
In case of IP_REASS_FREE_OLDEST==0, the argument clen of
ip_reass_enqueue_new_datagram() will not used and leads
the compiler to a warning.

Signed-off-by: Stephan Linz <linz@li-pro.net>
2016-01-18 11:55:54 +01:00
Stephan Linz
289d1dd7f3 slipif: fix several compiler warnings
- include new SNMP header
- add missing pointer type casting
- add missing default cases
- use const for all ip address types
- distinguish between IPv4 and IPv6 address types

Signed-off-by: Stephan Linz <linz@li-pro.net>
2016-01-18 11:55:32 +01:00
Axel Lin
f2c7e9c939 raw: Remove unnecessary #if guard around PCB_ISIPV6() calls
PCB_ISIPV6() macro is well defined for all cases (LWIP_IPV4 && LWIP_IPV6,
LWIP_IPV4 only and LWIP_IPV6 only), thus remove the unnecessary #if guard
around PCB_ISIPV6() calls.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-18 11:55:06 +01:00
Dirk Ziegelmeier
dc36dbac27 SNMP MIB2: Add unsupported snmpSilentDrops and snmpProxyDrops objects 2016-01-15 11:46:35 +01:00
Dirk Ziegelmeier
d9534325cf SNTP: Add function to get operating mode 2016-01-15 11:41:12 +01:00
Axel Lin
c221361874 stats: Move memp_names table out of stats_init/stats_display_memp functions
This makes the code simpler with better readability.
Also make memp_names static because it's only referenced by stats.c.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-15 11:38:03 +01:00
Axel Lin
70ebeda7ed memp: Simplify implementation of memp_overflow_check_all
We don't really care the order of overflow/underflow checking because if
any checking fails we got assertion.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-15 11:38:02 +01:00
Joel Cunningham
11faa8149e Fix blocking close with LWIP_SO_SNDTIMEO
This fixes a bug in close when LWIP_SO_SNDTIMEO is enabled, but
the option is not in use on the socket

A simple mis-typed comparison against zero would cause the close_timeout
to get set to zero if conn->send_timeout was 0

The intended check was to over-ride the default close timeout if a
send timeout had been specified via SO_SNDTIMEO
2016-01-13 22:20:52 +01:00
Dirk Ziegelmeier
70487a43d4 Apply patch #8854: dns: Simplify #ifdef guard around dns_gethostbyname_addrtype from Axel Lin
+ Minor compile fix from me
Patch makes the code a tiny bit less lightweight (add a parameter in dns_gethostbyname which is then not used in dns_gethostbyname_addrtype) but it makes the code more readable.
2016-01-13 19:52:08 +01:00
Axel Lin
a93ae2558f tcp_rexmit_rto: Remove superfluous #if TCP_OVERSIZE guard
TCP_OVERSIZE_DBGCHECK already implies TCP_OVERSIZE is set.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-13 19:07:08 +01:00
Dirk Ziegelmeier
c2ba9129ad SNMP: Fix InetAddress octet string encoding (length was missing) 2016-01-13 13:04:37 +01:00
Axel Lin
c2a74b767b udp_bind: Omit checking for the same port if no port specified
No port specified means to use a random port.
udp_new_port() returns a new (free) local UDP port number on success.
So in this case we don't need iterating all lists to test if the port
number is used, udp_new_port() alreay ensures the port is not used.

Move the code checking for double bind and rebind of the same pcb earlier,
as this checking is necessary in all cases.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-13 09:05:36 +01:00
Dirk Ziegelmeier
123c8dbd6a Fix bug #46837 Don't send dhcp_release message in dhcp_release function 2016-01-13 08:54:54 +01:00
Dirk Ziegelmeier
40ff62fa60 SNMP MIB Compiler: Update project settings, fix wrong output path in SharpSnmpLib 2016-01-12 08:40:12 +01:00
Dirk Ziegelmeier
84397ef013 SNMP MIB Compiler: Treat read-create nodes as read-only 2016-01-11 20:28:01 +01:00
Dirk Ziegelmeier
a2b7cec17b SNMP MIB Compiler: Add example command line to compile UDP-MIB 2016-01-11 20:15:17 +01:00
Dirk Ziegelmeier
e80e7a10d4 SNMP MIB Compiler: Resolve MIB files in a case-insensitive way 2016-01-11 20:14:54 +01:00
Dirk Ziegelmeier
8c4d1909f4 SNMP MIB Compiler: Deal with multiple OID assignments in a MIB file 2016-01-11 19:45:57 +01:00
Dirk Ziegelmeier
bb8ecd7e08 SNMP: Add some basic MIBs 2016-01-11 19:45:25 +01:00
Dirk Ziegelmeier
a7e1c730b2 Add .userprefs file to .gitignore 2016-01-11 19:23:09 +01:00
Dirk Ziegelmeier
6f1fc6c403 Add .gitignore (currently including SNMP MIB compiler binaries) 2016-01-11 19:21:06 +01:00
Axel Lin
9f3aab6a62 tcp_out: Use LWIP_DBG_LEVEL_SERIOUS instead of hard coded number
Trivial clean up to avoid using hard coded number.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-11 13:22:51 +01:00
Dirk Ziegelmeier
44256740bd SNMP MIB Viewer: Adapt to changes in SNMP framework that were required to compile UDP-MIB and TCP-MIB 2016-01-11 12:25:47 +01:00
Axel Lin
156ad0dbf5 udp_bind: Fix the logic to check both pcbs have REUSEADDR set
The code for #if SO_REUSE case does not match the comment.
By default, we don't allow to bind to a port that any other udp
PCB is already bound to, unless *all* PCBs with that port have tha
REUSEADDR flag set.

Which means we want to omit checking for the same port if both pcbs
have REUSEADDR set. Fix the logic accordingly.

Fixes: d0348e0c60 ("task #6995: Implement SO_REUSEADDR (correctly)")
Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-11 12:19:13 +01:00
Axel Lin
5056d375f2 tcp_bind/tcp_connect: Omit checking for the same port if no port specified
No port specified means to use a random port.
tcp_new_port() returns a new (free) local TCP port number on success.
So in this case we don't need iterating all lists to test if the port
number is used, tcp_new_port() alreay ensures the port is not used.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-11 12:16:27 +01:00
Dirk Ziegelmeier
b68e801975 MIB compiler: Eliminate the need for a cast 2016-01-11 10:32:33 +01:00
Dirk Ziegelmeier
987f0e3016 Update SNMP README - add correct SharpSnmpLib reference 2016-01-11 10:26:37 +01:00
Dirk Ziegelmeier
713deba83f SNMP MIB compiler: Add ability to generate UDP-MIB and TCP-MIB 2016-01-11 10:24:31 +01:00
Dirk Ziegelmeier
b9d0d80946 SNMP: Add more MIB compiler info 2016-01-09 14:35:51 +01:00
Dirk Ziegelmeier
84cd489d24 SNMP: Add MIB compiler (code generator) 2016-01-09 12:39:48 +01:00
Axel Lin
708beb4874 udp_bind: Allocate a random port earlier to correctly detect port conflict
Current code does not correctly detect port conflict if no port specified
because it checks ipcb->local_port == port before udp_new_port().
Fix it by allocating a random port earlier.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-09 10:14:09 +01:00
Dirk Ziegelmeier
4e8574bd23 SNMP: Table API cleanup 2016-01-07 09:53:25 +01:00
Dirk Ziegelmeier
fbdfba2509 SNMP: Found the correct cause of a memory leak 2016-01-07 09:52:13 +01:00
Dirk Ziegelmeier
e033866651 Merge branch 'master' of ssh://git.sv.gnu.org:/srv/git/lwip 2016-01-05 10:00:21 +01:00
Dirk Ziegelmeier
76094b8c7e SNMP: SMEMCPY should only be used when size is known at compile time 2016-01-05 09:59:42 +01:00
Dirk Ziegelmeier
e336f877c2 Merge branch 'master' of ssh://git.sv.gnu.org:/srv/git/lwip 2016-01-04 21:27:39 +01:00
Dirk Ziegelmeier
7f699b36ff Update some MIB2 comments 2016-01-04 21:27:24 +01:00
Dirk Ziegelmeier
e041b9a51c SNMP: Fix shadowing warning in another file. Pointed out by Erik Ekman. 2016-01-04 13:30:02 +01:00
Dirk Ziegelmeier
0a222a2ff7 SNMP: Fix shadowing warning pointed out by Erik Ekman 2016-01-04 12:31:09 +01:00
Axel Lin
031de097db Trivial comment fix for lwip_netconn_do_disconnect()
Signed-off-by: Axel Lin <axel.lin@ingics.com>
2016-01-04 11:54:21 +01:00
Dirk Ziegelmeier
d4361fc7d7 snmp_traps.c: #if 0 ... #endif around C++ style comments does not work - remove the code completely for now 2016-01-04 11:41:17 +01:00
Dirk Ziegelmeier
44617bfa9b Fix compile of SNMP on MSVC 2016-01-04 11:26:36 +01:00
Dirk Ziegelmeier
6352106aaa Fix C++ style comment in snmp_asn1.h 2016-01-04 11:05:44 +01:00
Dirk Ziegelmeier
7412a0e74e SNMP: Move common MIB code into snmp_core.c helper functions 2016-01-02 21:29:01 +01:00
Dirk Ziegelmeier
19d17adcfb SNMP MIB2: Implement tcpConnectionTable 2016-01-02 20:55:14 +01:00
Dirk Ziegelmeier
e1e7a704e1 SNMP MIB2: Implement tcpListenerTable 2016-01-02 20:06:53 +01:00
Dirk Ziegelmeier
19dd6c391f SNMP MIB2: Update UDP endpoint table variable names 2016-01-01 23:09:54 +01:00
Dirk Ziegelmeier
c5cab4e719 SNMP RAW API: Listen on IPV6 UDP port, too 2016-01-01 22:59:00 +01:00
Dirk Ziegelmeier
b48f6d1405 Add comment about udpEnpointTable non-accessible columns 2016-01-01 22:00:39 +01:00
Dirk Ziegelmeier
c466f8824f SNMP: Finish implementing UDP-MIB. Add unsupported udpHCInDatagrams and udpHCOutDatagrams items. 2016-01-01 21:58:51 +01:00
Dirk Ziegelmeier
2b16cd93bf SNMP: Another release_instance call bugfix in SNMP Get/GetNext requests 2016-01-01 20:58:02 +01:00
Dirk Ziegelmeier
0c39165701 SNMP: Two bugfixes in SNMP GET requests 2016-01-01 20:44:16 +01:00
Dirk Ziegelmeier
9d1234d83a Add some comments and OID checks to udpEndpointTable 2015-12-31 16:19:26 +01:00
Dirk Ziegelmeier
dfaa979b99 Start working on udpEndpointTable 2015-12-31 16:13:45 +01:00
Dirk Ziegelmeier
611966de63 SNMP: Cleanup snmp IP helper functions, add IPv6 support 2015-12-29 22:06:23 +01:00
Dirk Ziegelmeier
4341df4094 SNMP: Fix compile when IPV4 is not enabled 2015-12-28 22:28:01 +01:00
Dirk Ziegelmeier
83f8ec1397 Some SNMP MIB2 code layout cleanups 2015-12-28 21:37:17 +01:00
Dirk Ziegelmeier
fdd98879bf C-Style comments only, please 2015-12-26 12:17:07 +01:00
Dirk Ziegelmeier
406f707d9a Add SNMP agent note in CHANGELOG 2015-12-26 12:04:45 +01:00
Dirk Ziegelmeier
5e34b8736a Minor SNMP compile and comment fix 2015-12-26 12:02:16 +01:00
Dirk Ziegelmeier
7b946fa9b1 SNMP agent rewrite
- SNMPv2c support
  - Greatly reduced RAM usage, no memory pools any more
  - API cleanup
  - MIB2 is separated from SNMP stack
  - Support for multiple MIBs (snmp_set_mibs call) - e.g. for private MIB
  - Improved MIB2 implementation (tcpConnTable etc.)
  - Redesigned simple and generic API for MIB implementation
  - Comfortable node types for scalar arrays and tables
  - Counter64, bit and truthvalue datatype support
  - Callbacks for SNMP writes
  - Runs on two APIs: RAW and netconn
  - Async API is gone - the stack now supports netconn API instead,
    so blocking operations can be done in MIB calls.
    SNMP runs in a worker thread when netconn API is used.
  - Simplified thread sync support for MIBs - useful when MIBs
    need to access variables shared with other threads without locking
    (used in MIB2 to access lwIP stats from lwIP thread)

Currently in work:
  - Traps rewrite
  - MIB compiler
2015-12-26 11:43:29 +01:00
Dirk Ziegelmeier
0178d1d2ee Add missing comment for MIB2 callbacks in opt.h 2015-12-09 21:06:14 +01:00
Dirk Ziegelmeier
0c06f09d6d makefsdata.c: Adapt to new header include location 2015-12-09 12:48:02 +01:00
Joel Cunningham
a82c6122d5 Correct comment word usage in ip4_frag.c
This corrects word usage in ip4_frag.c:

 * 'On' was used when it should have been 'one'
 * 'Whole' was used when it should have 'hole'
2015-12-08 10:13:56 -06:00
Axel Lin
2e56f2d780 igmp: Optimize the implementation of igmp_start_timer
When LWIP_RAND is defined, calling LWIP_RAND() is not necessary if max_time <= 2
because group->timer will be set to 1 anyway.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-06 21:47:09 +01:00
Axel Lin
2562d637cd tcp_out: Use LWIP_DBG_LEVEL_SERIOUS instead of magic number
Trivial clean up to avoid using magic number.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-06 21:38:12 +01:00
Dirk Ziegelmeier
f69b1841e0 Fix compile when netconn api is disabled but socket api is enabled.
Problem is that declaring functions as static in a public header will produce warnings in every file it is included because the static functions are not implemented.
Solution: When socket api is enabled, netconn is simply available, too
(Socket api uses netconn api internally)
2015-12-05 21:58:38 +01:00
Axel Lin
a3bccae173 Catch tcpip_callback call failure
tcpip_callback_with_block() can fail with ERR_MEM or ERR_VAL, and in the
error paths the code does not post the msg to the mailbox thus the
sys_sem_wait() call might wait forever. Fix it by testing return value of
tcpip_callback() and return error immediately.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-05 21:41:27 +01:00
Axel Lin
a21144b834 memp: Fixup LWIP_HOOK_MEMP_AVAILABLE() hook
I got below build warning if LWIP_HOOK_MEMP_AVAILABLE is defined.

src/core/memp.c: In function 'memp_free_pool':
src/core/memp.c:352:16: warning: variable 'old_first' set but not used [-Wunused-but-set-variable]
   struct memp *old_first;
                ^
src/core/memp.c: In function 'memp_free':
src/core/memp.c:413:6: warning: 'old_first' may be used uninitialized in this function [-Wmaybe-uninitialized]
   if (old_first == NULL) {

The LWIP_HOOK_MEMP_AVAILABLE() hook does not work, fix it.

Fixes: c838e1ed5b ("Implement possibility to declare private memory pools")
Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-05 21:32:14 +01:00
Axel Lin
7f92660598 icmp: Fix memory leak in icmp_input() error paths
Ensure the newly allocated packet buffer is freed in error paths.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-05 21:25:15 +01:00
Axel Lin
3b60c855e1 netbuf: Move #include "lwip/opt.h" out of #if LWIP_NETCONN || LWIP_SOCKET guard
LWIP_NETCONN and LWIP_SOCKET are defined in opt.h,
so move #include "lwip/opt.h" out of #if LWIP_NETCONN || LWIP_SOCKET guard.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-05 21:22:34 +01:00
Axel Lin
a709041b8b Remove unnecessary p->len checking for pbuf_alloc calls with PBUF_RAM type
pbuf_alloc() for PBUF_RAM type always return big enough memory on success.
So checking p->len is not necessary. Testing if p is NULL or not is enough.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-05 21:21:59 +01:00
Dirk Ziegelmeier
8bb27ba8c4 Forgot to remove two SNMP options from opt.h that are now in lwip/apps/snmp_opts.h 2015-12-03 13:51:59 +01:00
Axel Lin
bd4c4b5959 Use SYS_ARCH_SET macro at appropriate places
Use SYS_ARCH_SET to simplify the code a bit.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-02 22:51:08 +01:00
Axel Lin
fb6d0f9006 ipaddr_aton: Avoid duplicate code to handle IPv4 address string conversion
Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-02 22:51:00 +01:00
Axel Lin
6e863ecb50 dns: Remove always true test in dns_alloc_random_port
The only way to exit the do-while loop is err != ERR_USE.
Thus get rid of the always true test.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-02 22:37:26 +01:00
Axel Lin
764bf251cd igmp: Drop unneeded initialization for *group in igmp_lookup_group()
It's assigned to the return value of igmp_lookfor_group() immediately.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-02 22:32:50 +01:00
Axel Lin
91586bc6f6 Drop #if TCP_DEBUG guard around tcp_debug_print_state calls
The #if TCP_DEBUG guard can be removed because tcp_debug_print_state()
print nothing if !TCP_DEBUG.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-12-02 22:32:42 +01:00
Axel Lin
f971fb921e Simplify testing minimum priority in tcp_kill_prio()
Simplify the code a bit by setting mprio = LWIP_MIN(TCP_PRIO_MAX, prio)
before the for loop.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-11-20 21:41:14 +01:00
Axel Lin
c730e45f0c Trivial comment fix about calling tcp_slowtmr
Trivial typo fix.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-11-20 21:36:38 +01:00
Axel Lin
5c27429958 memp: Fix if MEMP_OVERFLOW_CHECK guard in memp_free_pool
Current code already checks memp_overflow_check_all() in memp_free() if
MEMP_OVERFLOW_CHECK >= 2. So in memp_free_pool(), it should use
MEMP_OVERFLOW_CHECK == 1 instead.

Fixes: c838e1ed5b ("Implement possibility to declare private memory pools")
Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-11-19 22:06:42 +01:00
goldsimon
8010d6706e fixed bug #46471: lwip_accept() leaks socket descriptors if new netconn was already closed because of peer behavior 2015-11-19 07:33:55 +01:00
Axel Lin
9c6708513a Drop unnecessary NULL test for h->next->next in memp_sanity
The h will point to NULL if h->next->next is NULL anyway.
So remove the unnecessary NULL test for h->next->next in each iteration.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-11-19 07:23:55 +01:00
Axel Lin
21b9b5e741 Slightly improve raw_remove()/udp_remove() implementation
There should be no duplicate pcb in raw_pcbs/udp_pcbs list.
So the implementation of raw_remove()/udp_remove() can break from the for
loop once the target pcb is found and removed from the list.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-11-19 07:21:00 +01:00
Dirk Ziegelmeier
3f49b85680 Update header include guard naming of all apps headers
Unbreak compilation, lwip/apps/snmp.h guard clashed with lwip/snmp.h
2015-11-18 20:21:56 +01:00
Dirk Ziegelmeier
65bb7a623c snmp.h: Add missing #if around function prototypes 2015-11-18 08:18:04 +01:00
Dirk Ziegelmeier
4293c1e138 snmp.h: Fix header include guard 2015-11-18 08:08:37 +01:00
Dirk Ziegelmeier
b8e94ec066 lwiperf: TX buffer can be static 2015-11-18 07:52:04 +01:00
Dirk Ziegelmeier
e15872982e Add iperf to apps;
Fix compile of lwiperf.c
2015-11-18 07:46:39 +01:00
Dirk Ziegelmeier
e4f7ddacb3 Add Filelists.mk file containing all LWIP files. May be useful for client projects. 2015-11-16 21:54:01 +01:00
Dirk Ziegelmeier
c69dede728 Move httpd from contrib to main git repository 2015-11-16 12:27:24 +01:00
Dirk Ziegelmeier
39370db55d Implement API function to iterate over stable ARP table entries 2015-11-16 09:53:23 +01:00
Dirk Ziegelmeier
73bb986737 Also fix compile of ethernetif.c after SNMP refactoring 2015-11-16 09:49:32 +01:00
goldsimon
98b9d31f24 Fixed compiling with LWIP_TCP==0 2015-11-16 09:37:56 +01:00
Axel Lin
ecf9d25ed0 api_msg_c: remove superfluous NETCONN_SET_SAFE_ERR call before TCPIP_APIMSG_ACK
The TCPIP_APIMSG_ACK will call NETCONN_SET_SAFE_ERR for both
LWIP_TCPIP_CORE_LOCKING and !LWIP_TCPIP_CORE_LOCKING cases.
So remove superfluous NETCONN_SET_SAFE_ERR call before TCPIP_APIMSG_ACK.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-11-16 09:12:29 +01:00
Axel Lin
668d461104 dns: Fix dns_alloc_pcb for reuse an existing one case
The logic to use an already existing pcb is wrong because the idx never
advanced in the for loop, so it keep checking the same dns_pcbs[idx] for
each loop iteration. Fix it.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2015-11-16 09:09:31 +01:00
Dirk Ziegelmeier
29553ba7a1 Add note about moved SNMP stack to CHANGELOG 2015-11-14 22:08:31 +01:00
Dirk Ziegelmeier
cacbd596c9 Move some prototypes from snmp_msg.h to snmp.h because they are used by user code 2015-11-14 19:50:57 +01:00
Dirk Ziegelmeier
6203737093 Rename snmp_mib2.h to snmp.h so source compatibility for user netif implementations is preserved 2015-11-12 21:25:42 +01:00
Dirk Ziegelmeier
5f642eb3e3 Completely decouple SNMP stack from lwIP core by using private memory pools;
Move SNMP stack to apps;
API breaking change: Users need to call snmp_init() now!
2015-11-12 21:21:14 +01:00
goldsimon
92a241a29e Fixed bug #46365: tcp_accept_null() should call tcp_abort() 2015-11-12 10:40:49 +01:00
Dirk Ziegelmeier
c838e1ed5b Implement possibility to declare private memory pools. This is useful to decouple some apps from the core (SNMP stack) or make contrib app useage simpler (httpserver_raw) . 2015-11-12 08:45:04 +01:00
Dirk Ziegelmeier
d38db89626 Export tcp_pcb_lists from tcp.c - can be used in SNMP code to implement MIB2 tcp connection tables 2015-11-12 08:09:44 +01:00
Dirk Ziegelmeier
3f0b1e2cdc Remove global variable used in macros, it can be declared locally. 2015-11-12 08:07:22 +01:00
sg
f518c6578c fixed bug #46321: Synchronization bug around lwip_select() and tcpip_thread() with thread-local semaphores 2015-10-29 22:20:21 +01:00
sg
2dec8f449a minor: fixed typo: even_callback -> event_callback 2015-10-29 22:18:41 +01:00
Joel Cunningham
1ef913cd36 Update snd_queuelen comment documentation
This commit updates the snd_queuelen comment documentation to reflect
that snd_queuelen tracks the number of pbufs currently in the send
buffer (unsent + unacked queues) rather than the number of pbufs
available in the buffer (which was what previous comment implied)
2015-10-26 09:33:39 -05:00
Joel Cunningham
affc6d61ca Update socket options comments
This commit updates socket option comments to reflect which ones are
currently supported:

  * SO_REUSEPORT is no longer implemented
  * SO_SNDTIMEO is implemented
2015-10-16 13:18:39 -05:00
sg
f278b27119 pppapi/ppos: include tcpip_priv.h, not tcpip.h 2015-10-11 13:37:25 +02:00
Sylvain Rochet
37bb0b89f0 all: trivial include changes related to the new "lwip/priv/" include directory 2015-10-10 22:46:47 +02:00
sg
02bddd251a re-added tcpip.h (removed because the better part of the file moved to "priv/tcpip_priv.h", which was more worth conserving the git history - how do you duplicate a file keeping its history in both copies??) 2015-10-09 22:00:32 +02:00
sg
c12fa7b4c4 started to move "private" header files containing implementation details to "lwip/priv/" include directory to seperate the API from the implementation. 2015-10-09 21:58:58 +02:00
sg
b32751a693 moved dhcp.c to src/core/ipv4/ since it is IPv4 only 2015-10-09 21:06:08 +02:00
sg
fc1db87318 Fixed compiling api with LWIP_NETCONN_SEM_PER_THREAD==1 && LWIP_MPU_COMPATIBLE==1 2015-10-09 21:00:21 +02:00
sg
365f3fb651 Make LWIP_RAW==0 the default, raw IP sockets/pcbs should not be too common to justify the increased codesize for default setups 2015-10-09 20:47:32 +02:00
sg
a7ee681515 netbios -> netbiosns, added netbiosns_opts.h, added netbiosns_set_name() and netbiosns_stop() 2015-10-08 22:13:00 +02:00
sg
b02bcde8e0 added netbios name server from contrib (-> netbiosns) 2015-10-08 22:05:55 +02:00
sg
bef5ccda0b removed spaces at line ending, fixed include guard 2015-10-08 21:46:43 +02:00
sg
a2cd2ae5a8 lwiperf: fixed const-cast warning 2015-10-08 21:22:35 +02:00
sg
698e20a990 Added lwiperf, a simple ipv4/tcp iperf peer 2015-10-08 21:14:14 +02:00
sg
b6ad76fe1a fixed header include guard, fixed FILES 2015-10-08 21:13:42 +02:00
sg
22957a8082 added sntp_opts.h (all options for the sntp app), added FILES to describe the include folder 2015-10-07 22:24:32 +02:00
sg
8dfd5e82cb first 'app': added SNTP client from contrib (unmodified from 196cbae376dfd484b4833503dd43057b4c3462fa, 28.08.2015) 2015-10-07 22:16:48 +02:00
goldsimon
65efeec4e9 fixed bug #46145 tcp_send_empty_ack() uses wrong netif with LWIP_HOOK_IP4_ROUTE_SRC (patch by Milan Cermak) 2015-10-07 14:56:25 +02:00
goldsimon
15bb334e81 SNMP: use PBUF_RAM for sending, PBUF_POOL is mostly used for RX only (if this isn't followed, tcp can get stuck when ACKs don't come through - unless some PBUF_POOL pbufs are reserved for such RX) 2015-10-07 10:41:03 +02:00
goldsimon
77f906376e minor: fixed coding style (lwip style) 2015-10-07 10:36:50 +02:00
goldsimon
9b22f167f1 minor: mib2: removed some blocks by defining common variables above the switch 2015-10-07 10:13:20 +02:00
goldsimon
b401f42520 minor: fixed coding style (lwip style) 2015-10-07 10:03:12 +02:00
goldsimon
2949449e25 minor: SNMP: fixed coding style (lwip style) 2015-10-07 10:01:23 +02:00
sg
2b971400fa minor: coding style 2015-10-06 21:57:40 +02:00
sg
22df34fc70 minor/coding style: removed spaces before line ending (from file header) 2015-10-06 21:13:15 +02:00
sg
490581a0eb minor/coding style: removed spaces before line ending 2015-10-06 21:08:28 +02:00
goldsimon
0737cfb84e Fixed bug #46128 (patch by Kerem Hadimli) 2015-10-06 12:42:25 +02:00
Erik Ekman
58895c3cf6 PPP: Fix shadowing of global declaration 'sha1'
lwip/src/netif/ppp/mppe.c: In function `mppe_rekey':
lwip/src/netif/ppp/mppe.c:74:15: error: declaration of`sha1' shadows a global declaration [-Werror=shadow]
lwip/src/include/netif/ppp/polarssl/sha1.h:88:6: error: shadowed declaration is here [-Werror=shadow]
2015-10-06 11:13:30 +02:00
Erik Ekman
7fb832aa4e PPP: Fix shadowing of global declaration
Older compilers don't like variables with the same name as
global functions. md5.h contains a function md5(), rename
md5 variable in magic.c to md5_ctx.
2015-10-06 09:56:00 +02:00
Erik Ekman
673c6505ae PPP: Fix shadowing of global declaration
Older compilers don't like variables with the same name as
global functions. md5.h contains a function md5(), rename
md5 variable in magic.c to md5_ctx.

lwip/src/netif/ppp/magic.c: In function `magic_churnrand':
lwip/src/netif/ppp/magic.c:105:15: error: declaration of `md5' shadows a global declaration [-Werror=shadow]
lwip/src/include/netif/ppp/polarssl/md5.h:88:6: error: shadowed declaration is here [-Werror=shadow]

lwip/src/netif/ppp/magic.c: In function `magic_random_bytes':
lwip/src/netif/ppp/magic.c:165:15: error: declaration of `md5' shadows a global declaration [-Werror=shadow]
lwip/src/include/netif/ppp/polarssl/md5.h:88:6: error: shadowed declaration is here [-Werror=shadow]
2015-10-05 18:24:30 +02:00
Erik Ekman
1fef434f01 PPP: Fix shadowing of global declaration
Older compilers (GCC 4.6) don't like variables with the same name as
global functions:

lwip/src/netif/ppp/lcp.c: In function 'lcp_received_echo_reply':
lwip/src/netif/ppp/lcp.c:2685:11: error: declaration of 'magic' shadows a global declaration [-Werror=shadow]
lwip/src/include/netif/ppp/magic.h:101:7: error: shadowed declaration is here [-Werror=shadow]

magic.h contains a function named magic(), so rename the variable.
2015-10-04 11:11:57 +02:00
Sylvain Rochet
495fc61a34 Documentation: SNMP: update to recent changes
Remove snmp_init(), it is called by lwip_init().

Remove snmp_inc_sysuptime() and snmp_add_sysuptime(), they do not exist
anymore, MIB2 is now using sys_now().
2015-10-04 11:02:17 +02:00
Erik Ekman
f80d0dab08 Remove old comments about DHCP setting netif up 2015-10-03 21:31:48 +02:00
sg
fb1ac8d766 snmp mib2: more const 2015-10-03 20:34:56 +02:00
Dirk Ziegelmeier
bc47bd28ab snmp mib2: more nodes can be const 2015-10-03 20:34:09 +02:00
Dirk Ziegelmeier
5cf4771397 snmp: eliminiate mib_ram_array_node (it is not necessary: to the agent, the nodes may be const since the actual mib implementation knows the structures behind the nodes which do not have to be const) 2015-10-03 20:27:49 +02:00
sg
8891b277c6 snmp: hopefully fixed all alignment warnings introduced today. unfortunately, gcc does not warn about them when compiling for x86 2015-10-02 21:59:40 +02:00
goldsimon
e4abd4234d removed comma before } 2015-10-02 13:26:11 +02:00
goldsimon
fe33fd6d86 snmp: cleaned up mib_* structs: "base" class 'struct mib_node' only needs the type, get/set functions are not used on array/external nodes (only on scalar/listroot nodes) 2015-10-02 12:33:45 +02:00
goldsimon
bf75ace695 snmp: combine oid and node pointers in array entries 2015-10-02 10:53:17 +02:00
goldsimon
5b1b430403 sockets ERR_TO_ERRNO_TABLE_SIZE: use LWIP_ARRAYSIZE() 2015-10-02 10:07:45 +02:00
goldsimon
424bd7e38c def.h: added LWIP_ARRAYSIZE() macro 2015-10-02 10:05:32 +02:00
goldsimon
180ed573a5 snmp_trap_dst_ip_set: ip_addr_t pointer can be const 2015-10-02 09:58:31 +02:00
goldsimon
a9b6b5b704 adapt init.c to moved declaration of snmp_init 2015-10-02 09:57:15 +02:00
goldsimon
064d171332 snmp: moved agent initialization from snmp_msg.h to snmp.h 2015-10-02 09:56:37 +02:00
goldsimon
30445712a5 snmp: make mib_scalar_node a "derived" struct like all other nodes 2015-10-02 09:56:00 +02:00
goldsimon
91b6d45178 struct netif->hostname can be a const pointer 2015-10-02 09:42:49 +02:00
sg
3312983b27 Make LWIP_DNS_SECURE and its possible values known in opt.h, remove default initialization of DNS server 2015-10-01 21:38:39 +02:00
sg
fecd1bde83 ip4_route: fixed checking twice for a valid default_netif, fixed checking loopback traffic before checking for a valid default netif 2015-10-01 21:17:59 +02:00
goldsimon
0176e03e36 mib2: one more '};' -> '}' 2015-10-01 10:21:52 +02:00
goldsimon
8c35429ba3 add last change to CHANGELOG 2015-10-01 10:09:34 +02:00
Dirk Ziegelmeier
9957cd4a2a fixed bug #46089: snmp: race condition on length change between get_object_def() and get_value() 2015-10-01 10:08:23 +02:00
Dirk Ziegelmeier
ae7eeda88a dns_found_callback should take const IP addr 2015-09-30 22:19:47 +02:00
Dirk Zigelmeier
3f4d75c8d6 netif_get_ip6_addr_match/netif_add_ip6_address must take a const ip6addr to be usable 2015-09-30 20:55:08 +02:00
goldsimon
1bcd361456 adapt CHANGELOG to last change 2015-09-30 17:54:43 +02:00
Dirk Ziegelmeier
7962b21c00 snmp: fixed ugly inheritance implementation by aggregating the "base class" (struct mib_node) in all derived node classes to get more type-safe code 2015-09-30 17:54:25 +02:00
goldsimon
59002d5081 mib2: only export 'internet', all other variables can be static 2015-09-30 17:42:19 +02:00
goldsimon
ce883d2041 minor: mib2.c: sys_tem_* -> system_* for everything but 'sys_tem' (without suffix) 2015-09-30 17:39:32 +02:00
goldsimon
96847c1199 snmp: added helper functions to encode/decode BITS pseudo type, added define for Counter64 type, minor layout changes 2015-09-30 17:24:53 +02:00
goldsimon
df1f12778f snmp: moved noleafs_get/set functions from mib2.c to mib_structs.c, where they belong 2015-09-30 17:19:08 +02:00
goldsimon
dff234112b minor: removed superfluous comma after '}' in mib2.c; removed superfluous comment on get-functions that follow a function typedef 2015-09-30 17:13:05 +02:00
goldsimon
e18e08ff08 minor: removed superfluous comma after '}' in msg_out.c 2015-09-30 17:09:04 +02:00
goldsimon
f3ed562983 minor: removed superfluous comma after '}' in dns.c 2015-09-30 17:01:57 +02:00
goldsimon
969fb4c981 minor: removed some trailing spaces in tcp.c 2015-09-30 17:00:57 +02:00
Erik Ekman
82fcc307ef mld6: Simplify join/leavegroup()
Use netif_get_ip6_addr_match() helper to shorten the code.
2015-09-30 16:35:15 +02:00
goldsimon
1fdab5ac0e Added/changed header of dhcp.c/.h 2015-09-30 16:33:48 +02:00
goldsimon
389831218e Finished task #13731: fix usage of "snmp_inc_*" 2015-09-30 15:54:43 +02:00
goldsimon
7b5ef3ae58 implement/remove missing IP counters in stats_mib2 (see task #13731) 2015-09-30 15:05:52 +02:00
goldsimon
9d28549f32 minor: fixed coding style in mld6.c 2015-09-30 14:48:25 +02:00
Erik Ekman
6cdea62638 Add functions to join/leave v6 multicast group by netif
Existing functions are based on IP address, but the address is used
only to look up which netif to act on. The netif-based core code is
extracted to new exported functions.

If you have a netif handle, this makes it easier to join/leave
groups, without the need to convert to IP address first only for the
mld6 code to convert back to netif.
2015-09-30 14:44:45 +02:00
goldsimon
3dd0977635 minor: fixed coding style in igmp.c 2015-09-30 14:37:37 +02:00
Erik Ekman
ba71ac78d9 Add functions to join/leave IGMP group by netif
Existing functions are based on IP address, but the address is used
only to look up which netif to act on. The netif-based core code is
extracted to new exported functions.

If you have a netif handle, this makes it easier to join/leave
groups, without the need to convert to IP address first only for the
IGMP code to convert back to netif.
2015-09-30 14:29:37 +02:00
goldsimon
373714c02f dns: improved handling 2nd server if first failed 2015-09-30 14:22:39 +02:00
goldsimon
927b72abd2 fixed bug #46072: ip4addr_aton() does not check the number range of all address parts 2015-09-30 14:15:36 +02:00
goldsimon
f89e859415 minor: fixed coding style in ip4addr_aton() 2015-09-30 14:13:05 +02:00
goldsimon
dae73e21b8 minor: fixed coding style in ip4addr_aton() 2015-09-30 14:11:50 +02:00
goldsimon
f950bf4362 ipaddr_aton(): favour ':' over '.' to decide for IPv6 first (since IPv6 mapped IPv4 addresses might contain both ':' and '.') 2015-09-30 14:06:44 +02:00
goldsimon
0621e8d1b1 ip6addr_aton(): fail on three successive colons in an IPv6 address string 2015-09-30 14:05:13 +02:00
goldsimon
5a185a0fbd minor: fixed coding style in ip6addr_aton() 2015-09-30 13:55:09 +02:00
goldsimon
45fd622491 Fixed bug #46071 Logic error in line 1473 in dns.c 2015-09-30 13:36:13 +02:00
goldsimon
5e7a74e2e7 fixed bug #46064: ip_set_v6() must set pcb ip address types as well 2015-09-28 09:36:36 +02:00
goldsimon
94625a8fa8 MIB2_STATS: moved netif related mib2 counters into a struct (defined in stats.h), added ifInErrors/ifInUnkownProtos (now handled in etharp.c) and ifOutErrors 2015-09-28 08:50:21 +02:00
goldsimon
dbe703cfb0 netdb: fixed warning about pointless comparison 2015-09-28 08:10:53 +02:00
goldsimon
bc30899168 fixed compiler warnings where passing variable instance to ip_addr_isany 2015-09-28 07:56:52 +02:00
Sylvain Rochet
ce98bc9437 test: etharp: Fixed const warning 2015-09-27 22:59:15 +02:00
Sylvain Rochet
d39f929675 PPP: magic: don't truncate sys_jiffies() return value
It used to be this way because the original implementation was close to
the hardware and used a free running 16 bits timer so it was necessary.
Currently what it is only doing is removing potential entropy we might
get from upper bits, that's a bad idea.
2015-09-27 17:15:31 +02:00
Sylvain Rochet
b589864144 sys.h: fixed comment, sys_msleep() is in ms, not in jiffies 2015-09-27 00:05:58 +02:00
Sylvain Rochet
9e0202b38f PPP, PPP_MAXIDLEFLAG is now in ms instead of jiffies
Jiffies isn't really a humanly readable value and it means the default
PPP_MAXIDLEFLAG period depends on the platform "jiffies" frequency,
which isn't nice.

Change PPP_MAXIDLEFLAG to use ms instead of jiffies, the current
PPP_MAXIDLEFLAG default (100 ms), looks like a sane value and is
left unchanged.
2015-09-26 23:01:15 +02:00
sg
ba41685353 PPP: include "ppp_settings.h" if PPP_INCLUDE_SETTINGS_HEADER is defined to be able to silence some warnings in PPP code only (at least msvc needs this since PPP produces more warnings than the rest) 2015-09-24 22:04:48 +02:00
sg
bb91bd2279 fixed coding style: use more () 2015-09-24 21:04:20 +02:00
Sylvain Rochet
8b2c73de4e ip4: routing: check peer for point to point interfaces
gw netif field for point to point interfaces is the peer IP address.
Check if the destination is equals to the gw field of point to point
interfaces (broadcast flag is not set) when routing an IP packet.
2015-09-24 21:01:52 +02:00
goldsimon
715d8d3881 simplify FDSETSAFESET()/FDSETSAFEGET(): p is not required 2015-09-24 15:34:54 +02:00
goldsimon
5ad743e182 FD_SET: dump NULL-check that hides usage error, dump non-standard FD_SET_VAL 2015-09-24 15:21:03 +02:00
goldsimon
b0917d987a Cleaned up using struct netif.ip_addr by creating API functions for it 2015-09-24 14:57:16 +02:00
goldsimon
99d2e5233d struct udp_pcb.multicast_ip must be an ip_addr_t, too, to completely avoid temporary storage 2015-09-24 14:55:55 +02:00
goldsimon
e11e12f01d Fixed ETHARP_TRUST_IP_MAC after changing struct netif.ip_addr/netmask to ip_addr_t 2015-09-24 14:46:29 +02:00
goldsimon
c71723101a Removed ip_2_ip4/6_c const macros again now that ip_2_ip4/6 macros keep the original const'ness 2015-09-24 14:38:52 +02:00
goldsimon
262a641396 eliminate temporary storage when using netif addresses for ip_addr_t* now that they have the correct type (ATTENTION: ip6_select_source_address() and ip4_netif_get_local_ip() now return ip_addr_t*!) 2015-09-24 14:34:24 +02:00
goldsimon
4d2f4ce78c udp: don't use ip4_2_ip() where not required 2015-09-24 10:39:13 +02:00
goldsimon
51ce505d7d Simplify ip_2_ip6/4(_c) macros (and removed LWIP_ALLOW_STATIC_FN_IN_HEADER) -> now the *_c versions should not be required any more 2015-09-24 10:13:45 +02:00
goldsimon
f85737bf29 Fixed const warning in lwip_writev 2015-09-24 09:30:00 +02:00
goldsimon
ed4130bd2f Fixed const errors after changing netif_ip4_addr/netif_ip6_addr to return cont pointers 2015-09-24 08:06:50 +02:00
goldsimon
0fbdd5e56e fixed compiling LWIP_HAVE_LOOPIF after changing struct netif.ip6_addr to ip_addr_t 2015-09-24 07:58:29 +02:00
Joel Cunningham
cc4d09423a Add writev function
This commit adds compatibility with POSIX writev according to the Open
Group specification:
http://pubs.opengroup.org/onlinepubs/009695399/functions/writev.html

Implementation maps to sendmsg in the same manner that write() maps to
send()
2015-09-23 15:52:28 -05:00
sg
db76671d4d task #13729: Convert netif addresses (IPv4 & IPv6) to ip_addr_t (so they can be used without conversion/temporary storage) 2015-09-23 22:09:37 +02:00
sg
05e6f06b62 Fixed IP_ADDR6 macro for IPv6 only 2015-09-23 22:07:34 +02:00
sg
f36adac8ab fixed compiling udp.c for IPv6-only 2015-09-23 22:07:14 +02:00
sg
121268d320 Added ip_addr_set_zero_ip4() to explicitly set the type to IPv4 for dual-stack 2015-09-23 21:56:34 +02:00
goldsimon
e6b6543c33 igmp: use netif_ip4_addr() instead of directly accessing struct netif member 2015-09-23 16:26:56 +02:00
Dirk Ziegelmeier
e00e4a6c13 make netif_ip4_* get accessors return const pointers 2015-09-23 13:19:56 +02:00
Sylvain Rochet
e588dfdbce documentation: savannah: updated for Git 2015-09-22 21:52:44 +02:00
Sylvain Rochet
2f40d19193 trivial CVS to Git renaming 2015-09-22 21:09:57 +02:00
Sylvain Rochet
7a485b1a71 README: replaced CVS references to Git 2015-09-22 20:39:32 +02:00
goldsimon
abc74464a0 Revert "make netif_ip4_addr/netmask/gw macros return constant IP address pointers"
This reverts commit b9b31a5e72.
2015-09-22 11:42:41 +02:00
Sylvain Rochet
9882dd5eff documentation: rawapi: more syntax fixes
ethernet -> Ethernet
ip -> IP
LwIP -> lwIP
lwip -> lwIP
it's use. -> its use.
2015-09-22 00:27:56 +02:00
Sylvain Rochet
bb92a059b6 documentation: rawapi: syntax fixes
udp -> UDP
tcp -> TCP
2015-09-22 00:20:49 +02:00
Sylvain Rochet
47a579f54f documentation: rawapi: improved documentation on multithreading state
Based from the current lwIP wiki and my own, improved documentation about
the current lwIP multithreading state.
2015-09-21 23:54:16 +02:00
Sylvain Rochet
6746f1d13c documentation: rawapi: update to current lwIP design
*_init() -> lwip_init()
*tmr() -> sys_check_timeouts()
netif_set_link_up() / netif_up() clarification
updated netif_add() prototype
source code style fix in examples
2015-09-21 23:19:18 +02:00
Sylvain Rochet
74939c20c4 doc: contrib: CVS -> Git, punctuation fixes 2015-09-21 22:40:56 +02:00
Dirk Ziegelmeier
b9b31a5e72 make netif_ip4_addr/netmask/gw macros return constant IP address pointers 2015-09-21 20:32:14 +02:00
Sylvain Rochet
8eab90418a PPP, auth, code cleaning: removed useless variables on stack 2015-09-18 22:51:32 +02:00
Sylvain Rochet
83cddd8941 PPP: more const and mixed u_char/char types fixes 2015-09-18 20:11:09 +02:00
Erik Ekman
e8c0ba2a47 Fix tests after ip4_current_header() made const 2015-09-18 09:52:08 +02:00
sg
cb6adc643b PPP: more const fixes 2015-09-17 22:20:12 +02:00
sg
0454950564 fixed compiling for various config combinations 2015-09-17 22:19:37 +02:00
sg
4f9bcc5ecc fixed compiler warnings reported by mingw-64 2015-09-17 22:00:16 +02:00
sg
39e32ea7c1 fixed const warning for !IPV6_FRAG_COPYHEADER 2015-09-17 21:59:54 +02:00
sg
2f3dcf7a16 fixed compiling lwip_sendmsg for LWIP_NETIF_TX_SINGLE_PBUF && LWIP_CHECKSUM_ON_COPY 2015-09-17 21:36:25 +02:00
sg
6f0dceee09 fixed some printf formatters (mainly for window scaling code) 2015-09-17 21:33:25 +02:00
sg
9614c60cf6 fixed constness for DNS_LOCAL_HOSTLIST_IS_DYNAMIC 2015-09-17 21:32:11 +02:00
Dirk Ziegelmeier
cca758d332 Fixed using wrong sockaddr type in lwip_getaddrinfo when IPv6 is enabled 2015-09-17 20:55:44 +02:00
Robert Szewczyk
52a4ca99a8 pbuf_take: make it comply with API specifications
LWIP_ERROR macro exited the function early with the return code
indicating a SUCCESS. Fix the error codes. Return the specified
error code for cases when the pbuf is too short.
2015-09-17 17:05:01 +02:00
Joel Cunningham
72b3f3f612 Hook up TCP cachehit stat
This commit hooks up the TCP cachehit stat to the PCB locality feature
so that when a PCB is moved to the head of the list and a segment comes
in, we consider this a cache hit

This also matches the usage of the cachehit stat in UDP
2015-09-17 17:02:39 +02:00
Dirk Ziegelmeier
f62022cdf3 Compiler warning fixes (mostly constness in dual-stack configurations) 2015-09-17 13:59:52 +02:00
goldsimon
726af89168 minor compiler warning fixes and coding style 2015-09-17 11:00:21 +02:00
Joel Cunningham
c1c1754171 Sockets: add sendmsg
Adds sendmsg implementation for TCP and UDP sockets. Control messages
are not supported at this point, but could be added in the future

https://savannah.nongnu.org/bugs/?44805

Change-Id: Iddb287fd4b693f7563f8c923f76785cdde782d2f
2015-09-16 15:49:02 -05:00
sg
68a1ec2eb1 Fixed passing ip_input() to netif_add() for single-IP-version NO_SYS configurations 2015-09-16 22:09:54 +02:00
chrysn
b85b554db1 PPP, FSM, don't call memcpy with NULL even when size = 0 2015-09-16 16:03:15 +02:00
goldsimon
dc04118469 fixed missing comment after #endif 2015-09-15 08:19:26 +02:00
Joel Cunningham
7276f49f54 Fix typos from task #12243
This fixes two typos spotted during visual inspection of changes related
to task #12243
2015-09-14 20:43:21 +02:00
Sylvain Rochet
4704c9a0ad tcp: fixed CHECKSUM_GEN_TCP feature (misplaced #define) 2015-09-14 14:48:35 +02:00
Sylvain Rochet
c15b357889 PPP, merged ppp_link_set_callbacks() into ppp_new() 2015-09-13 18:28:06 +02:00
Sylvain Rochet
46204a9f86 PPP, reorder initialisation of low level protocols to call ppp_link_set_callbacks() just after PPP control block allocation 2015-09-13 18:21:14 +02:00
Sylvain Rochet
5b07569eb9 PPP, remove now unused ioctl callback from link_callbacks structure 2015-09-13 17:59:14 +02:00
Sylvain Rochet
b55412a0c4 PPP, PPPoS, replaced static sio_write() calls to a user defined callback
The overall lwIP design on data flows (netif,udp,tcp) is to use a user
defined callback to get data from stack and a static function to send
data to stack, which makes perfect sense. The SIO port was an exception,
the PPP stack never really used the SIO port by only using the
sio_send() function (and the ignominious sio_read_abort() function a
while back).

The way the SIO port is currently designed adds a tight coupling between
the lwIP port and the user code if the user need to do specific user
code if the current uart used is the PPPoS uart, which is not nice,
especially because all the lwIP stack is quite clean at this subject.

While we are at stabilizing the PPP API, change this behavior before
it's too late by replacing the static sio_write() calls to a user
defined callback.
2015-09-13 17:53:16 +02:00
Sylvain Rochet
81d3337681 Documentation, add pppapi.h to thread-safe header whitelist 2015-09-12 14:57:05 +02:00
Sylvain Rochet
41ee45d9f7 PPP: fix constness in PPP related files when PRINTPKT_SUPPORT is enabled 2015-09-09 20:28:01 +02:00
Dirk Ziegelmeier
79e7201854 PPP: fix constness in PPP related files (GCC -Wcast-qual)
Signed-off-by: Dirk Ziegelmeier <dirk@ziegelmeier.net>
2015-09-09 14:05:35 +02:00
goldsimon
ddf899ad1e update CHANGELOG 2015-09-08 10:28:57 +02:00
goldsimon
7702ed66a0 fixed compiler warning (stray 'a ' in code) - why is this a warning only??? 2015-09-08 09:52:22 +02:00
goldsimon
b8d7a2b8e6 fixed comment, fixed unused parameter in mppe_compress() 2015-09-08 09:50:30 +02:00
goldsimon
8a0fb03e21 Separate mib2 counter/table callbacks from snmp agent. This both cleans up the code and should allow integration of a 3rd party agent/mib2. 2015-09-08 09:47:30 +02:00
sg
1e4f312352 fixed compiling DNS code again 2015-09-08 06:03:27 +02:00
sg
77270adb96 Changed dns_gethostbyname_addrtype() to always be a function, fixed code for C PP :-( 2015-09-07 22:33:10 +02:00
sg
42170e4e57 fixed unused variable warning 2015-09-06 14:28:41 +02:00
Sylvain Rochet
318ba1decd dns: fixed trivial compiler warning
lwip/src/core/dns.c:1471:8: warning: extra tokens at end of #endif directive [-Wendif-labels]
 #endif LWIP_IPV4 && LWIP_IPV6
2015-09-06 11:27:33 +02:00
sg
1fbbf0e837 lwip_getaddrinfo: check max name length 2015-09-04 21:12:39 +02:00
sg
6795590603 fixed missing #endif 2015-09-04 21:02:24 +02:00
goldsimon
196120fabd worked on task #12243 (Add support for AAAA/IPv6 records to DNS) 2015-09-04 13:57:20 +02:00
goldsimon
dd3725a452 task #12243: DNS/IPv6: added support for AAAA records 2015-09-04 12:16:14 +02:00
goldsimon
c8cd67c989 fixed pointer type of value passed for snmpenableauthentraps (broken in 2010) 2015-09-03 14:02:30 +02:00
Stian Sebastian Skjelstad
aea87a9a2f Forget addresses set up by SLAAC when prefix expires. 2015-09-02 13:12:52 -06:00
sg
aa0e41c389 task #12178: hardware checksum capabilities can be configured per netif (use NETIF_SET_CHECKSUM_CTRL() in your netif's init function) 2015-09-01 22:04:15 +02:00
Sylvain Rochet
c4a1cad81b PPP, magic, build-out useless code when LWIP_RAND is defined 2015-09-01 10:29:53 +02:00
Sylvain Rochet
0f3fbb267b PPP, magic, call magic_randomize() for all packets
magic_randomize() wasn't actually called for IP4/IP6 packets, fixed
2015-08-31 10:20:12 +02:00
Sylvain Rochet
a17b3fc838 PPP, magic, improved magic_randomize() when using PPP_MD5_RANDM
Added the random seed already used without PPP_MD5_RANDM
as an entropy source when PPP_MD5_RANDM feature is enabled.

(And a little bit of code cleaning for both)
2015-08-31 10:20:12 +02:00
goldsimon
dd8feb49aa PBUF_REF with "custom" pbufs is now supported for RX pbufs (see pcapif in contrib for an example, LWIP_SUPPORT_CUSTOM_PBUF is required) 2015-08-31 08:29:23 +02:00
goldsimon
b572028e95 ethernet_input: pass IPv4 packets to ip4_input, not to ip_input 2015-08-31 08:26:44 +02:00
sg
a01a1b4556 support IPv4 source based routing: define LWIP_HOOK_IP4_ROUTE_SRC to point to a routing function 2015-08-30 21:54:39 +02:00
Sylvain Rochet
3121b34d17 converted CHANGELOG from ISO-8859-1 to UTF8 2015-08-30 21:36:57 +02:00
Sylvain Rochet
36305e5bd8 PPP, magic, use LWIP_RAND() if available
If LWIP_RAND() is available, it is used instead of libc srand()/rand()
if PPP_MD5_RANDM is disabled and it is added as a source of randomness
if PPP_MD5_RANDM is enabled.
2015-08-30 21:09:39 +02:00
Sylvain Rochet
541e3b6eb4 PPP, magic, improved magic_randomize() for PPP_MD5_RANDM is not enabled
A disabled PPP_MD5_RANDM should not be used when challenge are used, but
anyway, improved magic_randomize() so magic_randomseed is not equals to
sys_jiffies() which is pretty useless because that's fully predicable.
2015-08-30 21:09:39 +02:00
Sylvain Rochet
a24f4421d6 PPP, magic, using magic_random_bytes() for CHAP/MSCHAP/EAP instead of for-loop byte where possible 2015-08-30 21:09:39 +02:00
Sylvain Rochet
e8399416ae PPP, magic, renamed random_bytes() to magic_random_bytes() for API coherency 2015-08-30 21:09:39 +02:00
Sylvain Rochet
d0fa8acf86 PPP, magic, enables building without PPP_MD5_RANDM support
The only API difference with and without the PPP_MD5_RANDM support is the
availability of the random_bytes() function. Added a random_bytes()
function on top of magic() when PPP_MD5_RANDM support is not enabled,
thus allowing builds for both cases.

PPP_MD5_RANDM is still enabled by default (it was mandatory) if a protocol
using encryption is enabled, such as CHAP, EAP, or L2TP auth support.
2015-08-30 21:09:39 +02:00
Sylvain Rochet
ced7bef274 PPP, magic, MD5 random pool size cannot be anything else than MD5 hash size, code cleaning to make it clear 2015-08-30 21:09:39 +02:00
Sylvain Rochet
311644f39b PPP, PPPoS, remove magic_randomize() from PPPoS, it is already called in ppp_input()
There is no point of calling magic_randomize() for each pppos_input()
call, making magic_randomize() potentially called for each serial input
byte which is quite a bad idea since magic_randomize() is quite
intensive in processing time (MD5 computation) compared to HDLC frame
parsing. There is no entropy added when being called for each input byte
rather than for each valid input packet because byte input is a
monotonic event at the packet level. Well, if packet arrival time is a
valid entropy source even so, which I doubt a lot, but we don't really
have anything else and we really need random for PPP authentication
layers.
2015-08-30 21:09:38 +02:00
Sylvain Rochet
91e40e668c PPP, minor coding style fix 2015-08-30 21:09:38 +02:00
Sylvain Rochet
987f6237c4 PPP, MPPE, drop input/output packets if we couldn't find the chosen decompressor/compressor
Drop input/output packets if we couldn't find a decompressor/compressor,
it can't really happen because we only negotiate what we are able to
compress/decompress, but for the sake of code consistency it makes much
more sense to do so.
2015-08-30 21:09:38 +02:00
sg
b9a8310f4b fixed bug #44023: TCP ssthresh value is unclear: ssthresh is set to the full send window for active open, too, and is updated once after SYN to ensure the correct send window is used 2015-08-30 20:47:17 +02:00
Sylvain Rochet
ddba4b90c3 fixed typo: IP6_FRAG_COPYHEADER -> IPV6_FRAG_COPYHEADER 2015-08-28 14:28:04 +02:00
goldsimon
98f98048bc TCP window scaling: don't parse window scaling option on retransmission 2015-08-28 11:23:24 +02:00
goldsimon
367ac04ed8 Fixed UDP multicast receive filtering (multicast should only be received when bound to ANY or the destination multicast address) 2015-08-28 10:24:02 +02:00
goldsimon
43b18b20cc fixed bug #45818: API functions should check if type of ip_addr_t parameter matches the pcb type 2015-08-28 10:15:57 +02:00
goldsimon
06d8dba4a0 fixed bug #45559: Window scaling casts u32_t to u16_t without checks 2015-08-28 09:23:10 +02:00
Sylvain Rochet
b79c3aadd2 PPP, MPPE, improve dropping of unencrypted received packet
Improve dropping of unencrypted received packet by taking into account
all other data protocols (such as VJ packets) in a generic way.
2015-08-28 00:19:32 +02:00
Sylvain Rochet
46985bf750 PPP, explain better why we don't need protp->datainput callback 2015-08-27 22:42:42 +02:00
Sylvain Rochet
36b3878a45 PPP, PPPoS, fixed copy/paste typo in pppos_send_config() out accm debug message 2015-08-27 22:24:27 +02:00
sg
bc8120c864 Add another sanity check for bug #41009 2015-08-27 21:43:42 +02:00
sg
8b6d9d8216 Fixed UPGRADING regarding 1.4.0 2015-08-27 21:38:30 +02:00
sg
413bf85dde Remove empty init functions where not required for backwards compatibility 2015-08-27 21:35:18 +02:00
Sylvain Rochet
97ef85c9aa PPP, MPPE, fixed TCP over MPPE
We used to modify in place the packet payload during encryption, it works
well for UDP and ICMP but TCP stack requires that we don't change the
packet payload, therefore we now copy the whole packet before encryption.
2015-08-27 01:58:35 +02:00
sg
f649172580 fixed bug bug #41009: IPv6 reassembly broken on 64-bit platforms: define IPV6_FRAG_COPYHEADER==1 on these platforms to copy the IPv6 header instead of referencing it, which gives more room for struct ip6_reass_helper 2015-08-26 22:16:23 +02:00
sg
aad76acb68 IPV6_REASS: fix ip6_reass_remove_oldest_datagram() when the first fragment to enqueue has more pbufs than IP_REASS_MAX_PBUFS 2015-08-26 21:20:13 +02:00
sg
5eb1c411a5 LWIP_LOOPIF_MCAST -> LWIP_LOOPIF_MULTICAST 2015-08-26 20:55:51 +02:00
sg
0d6001a196 fix comment indentation 2015-08-26 20:29:38 +02:00
Joel Cunningham
0ab21da820 Add multicast support to loopif
This commit adds support to send and receive multicast on the loopback
netif by enabling IGMP via NETIF_FLAG_IGMP

This commit also introduces an LwIP configuration option,
LWIP_LOOPIF_MCAST, to control the behavior and it defaults to off
2015-08-26 20:28:03 +02:00
sg
204bd29e52 fixed bug #45827: recvfrom: TCP window is updated with MSG_PEEK 2015-08-25 22:25:51 +02:00
goldsimon
fd8b37dc14 fixed bug #45029 (Several macros use ip6_2_ip() without supplying a storage address): removed netconn_*_ip6() macros 2015-08-25 07:33:24 +02:00
sg
94550682d7 more cleanup prework to fix bug #45029 2015-08-24 22:46:34 +02:00
sg
7754f96549 Change IP6_ADDR/IP_ADDR6 to initialize a full IPv6 address (e.g. use with PP_HTONL) - renamed old IP6_ADDR() to IP6_ADDR_PART() 2015-08-24 20:30:48 +02:00
goldsimon
ee2d01ed88 fix compiler warnings when passing u16_t to pbuf_header() 2015-08-24 08:49:51 +02:00
goldsimon
e97f9fca22 netdb: fix debug output when IPv6 is enabled 2015-08-24 08:02:23 +02:00
sg
177c06b1f1 - prework for fixing bug #45029: access IPv4 configuration of struct netif via new API (netif_ip4_addr()/netif_ip4_netmask()/netif_ip4_gw()) instead of accessing the struct member directly. This way, we can change the struct member types from ip4_addr_t to ip_addr_t;
- fixed some bugs in calls to ip4_addr*() where the cast to u8_t* did not reveal the wrong address type
2015-08-20 22:39:48 +02:00
goldsimon
cc348dcca2 LWIP_IGMP and LWIP_MULTICAST_TX_OPTIONS need LWIP_IPV4 2015-08-20 16:36:54 +02:00
goldsimon
8622af77c1 nd6: adapt to constness of IP6_ADDR_ANY6 for IPv6-only configuration 2015-08-20 16:35:49 +02:00
goldsimon
3b21f469ca fix bug #45120 in a cleaner way 2015-08-20 13:05:59 +02:00
goldsimon
82033d5029 Clarify comment for MEMP_NUM_SNMP_VARBIND/MEMP_NUM_SNMP_VALUE 2015-08-20 11:43:36 +02:00
goldsimon
da5ccbf7d1 SNMP: tiny preparation for SNMP to support more versions than just v1: store request version in struct snmp_msg_pstat so that the response can be sent with the same version (v2c might already work but getbulk is missing) 2015-08-20 09:38:17 +02:00
goldsimon
a22a92b481 Fixed compiler warning when window scaling is enabled (tcp_sndbuf() should still return u16_t since that value can directly be passed to tcp_write()) 2015-08-20 09:18:20 +02:00
goldsimon
5bd262f9e9 fixed passing u16_t 'snmp_varbind->value_len' to functions taking an u8_t only 2015-08-20 08:23:34 +02:00
goldsimon
2b93ef1d75 fixed bug #43790: Sending octet string of Length >255 from SNMP agent (patch by Manoj Kumar) 2015-08-20 08:12:50 +02:00
sg
05abfc8ded Fixed icmp.c after 1.4.0-based patch #45120 2015-08-19 22:14:37 +02:00
sg
de8e810792 fixed bug #45120: Broadcast & multiple interfaces handling 2015-08-19 20:55:03 +02:00
goldsimon
cb28380f47 Add doxygen config + main-file used by Frédéric to create http://www.nongnu.org/lwip/ for 1.3.0 (see https://lists.gnu.org/archive/html/lwip-users/2013-01/msg00062.html) - just so that it doesn't get lost 2015-08-19 15:43:46 +02:00
goldsimon
d104335501 dns.c: fixed compiler warning 2015-08-19 13:28:03 +02:00
goldsimon
7263cc675b fixed bug #45004: dns response without answer might be discarded 2015-08-19 10:33:42 +02:00
Joel Cunningham
d850efdd08 IPv6 sockaddr clean ups
This commit address two issues with sockaddr struct implementations for
IPv6:

  1) struct sockaddr_in6 should have 32-bit unsigned field sin6_scope_id
     as specified in Section 3.4 of RFC 3493 (Basic Socket Interface
	 Extensions for IPv6)
  2) struct sockaddr is not extended in IPv6 to contain space for
     struct sockaddr_in6.  Applications should be using struct
	 sockaddr_storage when needing generic storage.  This removes the
	 extra bytes added when LWIP_IPV6 is defined
2015-08-19 10:15:47 +02:00
goldsimon
a6bd0944db LWIP_NETCONN_SEM_PER_THREAD: ensure sys_sem_valid() is only called for non-NULL pointers (not all ports might check this) 2015-08-19 09:57:59 +02:00
goldsimon
7df2dd67bd another fix for LWIP_MULTICAST_TX_OPTIONS: without LWIP_IGMP, udp_pcb->mcast_ttl was not initialized 2015-08-19 09:19:08 +02:00
goldsimon
5be95aa377 accidentally committed debug comment // 2015-08-19 08:36:54 +02:00
sg
c2f978bd1e patch by Chrysn: patch #8704 fix sys_timeouts_sleeptime function 2015-08-18 21:38:08 +02:00
sg
21815a1427 dns: fixed assertion when dns server address is set to ANY (patch #8692) 2015-08-18 21:30:46 +02:00
chrysn
877fcb35f4 fix return type of netif_add_ip6_address mismatch
the netif_add_ip6_address function was declared err_t in
src/include/lwip/netif.h, but defined as s8_t (the default value of
err_t) in its implementation in src/core/netif.c.

this causes "conflicting types for 'netif_add_ip6_address'" errors if
err_t is defined differently in cc.h (as for example recommended in
[1]).

as it only returns error constants, it is changed to use err_t
throughout.

[1] http://lwip.wikia.com/wiki/Porting_For_Bare_Metal
2015-08-18 20:55:30 +02:00
sg
c2f7e166a0 fixed bug #45723 netconn_delete unconditionally uses macro TCP_SLOW_INTERVAL 2015-08-18 20:32:09 +02:00
sg
e171b4e3f0 Fixed usages of SYS_SEM_NULL after using pointers everywhere 2015-08-18 20:29:16 +02:00
goldsimon
2a6f31a84e fix that LWIP_MULTICAST_TX_OPTIONS must be used in ip4_route instead of LWIP_IGMP 2015-08-18 16:35:06 +02:00
goldsimon
bc4473b275 Fixed that netconn_thread_cleanup() did not call LWIP_NETCONN_THREAD_SEM_FREE() (!= vs ==) 2015-08-18 11:13:38 +02:00
Sylvain Rochet
43c38a5aeb PPP, Documentation, add that we support MPPE 2015-08-07 16:53:27 +02:00
sg
6e5ff1dbe8 Enable LWIP_HAVE_LOOPIF by default when LWIP_NETIF_LOOPBACK==1 to not make loopback traffic depend on the only netif's link state 2015-08-05 22:56:10 +02:00
sg
4edade8079 allow multicast socket options IP_MULTICAST_TTL, IP_MULTICAST_IF and IP_MULTICAST_LOOP to be used without IGMP 2015-08-05 22:52:23 +02:00
sg
9352988c44 Tried to improve pbuf_type, LWIP_SUPPORT_CUSTOM_PBUF and PBUF_FLAG_IS_CUSTOM documentation 2015-08-05 22:26:57 +02:00
sg
e5e0a21fc6 LWIP_COMPAT_SOCKETS==2: special setting to help code parsers/code completion to show argument names/types for posix socket functions 2015-08-05 21:41:50 +02:00
Edgar Bonet
fb456e00ac Fix documentation of TCP_WRITE_FLAG_MORE.
The description of the flag was erroneous in src/core/tcp_out.c, and
self-contradictory in doc/rawapi.txt.
2015-08-05 21:20:34 +02:00
sg
851e03966d Fixed more compiler warnings for unit tests 2015-08-05 21:15:41 +02:00
Erik Ekman
38e3299675 test_etharp: Fix warning about braces
../../lwip-trunk/test/unit/etharp/test_etharp.c:16:8: warning: missing
braces around initializer [-Wmissing-braces]
  struct eth_addr test_ethaddr = {1,1,1,1,1,1};
         ^
2015-08-05 21:04:33 +02:00
Erik Ekman
dbdeca3032 test_tcp_oos: Remove last_dropped variable, never read 2015-08-05 21:01:17 +02:00
sg
a78e4c6cf3 track bugfixed in CHANGELOG 2015-08-05 20:57:54 +02:00
sg
76e785dd5e Fix that pbuf_realloc() called mem_trim() for "custom" PBUF_RAM 2015-08-05 20:40:35 +02:00
sg
767d0d9046 Fixed unit tests (compiler errors/warnings, coding style) 2015-08-03 20:41:49 +02:00
Erik Ekman
145efb1a33 Fix edge case in pbuf_take_at()
Writes to offsets pointing to the start of a pbuf in the chain
did nothing and just returned ERR_OK.

Added unit tests to verify the fix, and also
that pbuf_get_at()/pbuf_put_at() handles this case.
2015-08-03 20:34:08 +02:00
goldsimon
22d2af2a29 we are moving towards 1.5.0 -> set LWIP_VERSION accordingly 2015-08-03 13:58:48 +02:00
goldsimon
13801ebd74 netif_find(): name parameter can be const 2015-08-03 13:47:25 +02:00
goldsimon
614fa7b853 ... and one more change to those nasty ~ operator warnings :-( 2015-08-03 11:12:53 +02:00
goldsimon
4b815eece9 added lwip_socket_thread_init/cleanup to use LWIP_NETCONN_SEM_PER_THREAD/LWIP_NETCONN_FULLDUPLEX without including anything but sockets.h 2015-08-03 10:15:29 +02:00
goldsimon
11f350e63f Fixed ~ warnings in a different way 2015-08-03 09:10:49 +02:00
goldsimon
4dc3c7a6a0 Fixed warnings about NULL check not required (ip_addr_isany) and implicit conversion (~) 2015-08-03 08:35:01 +02:00
goldsimon
d106053e4c Removed accidentally committed // comment 2015-08-03 08:27:33 +02:00
goldsimon
5315751dc9 init.c: fixed window scaling range check 2015-08-03 08:24:36 +02:00
Erik Ekman
e448a9a4a9 err, debug: add missing ERR_ALREADY to lwip_strerr()
When ERR_ALREADY was added other error codes were renumbered.
The strerr function was not updated so it returned incorrect data
for ERR_CONN - ERR_IF.
2015-07-27 00:49:18 +02:00
Joel Cunningham
5b0d9338fd netif, loopif: set link up on loopback interface
When LWIP_HAVE_LOOPIF is enabled, a separate loopback interface is added
as a netif. A netif need to have its link state set to up to be able to be
selected as a route in ip4_route or ip6_route.

The regression appears to be when bug #43904 (ip_route() and ip6_route()
must detect linkup status) was fixed.

Furthermore, there is no point of having the loopif down by default.
2015-07-27 00:22:30 +02:00
sg
409d7a99f9 Minor coding style fix 2015-07-14 22:17:49 +02:00
Joel Cunningham
f77e581468 Fix netbuf_destport() when LWIP_CHECKSUM_ON_COPY is not enabled
This commit fixes a bug in netbuf_destport() where LWIP_NETBUF_RECVINFO is
enabled, but not LWIP_CHECKSUM_ON_COPY is enabled

The flags field is only available when LWIP_CHECKSUM_ON_COPY is enabled. In
this mode, the toport_chksum is dual functioning as storage for port and
checksum
2015-07-14 22:17:06 +02:00
goldsimon
d3217718a9 Reverted fix for bug #38203 since it might be wrong 2015-06-23 09:20:06 +02:00
Stian Skjelstad
7e76480db4 udp: multicast, fix udp_set_multicast_ttl() parameter and structure member conflict
Macro-parameter name can not be the same as the structure member to
dereference.
2015-06-16 12:00:00 +02:00
tabascoeye
7856141fc4 icmp: fix checksum on replies of echo request with ID 0, sequence 0 and either no data or any amount of 0x00 Bytes as data (closes: #45322)
When a client sends an ICMP echo request with ID 0, sequence 0 and
either no data or any amount of 0x00 bytes as data, the checksum in the
reply is wrong (off-by-one).

Expected checksum is 0xffff in that case, observed is 0x0000.
2015-06-15 15:53:14 +02:00
goldsimon
232cf8c28b Fixed bug #45098 ip_addr_t type field not populated for socket address copies (patch by James Smith) 2015-05-21 15:51:47 +02:00
goldsimon
b51805b87e fixed bug #45135 getsockopt SO_SNDTIMEO, SO_RCVTIMEO broken 2015-05-21 15:47:21 +02:00
goldsimon
392ef77bc5 Fixed bug #45161 tcp.c / tcp_abandon / pcb->local_port set to zero but needed later for tcp_rst (introduced some months ago when fixing bug #42299) 2015-05-21 15:45:09 +02:00
goldsimon
de83c3e9e0 fixed bugs #45140 and #45141 (dhcp was not stopped correctly after fixing bug #38204) 2015-05-19 10:56:08 +02:00
goldsimon
050d233e10 changed dhcp state name defines to include "STATE_" to prevent confusion with message types (e.g. INFORMING vs. INFORM) 2015-05-19 10:32:14 +02:00
Sylvain Rochet
8c1f834a4a fixed bug #39683 Assertion "seg->tcphdr not aligned" failed with MEM_ALIGNMENT 1 or 2
We used a static 4 instead of MEM_ALIGNMENT earlier, however it broke
things for MEM_ALIGNMENT 1 or 2, fixed using a LWIP_MIN(MEM_ALIGNMENT,
4) statement.
2015-05-11 11:21:08 +02:00
Ivan Delamer
cbeb5ab960 Remove 6LowPAN flag that will not be used. 2015-05-05 14:43:58 -06:00
Ivan Delamer
33a51a1bdc Improved IPv6 address formatting in ip6addr_ntoa_r(). 2015-05-05 14:01:38 -06:00
Ivan Delamer
73660f779b changes to ip6addr_aton() to avoid crash with some ill-formatted
strings.
2015-05-05 13:26:17 -06:00
Ivan Delamer
2c79332de7 Only send RS messages if we have a LL address in some state other than
invalid.
2015-05-05 13:05:41 -06:00
Ivan Delamer
2aec025e16 Bug fix: properly use unspecified source address for router solicitation
if needed.
2015-05-05 13:00:17 -06:00
Ivan Delamer
24f486261a Small bug fix in ipaddr_ntoa_r when IPv4 and IPv6 are enabled. 2015-05-05 11:57:23 -06:00
Edgar Bonet
f0c4944e2c sockets: do not assume defined(FD_SET) implies defined(FD_SET_VAL). 2015-05-05 14:08:42 +02:00
Edgar Bonet
cf15872b8d SNMP, Missing const qualifier on internet_nodes[] in mib2.c. 2015-05-05 13:02:30 +02:00
Sylvain Rochet
78e1b9b7c1 PPP, don't store the name by which the peer authenticated itself to us if multilink support is disabled
pcb->peer_authname is only used by multilink support (which we don't
support), don't store the useless peer authname.
2015-05-01 22:51:09 +02:00
Sylvain Rochet
967a8d0678 PPP, opt.h: fixed coding style 2015-05-01 01:01:42 +02:00
Sylvain Rochet
fa44cef27b PPP, L2TP, added configurable L2TP MRU using opt.h 2015-05-01 00:49:19 +02:00
Sylvain Rochet
29ba3df717 PPP, re-enabled MRU defines in opt.h 2015-05-01 00:08:34 +02:00
Sylvain Rochet
aacc222b7d PPP, display MTU set through netif_set_mtu() if debug is enabled 2015-04-30 23:41:47 +02:00
Sylvain Rochet
341f0bf9e3 PPP, assert if ppp_fatal() is called 2015-04-30 13:48:08 +02:00
Sylvain Rochet
091c6a3bda PPP, cleanup unused/redefined/useless limits in ppp_impl.h 2015-04-30 01:07:11 +02:00
Sylvain Rochet
fd53cad208 PPP, sifnpmode() is only useful if on demand is supported, build out if not
We don't support PPP on demand, don't build sifnpmode() which is only
useful for on demand if on demand is not supported.
2015-04-30 00:06:24 +02:00
Sylvain Rochet
1b6d6d0dc0 PPP, removed unnecessary memset()
Everything is cleared in ppp_clear(), we don't need to clear all
structures twice.
2015-04-29 23:55:23 +02:00
Sylvain Rochet
40c671b1a5 PPP, PPPoS, also clear last_xmit when resetting PPPoS control block 2015-04-29 23:41:23 +02:00
Sylvain Rochet
0a8b1c199d PPP, added missing cast on pbuf_header() 2015-04-26 23:42:18 +02:00
Sylvain Rochet
3a3c823ddb PPP, MPPE, try to use pbuf_header() in mppe_compress()
If there is enough space in front of the buffer, use it instead of
allocating a new pbuf.
2015-04-26 23:27:31 +02:00
Sylvain Rochet
900f3c9a09 PPP, MPPE, don't issue CCP reset request in stateless mode
This is useless, flushed bit is always true in stateless mode, we
don't need to issue a CCP reset request in this case.
2015-04-26 22:13:11 +02:00
Sylvain Rochet
8fe2f747f4 PPP, MPPE, issue CCP reset request if synchronization is lost
If MPPE synchronization is lost, it is advised to send a CCP reset
request in order to recover to a clean state.
2015-04-26 22:04:21 +02:00
Sylvain Rochet
adaeff5540 PPP, MPPE, discard late packet in stateless mode
When PPP is used over a link which does not guarantee packet ordering,
we might get late MPPE packets. This is a problem because MPPE must be
kept synchronized and the current implementation does not drop them and
rekey 4095 times instead of 0, which is wrong.

In order to prevent rekeying about a whole count space times (~ 4095
times), drop packets which are not within the forward 4096/2 window and
increase sanity error counter.
2015-04-26 20:59:09 +02:00
Sylvain Rochet
d0f91c00cb PPP, MPPE, sanity error path rework
We are going to need sanity error path a little further, rework to be
able to use the sanity error path anywhere in decompressor.
2015-04-26 20:57:01 +02:00
sg
e20a071977 added functions dhcp/autoip_supplied_address() to check for the source of address assignemnt (replacement for NETIF_FLAG_DHCP) 2015-04-24 21:23:15 +02:00
Sylvain Rochet
737a6921c3 PPP, place print packet debug codenames in ROM 2015-04-24 00:13:25 +02:00
Sylvain Rochet
44af6978db netconn: api_msg.c, fixed warning about unused state variable by using it a little more 2015-04-23 23:31:41 +02:00
Sylvain Rochet
acbdf63a48 debug.h: fixed LWIP_PLATFORM_ERROR macro if LWIP_DEBUG and LWIP_NOASSERT are defined 2015-04-23 23:07:06 +02:00
goldsimon
e59beeb625 fixed "missing braces around initializer" for IN6ADDR_*_INIT macros 2015-04-23 10:08:30 +02:00
goldsimon
f01dc8cc34 more "const" fixes 2015-04-23 09:59:15 +02:00
goldsimon
89f0e45b50 fixed ip_addr_islinklocal macro definition 2015-04-23 09:35:20 +02:00
goldsimon
3f83556128 sockets: IPPROTO_RAW/IPV6_CHECKSUM must be disabled for LWIP_RAW==0;
help msvc to not warn about uninitialized variables
2015-04-23 09:14:42 +02:00
goldsimon
1cdafabc7c added missing braces around macro parameters 2015-04-23 09:04:45 +02:00
goldsimon
f9965b4967 some more compiler warning fixes 2015-04-23 08:44:44 +02:00
goldsimon
0de0942f9c fixed pppol2tp (IP_IS_V6_L -> IP_IS_V6_VAL) 2015-04-23 07:46:06 +02:00
goldsimon
00a46f104a changed IP_IS_V6_VAL() to take an instance, not a pointer (to get the _val() functions the same) 2015-04-23 07:26:29 +02:00
goldsimon
009755ba01 fixed broken ip6_addr_debug_print_parts() (broken yesterday) 2015-04-23 07:25:48 +02:00
goldsimon
53a96f69ef ppp_free: fixed type of local 'err' 2015-04-23 07:25:10 +02:00
goldsimon
e60bc69515 added more missing casts 2015-04-23 07:24:45 +02:00
goldsimon
fbadb8354f fixed const'ness of syscontact/sysname/syslocation 2015-04-22 16:06:39 +02:00
goldsimon
02dee05c16 Fixed const'ness in snmp (design of sys contact/name/location and snmpenableauthentraps is broken!) 2015-04-22 15:39:56 +02:00
goldsimon
b16316ae37 fixed more (tiny) warnings... 2015-04-22 14:56:58 +02:00
goldsimon
f5077dc982 fixed some more missing casts... 2015-04-22 14:18:54 +02:00
goldsimon
634c438b50 sockets.c: added missing casts after changing storage type of 'err' member in sockets 2015-04-22 13:52:21 +02:00
goldsimon
f468c492b9 fixed missing casts found with msvc /Wall 2015-04-22 13:38:10 +02:00
goldsimon
5410838793 igmp.c: fixed -Waddress, removed dead code 2015-04-22 12:50:26 +02:00
goldsimon
91c2618f21 fixed typo in sockets.h 2015-04-22 12:50:13 +02:00
goldsimon
beabd3c6b7 Added some macros with extension "_val" that work on actual instances and leave away the "if != NULL" check to get rid of gcc "-Waddress" warnings in the core code at least (I might not have caught all of them, yet) 2015-04-22 12:43:03 +02:00
goldsimon
a81c7bf04b fixed compiling icmp.c (variable has to be declared at the beginning of a scope) 2015-04-22 11:29:35 +02:00
goldsimon
a6c3bb4c6d revert accidentally committed snmp header files 2015-04-22 10:54:07 +02:00
goldsimon
902d190a11 Many const fixes throughout the stack (although these are not all, yet) 2015-04-22 10:29:43 +02:00
goldsimon
0142f113a3 fixed compiling netdb.c after LWIP_IPV4 changes 2015-04-22 09:17:31 +02:00
goldsimon
fe195a86cd dhcp: move declaration of "extern void dhcp_set_ntp_servers()" from dhcp.c to dhcp.h to make the function prototype known to implementers 2015-04-22 09:17:06 +02:00
goldsimon
11845cedd6 Added version-independent ip_addr_islinklocal() 2015-04-22 09:16:05 +02:00
Sylvain Rochet
5e43e2d333 PPP, L2TP, minor fixes
Check tot_len for ZLB instead of len, it might happens we are just
between 2 pbuf, although almost impossible.

Check buffer is at least 2 byte long before checking address & flags
header.
2015-04-22 00:50:08 +02:00
Sylvain Rochet
15cc47334e PPP, don't assert if we receive a too short packet in ppp_input(), just drop
We might actually receive too short packets through PPPoE or PPPoL2TP,
don't assert on unusal packets, just drop them.
2015-04-22 00:31:14 +02:00
Sylvain Rochet
5989c1883e PPP, removed useless padding in bitfields
Most of them were wrong actually. We have to use unsigned int because
C90 only allows int types for bitfields, so we are stuck to 32-bit
bitfields in most cases.
2015-04-21 22:43:53 +02:00
Sylvain Rochet
632de523de Fixed PBUF_LINK_ENCAPSULATION_HLEN support
PBUF_LINK_ENCAPSULATION_HLEN support was introduced by 6ef7563f and
missed the fact that header size calculation/reservation using
computation like PBUF_LINK_HLEN + PBUF_IP_HLEN + ... are used all over
the source code. Hopefully fixed all of them.
2015-04-20 23:43:33 +02:00
Sylvain Rochet
2db7513590 PPP, VJ, improved opt.h comment about VJ 2015-04-20 21:14:05 +02:00
Sylvain Rochet
ced24f9215 PPP, MPPE, drop unencrypted input packet if MPPE is required 2015-04-20 21:13:34 +02:00
Sylvain Rochet
b302cad46d PPP, VJ, CCP: rework to fix protocol order
We need to do VJ compression before CCP/MPPE compression and VJ
decompression after CCP/MPPE decompression. This leads to a massive
rewrite of how we currently handled VJ only in the PPPoS lower protocol
handler.

Moved VJ structures from pppos to ppp_pcb because we need them back in
PPP core. This is a bit unfortunate because that's not necessary for
PPPoE or PPPoL2TP, but, hey!. Fixed CCP+MPPE+VJ order.
2015-04-20 00:10:35 +02:00
Sylvain Rochet
33838b8c1c PPP, MPPE, compile-out unused mppe_incomp() function 2015-04-19 22:06:59 +02:00
Sylvain Rochet
42fb74ce22 PPP, CCP, MPPE, handle CCP Reset-Request and Reset-Ack for MPPE 2015-04-19 22:01:58 +02:00
Sylvain Rochet
74670ec07f PPP, MPPE, MPPE also requires MSCHAP support (therefore CHAP support as well) 2015-04-19 17:06:23 +02:00
Sylvain Rochet
3450a78992 PPP, change ppp_write() return type from int to err_t
ppp_write() callback returns err_t, makes ppp_write() consistent with
the callback it is calling.
2015-04-19 16:34:34 +02:00
Sylvain Rochet
f4ef6180b8 PPP, MPPE: allow users to enable CCP and MPPE support in opt.h
We are new ready to process CCP and MPPE packets, allow lwIP users to benefit
from those features.
2015-04-19 16:28:48 +02:00
Sylvain Rochet
f0c25aaa60 PPP, MSCHAP, fixed compiler warnings if MPPE support is disabled 2015-04-19 16:28:11 +02:00
Sylvain Rochet
0f63c1ef8f PPP, CORE, reworked ppp_netif_output* functions to process CCP on all protocols
Both IPv4 and IPv6 should be proccessed by CCP, reworked ppp_netif_output*
in a generic way for CCP.
2015-04-19 16:22:20 +02:00
Sylvain Rochet
b27966860e PPP, CCP, MPPE: added packet plumbing in ppp.c to process MPPE packets 2015-04-19 15:52:46 +02:00
Sylvain Rochet
51566d43bd PPP, normalized debug messages 2015-04-19 14:24:30 +02:00
Sylvain Rochet
71d085bd13 PPP, CCP, added data packet configuration in ppp_pcb 2015-04-19 14:17:34 +02:00
Sylvain Rochet
ffb10e7aac PPP, CCP, added receive and transmit chosen protocols in ccp_flags_set() (renamed ccp_set())
We need to know which methods were chosen when CCP is up, this used to be done
using ccp_test() which we are in the process of removing.

Using non-existing method 0 instead of -1 in CCP for unset method, allowing
type change from s16_t to u8_t for method.
2015-04-19 13:51:35 +02:00
sg
a5503df32b Fixed typo in dchp_inform (state is named DHCP_INFORMING, not DHCP_INFORM) 2015-04-19 12:30:20 +02:00
Sylvain Rochet
c8db96705f PPP, MPPE, close current session using lcp_close() if something went wrong 2015-04-19 02:27:40 +02:00
Sylvain Rochet
f94efab6c3 PPP, CCP, added MPPE user configuration flags 2015-04-19 02:17:43 +02:00
Sylvain Rochet
4c0af0f79e PPP, MPPE, reworked MPPE debug, using ppp_pcb metadata 2015-04-19 01:49:04 +02:00
Sylvain Rochet
fc7e327d19 PPP, MSCHAP, CCP, MPPE: reworked key passing from CCP to MPPE
Removed mutiple copies of keys by pre-setting MPPE keys during MSCHAP
negotiation.

Improved MPPE init so we don't need to pass a buffer formatted in a
special way to MPPE, this is necessary for pppd to talk to the kernel,
we don't need that here.
2015-04-19 01:20:43 +02:00
Sylvain Rochet
045f44c7f9 PPP, MSCHAP, merged mppe_set_keys() to Set_Start_Key(), merged mppe_set_keys2() to SetMasterKeys() 2015-04-19 00:26:25 +02:00
Sylvain Rochet
867d13b007 PPP, CCP, MPPE: calling mppe_init() in ccp.c instead of using ccp_test()
We don't need this ccp_test() stuff which is used to test if kernel have
the ability to process MPPE packets. Reworked MPPE so we don't need it.
2015-04-18 23:51:10 +02:00
Sylvain Rochet
40991b93a2 PPP, CCP, reworked ppp_pcb ccp_localstate and all_rejected fields 2015-04-18 19:47:21 +02:00
Sylvain Rochet
949d76b328 PPP, MSCHAP: ensure magic tables are not copied and initialized on stack 2015-04-18 19:14:39 +02:00
Sylvain Rochet
210a2ccfdf PPP, MSCHAP, MPPE: shared identical mppe_sha1_pad* between MSCHAP and MPPE 2015-04-18 18:51:45 +02:00
Sylvain Rochet
3862aad2f7 PPP, MSCHAP, reworked local functions and constants
MSCHAP was written the old-way, with all functions declared non static in
header, independent of their local or global scope status. Same for local
constants. Reworked in a more mordern way.
2015-04-18 17:56:35 +02:00
Sylvain Rochet
2a005c2f11 PPP, MPPE, moved MPPE global variables from MSCHAP to ppp_pcb 2015-04-18 17:41:44 +02:00
Sylvain Rochet
ab46ac9bd8 PPP, CHAP, reworked to pass ppp_pcb pointer to CHAP childs (MD5, MSCHAP, MSCHAPv2)
We are going to need ppp_pcb* in MSCHAP and MSCHAPv2 for MPPE for
int mppe_keys_set, u_char mppe_send_key and u_char mppe_recv_key
which are currently global variable which must be moved to ppp_pcb.
2015-04-18 17:29:55 +02:00
Sylvain Rochet
c51ed84fd8 PPP, MPPE, added ppp_mppe_state comp and decomp to ppp.h 2015-04-18 16:13:44 +02:00
Sylvain Rochet
74054ea907 PPP, MPPE, struct ppp_mppe_state to typedef
We usually handle "typedefed" struct in lwIP, and I agree this is a cleaner
approach. Replaced struct ppp_mppe_state to ppp_mppe_state.
2015-04-18 14:54:25 +02:00
Sylvain Rochet
f79bc03360 PPP, MPPE, optimized struct ppp_mppe_state size 2015-04-18 13:41:38 +02:00
Sylvain Rochet
b553df860c PPP, CCP, deflate, BSD compress, predictor 1 & 2 are now optional at compile time 2015-04-18 02:02:00 +02:00
Sylvain Rochet
f753a728dd PPP, CCP, compile-out a bit more MPPE code if MPPE is disabled 2015-04-18 01:10:25 +02:00
Sylvain Rochet
3f2e8ebcdf PPP, MPPE, merged mppe_comp_init() and mppe_decomp_init() into mppe_init()
Removing a bit of redundancy and previous artefact of a generic kernel
interface. Exporting mppe_init() instead of mppe_comp_init() plus
mppe_decomp_init().
2015-04-18 00:48:26 +02:00
Sylvain Rochet
a1fe83c070 PPP, MPPE, remove dead code 2015-04-18 00:43:24 +02:00
Sylvain Rochet
879c94b01e PPP, MPPE, removed mppe_alloc() and mppe_free()
We are going to use statically allocated struct ppp_mppe_state through PPP PCB,
removed now useless mppe_alloc() and mppe_free().

Merged mppe_alloc() key copy to mppe_init().
2015-04-18 00:33:57 +02:00
Sylvain Rochet
da40445d75 PPP, MPPE, changed API to use struct ppp_mppe_state* instead of void*
Now that struct ppp_mppe_state is exported, change MPPE API to use
struct ppp_mppe_state* instead of void*, we don't need that to be generic.
2015-04-18 00:26:15 +02:00
Sylvain Rochet
6235e1ae57 PPP, MPPE, moved struct ppp_mppe_state from mppe.c to mppe.h
In order to be able to use struct ppp_mppe_state statically allocated,
export struct ppp_mppe_state.
2015-04-18 00:15:52 +02:00
Sylvain Rochet
3618432107 PPP, MPPE, reworked mppe_rekey()
Moved sha1_context from struct ppp_mppe_state to stack, we don't need it past
mppe_rekey(). Moved shared MEMCPY() outside initial_key if block.
2015-04-18 00:02:49 +02:00
Sylvain Rochet
f1cba8a0ea PPP, MPPE, merged get_new_key_from_sha() to mppe_rekey()
get_new_key_from_sha() is only used in mppe_rekey(), merged
2015-04-17 23:53:22 +02:00
Sylvain Rochet
489760d2e3 PPP, CCP, re-added missing ccp_test()
ccp_test() is not only used to test kernel support, but also to set MPPE keys,
we will change that further, but for now, re-add the necessary ccp_test()
2015-04-17 23:21:13 +02:00
Sylvain Rochet
caf9fc5687 PPP, MPPE, adapt compressor to use pbuf
mppe_compress() now takes a pointer to a pbuf pointer and re-use the
passed buffer for MPPE "compression".
2015-04-16 22:23:57 +02:00
Sylvain Rochet
dc93c2afec PPP, MPPE, removed address, control and protocol from compressor input
Our PPP stack deals with packet without address and control byte nor 2-byte
protocol field, improved mppe_compress() so we don't have to worry about
them.
2015-04-14 22:56:46 +02:00
Sylvain Rochet
9164c4f309 PPP, MPPE, removed address, control and protocol from compressor output
Our PPP stack deals with packet without address and control byte nor 2-byte
protocol field, improved mppe_compress() so we don't have to worry about
them.
2015-04-14 22:56:41 +02:00
Sylvain Rochet
e241f880e8 PPP, code cleaning, fixed ppp_input() indentation 2015-04-13 23:19:43 +02:00
Sylvain Rochet
662f1355de PPP, fixed LWIP_IPV4=1 and PPP_IPV4_SUPPORT=0 support
If LWIP_IPV4 is true but PPP_IPV4_SUPPORT is false, we need
a dummy ppp_netif_output_ip4() callback because we don't have
a netif_null_output_ip4() by default like we have for IPv6 with
netif_null_output_ip6().
2015-04-13 23:07:42 +02:00
Sylvain Rochet
c865211c2f PPP, get_mask() is only used for IPCP, moved to PPP_IPV4_SUPPORT functions group 2015-04-13 22:58:45 +02:00
sg
6324068d34 Worked on IPv6-only stack: netdb should work 2015-04-13 21:29:04 +02:00
sg
e77e18f8c4 Worked on IPv6-only stack:
- prepared DNS;
- fixed compiling ppp.c
2015-04-13 21:24:40 +02:00
sg
69c337b31d Fixed ntoa/aton/ntop/pton definitions after making IPv4 optional 2015-04-13 20:52:42 +02:00
Sylvain Rochet
bc99f75b53 PPP, PPPoL2TP, removed unnecessary single pbuf
Removed ppp_singlebuf() in pppol2tp_input(), chained pbuf are perfectly
acceptable for IP data and we are currently supporting them perfectly
for PPPoS. The PPP stack itself (LCP, IPCP et al.) does not support
chained pbuf and is already calling ppp_singlebuf() just before passing
packet to the protocol handler.

Added ppp_singlebuf() in pppol2tp_dispatch_control_packet() because we
do not support chained pbuf in L2TP control packet.
2015-04-12 22:00:43 +02:00
Sylvain Rochet
421582d747 PPP, MPPE, using err_t return for mppe_decompress 2015-04-12 21:09:15 +02:00
Sylvain Rochet
ab1606a0f6 PPP, MPPE, adapt decompressor to use pbuf
mppe_decompress() now takes a pointer to a pbuf pointer and re-use the
passed buffer for MPPE "decompression". Removed sub protocol handling
which can be shared among all decompressors in ppp.c
2015-04-12 21:04:22 +02:00
Sylvain Rochet
bcfaeca373 PPP, PPPoE, removed unnecessary single pbuf
Removed ppp_singlebuf() in pppoe_data_input(), chained pbuf are
perfectly acceptable for IP data and we are currently supporting them
perfectly for PPPoS. The PPP stack itself (LCP, IPCP et al.) does not
support chained pbuf and is already calling ppp_singlebuf() just before
passing packet to the protocol handler.
2015-04-12 20:08:01 +02:00
Sylvain Rochet
5f0e261f2d PPP, MPPE, handle packets in decompressor without address and control nor protocol
Our PPP stack deals with packet without address and control byte nor 2-byte
protocol field, improved mppe_decompress() so we don't have to worry about
them.
2015-04-12 18:41:21 +02:00
Sylvain Rochet
0e1aec4348 PPP, using ip4_input() instead of ip_input()
In PPP, we previously know if we are dealing with a IPv4 or a IPv6 packet,
we don't need to use the ip_input() dispatch function, removing a useless
if and reducing call stack by one.
2015-04-12 13:53:53 +02:00
sg
c1c65777b6 worked on task #13480: added LWIP_IPV4 define - IPv4 can be disabled, leaving an IPv6-only stack (SNMP is still missing) 2015-04-12 10:43:46 +02:00
Sylvain Rochet
89d666155d PPP, MPPE, fixed mppe_rekey()
Oops, it was introduced when porting to PolarSSL ARC4.
2015-04-12 01:27:05 +02:00
Sylvain Rochet
4d6d65ee33 PPP, MPPE, fixed SHA1 padding
SHA1 padding is 40 byte, not 256 byte. Rekeying is done for each
packet in stateless mode, ensure speedness using static table for padding.
2015-04-11 23:57:47 +02:00
Sylvain Rochet
dcdb360a19 ip6_addr.c: fixed IPv6 ip6_addr_any value
0000:0000:0000:0000:0000:0000:0000:0000 instead of
0000:000a:0000:000b:0000:000c:0000:000d
2015-04-11 20:24:56 +02:00
Sylvain Rochet
8a73990f51 PPP, PPPoL2TP, improved pppol2tp_create() error path 2015-04-11 14:06:06 +02:00
Sylvain Rochet
efe229a54b PPP, PPPoL2TP, merged pppol2tp_input_ip() to pppol2tp_input()
We don't need anymore an input function for ip4 and an input function
for ip6, work to achieve that was partially done by ce7e31cd.
pppol2tp_input() is now only called by pppol2tp_input_ip(), finishing
dual stack support by merging pppol2tp_input_ip() into pppol2tp_input().
2015-04-11 13:56:41 +02:00
Sylvain Rochet
d6fdf7d4b1 PPP, PPPoL2TP, switched to dual stack IPv4/IPv6
Replaced ip4_addr_t to ip_addr_t in pppapi_pppol2tp_create() prototype,
now binding to UDPv6 or UDPv4 depending on the passed ip_addr_t type.

Removed pppol2tp_create_ip6() and pppapi_pppol2tp_create_ip6().
2015-04-11 13:15:06 +02:00
goldsimon
cf180b651b fixed unit tests after changing ip_addr_t 2015-04-10 08:51:06 +02:00
goldsimon
2e649e1843 Added IP_ADDR4()/IP_ADDR6() initializer macros that initialize ip_addr_t like their counterparts IP4_ADDR()/IP6_ADDR() 2015-04-10 08:49:32 +02:00
goldsimon
1985579148 fixed compiler warning (signed/unsigned comparison) introduced when fixing bug #44766 2015-04-10 07:46:31 +02:00
goldsimon
d31dbc6798 Fixed constant initializer problem in ip_addr_t by having ip6 first 2015-04-10 07:41:40 +02:00
Sylvain Rochet
ffd45a2261 PPP, added new build dependencies in init.c 2015-04-10 01:00:08 +02:00
Sylvain Rochet
135631d29d fixed some obvious compiler warnings
lwip/src/include/lwip/autoip.h:52:1: error: C++ style comments are not allowed in ISO C90 [-Werror]
 //#include "lwip/udp.h"

lwip/src/core/ipv4/autoip.c:70:1: error: C++ style comments are not allowed in ISO C90 [-Werror]
 //#include "lwip/udp.h"

lwip/src/include/lwip/api.h:239:25: error: declaration of ‘lev’ shadows a previous local [-Werror=shadow]
   SYS_ARCH_DECL_PROTECT(lev); \
2015-04-09 23:27:36 +02:00
sg
ce7e31cd04 task #12722 (improve IPv4/v6 address handling): renamed ip_addr_t to ip4_addr_t, renamed ipX_addr_t to ip_addr_t and added IP version;
ip_addr_t is used for all generic IP addresses for the API, ip(4/6)_addr_t are only used internally or when initializing netifs or when calling version-related functions
2015-04-09 22:21:15 +02:00
goldsimon
4ff1eb1890 fixed bug #44766 (LWIP_WND_SCALE: tcphdr->wnd was not scaled in two places) 2015-04-08 07:29:11 +02:00
goldsimon
7c47c917b5 dhcp: start discovery with short timeouts on network change, even if already discovering 2015-04-02 11:02:16 +02:00
Sylvain Rochet
7285459375 PPP, MPPE, exported MPPE functions 2015-03-29 12:19:33 +02:00
Sylvain Rochet
52b7ebd4e7 PPP, MPPE, fixed compiler warnings 2015-03-29 12:19:33 +02:00
Sylvain Rochet
ea6f624b58 PPP, MPPE. fixed port mistake on SHA1 computation 2015-03-29 12:19:33 +02:00
Sylvain Rochet
3cf3b78192 PPP, MPPE, commented-in Linux interface calls structure 2015-03-29 12:19:33 +02:00
Sylvain Rochet
cdc2d034de PPP, MPPE, temporarily replaced kzalloc() with malloc() 2015-03-29 12:19:32 +02:00
Sylvain Rochet
cd8a17d644 PPP, MPPE, removed useless Linux stuff 2015-03-29 12:19:32 +02:00
Sylvain Rochet
57e3e7f150 PPP, MPPE, improved SHA1 padding
Don't allocate 512 bytes of RAM for padding. Reduce overall padding
size to 64, therefore using stack instead of RAM or ROM.
2015-03-29 12:19:32 +02:00
Sylvain Rochet
c759639603 PPP, MPPE, removed "compression" stats
We don't need "compression" stats on a encryption protocols, as commented
"Since every frame grows by MPPE_OVHD + 2 bytes, this is always going
to look bad ... and the longer the link is up the worse it will get."
2015-03-29 12:19:32 +02:00
Sylvain Rochet
a6c101aeb8 PPP, MPPE, removed now useless setup_sg() function 2015-03-29 12:19:32 +02:00
Sylvain Rochet
7ea8a754c1 PPP, MPPE, using our ARC4 instead of Linux crypto ARC4 2015-03-29 12:19:32 +02:00
Sylvain Rochet
d5667343cb PPP, updated polarssl readme 2015-03-29 12:19:32 +02:00
Sylvain Rochet
0bfe435c4f PPP, MPPE, updated polarssl ARC4 for lwIP 2015-03-29 12:19:32 +02:00
Sylvain Rochet
cd39843c75 PPP, MPPE, import unmodified ARC4 from polarssl 2015-03-29 12:19:32 +02:00
Sylvain Rochet
f9ae65acd8 PPP, MPPE, added build macro if MPPE is not enabled 2015-03-29 12:19:32 +02:00
Sylvain Rochet
cfd930cae7 PPP, MPPE, using our SHA1 instead of Linux crypto sha1 2015-03-29 12:19:32 +02:00
Sylvain Rochet
0b7e3610ac PPP, MPPE, using lwIP ERR_BUF instead of Linux DECOMP_ERROR error type 2015-03-29 12:19:32 +02:00
Sylvain Rochet
10946e7669 PPP, MPPE, removed a bit more Linux stuff 2015-03-29 12:19:32 +02:00
Sylvain Rochet
2dcd8c2729 PPP, MPPE, removed include we don't have 2015-03-29 12:19:32 +02:00
Sylvain Rochet
dcde1c2a8f PPP, CCP, added missing defines from linux/ppp-comp.h to ccp.h 2015-03-29 12:19:32 +02:00
Sylvain Rochet
0810384555 PPP, MPPE, replaced printk() to PPPDEBUG() 2015-03-29 12:19:32 +02:00
Sylvain Rochet
434fb1e0da PPP, MPPE, fixed path to mppe.h 2015-03-29 12:19:32 +02:00
Sylvain Rochet
435a0b98ac PPP, MPPE, cleaning license notice
We only need to keep the BSD license part in lwIP, cleaning the part which
is only relevant for the Linux kernel.
2015-03-29 12:19:32 +02:00
Sylvain Rochet
05eda236cc PPP, MPPE, import unmodified Linux MPPE encoder/decoder
This file, which is an unmodified copy of Linux MPPE encoder/decoder, is
licensed under a dual License BSD/GPL model. It was previously in the
pppd source tree and it was removed because this is merged into the Linux
kernel.
2015-03-29 12:19:32 +02:00
goldsimon
c998faeeab fixed bug #44649 lwip_socket_drop_registered_memberships 2015-03-27 13:18:34 +01:00
Sylvain Rochet
f967933e8b PPP, PPPoS, protect open flag in connect() and listen()
Protect open flag in connect() and listen(), this is a bitfield, it might
not be set atomically on some targets.
2015-03-26 23:30:18 +01:00
Sylvain Rochet
8862a1ac8f PPP, MPPE, ccp_options->mppe is a bitfield of MPPE_OPT_* and not a boolean, fixed
This is actually wrong as well in PPPd, oops.
2015-03-25 00:09:37 +01:00
Sylvain Rochet
ad56a115be PPP, CCP, moved ccp_test() from ccp_addci() to ccp_resetci()
We don't need to test our available compression protocols that much, we know
what we are going to be able to use in embedded. Even PPPd don't need that.

Checking only in ccp_resetci() is enough, this way we know our cilen size
before ccp_addci() is called. PPPd is designed that *_addci() can use less
bytes than it previously asked in *_cilen(), we prefer to avoid that here.

We actually don't need at all ccp_test() calls, we know what we are
able to support at compile time, we don't need to ask the kernel like
PPPd does. This is just the first step in ccp_test() removal.
2015-03-24 23:37:56 +01:00
Sylvain Rochet
c8ed013600 PPP, FSM, added assert to easily track cilen size mismatch
See c49fc8d for such a problem which ends up with heap corruption.
2015-03-24 23:10:58 +01:00
Sylvain Rochet
c49fc8db72 PPP, CCP: Fix ccp_cilen returning size if both deflate_correct and deflate_draft are enabled
This fixes a bug returning 4 byte less than necessary for the addci buffer
if both deflate_correct and deflate_draft are enabled.
2015-03-24 21:38:33 +01:00
sg
93fa268db1 used ip6_addr_t instead of struct ip6_addr, fix const'ness in ip6_route parameters 2015-03-24 21:30:22 +01:00
sg
521c92764d loopif is not required for loopback traffic any more but passed through any netif (ENABLE_LOOPBACK has to be enabled) (task #13515) 2015-03-24 21:22:19 +01:00
sg
71d121fab2 Added input & route hooks for IPv6 to stay in line with IPv4 2015-03-24 20:33:47 +01:00
sg
86970a01d7 etharp: reduce ARP aging timeout from 20 minutes to 5 minutes, since this is a time obviously used in some switches as MAC learning table timeout. Having our ARP timeout higher than this can lead to sending unicast packets to multiple network segments. 2015-03-24 20:04:18 +01:00
Sylvain Rochet
210496f0ca PPP, IPV6, correct fix for IPV6CP_COMP disabling 2015-03-23 23:48:00 +01:00
sg
2eb0386c2a fixed bug #36017 ARP might not support duplicate addresses on multiple netifs (tried to correctly handle duplicate AutoIP addresses on multiple netifs, but only if explicitly enabled via ETHARP_TABLE_MATCH_NETIF==1) 2015-03-23 22:04:57 +01:00
sg
440c99100b fixed bug #34617: Stable etharp entries that are about to expire are now refreshed using unicast to prevent unnecessary broadcast.
Only if no answer is received after 15 seconds, broadcast is used.
2015-03-23 21:38:19 +01:00
sg
33d5e646e5 fixed bug #41318 (Bad memory ref in tcp_input() after tcp_close()) 2015-03-21 21:19:10 +01:00
sg
c00a62d37f fixed bug #38468 (tcp_sent() not called on half-open connection for data ACKed with the same ack as FIN) 2015-03-21 20:56:42 +01:00
Sylvain Rochet
17486408b4 PPP, IPV6, fixed build if VJ support is disabled 2015-03-21 20:41:03 +01:00
Sylvain Rochet
c17594c1d0 PPP, CORE, don't build get_loop_output() if demand support (not supported) is not enabled 2015-03-21 20:12:14 +01:00
sg
4463239d6e fixed bug #38204 (DHCP lease time not handled correctly) 2015-03-21 10:09:31 +01:00
sg
45d82c8d99 dhcp.c: removed dead code (#if 0) 2015-03-20 21:03:19 +01:00
sg
3e302e8683 fixed bug #38714 (Missing option and client address in DHCPRELEASE message) 2015-03-20 21:02:41 +01:00
sg
d6620f0f3a fixed bug #38203 (DHCP options are not recorded in all DHCP ack messages) 2015-03-20 20:29:04 +01:00
Sylvain Rochet
f7a5b71dba nd6: fixed compiler warnings
nd6.c: In function ‘nd6_send_rs’:
nd6.c:997:52: warning: suggest parentheses around ‘+’ inside ‘<<’ [-Wparentheses]
   p = pbuf_alloc(PBUF_IP, sizeof(struct rs_header) + lladdr_opt_len << 3, PBUF_RAM);
                                                    ^
nd6.c:998:58: warning: suggest parentheses around ‘+’ inside ‘<<’ [-Wparentheses]
   if ((p == NULL) || (p->len < (sizeof(struct rs_header) + lladdr_opt_len << 3))) {
2015-03-20 20:11:59 +01:00
Ivan Delamer
a4d14fc987 fix bug #44586: nd6_send_rs() pbuf size error 2015-03-20 09:04:22 -06:00
Sylvain Rochet
c8587e1242 tcp_in: typo fix. Fixes bug #4458944589. 2015-03-20 13:22:47 +01:00
Sylvain Rochet
4e62a88870 PPP, PPPoL2TP, fixed build with IPv6 enabled 2015-03-20 09:48:40 +01:00
Clint Sbisa
32f6e7e231 tcp: Fix ooseq processing when seqno is near 2^32
An edge case in out-of-sequence TCP packet processing did not use the
appropriate macro to check if the sender overran the recieve window.

Consequently, this case sometimes evaluated to true when it shouldn't, which
resulted in various bad behavior, including trying to resize a TCP buffer to 4
gigabytes.
2015-03-20 08:32:14 +01:00
goldsimon
94f7bcef67 Fixed tcp unit tests after changing routing to check for link up 2015-03-20 08:31:39 +01:00
Sylvain Rochet
36e90a1bd5 PPP, CCP, add dummy ccp_ functions in ppp.c so it builds if CCP_SUPPORT is set 2015-03-20 00:37:34 +01:00
Sylvain Rochet
9fbe900949 PPP, MPPE, replaced #ifdef MPPE to #if MPPE_SUPPORT 2015-03-20 00:20:12 +01:00
Sylvain Rochet
73f1511ac2 PPP, CORE, removed auth fields from struct ppp_pcb if auth is disabled 2015-03-20 00:00:46 +01:00
Sylvain Rochet
5937932370 PPP, CCP, various fix if MPPE is enabled 2015-03-19 21:45:19 +01:00
Sylvain Rochet
794c93b540 PPP, CCP, various compiler warnings fix 2015-03-19 21:45:19 +01:00
Sylvain Rochet
b92ac33022 PPP, CCP, updated to our utils.c function name 2015-03-19 21:45:19 +01:00
Sylvain Rochet
90bbcbf994 PPP, CCP, updated ccp_printpkt() prototype to match other *_printpkt() 2015-03-19 21:45:19 +01:00
Sylvain Rochet
151995f88c PPP, CCP, updated ANY_COMPRESS() to use ccp_options* 2015-03-19 21:45:19 +01:00
Sylvain Rochet
611b3c4c2c PPP, CCP, commented-in unused global variables used for options 2015-03-19 21:45:19 +01:00
Sylvain Rochet
2a6104ab17 PPP, CCP, added ccp.h in ppp.h 2015-03-19 21:45:19 +01:00
Sylvain Rochet
1dcd4cc220 PPP, CCP, reworked to our ppp_pcb* pointer and ppp_pcb->ccp* data field 2015-03-19 21:45:19 +01:00
Sylvain Rochet
7174578ac3 PPP, CCP, moved CCP global variables to ppp_pcb (ppp.h) 2015-03-19 21:45:19 +01:00
Sylvain Rochet
10d09049bb PPP, CCP, replaced bool to unsigned int in struct ccp_options 2015-03-19 21:45:19 +01:00
Sylvain Rochet
98c6a4e86e PPP, CCP, updated FSM state with our FSM state define PPP_FSM_x 2015-03-19 21:45:19 +01:00
Sylvain Rochet
3bd52891c5 PPP, CCP, commented-in unused PPP config file parsing 2015-03-19 21:45:19 +01:00
Sylvain Rochet
ee752ab1ce PPP, PPPoS, renamed PPP_INPROC_MULTITHREADED to PPP_INPROC_IRQ_SAFE
Follow-up of the #44565 bug fix, renamed the misnamed
PPP_INPROC_MULTITHREADED to PPP_INPROC_IRQ_SAFE because it is
IRQ safe but not thread safe.

Updated PPP documentation which now clearly state when and how
this feature can be used.
2015-03-19 21:43:55 +01:00
sg
9eb900c448 fixed race conditions in assigning netconn->last_err (fixed bugs #38121 and #37676) 2015-03-19 21:20:29 +01:00
Sylvain Rochet
0e919d25e9 PPP, PPPoS, improved tcpip input path, fixed bug #44565
New input type TCPIP_MSG_INPKT_PPPOS. Removed the netif input pointer usage
which was actually broken by design.

Fixed bug #44565.
2015-03-19 21:04:21 +01:00
Sylvain Rochet
4ed34d2c6f PPP, PPPoL2TP, fixed build without IPv6 enabled 2015-03-19 20:43:04 +01:00
Sylvain Rochet
c893b44da2 PPP, PPPoS, struct pbuf *n and u8_t *cur are now unused, removed 2015-03-19 20:29:26 +01:00
Ivan Delamer
d06a736f41 fix bug #44578: Build fails for IPv6-only configuration 2015-03-19 10:08:49 -06:00
goldsimon
b135a0aa49 pppos_input_tcpip: fix pbuf leak if tcpip_input returns error, use pbuf_take instead of duplicate copy code 2015-03-19 07:14:33 +01:00
Ivan Delamer
c73daef2a1 fixed bug #43843: ip6_addr_ismulticast_ doesn't allow for transient
multicast address
2015-03-18 14:04:39 -06:00
Ivan Delamer
bc08c1d2b7 fixed bug #43095. Check actual link-layer address option length, versus
maximum length defined in struct. Bug would express itself if we have a
netif with 8-byte addresses and other netifs with 6-byte-or-less
addresses.
2015-03-18 13:21:39 -06:00
Ivan Delamer
8451feaa7a fixed bug #42885 nd6_reachability_hint() accepts an address of an
unknown neighbour
2015-03-18 12:22:49 -06:00
Ivan Delamer
e30823769c renamed ND6_RA_FLAG_OTHER_STATEFUL_CONFIG to ND6_RA_FLAG_OTHER_CONFIG
as explained in bug #39963 and RFCs.
2015-03-18 12:01:15 -06:00
Ivan Delamer
12e3b52f4d fixed bug #39226: Validity of netif IPv6 address is not always checked 2015-03-18 11:56:48 -06:00
Ivan Delamer
5812b22662 Pending fix for bug #37993: IPv6 Does Not Subscribe to Link-Local
All-Nodes Multicast Group By Default
2015-03-18 11:20:16 -06:00
Ivan Delamer
f139b14a3c added macros for handling IPv6 multicast filter callback. 2015-03-18 11:08:40 -06:00
Ivan Delamer
291f1382c5 fix ip6 part of bug #43904: ip_route() and ip6_route() must detect
linkup status.
2015-03-18 10:56:02 -06:00
Ivan Delamer
e0fe83740a fixed bug #44565: PPPOS support in tcpip thread breaks SLIP 2015-03-18 10:16:14 -06:00
Sylvain Rochet
9012ec5310 PPP, PPPoS, changed pppos_output_append() description to match code change 2015-03-16 21:54:50 +01:00
Sylvain Rochet
c37ecb1552 PPP, cleared warnings if PPP_DEBUG is off 2015-03-15 17:57:16 +01:00
Sylvain Rochet
59d8e76081 PPP, code cleaning, u_char to u8_t
Replaced u_char to u8_t in our PPP files.
2015-03-14 14:05:33 +01:00
Sylvain Rochet
5097ac05bf PPP, fixed warnings if LWIP_SNMP is disabled 2015-03-14 14:01:29 +01:00
Sylvain Rochet
a9c154691b PPP, PPPoS, code cleaning 2015-03-14 14:01:11 +01:00
Sylvain Rochet
d628a9bc78 PPP, PPPoS, moved common FCS output code in pppos_output_last() 2015-03-14 14:01:11 +01:00
Sylvain Rochet
2fb1859732 PPP, PPPoS, moved checksum computation to pppos_output_append()
Output code is slightly smaller this way.
2015-03-14 14:01:07 +01:00
Sylvain Rochet
5f5d16c698 PPP, PPPoS, code cleaning
Reduced types that were too large, replace u_char to u8_t, u_short to u16_t.
2015-03-14 13:17:17 +01:00
Sylvain Rochet
f666e772a2 PPP, PPPoL2TP, warning fix if PPP IPv6 is enabled
lwip/src/netif/ppp/pppol2tp.c: In function ‘pppol2tp_udp_send’:
lwip/src/netif/ppp/pppol2tp.c:1229:3: warning: ‘err’ may be used uninitialized in this function [-Wmaybe-uninitialized]
   return err;
   ^
2015-03-14 12:48:38 +01:00
Sylvain Rochet
8974b12af5 PPP, PPPoE, removed redundant size check 2015-03-14 01:12:43 +01:00
Sylvain Rochet
f96d5c9633 PPP, PPPoS, code cleaning
Renamed pppos_drop() → pppos_input_drop()
Renamed pppos_free_current_input_packet() → pppos_input_free_current_packet()
Moved pppos_output_last() after pppos_output_append()
Moved pppos_input_free_current_packet() before pppos_input_drop()
2015-03-14 01:08:56 +01:00
Sylvain Rochet
50336aaedd PPP, ppp->last_xmit is only used in PPPoS, moved to PPPoS
Only PPPoS need to keep track of last transmitted packet for HDLC flag,
removed from PPPoE and PPPoL2TP and moved to PPPoS.
2015-03-14 01:03:58 +01:00
Sylvain Rochet
6a04357547 PPP, PPPoS, reworked output path, reduced serial tx pbuf buffers to 1
We actually allocated a pbuf chain only to iterate later the linked list
calling sio_write() for each pbuf, improved by calling sio_write() when
buffer is full and by recycling the pbuf, therefore only using one pbuf
for PPPoS output path.

Reworked pppos_write() and pppos_netif_output() to share more common
code into pppos_output_append() and pppos_output_last().
2015-03-14 00:37:58 +01:00
Sylvain Rochet
0da64f430e PPP, Documentation, improved PPP_INPROC_MULTITHREADED part 2015-03-12 00:16:03 +01:00
Sylvain Rochet
e27ab3a24f PPP, PPPoS, disable TCPIP API if PPP_INPROC_MULTITHREADED is true
If PPP_INPROC_MULTITHREADED is true, then user does not what to use
the TCPIP API. Disabling the TCPIP API helps the user to understand
that PPP_INPROC_MULTITHREADED must not be used if he wish to use
the TCPIP API.
2015-03-11 23:52:20 +01:00
Sylvain Rochet
121de4ef47 PPP, PPPoS, now using MEMCPY here, add #include <string.h> 2015-03-11 09:29:44 +01:00
Sylvain Rochet
77f7d99048 PPP, PPPoS, add pppos_input_tcpip() input helper function for !NO_SYS users 2015-03-11 09:28:35 +01:00
Sylvain Rochet
4b035b9902 PPP, PPPoS, PPP_INPROC_MULTITHREADED defaults to 0, explain thread safety issue with it 2015-03-11 01:20:53 +01:00
Sylvain Rochet
9778b1411c PPP, PPPoS, TCPIP: add packet input path for point to point interfaces (only PPPoS for now) through the TCPIP API
!NO_SYS users may now use as well the TCPIP API for PPPoS input data,
this way they can disable PPP_INPROC_MULTITHREADED and run pppos_input()
inside the lwIP thread, which fixes, at least for them, all the
threading issues related to PPP_INPROC_MULTITHREADED.
2015-03-11 00:58:09 +01:00
Sylvain Rochet
636ff411f1 PPP, PPPoS, improve the freeing of remaining RX pbuf if PPP_INPROC_MULTITHREADED is not enabled
If PPP_INPROC_MULTITHREADED is not enabled, we can free unfinished
RX pbuf from the pppos_disconnect() function because pppos_input()
is running in the same context. Thanks to the pppos->open flags we
now only need to free remaining pbuf in the disconnect function
if PPP_INPROC_MULTITHREADED is not enabled.
2015-03-10 23:58:16 +01:00
Sylvain Rochet
02598d1e91 PPP, PPPoS, moved pcomp and accomp only used by PPPoS to PPPoS 2015-03-10 23:51:32 +01:00
Sylvain Rochet
31aea3c996 PPP, PPPoS, moved vj_enabled flag from PPP CORE to PPPoS
Now that we have flags in PPPoS, moved vj_enabled only used for PPPoS to
PPPoS.
2015-03-10 23:42:14 +01:00
Sylvain Rochet
a60f2588d6 PPP, PPPoE and PPPoL2TP, removed ppp->pcomp usage
We refuse protocol compression in both PPPoE and PPPoL2TP, therefore
ppp->pcomp can't be true, removed.
2015-03-10 23:34:11 +01:00
Sylvain Rochet
d518f5f307 PPP, PPPoS, improve thread safety of pppos_input()
Don't process input data if PPPoS is closed, it helps using
pppos_input() from a different context to prevent pppos_input() to
modify PPPoS RX machine state on a closed PPPoS session. It also
prevents allocating pbuf (which are going to be tossed out by PPP core)
and parsing serial input on a closed session.

It only mitigates the fact that this function is actually NOT thread
safe in absolutely all cases, it does not fix it but it helps for a low
cost.

For example user application should never call pppos_input() while
pppos_connect() or pppos_listen() is currently running because both of
them are freeing any input pbuf left over from the last session before
resetting the PPPoS state, they really have to to prevent pbuf leaks.

We cannot fix that easily because we don't have spinlock with an
irqsave/irqrestore helper for IRQ contexts. Mutex cannot be used in
interrupt contexts (or again, with an IRQ mutex helper).

We are going to improve the documentation on this point.
2015-03-10 23:20:23 +01:00
Sylvain Rochet
d5cbacba50 PPP, PPPoS, don't protect pppos->in_accm if PPP_INPROC_MULTITHREADED is not enabled
If pppos_input() is used without PPP_INPROC_MULTITHREADED, then pppos_input()
is running in the lwIP context, we don't need to protect anything.
2015-03-10 22:35:04 +01:00
Sylvain Rochet
ab0f3da650 Revert "PPP, PPPoS, fixed thread safety of pppos_input()"
This reverts commit ea58a8103c.
2015-03-10 21:49:50 +01:00
Sylvain Rochet
52de24b95b Revert "PPP, PPPoS, added necessary comment about mutex"
This reverts commit b23a6172ed.
2015-03-10 21:49:50 +01:00
Sylvain Rochet
70b60bbe16 PPP, display correct pbuf size in ppp_input() debug messages 2015-03-10 21:49:50 +01:00
sg
aff890bce8 Fixed compiler error if LWIP_IPV6==0 but LWIP_IPV6_FRAG==1 2015-03-10 21:42:29 +01:00
sg
905f1609b3 fixed the IPv4 part of bug #43904 (ip_route() must detect linkup status) 2015-03-09 21:35:57 +01:00
goldsimon
c978b25f7f Enable LWIP_PPP_API by default if (PPP_SUPPORT && (NO_SYS == 0)) 2015-03-09 09:13:28 +01:00
Sylvain Rochet
2b526756f0 PPP, updated netif/FILES about PPP 2015-03-09 00:49:08 +01:00
Sylvain Rochet
8a436d5103 PPP, IPV6CP, code cleaning on VJ support 2015-03-08 23:36:28 +01:00
Sylvain Rochet
1dd050aaca PPP, IPV6CP, build out IPv6 VJ support using the existing IPV6CP_COMP define 2015-03-08 23:17:11 +01:00
Sylvain Rochet
99bcce7892 PPP, IPCP, removed proxy ARP support 2015-03-08 23:00:27 +01:00
Sylvain Rochet
0e2ea94f5e PPP, IPCP, removed WINS support 2015-03-08 22:53:12 +01:00
Sylvain Rochet
9cd7abdd6e PPP, IPCP, fully removed DNS support from IPCP if LWIP_DNS is disabled 2015-03-08 22:40:56 +01:00
Sylvain Rochet
dbacfe0a1d PPP, IPCP, fully removed VJ support from IPCP if VJ_SUPPORT is disabled 2015-03-08 22:40:53 +01:00
Sylvain Rochet
d50494f274 PPP, Documentation, added DNS change 2015-03-08 14:15:20 +01:00
Sylvain Rochet
4b5e867a69 PPP: Documentation: replaced deprecated ip_ntoa() to ipaddr_ntoa() 2015-03-08 13:57:26 +01:00
Sylvain Rochet
969306f0f1 API: netdb: replaced deprecated ip_ntoa() to ipaddr_ntoa() 2015-03-08 13:57:13 +01:00
Sylvain Rochet
af722a2978 PPP, IPv6, reduce size of llv6_ntoa() function
Reduced static buffer to the strict necessary (26 bytes), removed
call to eui64_ntoa(), merged eui64_ntoa() into llv6_ntoa().

272 bytes (code + static buffers) to 140 bytes on x86_64.

Improved eui64_ntoa() as well, we don't need it anymore but I'd
like to keep all eui64_* helpers functions.
2015-03-08 13:33:55 +01:00
Sylvain Rochet
7fce9346dc PPP, improved IPv6 address setting
Set IPv6 link local invalid before clearing it. Don't wait sif6up() to set
the link local valid, netif_ip6_addr_set_state() is only an accessor function
so it does not start any discovery whatsoever.
2015-03-08 12:47:09 +01:00
Sylvain Rochet
b23a6172ed PPP, PPPoS, added necessary comment about mutex 2015-03-08 12:05:13 +01:00
Sylvain Rochet
ea58a8103c PPP, PPPoS, fixed thread safety of pppos_input()
PPPoS was actually not thread safe, pppos_input() can be called from
lwIP user port at any time, whatever the PPP state is. It might even be
called during pppos_connect() and pppos_listen(), this is quite unlikely
the port do that but nothing prevent the user to since we document
pppos_input() as being thread safe.

Added a mutex if PPP_INPROC_MULTITHREADED is set and ensure pppos_input()
is safe in regard to other pppos_* functions.
2015-03-08 02:48:52 +01:00
Sylvain Rochet
7857c22277 PPP, Documentation, updated 2015-03-08 01:09:44 +01:00
Sylvain Rochet
b3c7e948be PPP, removed now useless struct ppp_addrs from ppp_pcb
Saved a few bytes of useless copy.
2015-03-08 00:44:47 +01:00
Sylvain Rochet
c966a538fb PPP, improved IPv6 address setting
Now setting IPv6 addresses in sif6addr() instead of sif6up(),
removed the useless copy of addresses.
2015-03-08 00:40:34 +01:00
Sylvain Rochet
3027a7d7e2 PPP, using DNS API for DNS servers
Now setting DNS addresses in sdns() using dns_setserver() instead
of keeping a local copy. This is probably the wanted PPP behavior,
we will see if users want this conditional.
2015-03-08 00:11:52 +01:00
Sylvain Rochet
dd22176935 PPP, improved IPv4 address setting
Now setting IPv4 addresses in sifaddr() instead of sifup(),
removed the useless copy of addresses.
2015-03-07 23:53:21 +01:00
Sylvain Rochet
dbf9d0f094 DNS, warning fix, dns_init() -> dns_init(void)
lwip/src/core/dns.c: In function ‘dns_init’:
lwip/src/core/dns.c:336:1: warning: old-style function definition [-Wold-style-definition]
 dns_init()
2015-03-07 23:28:18 +01:00
Sylvain Rochet
b3218d45f3 PPP, make DNS a little more optional if LWIP_DNS is unset 2015-03-07 23:28:14 +01:00
Sylvain Rochet
3ca5184998 PPP, CORE, separated administrative status from link status of PPP netif
This was confusing, recent lwIP changes fixed the meaning as well as
how it is used everywhere, making the administrative status a user-only
controlled flag. Now that it's clear, updated PPP to follow lwIP
core change.

Using netif_set_link_{up,down} instead of netif_set_{up,down} when PPP
reaches/leaves running state. PPP interface is now set to administratively
UP when created with link state down.
2015-03-07 22:24:27 +01:00
sg
007ab69777 Fixed default LWIP_SUPPORT_CUSTOM_PBUF setting for IPv6/frag 2015-03-06 22:09:33 +01:00
sg
12d374d4b7 Added function documentation, fixed coding style 2015-03-06 21:38:57 +01:00
sg
0ddd7de1ba patch #8359 (Provide utility function to add an IPv6 address to an interface) 2015-03-06 21:30:59 +01:00
sg
f385193a89 Patch #8207 (Don't Use ND6 Prefix Flags Field When LWIP_IPV6_AUTOCONFIG Is Deasserted) 2015-03-06 21:03:21 +01:00
Philip Gladstone
ff078920bc Patch #8360 (Speed up the acquisition of SLAAC addresses) - adapted to bug #43784 2015-03-06 20:58:30 +01:00
sg
b62f443be5 Fixed comment for NETIF_FLAG_UP after fixing bug #37068 2015-03-06 20:49:47 +01:00
sg
553c4203ab tcp/udp_netif_ipv4_addr_changed(): don't change specific-address of local tcp_listen/udp_pcb to ANY on address change 2015-03-06 20:25:51 +01:00
goldsimon
df16a7c4f3 Fixed compiler warnings in unit tests 2015-03-06 07:39:06 +01:00
goldsimon
896535fe87 Fixed dhcp unit tests after changing netif up/down handling 2015-03-06 07:38:51 +01:00
Sylvain Rochet
89434f6a2f PPP, CORE, call netif_set_up() after if4_up and if6_up flags are set, to prevent dropping packets
lwIP core might send packet when calling netif_set_up(), don't drop packets
anymore in ppp_netif_output_ip4() and ppp_netif_output_ip6() because flags
are cleared.
2015-03-05 22:00:11 +01:00
sg
4e520cdd30 fixed bug #37068 (netif up/down handling is unclear): correclty separated administrative status of a netif (up/down) from 'valid address' status ATTENTION: netif_set_up() now always has to be called, even when dhcp/autoip is used! 2015-03-05 20:57:43 +01:00
sg
72dcdb7655 fixed bug #43784 (a host should send at least one Router Solicitation) 2015-03-04 21:21:49 +01:00
sg
db5510b866 init.c: raise an error if LWIP_PPP_API==1 but PPP_SUPPORT==0 2015-03-04 21:10:29 +01:00
sg
61e0efa0c7 fixed bug #41094 (Byte-order bug in IPv6 fragmentation header test) 2015-03-04 21:02:52 +01:00
sg
12514c09b2 Fixed bug #39956 (netif_create_ip6_linklocal_address out of bounds access of netif::hwaddr) 2015-03-04 20:58:37 +01:00
sg
90a0590de1 patch by Zach Smith: fixed bug #38153 (nd6_input() byte order issues) 2015-03-04 20:49:02 +01:00
Sylvain Rochet
b09c891290 PPP, PPPoE, removed devname variable from pppoe_disc_input()
Only used for debug, reworked in a more clever way. It was actually broken
by design: setting an interface integer into a string without formatting
was quite a dumb idea.
2015-03-02 00:45:19 +01:00
Sylvain Rochet
d28bb04a9c PPP, PPPoE, improve reliability if we receive a PADT
Don't disconnect when we receive a PADT, we let the LCP Echo/Reply find
the fact that PPP session is down. Asking the PPP stack to end the
session require strict checking about the PPP phase to prevent endless
disconnection loops.

Luckily it previously does nothing because PADT frames are rarely sent
with a hunique tag and we only set the sc pointer if we receive a
hunique tag.
2015-03-02 00:16:25 +01:00
Sylvain Rochet
9de1c71ff7 PPP, PPPoE, removed global static buffer only used for debug
pppoe_error_tmp[] was only used in one function and only for debug purposes,
moved to stack.
2015-03-02 00:05:55 +01:00
Sylvain Rochet
3ce6dd166c PPP, L2TP, added link-level IPv6 support 2015-03-01 22:04:24 +01:00
Sylvain Rochet
684bef066f PPP, L2TP, merged common output code
New function: pppol2tp_udp_send(), common output code.
2015-03-01 21:22:21 +01:00
Sylvain Rochet
52f2221be9 PPP, L2TP, check source ip address and port
Improve L2TP defensiveness by checking source ip address and port
of input packets.
2015-03-01 21:15:15 +01:00
Sylvain Rochet
1bee131d52 PPP, L2TP, using LNS chosen destination port
L2TP LNS might chose its own local port, we actually stored
the port the LNS wanted to use but we never used it.
2015-03-01 21:14:52 +01:00
Sylvain Rochet
2731976a95 PPP, renamed ppp_open to ppp_connect
Makes it clear we are initiating the PPP session with ppp_connect
(i.e. acting as a PPP client) so there is no confusion possible
between ppp_connect and ppp_listen.
2015-03-01 10:53:08 +01:00
Sylvain Rochet
f7d5e81130 PPP, SERVER, MSCHAP: move output message from chap_server.message struct to stack
chap_server.message is only used in one function, moved to stack.
2015-03-01 00:34:00 +01:00
Sylvain Rochet
371bc91d73 PPP, SERVER: added PPPoS server support
New function: ppp_listen(), listen for an incoming PPP connection.
2015-02-28 22:41:18 +01:00
Sylvain Rochet
89771de6d0 PPP, remove VJ callback from link_callbacks if VJ support is not enabled 2015-02-28 21:39:32 +01:00
Sylvain Rochet
71b213df63 PPP, EAP: using MAXNAMELEN define instead of hardcoded 256 size for rhostname 2015-02-28 20:37:41 +01:00
Sylvain Rochet
7f3913ff58 PPP, EAP: removed malloc() and free()
Replaced pcb->eap.es_{client,server}.ea_peer pointer to a char table,
replaced strdup() with MEMCPY, etc.
2015-02-28 20:29:40 +01:00
Sylvain Rochet
d884034c9f PPP, replaced drand48() with magic_pow() 2015-02-28 19:50:25 +01:00
Sylvain Rochet
bec199c4a2 PPP, MAGIC: new function: magic_pow
magic_pow() returns a new random number between 0 and (2^pow)-1 included.
2015-02-28 19:36:03 +01:00
Sylvain Rochet
3686110ed2 PPP, SERVER: statically define our name for authentication purposes
We don't need that in RAM nor a pointer to a string, a static
define is fine for embedded devices, saved ~257 bytes of RAM.
2015-02-28 18:28:07 +01:00
Sylvain Rochet
708e421ec3 PPP, CORE: code cleaning 2015-02-28 18:08:37 +01:00
Sylvain Rochet
5ae7ee5276 PPP, SERVER: added CHAP authentication support 2015-02-28 17:40:07 +01:00
Sylvain Rochet
65493b421a PPP, SERVER, CHAP: fixed wrong pointer used on chap_timeout() 2015-02-28 15:36:35 +01:00
Sylvain Rochet
301511a840 PPP, SERVER: added PAP authentication support
New ppp auth function: auth_check_passwd() which check the user name and
passwd against configuration.

PAP: check remote user and password
2015-02-28 14:40:09 +01:00
Sylvain Rochet
e86a0a4325 PPP, CORE, SERVER, set auth configuration before auth
Set LCP wanted options accordingly to the user auth configuration
if peer is required to authenticate itself.
2015-02-28 13:08:20 +01:00
Sylvain Rochet
8d05279599 PPP, CORE, moved auth configuration from auth_reset() to lcp_resetci()
Prepare for PPP_SERVER support, we need to move auth configuration before
lcp_allowoptions is copied into lcp_gotoptions. Restore unused
auth_reset() function using pppd original source code.
2015-02-28 12:59:29 +01:00
Sylvain Rochet
587e0e3e0c PPP, CORE, beautified ppp_set_auth()
Beautified, added PPPAUTHTYPE_MSCHAP_V2 choice support.
2015-02-27 23:55:18 +01:00
Sylvain Rochet
2315f32ca0 PPP, CORE, cleaned struct ppp_settings coding style 2015-02-27 23:12:03 +01:00
Sylvain Rochet
5a71509353 PPP, CORE, IPCP: removed useless ask_for_local boolean
We don't need ask_for_local boolean, this is only useful for setup which
can determine the local IP address from the system hostname, which is
probably meaningless for embedded devices (and probably any devices).

It was actually only set by ip_check_options() which is commented out in
lwIP because we don't parse a config file nor check PPP configuration
(user is responsible about writing a configuration which is logical ;-).
Furthermore ask_for_local boolean never set actually had the wrong
default for PPP server setups.
2015-02-27 22:39:42 +01:00
Sylvain Rochet
a310bc19a7 netif: fixed compiler warning
lwip/src/core/netif.c: In function ‘netif_set_ipaddr’:
lwip/src/core/netif.c:403:5: warning: implicit declaration of function ‘udp_netif_ipv4_addr_changed’ [-Wimplicit-function-declaration]
     udp_netif_ipv4_addr_changed(&netif->ip_addr, ipaddr);
     ^
2015-02-26 22:45:37 +01:00
sg
0647533f8c fixed bug #44378 (TCP connections are not aborted on netif remove) 2015-02-26 22:25:39 +01:00
sg
99dd78964a fixed bug #40753 (re-bind UDP pcbs on change of IP address) 2015-02-26 22:17:30 +01:00
sg
0d1606ff23 Fixed last commit: can only check for bound sockets, not for unbound. There's some work to do for IPv6 in TCP... 2015-02-26 21:31:48 +01:00
sg
a6a92d42f9 Fixed bug #41700 (Call to tcp_listen_dual() should not accept IPv4 listen PCB args) 2015-02-26 21:23:40 +01:00
Sylvain Rochet
2aabe16163 PPP, PPPoS, removed ppp_accm_mask[], saved a few bytes of ROM
This was a pretty naive way of doing a bitshift, code is smaller if we let
the compiler decide.
2015-02-25 23:04:55 +01:00
sg
5984c996a8 fixed bug #40177 (System hangs when dealing with corrupted packets), implemented task #12357 (Ensure that malicious packets don't assert-fail): improved some pbuf_header calls to not assert-fail. 2015-02-25 22:58:27 +01:00
sg
c8d126f6ef work on task #12357 (Ensure that malicious packets don't assert-fail): don't let too short IP packets assert-fail; fix that IPv6 input did not obey VLAN header offset 2015-02-25 22:23:12 +01:00
Joel Cunningham
9004554da3 fixed bug #43028 (IP_MULTICAST_TTL affects unicast datagrams) 2015-02-25 21:59:21 +01:00
Greg Renda
4eb9efdd33 fixed bug #38210 (ip reassembly while remove oldest datagram) 2015-02-25 21:43:39 +01:00
sg
83740d81f2 fixed comment 2015-02-25 21:32:33 +01:00
sg
c8581e4cd9 fixed bug #38165 (socket with mulicast): ensure igmp membership are dropped when socket (not netconn!) is closed. 2015-02-25 21:30:22 +01:00
sg
612e33c499 fixed bug #38061 (wrong multicast routing in IPv4) by adding an optional default netif for multicast routing 2015-02-25 20:58:11 +01:00
sg
3e8ac30940 Fixed bug #44297 (CORE_LOCKING was broken some days ago); fixed that netconn_connect still used message passing for LWIP_TCPIP_CORE_LOCKING==1 2015-02-25 20:34:18 +01:00
Sylvain Rochet
4bcddd72e6 PPP, CORE, cleaned ppp_close() function
Calling new_phase() instead of assigning pcb->phase directly.
Removed redundant call to link status callback.
2015-02-24 22:13:04 +01:00
Sylvain Rochet
00bb70a62d PPP, CORE, functions ppp_set_netif_statuscallback() and ppp_set_netif_linkcallback() replaced with defines
PPP is now pointerful for a while, we don't need anymore accessor functions
for the unique PPP local and static control block. Replaced
ppp_set_netif_statuscallback() and ppp_set_netif_linkcallback() functions to
defines.

Removed pppapi_do_ppp_set_netif_statuscallback() and
pppapi_do_ppp_set_netif_linkcallback(), they were useless because
netif_set_status_callback() and netif_set_link_callback() can be
safely called while PPP status is in dead (= non open) state
and even before the PPP session is actually created at all.
2015-02-24 20:41:47 +01:00
Sylvain Rochet
b4990b5bb4 Fixed warnings on whole project introduced by const pointers on ip_addr_t 2015-02-22 22:50:06 +01:00
Sylvain Rochet
65095253a9 PPP, fixed warnings introduced by const pointers on ip_addr_t 2015-02-22 22:38:02 +01:00
sg
c87efb77bc patch by Jens Nielsen: fixed bug #38803 (Source address in broadcast ping reply) 2015-02-22 22:02:17 +01:00
sg
03159254ce added proper accessor functions for pcb->multicast_ip (previously used by get/setsockopt only) 2015-02-22 21:49:46 +01:00
sg
ec5cf8593e Continued chrysn's work: changed nearly all functions taking 'ip(X)_addr_t' pointer to take const pointers (changed user callbacks: raw_recv_fn, udp_recv_fn; changed port callbacks: netif_output_fn, netif_igmp_mac_filter_fn) 2015-02-22 21:46:35 +01:00
chrysn
9f065c0ea5 (api break) qualify ip_addr_t as const where feasible
this changes the callback signatures of the ip_output and the
{udp,raw}_recv functions.

changes were made by going through all header files, searching for
occurrences of ip_addr_t, qualifying them as const and if required
modifying the corresponding c files, looking for other uses of ip_addr_t
that would be required.

the following header files were not treated as i'm not using them and
wouldn't see them compiled: api.h api_msg.h dhcp.h dns.h igmp.h
netifapi.h pppapi.h snmp.h snmp_msg.h snmp_structs.h ppp.h pppol2tp.h
test/*

no modifications were done on ip6_addr_t.
2015-02-22 21:46:02 +01:00
Sylvain Rochet
df3f05e824 PPP, apply warnings found by MSVC fixes on other files needing the same fix 2015-02-22 21:39:04 +01:00
sg
9a10afbbc6 PPP: fixed 2 warnings found by MSVC 2015-02-22 21:30:17 +01:00
Sylvain Rochet
8d916b8573 PPP, PPPoS, removed unused next field in pppos_pcb
Linked list was removed, we don't need the next pointer anymore.
2015-02-22 16:57:57 +01:00
Sylvain Rochet
653657ae43 PPP, code cleaning 2015-02-22 16:45:38 +01:00
Sylvain Rochet
b0b7240022 PPP, PPPoS, moved advise about modem from pppos_create() to ppp_open()
pppos_create() can be called whether the modem is ready to process the
PPP session since pppos_create() does not start the PPP session anymore,
moved the advise from pppos_create() to ppp_open().
2015-02-22 16:20:03 +01:00
Sylvain Rochet
1e82003bf9 CORE, INIT, fail if none of PPP_IPV[46]_SUPPORT are enabled if PPP_SUPPORT is enabled
PPP_SUPPORT needs PPP_IPV4_SUPPORT and/or PPP_IPV6_SUPPORT turned on.
2015-02-22 14:30:24 +01:00
Sylvain Rochet
4be7fccad3 PPP, CORE, ppp_close() and ppp_sighup() ended up sharing almost everything, merged
Merged ppp_sighup() to ppp_close() using an optional argument  "nocarrier"
on ppp_close().
2015-02-22 14:25:36 +01:00
Sylvain Rochet
b040ace4c2 PPP, CORE, carrier lost signal, fixed FSM mismatch
ppp_sighup() hard change the PPP FSM phase, it ends up with a FSM
mismatch if PPP is currently connecting or disconnecting.

Only do "sighup" on the stable running phase, fallback to the close
method. Handle special DEAD and HOLDOFF states as well.
2015-02-22 13:54:52 +01:00
Sylvain Rochet
ab572ce5b9 PPP, CORE, fixed PPP phase state machine when ppp_close() is called during HOLDOFF phase
Aborting HOLDOFF leaves us at PPP_PHASE_DEAD, fixed.
2015-02-22 13:48:53 +01:00
Sylvain Rochet
ded77f59cd PPP, FSM, fixed "timeout sending Config-Requests" output
\n is not needed, fixed.
2015-02-22 12:12:38 +01:00
Sylvain Rochet
a1c5415f8f PPP, CORE, disable VJ is PPP IPV4 is compiled out
VJ compression is only supported for PPP IPv4, compile out VJ support
if PPP IPv4 is not compiled.
2015-02-22 02:34:45 +01:00
Sylvain Rochet
00e8988b52 PPP, IPv4 support is now optional
New compile time option: PPP_IPV4_SUPPORT

PPP IPv4 support can now be compiled out.
2015-02-22 02:28:04 +01:00
Sylvain Rochet
5680808fb6 PPP, CORE, ppp_ioctl PPPCTLG_UPSTATUS command now returns true if only IPv6 is up
PPPCTLG_UPSTATUS ioctl didn't return true if IPv6 was up and IPv4 down, fixed.
2015-02-22 01:34:47 +01:00
Sylvain Rochet
814bcc04ad PPP, CORE, using ip*_set_* functions instead of IP4_ADDR and SMEMCPY
Now using lwIP helper functions on ip_addr_t and ip6_addr_t.
2015-02-22 01:33:02 +01:00
Sylvain Rochet
a8cbff08ef PPP, IPV6, enable PPP IPv6 by default if LWIP_IPV6 is set 2015-02-22 00:25:23 +01:00
Sylvain Rochet
ee8a05c3c7 PPP, CORE, removed if_up and if6_up checks in sifdown() and sif6down()
It can't hurt us, checking is useless.
2015-02-21 23:53:40 +01:00
Sylvain Rochet
46d7f6f95d PPP, IPv6, fixed unicode in file headers 2015-02-21 23:49:57 +01:00
Sylvain Rochet
30c89310a6 PPP, CORE, IPv6, if_up flag used instead of if6_up for outgoing IPv6 packets, fixed
We can have an IPv6 only PPP interface, checking if6_up instead of if_up fixes
IPv6 only setup.

ppp_netif_output() which were only used for common code between
ppp_netif_output_ip4() and ppp_netif_output_ip6() is not necessary
anymore, removed, reducing call stack by one.
2015-02-21 23:34:45 +01:00
Sylvain Rochet
d6e1b86147 PPP, CORE, improved, re-ordered and re-numbered IOCTL commands 2015-02-21 21:52:39 +01:00
Sylvain Rochet
a8e973f5d7 PPP, CORE, remove the user ability to set the PPP error code (PPPCTLS_ERRCODE)
This is now totally useless, it was used for the PPP core code but it is not
used anymore, remove then the user ability to set the PPP error code through
PPPCTLS_ERRCODE.
2015-02-21 21:48:53 +01:00
Sylvain Rochet
c4d1354c54 PPP, CORE, don't use ppp_ioctl() from PPP core, assign pcb->err_code instead
Removed useless calls to ppp_ioctl(pcb, PPPCTLS_ERRCODE, …), we now assign
pcb->err_code directly instead. ppp_ioctl() is not linked anymore if user
application don't use it.
2015-02-21 21:42:59 +01:00
Sylvain Rochet
dc2e700057 PPP, CORE, using u8_t on ioctl command instead of int
We don't need an int here, all commands are between 0 and 255.
2015-02-21 21:37:08 +01:00
Sylvain Rochet
bfe0c3a8e0 opt.h: fixed warnings if PPP auth support is not enabled
lwip/src/netif/ppp/polarssl/md4.c:43:20: warning: "LWIP_INCLUDED_POLARSSL_MD4" is not defined [-Wundef]
lwip/src/netif/ppp/polarssl/sha1.c:42:20: warning: "LWIP_INCLUDED_POLARSSL_SHA1" is not defined [-Wundef]
lwip/src/netif/ppp/polarssl/des.c:43:20: warning: "LWIP_INCLUDED_POLARSSL_DES" is not defined [-Wundef]
2015-02-21 19:43:04 +01:00
Sylvain Rochet
a387270b76 PPP, PPPoS, fixed PPP_INPROC_MULTITHREADED support
Oops.
2015-02-21 19:38:47 +01:00
Sylvain Rochet
59b659b027 PPP, CORE, compile out auth support if none of auth protocols are enabled
Added macro PPP_AUTH_SUPPORT, if none of auth protocols are enabled
(PAP, CHAP, EAP) we reduce PPP memory usage by compiling out all
struct fields and source code used for authentication.
2015-02-21 19:32:38 +01:00
Sylvain Rochet
973472c51e opt: clarified VJ support
VJ is only supported for PPPoS, RFCs does not say VJ is forbidden on
PPPoE or PPPoL2TP (looks like it is strongly discouraged though, due
to checksum issues when using VJ).
2015-02-21 18:43:31 +01:00
Sylvain Rochet
9052511c86 PPP, Documentation, fixed PPP_INPROC_MULTITHREADED default status 2015-02-21 18:41:39 +01:00
Sylvain Rochet
f57d4818a4 PPP, using PPP netif->num number instead of ppp->num
Saved 2 bytes of RAM if debug is enabled, we are now using the
netif->num number instead of using our own ppp->num
2015-02-21 01:21:24 +01:00
Sylvain Rochet
c5973dd411 PPP, Documentation, minor fixes 2015-02-21 00:05:38 +01:00
Sylvain Rochet
e5f38bf391 PPP, added PPP documentation 2015-02-21 00:01:43 +01:00
Sylvain Rochet
6b4db944dd PPP, using err_t return code instead of PPPERR_
Standardised PPP API to follow lwIP already used return codes.
PPPERR_ are now used only on link status callback.
2015-02-20 21:24:58 +01:00
Sylvain Rochet
0a761d238a PPP, using err_t return type on ppp_ioctl() 2015-02-20 21:01:24 +01:00
Sylvain Rochet
c8f026c382 PPP, PPPoS, removed PPPERR_ on err_t return type 2015-02-20 20:54:05 +01:00
Sylvain Rochet
2c70c12814 PPP, PPPoL2TP, removed PPPERR_ usage
Low level protocol callbacks are using err_t returns type,
don't use PPPERR_ on them.
2015-02-20 20:52:10 +01:00
Sylvain Rochet
b31f6eb45f PPP, PPPoE, removed PPPERR_ usage
Low level protocol callbacks are using err_t returns type,
don't use PPPERR_ on them.
2015-02-20 20:51:37 +01:00
Sylvain Rochet
d387c1c83a PPP, PPPoS, added missing static modifier on pppos_netif_input() 2015-02-20 19:35:12 +01:00
Sylvain Rochet
7a1a2b9aa6 PPP, PPPoS, code cleaning 2015-02-20 01:00:48 +01:00
Sylvain Rochet
444da3ecec PPP, CORE, we don't need PPP_LINK_ENABLED_NUMBER anymore 2015-02-20 00:44:58 +01:00
Sylvain Rochet
1918914598 PPP, PPPoS, removed linked list
We don't need anymore the PPPoS linked list since we have callbacks
for everything.
2015-02-20 00:40:45 +01:00
Sylvain Rochet
29f3f2e1d8 PPP, PPPoS, moved VJ protocol handler to PPPoS
New callback, netif input, allow low level drivers to extend
ppp_input call, moved PPPoS VJ support to pppos.c.
2015-02-20 00:40:45 +01:00
Sylvain Rochet
759d11ce1a PPP, CORE, beautified ppp_ioctl() 2015-02-20 00:40:45 +01:00
Sylvain Rochet
729e24da78 PPP, PPPoS, added sub-ioctl commands
Allow low level drivers to extend ioctl call, moved PPPoS ioctl
commands to pppos.c.
2015-02-20 00:40:45 +01:00
Sylvain Rochet
ec362536f5 PPP, uniformised callbacks naming 2015-02-20 00:40:45 +01:00
Sylvain Rochet
b92fe3eecb PPP, CORE, new callbacks, send_config, recv_config, vj_config
Removed some calls from PPP core to PPPoS low level protocols,
the const struct allows us to have more and more callbacks
without using more RAM.
2015-02-20 00:40:44 +01:00
Sylvain Rochet
985de035bc PPP, CORE, now using const callbacks struct from lower level protocols
Saving some RAM by using callbacks struct in rodata for required
callbacks called by PPP core to PPP low level protocols.
2015-02-20 00:40:44 +01:00
Sylvain Rochet
2e40ceaaa4 CORE, enabling only PPPoL2TP is also a valid choice 2015-02-20 00:40:44 +01:00
Ivan Delamer
02a797f9f9 Modified netif flag values. 2015-02-19 16:25:30 -07:00
Ivan Delamer
b938154f6b Removed unused netif flag for DHCP 2015-02-19 16:22:19 -07:00
Ivan Delamer
e312ebcb57 Removed unused netif flag for point to point connections 2015-02-19 16:19:29 -07:00
Sylvain Rochet
02cf50063e PPP, PPPoX, added warnings about functions in headers which should not be called from lwIP user application 2015-02-18 23:14:30 +01:00
Sylvain Rochet
f511bec26c PPP, PPPoS, only check PPPoS PCB pointer if PPPoS is not the only enabled lower protocol
We only need to keep track of existing PPPoS interfaces if PPPoS
is not the only enabled protocol.

PPP CORE does not have callbacks pointers for all PPPoS callbacks
which should actually be required for PPPoS (VJ config, asyncmap, ...),
there is too much callbacks to create and PPPoS must be kept light,
especially for users who are only using PPPoS.

But there is a drawback, PPP CORE does not know which
lower protocols it is talking to thanks to the abstraction,
therefore if PPPoS is enabled as well as PPPoE or PPPoL2TP there
might be situation where PPP CORE calls pppos_ config functions
on interfaces which are NOT PPPoS one. This is very unlikely to
happen because protocols not supported by PPPoE or PPPoL2TP are
disabled at LCP/IPCP negotiation but we are better safe than sorry.

So we check if passed PPP pointer to PPPoS configuration functions
is a PPPoS interface by checking against a linked list of existing
PPPoS interfaces.
2015-02-18 23:14:30 +01:00
Sylvain Rochet
9f93c16bbf PPP, CORE, beautified auth protocols debug 2015-02-18 23:14:29 +01:00
Sylvain Rochet
892e75ca92 PPP, CORE, removed useless include of chap-new.h 2015-02-18 23:14:29 +01:00
Sylvain Rochet
5e73068e09 PPP, CORE, Removed (*datainput) from struct protent if not used
Data input is only used by CCP and ECP, which are not supported at this time,
remove this entry from struct protent to save some flash.
2015-02-18 23:14:29 +01:00
Sylvain Rochet
b71d9ce3f6 PPP, CORE, Removed useless enabled_flag from struct protent
Our struct protent are const everywhere to save RAM, enable/disable
flag on a const struct is useless, saving some flash, removed.
2015-02-18 23:14:29 +01:00
sg
730529353d fixed bug #37958 "netconn API doesn't handle correctly connections half-closed by peer" 2015-02-18 22:21:26 +01:00
sg
101f57d5e0 tcp_alloc() prefers killing CLOSING/LAST_ACK over active connections (see bug #39565) (tcp_kill_prio(): back to old implementation) 2015-02-18 21:30:45 +01:00
sg
2cfc9e286e "Not connected" shouldn't be fatal (as opposed to "closed") 2015-02-18 20:39:20 +01:00
sg
998ed99288 Fixed select not reporting received FIN as 'readable' in certain rare cases (bug #43779: select(), close(), and TCP retransmission error) 2015-02-18 20:38:42 +01:00
goldsimon
9048a7f021 fixed compiler warning in dhcp.c 2015-02-18 09:02:37 +01:00
Sylvain Rochet
1c91bb5a20 PPP, PPPoS, fixed warnings with PPPDEBUG disabled 2015-02-18 00:59:27 +01:00
Sylvain Rochet
b957a81ea5 PPP, modified CHANGELOG about the previous large PPP rework
Done!, this is way better than before, I had this rework in mind
for a couple of years and I finally found the time to do it :-)
2015-02-17 23:25:10 +01:00
Sylvain Rochet
19fdeae4ba PPP, chained returns up to ppp_free()
ppp_free() now returns lower level protocol return value if something failed.
2015-02-17 23:22:15 +01:00
Sylvain Rochet
50ecd2c12c PPP, CORE, removed useless st variable in ppp_close()
Code cleaning.
2015-02-17 23:22:15 +01:00
Sylvain Rochet
07f9212799 PPP, chained returns up to ppp_open()
ppp_open() now returns lower level protocol return value if something failed.
2015-02-17 23:22:15 +01:00
Sylvain Rochet
8a8cba75a2 PPP, lower protocols, chained returns from local functions to callback caller
PPPoS,PPPoE,PPPoL2TP functions using non-void returns are now propagated
to callback caller (PPP core).
2015-02-17 23:22:15 +01:00
Sylvain Rochet
1ae3808e13 PPP, CORE, prepared for lower protocols callbacks returning state
Until now, callbacks used void return, preparing callbacks to return
PPPERR_ status.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
ee2936ffbf PPP, all protocols, uniformised naming
Uniformised fonction naming between and inside PPPoS, PPPoE, PPPoL2TP.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
5b29f1cdec PPP, CORE, Fixed warning with PPP_PROTOCOLNAME enabled
lwip/src/netif/ppp/ppp.c: In function ‘ppp_input’:
lwip/src/netif/ppp/ppp.c:769:5: warning: ISO C90 forbids mixed declarations and code [-Wpedantic]
     const char *pname = protocol_name(protocol);
     ^
2015-02-17 23:22:14 +01:00
Sylvain Rochet
bce29ac353 PPP, CORE, code cleaning
Reordered functions in the order they are declared in headers.
Removed useless ppp_link_down() function.
Merged ppp_stop() and ppp_close().
Merged ppp_hup() and ppp_sighup().
2015-02-17 23:22:14 +01:00
Sylvain Rochet
f7584fa883 PPP, CORE, fixed callbacks return value
Fixed return value in case of abnormal termination.
Set pcb->err_code in case of failed setup link.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
18074ff98f PPP, PPPoE, improved removal from linked list
Replaced naive link list removal code to a more clever one.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
4ad60b477c PPP, PPPoS, structure size optimisation
Reordered PPPoS structure so there is no alignment hole for 32 and 64 bits
systems. Reduced types which were too large.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
69469496e2 PPP, PPPoS, moved out_accm from PPP core to PPPoS
Last PPPoS variable in PPP core moved to PPPoS.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
baaa2592a6 PPP, PPPoS, removed xmit_accm, almost duplicate of out_accm
xmit_accm was meant to be a user configurable asyncmap, it was actually
broken since the introduction of ppp_new by the way we now reset the PPP
initial state, looks like no one until now is needing it anymore. If
necessary we will reintroduce this feature later properly instead of a
dirty and ugly hack into the PPP code.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
ecb8aa6fc1 PPP, PPPoS, merged ppp(os)_pcb_rx to pppos_pcb
Merged ppp(os)_pcb_rx to pppos_pcb, saved 8 bytes of pointers
and unecessary init steps.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
34210901bf PPP, PPPoS, moved ppp.rx to pppos.rx
PPP rx control block moved to PPPoS
2015-02-17 23:22:14 +01:00
Sylvain Rochet
7132893863 PPP, PPPoS, re-enabled PPPCTLG_FD
Found a fine way to get PPP fd without making this call crash for for PPPoE
or PPPoL2TP.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
cfe04d4453 PPP, PPPoS, using PPPoS PCB pointer on VJ and pppos_ configuration functions
Slightly more consistent this way, and prevent using link_ctx_cb pointer
from PPPoS protocol file.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
f98f2890f3 PPP, PPPoS, check if PPPoS configuration functions are used on PPPoS
We don't have callbacks which can be set or cleared for PPPoS
configuration, there is too much callbacks to create and PPPoS must be
kept light, therefore PPPoS functions can be called when PPP core
configure a PPPoE or PPPoL2TP interface, this is very unlikely to
happens because protocols not supported by PPPoE or PPPoL2TP are
disabled at LCP/IPCP negotiation but being safe is still better.

Check if passed PPP pointer to PPPoS configuration functions is a PPPoS
interface by using a linked list of exiting PPPoS interfaces.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
d93c21349f PPP, PPPoS, fixed build with PPP_FCS_TABLE=1
Oops, I managed to break builds with PPP_FCS_TABLE=1, fixed.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
9358dbbd99 PPP, PPPoS, various static and const added
ppp_get_fcs() is now static, const modifier added on ppp_accm_mask
2015-02-17 23:22:13 +01:00
Sylvain Rochet
2b9d304816 PPP, PPPoS, renamed *sc pointer to *pppos, renamed *pcb pointers to *pppos and *ppp
It was a bit confusing and error prone having *pcb pointers for both
ppp_pcb* and pppos_pcb*, fixed confusion with a strict naming for both.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
e6465a6f44 PPP, PPPoS, moved VJ from PPP core to PPPoS
VJ is only available for PPPoS, moved VJ from PPP CORE to PPPoS.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
4aa9244b92 PPP, PPPoS moved fd from ppp_pcb to pppos_pcb
Moved fd from ppp_pcb to pppos_pcb.

However PPP ioctl PPPCTLG_FD is temporarily disabled until I found a
better solution.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
1ac4d1b793 PPP, PPPoS needs vj.h 2015-02-17 23:22:13 +01:00
Sylvain Rochet
ea205f2fcd PPP, add PPPoS CB for PPPoS private data
Created a new PPPoS CB going to have PPPoS private data, so allocating a
PPPoE or a PPPoL2TP interface does not allocate as well PPPoS variables.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
9c15ffbb74 PPP: Moved PPPoS from ppp.c to pppos.c
Started removing from PPP core most of low level protocol PPPoS
handling to separate files, using the new low level PPP callbacks.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
09b4485870 PPP, generalized callbacks calls from PPP core, removed all PPPoE and PPPoL2TP references
Almost there, removed all PPPoE and PPPoL2TP references from PPP core,
using the generic callbacks interface everywhere.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
19282d6d6c PPP, moved low level protocol connect init to low level protocol files
Low level protocol init machine state does not belong to PPP core,
moved those init to respective low level protocol files.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
ee85aaccd2 PPP, removed low level create functions from PPP core
ppp_over_ethernet_create() moved from ppp.c to pppoe.c
ppp_over_l2tp_create() moved from ppp.c to pppol2tp.c
2015-02-17 23:22:13 +01:00
Sylvain Rochet
0afc34f6fc PPP, moved ppp_write and ppp_netif_output low level protocols functions to respective low level protocol files
Moved ppp_write_over_ethernet() and ppp_netif_output_over_ethernet() to pppoe.c
Moved ppp_write_over_l2tp() and ppp_netif_output_over_l2tp() to pppol2tp.c
2015-02-17 23:22:13 +01:00
Sylvain Rochet
45bfccfddc PPP, prepare new callbacks for low level protocols
New callbacks: write and netif_output
2015-02-17 23:22:13 +01:00
Sylvain Rochet
f8501478f6 PPP: prepared callbacks from PPP core to low level protocols
New PPP callback from PPP core to low level protocols, first
step about removing named calls to low level protocols from PPP core.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
a5582e0960 PPP: re-order functions in the common sense API order
Re-order ppp.[ch] functions in the order functions should be called from
user application. Moved create functions, which actually return a PPP
control block before functions needing a PPP control block.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
b4fe72c4a2 PPP: removed duplicated code in ppp_close()
Looks like previous refactoring and cleaning made ppp_close()
consistent for all our low level protocol backends, cleaned
up duplicated code.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
48f7678771 PPP: re-order prototypes, ppp_init before ppp_new
Cosmetic only.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
808098413c PPP: removed PPPoE and PPPoL2TP callback status notifier
Added necessary PPP core functions for PPPoE and PPPoL2TP status
notificaton (ppp_link_failed and ppp_link_end), removed callback,
low level protocol are now calling PPP core "link" functions.
2015-02-17 23:22:12 +01:00
Sylvain Rochet
74fd2dc9ad PPP: moved ppp_new() to low level protocol init for PPPoE and PPPoL2TP
First step of a rework of how low level protocols are using the
PPP core. Low level protocols are now going to use the core instead
of core using the low level protocols.

Final goal: separate PPP core code from low level protocols.
2015-02-17 23:22:12 +01:00
Sylvain Rochet
443b2551c7 PPP: moved duplicated init code from ppp_over_X_create() to ppp_new()
Some init code were duplicated for all low-level PPP protocols, moved
uselessly duplicated code to ppp_new().
2015-02-17 23:22:12 +01:00
Sylvain Rochet
7b681bc94a PPP: re-order functions in the common sense API order
Re-order ppp.[ch] functions in the order functions should be called from
user application. Moved create functions, which actually return a PPP
control block before functions needing a PPP control block.
2015-02-17 23:22:12 +01:00
Sylvain Rochet
bd29f7168c PPP: ppp_init() is not a public function, moving it in private part
ppp_init() is not a public fonction anymore, move this function
in ppp.c "private" functions.
2015-02-17 23:22:12 +01:00
Sylvain Rochet
c8c0dc2f53 PPP: using a macro for ppp_set_default() instead of a function
This function is only calling netif_set_default(), a macro
is adequate.
2015-02-17 23:22:12 +01:00
Sylvain Rochet
17c6be6a9b PPP: removed ppp_delete(), merged with ppp_free()
The only benefit of ppp_delete() call was about having a persistent
netif interface. netif was moved out of PPP pcb so we don't need
ppp_delete() anymore, second step in simplifying the weird
new/open/free/delete PPP API.
2015-02-17 23:22:12 +01:00
Sylvain Rochet
318e752fd6 PPP: removed ppp_new(), merged with ppp_over_X_create()
The only benefit of ppp_new() call was about having a persistent netif
interface. netif was moved out of PPP pcb so we don't need ppp_new()
anymore, first step in simplifying the weird new/open/free/delete PPP
API.
2015-02-17 23:22:12 +01:00
Sylvain Rochet
3dcfd7ba41 PPP: moved netif out of PPP control block
Users might want to share a netif control block between an Ethernet
interface and a PPPoS interface (I want actually) in case PPP is just
used as redundancy if Ethernet is down (eg. PPPoS GPRS fail over).

Moved netif out of PPP control block in a similar way it is currently
done for Ethernet interfaces. Furthermore, this is a first step on
removing the "new/create/free/delete" API which is awful but currently
necessary to handle fail over from PPPoX to another PPPoX (eg. from PPoE
on xDSL to PPPoS on GPRS fail over) without free()ing the netif which
might be used on udp_sendto() or L2TP VPN links.
2015-02-17 23:22:12 +01:00
sg
604a92dc3d fixed bug #38853 "connect() use a wrong errno": return ERR_ALREADY/EALRADY during connect, ERR_ISCONN/EISCONN when already connected 2015-02-17 22:10:23 +01:00
sg
b146ae96a7 sockets.c: removed LWIP_TCPIP_CORE_LOCKING hack in lwip_sendto(): since all functions are static when LWIP_NETCONN==0, the speedup gained by this hack should now be minimal and not worth the duplicate code. 2015-02-17 21:26:40 +01:00
goldsimon
0963e91c34 api_msg_c: fixed compiler warning (added brackets in if statement) 2015-02-17 09:38:20 +01:00
goldsimon
5d13b5a2fb fixed bug #37614 "Errors from ipX_output are not processed". Now tcp_output(_segment) checks for the return value of ipX_output and does not try to send more on error. A netif driver can call tcp_txnow() (from tcpip_thread!) to try to send again if TX buffers are available again. 2015-02-17 08:02:34 +01:00
sg
90db821036 patch #8361 "Add support for NTP option in DHCP" (slighly modified) 2015-02-16 21:23:06 +01:00
Sylvain Rochet
99d1fdd270 snmp: syntax error fix on endif comment
*/ omitted on comment, added.
2015-02-14 19:38:35 +01:00
Sylvain Rochet
10ab72855d opt: fix build without SNMP_COMMUNITY_EXT
define value omitted on #define SNMP_COMMUNITY_EXT in opt.h, default is 0
2015-02-14 19:38:29 +01:00
sg
0d18516af8 added support for write-access community and dedicated community for sending traps 2015-02-14 15:44:32 +01:00
sg
e22c815444 patch by Freddie Chopin: SNMP: const-correctness around snmp traps and enterprise 2015-02-14 15:11:44 +01:00
sg
e579e98469 minor coding style fix: tab -> spaces 2015-02-14 15:05:12 +01:00
sg
723eaa1f40 Fixed compiler warning in snmp.h introduced by last patches 2015-02-14 15:04:55 +01:00
Freddie Chopin
4ebeeaf1e0 msg_in.c, msg_in.c: add snmp_get_community() and snmp_set_community() accessors
Signed-off-by: Freddie Chopin <freddie.chopin@gmail.com>
2015-02-14 14:49:42 +01:00
Freddie Chopin
2c9ceea3cf msg_in.c, snmp_msg.h: convert snmp_community to a modifiable pointer
Signed-off-by: Freddie Chopin <freddie.chopin@gmail.com>
2015-02-14 14:49:41 +01:00
Freddie Chopin
c289872ab7 msg_in.c, msg_out.c, snmp_msg.h: rename snmp_publiccommunity to snmp_community, update descriptions
Signed-off-by: Freddie Chopin <freddie.chopin@gmail.com>
2015-02-14 14:49:39 +01:00
Freddie Chopin
9469bdc93e msg_in.c, snmp_msg.h: don't hardcode size of community string
Signed-off-by: Freddie Chopin <freddie.chopin@gmail.com>
2015-02-14 14:47:55 +01:00
Freddie Chopin
9b4564d7f3 snmp_trap_header_sum(): use strlen() to get the length of community string
Signed-off-by: Freddie Chopin <freddie.chopin@gmail.com>
2015-02-14 14:46:51 +01:00
sg
b5b5844119 added hook LWIP_HOOK_MEMP_AVAILABLE() to get informed when a memp pool was empty and an item is now available 2015-02-13 21:53:55 +01:00
sg
6ef7563f53 Added the option PBUF_LINK_ENCAPSULATION_HLEN to allocate additional header space for TX on netifs requiring additional headers 2015-02-13 21:42:04 +01:00
sg
e3e3200f95 fixed bug #22070 "MIB_OBJECT_WRITE_ONLY not implemented in SNMP" 2015-02-13 21:12:23 +01:00
sg
7a0f814043 introduce sys_timeouts_sleeptime (returns the time left before the next timeout is due, for NO_SYS==1) 2015-02-12 22:14:28 +01:00
sg
80b62df0a9 fixed bug #36403 "ip4_input() and ip6_input() always pass inp to higher layers": now the accepting netif is passed up, but the input netif is available through ip_current_input_netif() if required. 2015-02-12 22:04:10 +01:00
chrysn
81d4e201bb include the memp struct list once before actually using it
when custom lwipopts.h files are used (MEMP_USE_CUSTOM_POOLS), there is
typically the need to use sizeof(some_struct) in there, but on structs
that are not already declared in lwip; thus, they use #include on custom
headers.

even if the included files have proper include guards, the way memp
headers are used (

    typedef enum {
    #define LWIP_MEMPOOL(name,num,size,desc)  MEMP_##name,
    #include "lwip/memp_std.h"
      MEMP_MAX
    } memp_t;

) breaks when fresh includes are involved. in this patch, this gets
circumvented by including lwip/memp_std.h once with an empty
LWIP_MEMPOOL definition, so that all the includes from custom
lwippools.h files can be handled safely.
2015-02-11 23:10:15 +01:00
sg
8155b8cfb3 patch #7702 "Include ability to increase the socket number with defined offset" 2015-02-11 23:05:52 +01:00
sg
276e35ecfb Fixed a bug in linger-closing when LWIP_TCPIP_CORE_LOCKING==1 2015-02-11 22:53:19 +01:00
sg
7d8657287e patch #8362 Add defines for well known ethernet packet types 2015-02-11 21:59:48 +01:00
sg
f7905582db More tiny code cleanups... 2015-02-11 21:53:12 +01:00
Fred Baksik
f12e6837be LWIP_PLATFORM_DIAG: check if LWIP_PLATFORM_DIAG is defined as needed.
-- LWIP_STATS and LWIP_DEBUG require this macro
2015-02-11 21:44:43 +01:00
Fred Baksik
3870031c6e LWIP_ASSERT: check for LWIP_PLATFORM_ASSERT if LWIP_NOASSERT is not defined.
-- add comment about usage of LWIP_NOASSERT
2015-02-11 21:43:40 +01:00
sg
060a1fc727 patch #8481 Fix a couple of c&p mistakes in the error prints 2015-02-11 21:39:45 +01:00
sg
28783abbe2 fixed bug #43094 "The function tcpip_input() forget to handle IPv6" 2015-02-11 21:36:46 +01:00
sg
974a853f40 patch #8423 "arch/perf.h" should be made an optional item 2015-02-11 21:25:47 +01:00
sg
7ff9825f55 started to implement fullduplex sockets/netconns (note that this is highly unstable yet!) 2015-02-11 21:18:15 +01:00
sg
04b4971d8c Added comment that sys_thread_new must not fail (ports have to assert this!) 2015-02-11 21:12:49 +01:00
sg
6c3f6cfd89 netconn/socket api: fixed bug #44225 "closing TCP socket should time out eventually", implemented task #6930 "Implement SO_LINGER": closing TCP sockets times out after 20 seconds or after the configured SND_TIMEOUT or depending on the linger settings; fixed that netconn_close/netconn_delete still used message passing for LWIP_TCPIP_CORE_LOCKING==1 2015-02-10 22:15:54 +01:00
sg
ee833ea594 changed comment in struct linger 2015-02-10 21:40:27 +01:00
goldsimon
338feef70e memp: also export memp_sizes[] if MEMP_USE_CUSTOM_POOLS==1 2015-02-10 15:18:14 +01:00
sg
ec68aaf43b fixed that SHUT_RD followed by SHUT_WR was different to SHUT_RDWR, fixed return value of lwip_netconn_do_close on unconnected netconns 2015-01-27 21:28:39 +01:00
goldsimon
24df78bcbc fixed that lwip_netconn_do_delconn() did not set msg->err on success (just introduced that bug this weekend...) 2015-01-20 14:01:16 +01:00
goldsimon
e926a93568 tcp_kill_prio(): prefer nearly-closed connections (waiting for the last ACK only) over established connections when out of tcp pcbs 2015-01-20 12:45:26 +01:00
sg
28476e3b7b Fixed bug #38315 tcp_eff_send_mss_impl() always subtract the difference in IPv6 header size 2015-01-18 14:08:11 +01:00
sg
05aa0ad114 netconn_delete(): check for errors returned by lwip_netconn_do_delconn() and don't call netconn_free() on error 2015-01-17 21:54:17 +01:00
sg
5ceaed291f fixed bug #43361 select() crashes with stale FDs 2015-01-17 21:02:58 +01:00
sg
48934414b2 patch #8479 Fixed a visibility scope that caused a compile error in some configurations (by Constantine <nongnusucks>) 2015-01-17 14:55:32 +01:00
sg
c1804810d8 allow enabling socket API without (public) netconn API - netconn API is still used by sockets, but keeping it private (static) should allow better compiler optimizations 2015-01-17 14:42:50 +01:00
sg
69ee35c909 tcp_close_shutdown: remove invalid comment on linger: we cannot support linger for the raw API since linger implies blocking 2015-01-17 14:36:39 +01:00
sg
5d2e93e5f0 fixed bug #40788 "lwip_setsockopt_internal() crashes" by rewriting set/getsockopt functions to combine checks with the actual code and add more NULL checks; this also fixes that CORE_LOCKING used message passing for set/getsockopt. 2015-01-17 14:18:27 +01:00
goldsimon
1cbd2121e2 Allow to overrid the check for p->ref==1 in TX packets (there *are* netif drivers that can handle this) 2015-01-16 17:58:07 +01:00
goldsimon
c0d9e3231b Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip 2015-01-16 17:38:20 +01:00
goldsimon
2775fb5a45 fixed bug #20506 "Initial congestion window is very small" again by implementing the calculation formula from RFC3390 2015-01-16 17:38:07 +01:00
Sylvain Rochet
6ca8bc4037 inet_checksum: fixed prototype of lwip_standard_chksum() when LWIP_CHKSUM_ALGORITHM == 1 2015-01-10 13:59:55 +01:00
Sylvain Rochet
5dd6b1effc PPP, updated pppd followup 2014-12-24 23:23:36 +01:00
Sylvain Rochet
369e9fbf08 PPP, from PPPD upstream, Eliminate some unnecessary ifdefs 2014-12-24 23:12:30 +01:00
Sylvain Rochet
e39d012312 PPP, from PPPD upstream, separate IPv6 handling for sifup/sifdown
The current code is buggy regarding handling of link state when using
both IPCP and IPv6CP: if IPv6CP has been set up and if during IPCP
negociation, ipcp_up() fails, it will incorrectly take the interface
down. The simple solution here is to change the platform code to do the
same as on Solaris: separate IPv6CP up/down state handling with sif6up()
and sif6down(), so that we really know when the interface is allowed to
go down.

(Based from pppd commit b04d2dc6df5c6b5650fea44250d58757ee3dac4a)
2014-12-24 23:01:06 +01:00
Sylvain Rochet
7d077a2260 PPP,SLIP include lwip/sio.h after lwip/sys.h to prevent functions prototype collision
User port may redefine sio_* functions, we must ensure we are loading
user functions prototypes before loading default prototypes.
2014-12-24 21:23:54 +01:00
Sylvain Rochet
b30faa577d PPP, moved ppp_init() from public API (ppp.h) to private API (ppp_impl.h)
ppp_init() is called by lwip_init(), users don't need to init PPP by themselves
2014-12-24 19:08:58 +01:00
Sylvain Rochet
91356d2d03 PPPAPI, added const modifier on auth strings 2014-12-24 19:05:19 +01:00
Sylvain Rochet
61f0231ce0 PPP, fixed more compiler warnings
Using -Wall -pedantic -Wparentheses -Wsequence-point
-Wswitch-default -Wextra -Wundef -Wshadow -Wpointer-arith
-Wbad-function-cast -Wc++-compat -Wwrite-strings -Wold-style-definition
-Wmissing-prototypes -Wredundant-decls -Wnested-externs -Wno-address
2014-12-24 18:14:10 +01:00
Sylvain Rochet
482a18e6de PPP, added const modifier on auth strings 2014-12-24 17:17:00 +01:00
Sylvain Rochet
382ddac1a1 CORE: fixed missing prototype for pbuf_header_impl() function
lwip/src/core/pbuf.c:502:1: warning: no previous prototype for ‘pbuf_header_impl’ [-Wmissing-prototypes]
2014-12-24 15:18:21 +01:00
Sylvain Rochet
2b3e020152 PPP, fixed some compiler warnings
Using -Wall -pedantic -Wparentheses -Wsequence-point
-Wswitch-default -Wextra -Wundef -Wshadow -Wpointer-arith
-Wbad-function-cast -Wc++-compat -Wwrite-strings -Wold-style-definition
-Wmissing-prototypes -Wredundant-decls -Wnested-externs -Wno-address
2014-12-24 15:16:03 +01:00
goldsimon
01391f0234 etharp: fixed casting 'ctime' from u16_t to u8_t in local variables (introduced when fixing bug #34682) 2014-12-22 11:21:18 +01:00
goldsimon
32c6f96000 prevent dhcp from starting when netif link is down (only when LWIP_DHCP_CHECK_LINK_UP==1, which is disabled by default for compatibility reasons) 2014-12-19 16:04:48 +01:00
goldsimon
a883fe7b8e sockets.c: fixed assert check after changing type of sock->select_waiting to unsigned 2014-12-17 16:21:44 +01:00
goldsimon
5d74d97fe1 TCP_OVERSIZE: make segment size allocated by TCP_OVERSIZE overridable for tests 2014-12-17 09:32:08 +01:00
goldsimon
db4844e3f0 fixed bug #43840 Checksum error for TCP_CHECKSUM_ON_COPY==1 for no-copy data with odd length 2014-12-17 09:26:17 +01:00
sg
7ca4fd817e - fixed bug #43797 set/getsockopt: SO_SNDTIMEO/SO_RCVTIMEO take int as option but should take timeval (LWIP_SO_SNDRCVTIMEO_STANDARD==0 can be used to revert to the old 'winsock' style behaviour);
- Fixed implementation of SO_ACCEPTCONN to just look at the pcb state;
- cleaned up the SO/SOF defines (only 3 left a ip_pcb level);
2014-12-10 21:46:49 +01:00
sg
8e13bcd43d fixed indentation 2014-12-10 21:24:02 +01:00
sg
cacdbb5262 added option LWIP_NETCONN_SEM_PER_THREAD to use a semaphore per thread instead of using one per netconn and per select call 2014-12-10 20:45:01 +01:00
goldsimon
35729f0870 Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip 2014-12-10 09:49:12 +01:00
goldsimon
0ff98eb2f5 mem: added an MEMP_OVERFLOW_CHECK implementation for MEM_USE_POOLS; added another unit test 2014-12-10 09:48:50 +01:00
goldsimon
dbe33783c9 stats: place 'err' in stats_mem more at the front to better see it in debugger overview window 2014-12-10 09:48:00 +01:00
sg
f38352f1af fixed bug #43596 IGMP queries from 0.0.0.0 are discarded 2014-12-09 20:56:39 +01:00
goldsimon
1bf2e313f6 sockets.c: fixed using unsigned constant 'FIONBIO' in switch on (signed) long 2014-12-08 15:01:18 +01:00
goldsimon
ca26fd17a7 fixed bug #43778: IPv6 header version not set on 16-bit platform (macro IP6H_VTCFL_SET()) 2014-12-08 15:00:37 +01:00
goldsimon
4085a3fad4 task #11472 Support PBUF_REF for RX (IPv6 and IPv4/v6 reassembly might not work yet) 2014-12-08 14:45:36 +01:00
chrysn
36f470383b use u32_t instead of u_int32_t
The style u_int32_t is not used anywhere else in the project, and is not
supported by the C standard, now using lwIP u32_t type. It was introduced
in 25e398a.
2014-11-11 16:28:27 +01:00
Sylvain Rochet
52dc9ef418 slightly improved compiler warning fixes 2014-11-07 16:26:15 +01:00
goldsimon
bada7e0f92 mem.h: fixed constants to be unsinged to fix compiler warning 2014-11-07 16:01:19 +01:00
goldsimon
ec93b03d8d Fixed multiple smaller compiler warnings 2014-11-07 14:29:53 +01:00
goldsimon
a5e748de84 CHANGELOG: fixed date 2014-11-06 14:15:52 +01:00
goldsimon
2809405164 lwip_socket_init() is not needed any more -> compatibility define 2014-11-06 14:14:58 +01:00
goldsimon
79ecf2edb7 SNMP: added missing casts to int for printf arguments 2014-11-03 09:23:50 +01:00
Sylvain Rochet
c2ebf5544b fixed cosmetic bug #43499: wrong argument order in src/include/netif/etharp.h defines 2014-10-29 18:56:33 +01:00
sg
d6fbe2a5ad fixed bugs #41495 Possible threading issue in select() and #43278
event_callback() handle context switch when calling sys_sem_signal()
2014-10-28 22:28:50 +01:00
sg
b89e10c3e6 fixed comment (bug #43481 MEMP_SYS_TIMEOUTS is not for NO_SYS=0 only) 2014-10-28 21:26:49 +01:00
goldsimon
5a6c64cc28 Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip 2014-10-21 11:09:30 +02:00
goldsimon
aecbce283d fixed bug #38219 Assert on TCP netconn_write with sndtimeout set 2014-10-21 11:09:07 +02:00
Sylvain Rochet
60f920df0e fixed bug #43235, checking for non-existent preprocessor macros is non-standard, added predefinition for all affected macros 2014-10-12 20:51:58 +02:00
Sylvain Rochet
da19974e81 fixed bug #43235, cleared compiler warnings when using gcc with -Wextra option 2014-10-12 19:54:43 +02:00
Simon Goldschmidt
ab9feb2e35 fixed bug #43173, pppos_input() corrupts memory if IP_FORWARD is enabled 2014-10-12 18:23:10 +02:00
goldsimon
b8d798158b fixed bug #43389 dns_recv() res_idx calculate error 2014-10-09 10:13:50 +02:00
Simon Goldschmidt
82d7c78b0c Reverted typo fix for vj.c which is in the original sources: no need to add a diff only because of a typo... 2014-09-18 21:25:19 +02:00
Simon Goldschmidt
0074b7becb More of patch #8397 Typos corrected in comments and text outputs 2014-09-18 21:23:19 +02:00
Simon Goldschmidt
33237419c1 Parts of patch #8397 Typos corrected in comments and text outputs 2014-09-18 21:15:13 +02:00
Simon Goldschmidt
aa6f6bc3aa patch #8480 Fix handling of dns_seqno wraparound 2014-09-17 22:52:58 +02:00
Simon Goldschmidt
f1e023af85 init.c: LWIP_PPP_API needs NO_SYS==0 2014-09-17 21:30:41 +02:00
Simon Goldschmidt
f71a590375 tabs -> spaces in opt.h (ppp-related) 2014-09-16 21:59:07 +02:00
Simon Goldschmidt
9f48488d87 minor: fixed coding style in pppapi.h/.c 2014-09-16 21:57:52 +02:00
Simon Goldschmidt
085c1594de fixed bug #43192 tcp_enqueue_flags() should not check TCP_SND_QUEUELEN when sending FIN 2014-09-16 20:18:25 +02:00
Simon Goldschmidt
56c6301089 dns.c: change dns_send/dns_recv to operate on pbuf, not on contiguous buffer -> dns_payload_buffer/DNS_MSG_SIZE can be removed 2014-09-16 19:33:20 +02:00
Simon Goldschmidt
e303f30d10 added pbuf_take_at() and pbuf_put_at() (in preparation for dns.c changes) 2014-09-16 19:22:46 +02:00
Simon Goldschmidt
4b9883a573 DNS: does not support IPv6, may return a name cased different than the request (when multiple requests are combined to one) 2014-09-15 21:56:29 +02:00
Simon Goldschmidt
9fb46e1206 added source port randomization to make the DNS client more robust (see bug #43144) 2014-09-15 21:50:41 +02:00
Simon Goldschmidt
8216303524 revert accidentally committed test code 2014-09-05 21:17:20 +02:00
Simon Goldschmidt
6c7357bbf9 DNS: minor coding style fix: pEntry -> entry 2014-09-05 21:15:50 +02:00
Simon Goldschmidt
13add693db Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip 2014-09-05 21:13:03 +02:00
Simon Goldschmidt
a491aa0f6a DNS: split request callback information from actual DNS table to be able to optimize memory usage for multiple parallel requests (and clean up the code a bit) 2014-09-05 21:11:57 +02:00
goldsimon
e8f49f1b95 update CHANGELOG and fix coding style (fixed bug #39355 SNMP Memory Leak in case of error) 2014-09-03 08:10:07 +02:00
Fatih Aşıcı
0a8c53575c snmp: Fix a memory leak
Check the value of vbi->ident before replacing it with vbo->ident.
2014-09-03 08:01:25 +02:00
Simon Goldschmidt
3c40d93f36 fixed bug #43110 (call getpeername() before listen() will cause a error) by re-sorting the error numbers and letting listen() continue on ERR_CONN 2014-09-02 22:34:53 +02:00
Simon Goldschmidt
4335e99f2e netconn_gethostbyname() needs to check for name length when LWIP_MPU_COMPATIBLE==1 2014-09-02 21:40:05 +02:00
Simon Goldschmidt
1fd4b851f5 Moved #define NETDB_ELEM_SIZE from dns.h to netdb.h, where it belongs, and use sizeof() instead of hacked constants that are wrong on 64-bit platforms 2014-09-02 21:27:24 +02:00
Simon Goldschmidt
142cc8fe2a minor: fixed a comment typo only 2014-09-02 21:26:35 +02:00
Simon Goldschmidt
5c37c63cef fixed bug #42117 lwip_fcntl does not set errno 2014-09-02 21:08:30 +02:00
Simon Goldschmidt
39caf630a9 fixed bug #42299 tcp_abort() leaves freed pcb on tcp_bound_pcbs list 2014-09-02 20:59:00 +02:00
goldsimon
b0502d1f3b added optional macros PACK_STRUCT_FLD_8() and PACK_STRUCT_FLD_S() to prevent gcc 4 from warning about struct members that do not need packing 2014-09-02 13:04:36 +02:00
Simon Goldschmidt
7c9b545b30 Fixed CHANGELOG to correctly show the differences to 1.4.1 (got messed up because git master was developed in parallel to the 1.4.1 branch, both starting at 1.4.0) 2014-09-01 21:35:10 +02:00
goldsimon
678dcc2ca5 Moved IPv4/IPv6 headers to common include folder, now that their names are unique -> no need to add 3 directories to the include path when compiling lwIP 2014-09-01 17:19:08 +02:00
goldsimon
54d4d9a881 Fix warning for compilers propagating ~'ed u8_t to int... 2014-09-01 15:57:56 +02:00
Simon Goldschmidt
a5e06ed5b7 fixed bug #42987 lwIP is vulnerable to DNS cache poisoning due to non-randomized TXIDs 2014-08-31 20:29:56 +02:00
Erik Ekman
63038e0305 Restore DHCP relay test packet numbers
These were updated in commit e1225cec5f together with other fixes
without any clear reason, and cause the test to fail.
2014-08-20 21:33:58 +02:00
goldsimon
7cea4d7df6 bug #42998: made NETIF_MAX_HWADDR_LEN overridable for some special networks 2014-08-19 16:09:00 +02:00
goldsimon
936066aa03 tiny formatting correction 2014-08-19 14:25:57 +02:00
Simon Goldschmidt
e7f3224091 again bug #26069: Documentation of tcp_connect() incorrectly describes handling of errors 2014-06-04 20:54:02 +02:00
Simon Goldschmidt
974f6982a1 fixed bug #37969 SYN packet dropped as short packet in tcp_input function 2014-06-03 21:07:49 +02:00
Sylvain Rochet
7fe7e1e984 Merge branch 'ppp-new'
Based from pppd 2.4.5, released 2009-11-17, with huge changes to match
code size and memory requirements for embedded devices, including:
- Gluing together the previous low-level PPP code in lwIP to pppd 2.4.5, which
  is more or less what pppd sys-* files are, so that we get something working
  using the unix port.
- Merged some patchs from lwIP Git repository which add interesting features
  or fix bugs.
- Merged some patchs from Debian pppd package which add interesting features
  or fix bugs.
- Ported PPP timeout handling to the lwIP timers system
- Disabled all the PPP code using filesystem access, replaced in necessary cases
  to configuration variables.
- Disabled all the PPP code forking processes.
- Removed IPX support, lwIP does not support IPX.
- Ported and improved random module from the previous PPP port.
- Removed samba TDB (file-driven database) usage, because it needs a filesystem.
- MS-CHAP required a DES implementation, we added the latest PolarSSL DES
  implementation which is under a BSD-ish license.
- Also switched to PolarSSL MD4,MD5,SHA1 implementations, which are meant to be
  used in embedded devices with reduced memory footprint.
- Removed PPP configuration file parsing support.
- Added macro definition EAP_SUPPORT to make EAP support optional.
- Added macro definition CHAP_SUPPORT to make CHAP support optional.
- Added macro definition MSCHAP_SUPPORT to make MSCHAP support optional.
- Added macro definition PAP_SUPPORT to make PAP support optional.
- Cleared all Linux syscall calls.
- Disabled demand support using a macro, so that it can be ported later.
- Disabled ECP support using a macro, so that it can be ported later.
- Disabled CCP support using a macro, so that it can be ported later.
- Disabled CBCP support using a macro, so that it can be ported later.
- Disabled LQR support using a macro, so that it can be ported later.
- Print packet debug feature optional, through PRINTPKT_SUPPORT
- Removed POSIX signal usage.
- Fully ported PPPoS code from the previous port.
- Fully ported PPPoE code from the previous port.
- Fully ported VJ compression protocol code from the previous port.
- Removed all malloc()/free() use from PPP, replaced by stack usage or PBUF.
- Disabled PPP server support using a macro, so that it can be ported later.
- Switched all PPP debug to lwIP debug system.
- Created PPP Control Block (PPP PCB), removed PPP unit integer everywhere,
  removed all global variables everywhere, did everything necessary for
  the PPP stack to support more than one PPP session (pppd only support
  one session per process).
- Removed the statically allocated output buffer, now using PBUF.
- Improved structure size of all PPP modules, deep analyze of code to reduce
  variables size to the bare minimum. Switched all boolean type (char type in
  most architecture) to compiler generated bitfields.
- Added PPP IPv6 support, glued lwIP IPv6 support to PPP.
- Now using a persistent netif interface which can then be used in lwIP
  functions requiring a netif.
- Now initializing PPP in lwip_init() function.
- Reworked completely the PPP state machine, so that we don't end up in
  anymore in inconsistent state, especially with PPPoE.
- Improved the way we handle PPP reconnection after disconnect, cleaning
  everything required so that we start the PPP connection again from a
  clean state.
- Added PPP holdoff support, allow the lwIP user to wait a little bit before
  reconnecting, prevents connection flood, especially when using PPPoL2TP.
- Added PPPoL2TP LAC support (a.k.a. UDP tunnels), adding a VPN client
  feature to lwIP, L2TP being a widely used tunnel protocol.
- Switched all used PPP types to lwIP types (u8t, u16t, u32t, ...)
- Added PPP API "sequential" thread-safe API, based from NETIFAPI.
2014-05-22 21:25:58 +02:00
Simon Goldschmidt
9148ab79f3 fixed bug #37184 tcp_write problem for pcbs in the SYN_SENT state 2014-05-20 22:12:36 +02:00
goldsimon
1204f15bfa bug #35874 reserved identifier violation, 2nd part 2014-05-20 12:27:18 +02:00
goldsimon
f1c7e73bef fixed last commit (copy & paste from patch broke the code) 2014-05-20 12:22:13 +02:00
Simon Goldschmidt
c18abd4fbe Fixed bug #41686 (ipv4 ip_reass() crash error) introduced some months ago while fixing bug #41041... 2014-05-19 22:07:57 +02:00
Simon Goldschmidt
c3ac875055 Fixed typo-bug introduced some months ago while fixing bug #41041... 2014-05-19 22:03:19 +02:00
Simon Goldschmidt
dbd125c714 Fixed bug #35874 reserved identifier violation (removed leading underscores from header include guards) 2014-05-19 21:46:18 +02:00
Simon Goldschmidt
695e001984 lwip_gethostbyname: fixed using uninitialized variable when LWIP_DNS_API_HOSTENT_STORAGE==1 2014-05-15 21:17:41 +02:00
Sylvain Rochet
33b42872e5 Merge branch 'master' into ppp-new 2014-05-08 14:25:30 +02:00
goldsimon
8bb7602145 SNMP: fix "uninitialized variable" warning 2014-05-06 09:42:41 +02:00
Sylvain Rochet
d9e2edd1df Merge branch 'master' into ppp-new 2014-05-05 20:55:18 +02:00
Simon Goldschmidt
f9d80d5bd2 try to fix another warning from static code analysis 2014-04-30 22:11:49 +02:00
goldsimon
406874b6c2 snmp: added missing default cases (only used for trace output) 2014-04-30 13:50:18 +02:00
goldsimon
e4ddd6cb6d Multiple fixes found by coverity scan 2014-04-30 12:22:31 +02:00
Sylvain Rochet
a7745e9a86 PPP, PPPoE, fixed bug #42138, pppoe_destroy() called with wrong pointer, PPPoE control block was never freed 2014-04-19 23:38:24 +02:00
Sylvain Rochet
3fd7bc8058 PPP, updated pppd followup 2014-04-15 22:57:59 +02:00
Sylvain Rochet
25e398a8f0 PPP, from PPPD upstream, accept IPCP ConfAck packets containing MS-WINS options
pppd: Accept IPCP ConfAck packets containing MS-WINS options

Since last week I'm seeing IPCP negotiations going like this (and
eventually failing) when connecting to my ISP:

Jul 11 20:03:25 * pppd[4833]: sent [IPCP ConfReq id=0x2 <addr 0.0.0.0> <ms-dns1
0.0.0.0> <ms-dns2 0.0.0.0>]
Jul 11 20:03:26 * pppd[4833]: sent [IPCP ConfReq id=0x2 <addr 0.0.0.0> <ms-dns1
0.0.0.0> <ms-dns2 0.0.0.0>]
Jul 11 20:03:26 * pppd[4833]: rcvd [IPCP ConfNak id=0x2 <addr 10.167.246.198>
<ms-dns1 213.162.69.1> <ms-dns2 213.162.69.169> <ms-wins 124.6.168.55> <ms-wins
17.17.17.17>]
Jul 11 20:03:26 * pppd[4833]: sent [IPCP ConfReq id=0x3 <addr 10.167.246.198>
<ms-dns1 213.162.69.1> <ms-dns2 213.162.69.169> <ms-wins 124.6.168.55> <ms-wins
17.17.17.17>]
Jul 11 20:03:26 * pppd[4833]: rcvd [IPCP ConfAck id=0x3 <addr 10.167.246.198>
<ms-dns1 213.162.69.1> <ms-dns2 213.162.69.169> <ms-wins 124.6.168.55> <ms-wins
17.17.17.17>]
Jul 11 20:03:27 * pppd[4833]: sent [IPCP ConfReq id=0x3 <addr 10.167.246.198>
<ms-dns1 213.162.69.1> <ms-dns2 213.162.69.169> <ms-wins 124.6.168.55> <ms-wins
17.17.17.17>]
...

with the last two lines repeating until the IPCP error limit is
reached. As you can see, the peer added two extra fields in the
ConfNak reply. This is allowed, and indeed the following sent
ConfReq packet reflects this. However, when the ConfAck packet
is received, pppd discards it as invalid, because of the ms-wins
fields.

This fixes it.
2014-04-15 22:55:28 +02:00
Sylvain Rochet
c31b03327f PPP, from PPPD upstream, Don't crash if NULL pointer passed to vslprintf for %q or %v
pppd: Don't crash if NULL pointer passed to vslprintf for %q or %v

This is to avoid crashes like that reported in
https://bugs.launchpad.net/ubuntu/+source/ppp/+bug/1244714
2014-04-15 22:50:53 +02:00
Sylvain Rochet
f6d56e2937 PPP, from PPPD upstream, take out unused %r conversion completely,
pppd: Take out unused %r conversion completely

This just removes some code surrounded by #if 0/#endif, which Fedora
apparently feels the need to patch...
2014-04-15 22:34:24 +02:00
Sylvain Rochet
ca7769e041 Merge branch 'master' into ppp-new 2014-04-12 01:25:00 +02:00
Sylvain Rochet
c0aef7dd6b PPP, VJ compression enabled, fixed IP forward from PPP to Ethernet by allocating a PBUF_LINK instead of a PBUF_RAW if IP forwarding is enabled 2014-04-12 01:23:57 +02:00
Sylvain Rochet
4283ecf774 PPP, PPPoS, fixed IP forward from PPP to Ethernet by allocating PBUF_LINK instead of PBUF_RAW if IP forwarding is enabled 2014-04-11 22:31:01 +02:00
Simon Goldschmidt
88a57dc98d Fixed bug #36167 tcp server crash when client closes (maximum window) 2014-04-08 21:26:27 +02:00
Simon Goldschmidt
035ecef8a5 Fixed bug #36210 lwIP does not elicit an empty ACK when received unacceptable ACK 2014-04-06 22:40:51 +02:00
Simon Goldschmidt
4c3b6814dc Fixed compiling broken ip6.c after last commit 2014-04-06 22:33:27 +02:00
Simon Goldschmidt
3f016fcc5a Multiple small/minor issues: bug #36492 Static Analysis on code 1.4.0 2014-04-06 21:43:37 +02:00
Simon Goldschmidt
be75c483d0 Fixed bug #41787 DHCP Discovery is invalid when an IP is set to thet netif (send discover, request and decline from 'any').
Addd functions to send udp/ipv4/ipv6 packets with source address 'any' although netif has an address assigned
2014-04-06 20:32:37 +02:00
Sylvain Rochet
08dd32d32d PPP, most PPP headers are using u_long, u_int, u_short and u_char types, moved typedef of those types before we include any PPP header 2014-04-04 20:42:01 +02:00
Sylvain Rochet
b49584457a Merge branch 'master' into ppp-new 2014-03-23 13:17:55 +01:00
goldsimon
40d25adb88 Added LWIP_HOOK_ETHARP_GET_GW to implement IPv4 routing with multiple gateways 2014-03-17 12:53:31 +01:00
Sylvain Rochet
a38e5a44ec Merge branch 'master' into ppp-new 2014-03-14 20:48:12 +01:00
Simon Goldschmidt
3fceef0936 - fixed bug #36153 TCP Cheksum error if LWIP_CHECKSUM_ON_COPY=1;
- don't fail on small mss or snd_wnd_max
2014-03-14 19:46:24 +01:00
Simon Goldschmidt
c065427ebe fixed bug #35928 BSD sockets functions must set errno for POSIX-compliance (patch by Mason) 2014-03-11 20:53:44 +01:00
Simon Goldschmidt
c82f04f54c fixed bug #40303 DHCP xid renewed when sending a DHCPREQUEST 2014-02-27 22:44:16 +01:00
Simon Goldschmidt
d9d0c52770 fixed bug #41680 raw socket can not receive IPv6 packet when IP_SOF_BROADCAST_RECV==1 2014-02-27 22:18:45 +01:00
Simon Goldschmidt
c60635855d fixed bug #38404 getpeeraddr returns success on unconnected/listening TCP sockets 2014-02-27 21:28:15 +01:00
Simon Goldschmidt
2666d6df90 fixed bug #41729 Some socket functions return Exyz instead of -1 2014-02-27 20:57:37 +01:00
Simon Goldschmidt
8558fa0bcf etharp_entry::ctime must be u16_t after changing ARP_TMR_INTERVAL from 5 seconds to 1 second when fixing bug #34682 2014-02-26 21:51:56 +01:00
Simon Goldschmidt
f36d6b7ef5 fixed bug #39514 ip_route() may return an IPv6-only interface 2014-02-25 22:37:52 +01:00
Simon Goldschmidt
e9908048ec fixed bug #39356 Wrong increment in pbuf_memfind() 2014-02-25 22:34:27 +01:00
Simon Goldschmidt
dceed2ea5c fixed bug #39225 udp.c uses netif_matches_ip6_addr() incorrectly; renamed function netif_matches_ip6_addr() to netif_get_ip6_addr_match() 2014-02-25 22:30:46 +01:00
Simon Goldschmidt
7b63878926 Fixed bug #39224 Unused IPv6 address state defines in nd6 2014-02-25 22:26:02 +01:00
Simon Goldschmidt
01ecd3517e fixed bug #39145 IGMP membership report for 224.0.0.1
-> ensure that we never send a report for 224.0.0.1
2014-02-25 22:21:31 +01:00
Simon Goldschmidt
fbdea8dc71 fixed bug #39076 ETHARP_STATS is not defined when LWIP_STATS is 0 2014-02-25 22:14:26 +01:00
Sylvain Rochet
58d0e8b28f Merge branch 'master' into ppp-new 2014-02-24 20:21:47 +01:00
Simon Goldschmidt
07fbe82305 fixed bug #34681 Limit ARP queue length by ARP_QUEUE_LEN (=3) 2014-02-22 21:38:56 +01:00
Simon Goldschmidt
05a967564a fixed bug #34682 Limit ARP request flood for unresolved entry 2014-02-22 21:23:06 +01:00
Sylvain Rochet
75ef1278e6 Merge branch 'master' into ppp-new 2014-02-21 20:37:10 +01:00
Simon Goldschmidt
fc158ad5c0 Fixed netconn_gethostbyname for LWIP_MPU_COMPATIBLE: removed invalid check on 'addr', copy 'name' since it could be located on the caller's stack 2014-02-21 09:04:39 +01:00
Simon Goldschmidt
4d69d0eda5 Fixed IPv6 raw checksumming after a hint from Philip Gladstone 2014-02-21 08:41:44 +01:00
Sylvain Rochet
d7ba4bbb9b Merge branch 'master' into ppp-new 2014-02-21 00:39:29 +01:00
Simon Goldschmidt
2225b8add7 fixed bug #39683 Assertion "seg->tcphdr not aligned" failed with MEM_ALIGNMENT = 8 2014-02-20 22:35:37 +01:00
Simon Goldschmidt
9572db262c Fixed bug #39718: disconnecting an UDP socket reports an error 2014-02-20 22:32:57 +01:00
Simon Goldschmidt
515e4b9187 fixed bug #39882 No function shall set errno to 0 2014-02-20 22:23:40 +01:00
Simon Goldschmidt
c1dc1a20d6 fixed bug #40050 SNMP problem with MIB arrays > 255 2014-02-20 22:14:10 +01:00
Simon Goldschmidt
a58083b11e Fixed comment on LWIP_HAVE_LOOPIF 2014-02-20 22:09:38 +01:00
Simon Goldschmidt
0f24fba28a IGMP: fixed !define LWIP_RAND case 2014-02-20 22:07:58 +01:00
Simon Goldschmidt
4d774e275d netconn::recv_avail: forgot one line 2014-02-20 22:01:13 +01:00
Simon Goldschmidt
a2d6a50dff fixed bug #41499 netconn::recv_avail can overflow 2014-02-20 21:55:11 +01:00
Freddie Chopin
08b56e8180 SNMP: mib-2.system.sysObjectID is read-only, so make the object "static const" and modify just the pointer; snmp_get_sysobjid_ptr() and snmp_set_sysobjid() take a pointer to "const" object now
Signed-off-by: Freddie Chopin <freddie.chopin@gmail.com>
2014-02-20 21:24:23 +01:00
Freddie Chopin
7a77917df6 SNMP: use MEMCPY() instead of ocstrncpy() and objectidncpy()
Signed-off-by: Freddie Chopin <freddie.chopin@gmail.com>
2014-02-20 21:24:21 +01:00
Erik Ekman
e432014a88 netif: Update header file documentation
IPv6 output method referenced old method name.
2014-02-20 21:22:39 +01:00
Simon Goldschmidt
a89db9872d Added missing IPPROTO_RAW 2014-02-20 21:13:13 +01:00
Simon Goldschmidt
6dcc85dcf4 patch #7993: Added support for transmitting packets with VLAN headers via hook function LWIP_HOOK_VLAN_SET and to check them via hook function LWIP_HOOK_VLAN_CHECK 2014-02-20 21:08:50 +01:00
Simon Goldschmidt
a375ea4ee2 Minor: coding style cleanups... 2014-02-20 20:09:33 +01:00
Grant Erickson
d74464e091 Add RFC3542-style checksum compuation on raw, IPv6 sockets
This patch adds support for RFC3542-style checksum computation on raw,
IPv6 sockets via the IPV6_CHECKSUM socket option.

This allows the development of application-layer utilities such as
ping6 which are unable to compute the raw packet checksum without a
prior knowledge of the source address selection.
2014-02-20 20:01:37 +01:00
Simon Goldschmidt
e2c2afbbe0 patch #7885: modification of api modules to support FreeRTOS-MPU (don't pass stack-pointers to other threads) (based on patch by Artem Pisarenko) 2014-02-20 19:50:17 +01:00
Simon Goldschmidt
cffe54d094 Patch #7815 by James Smith: added inet_ntop/inet_pton 2014-02-20 16:10:55 +01:00
Simon Goldschmidt
2f02120fee Fixed typo. 2014-02-20 15:43:51 +01:00
Simon Goldschmidt
c0b534e531 Minor fixes to init.c preprocessor checks 2014-02-12 22:20:25 +01:00
Erik Ekman
5eaef50a77 Remove newlines in LWIP_ERROR calls 2014-02-12 22:10:36 +01:00
Simon Goldschmidt
a80c4d147c Unit test patch by Erik Ekman: use macro to store correct testcase name 2014-02-12 21:52:21 +01:00
Erik Ekman
ad66b2bf13 Don't mark arrays as const since they are modified by the test 2014-02-12 21:44:51 +01:00
Simon Goldschmidt
ef6ec9de01 Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip 2014-02-12 21:34:43 +01:00
Simon Goldschmidt
751deac9d1 Another fix to window scaling: support queueing more than 64 KByte in ooseq data 2014-02-12 21:34:19 +01:00
Sylvain Rochet
406da499ff Merge branch 'master' into ppp-new 2014-02-09 16:40:43 +01:00
Sylvain Rochet
a6b48d5273 normalize to LF (auto cleaned due to git attributes and must be commited before switching branch) 2014-02-09 16:34:47 +01:00
Simon Goldschmidt
6272b5c58c Fixed misleading comment on sys_untimeout() 2014-02-07 14:03:53 +01:00
Simon Goldschmidt
8c9b99458d Fixed forgotten brackets in last commit 2014-02-07 12:11:36 +01:00
Simon Goldschmidt
3273c68b63 Added comments to clarify the LWIP_TCP_TIMESTAMPS option. 2014-02-07 11:46:23 +01:00
Simon Goldschmidt
a44e2190d6 TCP window scaling: change tcp_pcb::acked to u32_t when window scaling is enabled to prevent an overflow when more than 64 Kbytes are ACKed 2014-02-07 11:32:02 +01:00
Simon Goldschmidt
2dab478c3f Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip
Conflicts:
	src/core/tcp_out.c
	src/include/ipv4/lwip/ip4_addr.h
2014-02-07 09:40:10 +01:00
Simon Goldschmidt
a32afb28c0 Added .gitattributes to normalize CRLF 2014-02-07 09:36:03 +01:00
Simon Goldschmidt
d2a89b424b patch #6537/#7858: TCP window scaling support (OOS queueing still needs special handling) 2014-02-06 22:34:06 +01:00
Sylvain Rochet
9502cd7047 Merge branch 'master' into ppp-new 2014-01-19 14:32:14 +01:00
Sylvain Rochet
cd02450095 recently applied patches changed LF-terminated filed to mostly LF and CR+LF only where the patches changed lines 2014-01-19 14:28:17 +01:00
Sylvain Rochet
03a3412e62 Merge branch 'master' into ppp-new 2014-01-19 03:41:01 +01:00
Simon Goldschmidt
33086e6db0 patch #7920 thread-safe api dhcp calls for dhcp_infor, dhcp_renew and dhcp_release 2014-01-18 22:48:15 +01:00
Simon Goldschmidt
d7a951996b Updated CHANGELOG 2014-01-18 22:41:52 +01:00
Stathis Voukelatos
38bfe50508 Fixed size calculation in MALLOC memory pool creation macro.
The LWIP_MALLOC_MEMPOOL macro needs to use the aligned size of the
memp_malloc_helper structure, since mem_alloc() uses it to calculate
the required pool element size. If LWIP_MEM_ALIGN_SIZE(x) is redefined
to align to something larger than 4, then in some cases
the current code can lead to unexpected mem_alloc() failures.
For example:
    #define LWIP_MEM_ALIGN_SIZE(size)       (((size) + 31) & ~31)
and the largest MALLOC pool is of size 60 bytes, e.g.:
    #define LWIP_MALLOC_MEMPOOL(256, 60)
then the following call:
    mem_malloc(58)
will cause an assertion.
2014-01-18 22:40:16 +01:00
Simon Goldschmidt
a70567e74f patch #8009 by chrysn: stats_display_igmp used by ml6d 2014-01-18 22:16:09 +01:00
Simon Goldschmidt
db472c73c1 patch #8021 Add INET[6]_ADDRSTRLEN Preprocessor Definitions If Not Previously Defined 2014-01-18 22:02:32 +01:00
Grant Erickson
29824f9baa This patch addresses the following error when compiled against clang/LLVM 3.3 with -std=c++11:
error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]
2014-01-18 21:44:44 +01:00
Simon Goldschmidt
32b1a9fc8a patch #8237 by Brian Fahs: tcp_rexmit_rto fails to update pcb->unsent_oversize when necessary 2014-01-18 21:40:17 +01:00
Simon Goldschmidt
018719d9d3 patch #8027: Completed HW checksuming for IPv4 and IPv6 ICMP's 2014-01-17 22:32:36 +01:00
Grant Erickson
8ae472821f autoip: add autoip_remove_struct
Added previously-missing autoip_remove_struct as a companion to
autoip_set_struct and to parallel dhcp_{set,remove}_struct.
2014-01-17 22:19:12 +01:00
Simon Goldschmidt
26911ff21c patch #8160 (by Valery Ushakov): Simplify ip6_addr_set_solicitednode() and ip6_addr_cmp_solicitednode(). 2014-01-17 22:05:54 +01:00
Simon Goldschmidt
5070cc07be Fixed LWIP_IPV6==0 2014-01-17 21:57:40 +01:00
Simon Goldschmidt
1e65eb4936 Added IPv6 loopback address to loopback-netif, fixed last commit 2014-01-17 21:55:46 +01:00
Jay Logue
13e40f754c Enable support for IPv6 loopback
Packets are sent through the loopback path when they are addressed to any
of the valid local IPv6 addresses.
2014-01-17 21:32:24 +01:00
Sylvain Rochet
87cfd930e4 Merge branch 'master' into ppp-new 2014-01-17 00:48:55 +01:00
Simon Goldschmidt
8b63a89267 patch #7912 by Grant Erickson: Add a macro for introspecting the IPv6 loopback address. 2014-01-16 21:50:53 +01:00
Simon Goldschmidt
94eff945b4 Updated CHANGELOG 2014-01-16 21:42:10 +01:00
Stathis Voukelatos
039737ffc2 Fixed netif_poll() operation when LWIP_LOOPBACK_MAX_PBUFS > 0.
Using the pbuf_clen() function to calculate the number of pbufs
for the first packet in the queue is not correct here, as pbuf_clen()
will return the total number of pbufs in the loopback I/F queue.
2014-01-16 21:36:49 +01:00
Simon Goldschmidt
08370c7230 Patch #7904 by Grant Erickson: Add mnemonics for IPPROTO_{ICMP,ICMPV6} 2014-01-16 21:28:38 +01:00
Simon Goldschmidt
2f9b28c0fc Updated CHANGELOG 2014-01-14 21:53:40 +01:00
Freddie Chopin
4e1320d480 SNMP: mib-2.system.sysDescr is read-only, so add const qualifiers to functions and pointers
Signed-off-by: Freddie Chopin <freddie.chopin@gmail.com>
2014-01-14 21:51:39 +01:00
Freddie Chopin
e6202cfa97 SNMP: source of ocstrncpy() and objectidncpy() may be const
Signed-off-by: Freddie Chopin <freddie.chopin@gmail.com>
2014-01-14 21:51:29 +01:00
Simon Goldschmidt
a15b28a24e SNMP: fixed typo: snmp_set_sysdesr -> snmp_set_sysdescr 2014-01-14 21:49:33 +01:00
Simon Goldschmidt
9975dbeded Fixed chrysn's patch: it only works for NO_SYS :-( 2014-01-14 21:48:58 +01:00
Simon Goldschmidt
2cf5eec62f patch by Thomas Faber: patch #8241: Fix implicit declaration of ip_input with LWIP_TCPIP_CORE_LOCKING_INPUT disabled 2014-01-14 21:32:45 +01:00
Simon Goldschmidt
51012d07cc updated CHANGELOG 2014-01-14 21:27:40 +01:00
chrysn
252abbeb8d make timeouts usable reliably from outside of the timeout routine
although timeouts are relative to timeouts_last_time (transitively by
addition to the time values of their predecessors, if there are any),
sys_timeout does not compensate for that; as a result, timeouts fire too
early unless invoked from within a timeout handler (when
timeouts_last_time == now).
2014-01-14 21:25:03 +01:00
Sylvain Rochet
357b28f675 PPP, fixed VJ compression/decompression output IP path 2014-01-14 18:20:18 +01:00
Sylvain Rochet
bf37afd7c7 Merge branch 'master' into ppp-new 2014-01-12 15:05:37 +01:00
Simon Goldschmidt
f311045320 Added an assert that should trigger bug #41009 (IPv6 reassembly broken on 64-bit platforms) 2014-01-10 22:08:01 +01:00
Simon Goldschmidt
381a7b110a fixed bug #41041 Potential use-after-free in IPv6 reassembly 2014-01-10 21:47:42 +01:00
Simon Goldschmidt
75f2c56558 bug #41188 Alignment error in memp_init() when MEMP_SEPARATE_POOLS==1 2014-01-10 21:26:28 +01:00
Simon Goldschmidt
91333c5d2f fixed bug #39898 tcp_fasttmr() possible lock due to infinte queue process loop 2014-01-10 21:21:54 +01:00
Sylvain Rochet
ee2ba4e52f Merge branch 'master' into ppp-new 2013-07-20 21:04:49 +02:00
Simon Goldschmidt
ae300c98a4 partially fixed bug #37585: IPv6 compatibility (in socket structs) 2013-06-29 21:47:22 +02:00
Simon Goldschmidt
748b70311e bug #37585/task #12600: fixed struct in6_addr.s6_addr to conform to spec 2013-06-29 21:16:59 +02:00
Simon Goldschmidt
8d0664186a - removed include instead of commenting it out;
- CHANGELOG should contain worthy entries only, a complete log of all source code changes can be found in git (I'm not saying this has always been observed, but I'd like to keep the list of changes as short as possible for anyone to read if interested)
2013-06-19 22:26:29 +02:00
Simon Goldschmidt
2fb5a71efd patch #8030: fixed spelling of "received" 2013-06-19 22:23:05 +02:00
Sylvain Rochet
4fda366b67 PPP, added PPP notify phase support
PPP notify phase support, using compile-time PPP_NOTIFY_PHASE macro.

This can be used for example to set a LED pattern depending on the
current phase of the PPP session.

Callback example:

static void ppp_notify_phase_cb(ppp_pcb *pcb, u8_t phase, void *ctx) {
  switch(phase) {
      case PPP_PHASE_DEAD:  /* Kept off */
      case PPP_PHASE_MASTER:
        /* LED Off */
        break;
      case PPP_PHASE_INITIALIZE:  /* Session opened */
        /* LED FastBlink */
        break;
      case PPP_PHASE_RUNNING:  /* Session running */
        /* LED On */
        break;
      default:
        /* LED SlowBlink */
   }
}
2013-04-30 15:16:09 +02:00
Sylvain Rochet
2ceae6014e PPP, reduced by one buffer PPPoS RX requirements in multithreaded context
Removed one unecessary allocated PBUF per PPPoS RX packet if PPP_INPROC_MULTITHREADED is set by adding the necessary data for
pppos_input_callback() in front of the first pbuf instead of allocating a new buffer.
2013-04-26 23:24:08 +02:00
Sylvain Rochet
cf3162cff1 PPP, moved PPP_INPROC_MULTITHREADED compile time option from ppp.h to opt.h 2013-04-26 21:55:30 +02:00
Sylvain Rochet
2350d941a5 PPP, added PPP_USE_PBUF_RAM compile time option
pbuf_type PPP is using for LCP, PAP, CHAP, EAP, IPCP and IP6CP packets.

Memory allocated must be single buffered for PPP to works, it requires pbuf
that are not going to be chained when allocated. This requires setting
PBUF_POOL_BUFSIZE to at least 512 bytes, which is quite huge for small systems.

Setting PPP_USE_PBUF_RAM to 1 makes PPP use memory from heap where continuous
buffers are required, allowing you to use a smaller PBUF_POOL_BUFSIZE.
2013-04-26 21:51:15 +02:00
Sylvain Rochet
25f9f55878 PPP, removed PPP_INPROC_OWNTHREAD feature, which almost only make things harder
I consider to remove the PPP_INPROC_OWNTHREAD crap in ppp-new,
as said in bugs #37278 and #37353.

1. It requires the ppp_input_thread() function to be modified to match
user system, like some did by adding the vTaskDelete(NULL); FreeRTOS
call at the end of the function, for example.

This is a tiny-tiny fonction that should be, in my opinion, on the user
port, like the Ethernet input thread we see in many Ethernet port.

2. It is actually not that thread safe.

2.1. pcb->phase IS modified by the lwIP core thread so it should at
least be set to volatile, otherwise the pcb->phase copy may live
indefinitely in CPU register. It works because of the sio_read()
function call which without doubt flush pcb->phase copy from CPU
register. I dont want to set ppp_pcb struct to volatile for obvious
performance reasons.

2.2. This function assume PCB still exists whatever is happening, which
is not the case after you called ppp_delete() function outside of this
thread. If sio_read() is blocking waiting data and pcb destroyed, it is
going to read a deallocated pcb which luckily should still have
pcb->phase set to 0 (=PHASE_DEAD) due to preallocated "control block"
structures of lwIP. Even with sio_read_abort(), there might be timings
issue due to a lack of a synchronization mechanism.

3. I dislike the sys_msleep(1), it means that systems should have at
least a 11 chr buffer at 115200/10 byte/s, and bigger with higher serial
speed, for example with 3G/HSDPA modems accessed through SPI, at 20
Mbits/s this is a ~2000 bytes buffer required to keep incoming data
during this sleep, I don't see why we require systems to do so,
sio_read() should obviously be a blocking call. I cannot easily
remove this sleep because some systems might have wrongfully used this
call as a CPU idle feature with a non blocking sio_read() call.
2013-04-26 20:30:01 +02:00
Sylvain Rochet
07540f3386 Merge branch 'master' into ppp-new 2013-04-26 20:01:18 +02:00
Sylvain Rochet
fe63f36656 picked up the wrong commit date in CHANGELOG, fixed 2013-04-26 19:59:05 +02:00
Sylvain Rochet
434daf87c2 Merge branch 'master' into ppp-new 2013-04-26 19:54:01 +02:00
Sylvain Rochet
c681e5e082 reverted dhcp.c from DOS (CRLF) to UNIX (LF) format 2013-04-26 19:52:42 +02:00
Sylvain Rochet
549f97b54a cleared compilation warning, C++ style comments are not allowed in ISO C90 2013-04-26 19:48:57 +02:00
Sylvain Rochet
f47a93b0c1 PPP, cleared compilation warning about unused variable 'pcb' in ppp_drop() if neither VJ nor SNMP support are enabled 2013-04-26 14:02:30 +02:00
Sylvain Rochet
3fe5a99dab Merge branch 'master' into ppp-new 2013-04-25 00:36:12 +02:00
Simon Goldschmidt
097bc4c622 patch #8008 Fix a potential null pointer dereference in assert 2013-04-24 22:28:22 +02:00
Simon Goldschmidt
252126cf76 fixed possible division by zero 2013-04-24 22:20:12 +02:00
Simon Goldschmidt
8609d1e790 fixed bug #38526 Coverity: Recursive Header Inclusion in ip6.h 2013-04-24 21:58:57 +02:00
Simon Goldschmidt
9809f1ff66 Fixed bug #38586 2013-04-24 21:38:01 +02:00
Simon Goldschmidt
796098e4c9 fixed bug #38701 (wrong comment on tcp_pcb::snd_queuelen 2013-04-24 21:28:56 +02:00
Simon Goldschmidt
eb6bcdb3ee Removed the demand to post trivial patches to lwip-users, things keep getting lost there. 2013-04-24 20:55:45 +02:00
Sylvain Rochet
a1555e0615 PPP, added ppp_free()
Free the control block, clean everything except the PPP PCB itself
and the netif, it allows you to change the underlying PPP protocol
(eg. from PPPoE to PPPoS to switch from DSL to GPRS) without losing
your PPP and netif handlers.
2013-04-23 00:19:07 +02:00
Sylvain Rochet
44b527415f PPP, slight API change, great code factorisation
Created new ppp_over_X_create() functions which only prepare the PPP session without starting it
Removed ppp_reopen() and all of its sub ppp_over_X_reopen()
Removed PPPoL2TP reconnect() function, merged to connect()
Added ppp_open() able to start or restart any session
2013-04-22 23:58:51 +02:00
Sylvain Rochet
ed294c5945 PPP, removed ppposapi_input(), unnecessary because pppos_input() is already thread-safe 2013-04-22 21:21:04 +02:00
Sylvain Rochet
bd3ade31fa PPP, added define for u_long, u_int, u_short, u_char for compilers or toolchains which don't have them 2013-04-22 21:16:02 +02:00
Sylvain Rochet
d03d2e6d3d PPP, added ppp_addrs() macro to get the pointer of the ppp->addrs struct 2013-04-22 21:09:28 +02:00
Sylvain Rochet
58ffa8d526 PPP, free input pbuf left in ppp_delete() 2013-02-27 22:29:22 +01:00
Sylvain Rochet
bfe8c15a29 PPP, fixed return code coherency for ppp_netif_output_*() callbacks (using ERR_* as expected by lwIP core instead of PPPERR_*) 2013-02-22 11:52:44 +01:00
Sylvain Rochet
2fa7e003b1 PPP, fixed LCP delayed up feature
LCP is stealing a bit from fsm->flags struct member for LCP delayed up feature.
Bit stealed used to be the 9th bit (0x100) but fsm->flags was reduced to u8_t to save memory,
we are now stealing the 8th bit (0x80).
2013-01-31 15:36:30 +01:00
Sylvain Rochet
ba948669cd Merge branch 'master' into ppp-new 2013-01-29 10:59:39 +01:00
goldsimon
666e84eef2 Improved/fixed comments about timeout. 2013-01-24 09:02:19 +01:00
Sylvain Rochet
69b15c889d Merge branch 'master' into ppp-new 2013-01-20 02:57:57 +01:00
Simon Goldschmidt
ff3bf6d7f5 fixed bug #37665 ip_canforward operates on address in wrong byte order 2013-01-15 21:10:32 +01:00
Simon Goldschmidt
b844129649 fixed bug #38097 pbuf_free_ooseq() warning 2013-01-15 21:07:01 +01:00
Simon Goldschmidt
86059bd5dd fixed more unused variables 2013-01-14 21:06:13 +01:00
Simon Goldschmidt
9927d991ef Fixed bug #37893 Unused variables in tcp_out (and in udp.c/.h) 2013-01-14 20:46:41 +01:00
Simon Goldschmidt
6849b7d555 Added additional sanity check that all headers (without IP- or TCP options) fit into the first pbuf. 2013-01-14 18:05:18 +01:00
Simon Goldschmidt
1efd1ee6ac fixed bug #37705 Possible memory corruption in DNS query 2013-01-14 18:04:04 +01:00
Simon Goldschmidt
d12600fba0 fixed bug #37705 Possible memory corruption in DNS query 2013-01-14 18:03:23 +01:00
Simon Goldschmidt
769b2a3e30 fixed bug #38066 Raw pcbs can alter packet without eating it: added assertion to check that p->payload is unchanged 2013-01-11 21:59:26 +01:00
Simon Goldschmidt
d237ec7e78 Changed C++ comments to C style 2013-01-11 21:27:45 +01:00
Sylvain Rochet
de1375201f PPP, "try" variable used in LCP might conflict with some buggy C++ compiler 2013-01-04 23:08:11 +01:00
Sylvain Rochet
13ba8810c7 PPP, fixed one more IAR warnings 2013-01-04 22:51:13 +01:00
Sylvain Rochet
bdfbac2aa6 PPP, added missing semicolon (dammit) 2012-12-23 22:58:52 +01:00
Sylvain Rochet
6bd0bd2ed1 Merge branch 'master' into ppp-new 2012-12-23 22:56:51 +01:00
Sylvain Rochet
211a889528 PPP, fixed some IAR warnings
these are the compiler warnings I get with the head of ppp-new. All
of them are trivial, [...] (I'm using IAR EWARM 6.4).

ppp.c
Warning[Pe550]: variable "c" was set but never used
lwip\src\netif\ppp\ppp.c 1012

Warning[Pe111]: statement is unreachable
lwip\src\netif\ppp\ppp.c 1132

Warning[Pe111]: statement is unreachable
lwip\src\netif\ppp\ppp.c 1377

Warning[Pe111]: statement is unreachable
lwip\src\netif\ppp\ppp.c 1412

utils.c
Warning[Pe186]: pointless comparison of unsigned integer with zero
lwip\src\netif\ppp\utils.c 210
2012-12-23 22:52:58 +01:00
Ivan Delamer
3bb29bf63a Fix bug #37959: ip6_debug_print prints plen, nexth, hoplim in wrong
byte order
2012-12-19 16:38:44 -07:00
Sylvain Rochet
78d52ad2de Merge branch 'master' into ppp-new 2012-12-19 14:05:59 +01:00
"Grant Erickson"
4fe648415f Fixed typo in debug formatting in ip6.c 2012-12-14 16:08:24 -07:00
Sylvain Rochet
6751ac4970 PPP, moved FSM configuration to ppp_settings struct 2012-12-09 22:25:28 +01:00
Sylvain Rochet
6764957d06 PPP, moved EAP configuration to ppp_settings struct 2012-12-09 21:45:14 +01:00
Sylvain Rochet
c719ba7bf3 PPP, moved PAP configuration to ppp_settings struct 2012-12-09 21:22:19 +01:00
Sylvain Rochet
31d7293b17 PPP, moved EAP timeouts and max requests default values to opt.h 2012-12-09 20:40:41 +01:00
Sylvain Rochet
defef2222a PPP, improved PAP and CHAP timeout/request/maxrequests configuration values 2012-12-09 20:24:22 +01:00
Sylvain Rochet
63459f65fb PPP, moved DEFLOOPBACKFAIL from ppp/lcp.h to lwip/opt.h 2012-12-09 19:28:53 +01:00
Sylvain Rochet
c68e1ceb64 PPP, using timeouts values defined in opt.h instead of values defined in PPP headers or statically assigned values 2012-12-09 18:42:06 +01:00
Sylvain Rochet
07e72d2ac8 PPP, correctly cast int to u8_t in PPPCTLS_ERRCODE in ppp_ioctl() 2012-11-08 14:39:30 +01:00
Sylvain Rochet
7f97e354b4 PPP, switched chap_digests linked list to a const table in .rodata/flash, saving about 100 bytes in .data segment if chap(md5) and mschap is enabled 2012-10-14 02:04:36 +02:00
Sylvain Rochet
e5a554f0b5 PPP, adding const pragma to FSM callbacks, saving about 350 bytes in .data segment 2012-10-13 18:54:25 +02:00
Sylvain Rochet
9e4aa79278 PPP, adding const pragma to struct protent, saving about 200 bytes in .data segment 2012-10-13 18:38:18 +02:00
Sylvain Rochet
a0298728df PPP, disable persist mode by default, so the default behavior does not look like a buggy behavior. Fixes bug #37279. 2012-10-12 20:32:05 +02:00
Mark Lakata
0eb83f6ee6 PPP, IAR EWARM won't compile ppp-new due to keyword clash
The word "class" is reserved in IAR's EWARM compiler since it looks like c++.
This causes a failure to compile in the lcp code.

Arguably it is a bug in the compiler, but it is easy to work around with a
name change in the lcp.[ch] code. I fixed it by changing "class" to "class_".
2012-10-12 20:17:40 +02:00
Sylvain Rochet
e81f092520 PPP, changed all the code enclosed between PPP_SERVER #if macro to our PPP PCB structure, making it easier to support PPP server in the future 2012-09-27 23:53:20 +02:00
Sylvain Rochet
7fb874ad28 Merge branch 'master' into ppp-new 2012-09-27 21:32:27 +02:00
goldsimon
a4a41b9023 fixed bug #37405 'err_tcp()' uses already freed 'netconn' object 2012-09-26 21:50:42 +02:00
goldsimon
99aea7eb6f Added brackets, completed CHANGELOG 2012-09-26 21:30:01 +02:00
Henrik Persson
b4ac36337f Fix corner case with dhcp timeouts
If t1 >= t2 timeout then only t2 timer should be scheduled. This can happen
when a sub 1 minute lease is received.
2012-09-26 21:25:04 +02:00
goldsimon
7072bc3203 Added brackets, completed CHANGELOG 2012-09-26 21:21:26 +02:00
Henrik Persson
7e9f000d0b Segfault in dhcp_parse_reply if no end marker
If no endmarker is present in a dhcp reply a null pointer is potentially
dereferenced.

Add fix and test case as proof of concept.
2012-09-19 22:11:56 +02:00
Sylvain Rochet
af56eebc6a PPP, cleaned MTU,MRU variables 2012-09-01 19:44:43 +02:00
Sylvain Rochet
387c778496 PPP, added PPPoS reopen support 2012-09-01 19:29:17 +02:00
Sylvain Rochet
fbbde125d9 PPP, removed unnecessary ethif from ppp_pcb 2012-09-01 15:05:21 +02:00
Sylvain Rochet
dbaefd6126 PPP, cleaned persist and holdoff features 2012-09-01 14:43:31 +02:00
Sylvain Rochet
a1c87f7c49 PPP, improved fsm_sconfreq() allocated buffer size 2012-08-27 19:10:09 +02:00
Sylvain Rochet
045ee53468 PPP, using PBUF_POOL instead of PBUF_RAM pbufs for PPP negociation packets
PPP stack does not handle chained pbuf, but PPP negociation packets
are at most ~40 bytes long, so we are only checking if the payload
can fit into the allocated pbuf (p->tot_len == p->len).
2012-08-27 00:47:21 +02:00
Sylvain Rochet
b84ab718b0 PPP, ppp_input() code cleaning, removed dead code, fixed indentation 2012-08-25 20:38:54 +02:00
Sylvain Rochet
6144deb6b6 PPP, moved out PPPoS code into their own functions, improved ppp.c readability 2012-08-25 20:30:14 +02:00
Sylvain Rochet
19864a4a08 PPP L2TP, only skip HDLC header if necessary
RFC 2661 does not specify whether the PPP frame in the L2TP payload should
have a HDLC header or not. We handle both cases for compatibility.
2012-08-25 18:15:15 +02:00
Sylvain Rochet
7920b6e163 PPP, don't allocate twice struct eth_hdr per PPPoE pbuf 2012-08-25 16:21:58 +02:00
Sylvain Rochet
4928166593 Merge branch 'master' into ppp-new 2012-08-23 20:51:53 +02:00
Sylvain Rochet
ad5f520c68 PPP, updated pppapi_reopen() to follow ppp_reopen() prototype change 2012-08-23 20:47:14 +02:00
goldsimon
150b4fb4f6 fixed bug #37166: memp_sanity check loops itself 2012-08-22 21:59:02 +02:00
Sylvain Rochet
4f8198b298 Added ChangeLog entry reporting all the work done in the ppp-new branch. 2012-08-22 20:14:45 +02:00
Sylvain Rochet
076f177100 Added PPPd follow-up file, so that we can track what is happening on pppd.
The lwIP PPP support is based from pppd 2.4.5 (http://ppp.samba.org) with
huge changes to match code size and memory requirements for embedded devices.

Anyway, pppd has a mature codebase for years and the average commit count
is getting low on their Git repositories, meaning that we can follow what
is happening on their side and merge what is relevant for lwIP.

So, here is the pppd follow up, so that we don't get away too far from pppd.
2012-08-22 17:40:23 +02:00
Sylvain Rochet
3b939480a4 PPP, added missing entry in pppapi.h 2012-08-22 11:41:07 +02:00
Sylvain Rochet
773a2767c7 PPP, added missing pppapi_delete() thread safe function 2012-08-21 20:26:37 +02:00
Sylvain Rochet
e9b29184d0 PPP, renamed all functions using common names in utils.c that can conflict with lwIP user code during link operation 2012-08-21 20:21:38 +02:00
Sylvain Rochet
0d02b8d1f6 added <stdlib.h> to ppp_impl.h, some PPP modules are using strtol() 2012-08-21 20:03:57 +02:00
Sylvain Rochet
98c0fcc659 Added <string.h> header to ppp_impl.h, this appears to be required, found out by Ivan Delamer. 2012-08-18 22:43:23 +02:00
Sylvain Rochet
1ddebcc862 Moved PPP headers into include/netif/ppp/, fixing bug #37040. 2012-08-18 22:40:19 +02:00
Sylvain Rochet
1adb900561 Moved the include of lwip_md5.h or md5.h into the #if PPP_MD5_RANDM block, as suggested by Ivan Delamer 2012-08-18 12:56:59 +02:00
Sylvain Rochet
c5c1012ddd removed some compiler warnings in pppoe_disconnect() 2012-08-17 23:42:14 +02:00
Sylvain Rochet
519f81771a Merge remote-tracking branch 'origin/master' into ppp-new 2012-08-17 23:11:47 +02:00
Ivan Delamer
c762c06b17 Fixed typo in previous commit.
Change-Id: I97f85f4593509911829cfbbb6e309eecedd5465b
2012-08-17 11:24:18 -06:00
Ivan Delamer
8bab543531 Add a "NULL" output function for ipv6 by default, to avoid NULL
dereferencing in case of non-IPv6-enabled netifs (e.g. PPP).

Change-Id: I45f08ca89bfa0b8d61962f7052b11cc81a5e3cd1
2012-08-17 10:56:14 -06:00
goldsimon
bab8c82a35 fixed bug #36645: Calling dhcp_release before dhcp_start dereferences NULL 2012-08-13 21:50:15 +02:00
goldsimon
b82bca7c99 fixed bug #36840 snmp_send_trap() NULL de-reference if traps configured but no interfaces available 2012-08-13 21:38:30 +02:00
goldsimon
556a2126b5 Fixed bug #36899 DNS TTL 0 is cached for a long time 2012-08-13 21:32:44 +02:00
goldsimon
a070751061 fixed bug #37052: "netconn_alloc: undefined netconn_type" assertion skipped 2012-08-13 21:17:17 +02:00
goldsimon
847845027f Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip 2012-08-13 20:57:55 +02:00
goldsimon
c69914367d Sanity-check the size of netif->hwaddr 2012-08-13 20:57:19 +02:00
Sylvain Rochet
48d364e269 Merge remote-tracking branch 'origin/master' into ppp-new 2012-07-24 23:17:15 +02:00
Sylvain Rochet
c58c27ed8b removed time-based PPP phase state machine hacks from PPPoE dans PPPoL2TP
Our PPP phase state machine is now clean, we can safely remove time based
hacks in PPPoE dans PPPoL2TP.
2012-07-24 22:50:17 +02:00
James Smith
97b8abf16c Fix bug #36857: tcp_listen_dual_with_backlog() only works with ANY
address

Change-Id: I092a4c9978d88040214fc44a4c4b353be618d76c
2012-07-24 10:34:09 -06:00
Sylvain Rochet
59567b43b0 pcb->link_status_cb must be set, we don't need to check each time we use it if not NULL 2012-07-23 00:55:24 +02:00
Sylvain Rochet
e067e84d69 switch to phase dead if PPPoE or PPPoL2TP failed to connect 2012-07-23 00:48:27 +02:00
Sylvain Rochet
35c670513f fixed some more PPP phase state machine issues
The only way PPPoE or PPPoL2TP disconnect it through ppp_link_terminated(),
therefore PPP is always already down, so we don't need to ask PPP to hup or stop.
2012-07-22 23:53:27 +02:00
Sylvain Rochet
8ec92b6fe7 don't call ppp_hup() and ppp_stop() if PPPoE or PPPoL2TP failed to connect
This is useless because PPP is not started yet, it confuses the PPP phase
state machine.
2012-07-22 23:37:35 +02:00
Sylvain Rochet
5552f082e8 handle cases when ppp_close() is called while session is in dead or holdoff phase 2012-07-22 21:42:56 +02:00
Sylvain Rochet
3c122117fc improved PPP API, added ppp_reopen()
This is now the user choice to re-establish the session in the link status callback
by either calling the ppp_reopen() to re-establish or ppp_delete() to free the PPP
control block. Without user intervention, the PPP control block now stay in the dead
phase, allowing the user to re-establish or delete the control block later.
2012-07-22 20:53:54 +02:00
Sylvain Rochet
a467d21eba ppp_close() PPPoL2TP support added 2012-07-22 18:05:19 +02:00
Sylvain Rochet
bc724ea206 Do not destroy the PPP control block automatically anymore, added ppp_delete() API function.
Without that, PPP user don't know when and how the PPP control block is free()ed, which
can lead to hard fault.
2012-07-22 17:20:40 +02:00
Sylvain Rochet
4ea5c1d973 improved persist mode, we now clear everything we can in the PPP control block structure, ensuring we start a new session from a clean state 2012-07-21 00:26:23 +02:00
Sylvain Rochet
c65883a727 UCHAR_MAX is defined in limits.h, I do not want to add any system include, replaced to 0xff 2012-07-16 20:09:49 +02:00
Sylvain Rochet
a4f6146667 removed some FIXME that are not relevant anymore 2012-07-15 15:57:54 +02:00
Sylvain Rochet
936c6c0d5c reduced call stack by one when receiving a PPPoE disc packet 2012-07-15 15:12:40 +02:00
Sylvain Rochet
91af8878e1 saved some bytes from PPPoE control block, improved PADI retries 2012-07-15 15:07:07 +02:00
Sylvain Rochet
d2b2ae09e6 saving 14 bytes per PPPoE pbuf; not allocating struct eth_hdr two times per packet 2012-07-15 14:56:30 +02:00
Sylvain Rochet
94c35184a9 replaced PPPoL2TP printf() used to debug to PPPDEBUG a/o deletion 2012-07-14 17:47:30 +02:00
Sylvain Rochet
9e021cd1a8 improved PPP default interface management, added ppp_set_default() API call 2012-07-14 17:25:24 +02:00
Sylvain Rochet
78565026ac L2TP output netif is now selectable, making it useful to select a default route for the L2TP tunnel, in case the default interface is set to the L2TP PPP interface 2012-07-12 01:11:08 +02:00
Sylvain Rochet
de6be743c6 added holdoff support for PPPoE and PPPoL2TP when persist mode is used 2012-07-11 23:50:33 +02:00
Sylvain Rochet
f534e80c71 added L2TPv2 (PPP over L2TP, a.k.a. UDP tunnels) support
Supported:
 - L2TPv2 (PPP over L2TP, a.k.a. UDP tunnels)
 - LAC

 Not supported:
 - LNS (require PPP server support)
 - L2TPv3 ethernet pseudowires
 - L2TPv3 VLAN pseudowire
 - L2TPv3 PPP pseudowires
 - L2TPv3 IP encapsulation
 - L2TPv3 IP pseudowire
 - L2TP tunnel switching - http://tools.ietf.org/html/draft-ietf-l2tpext-tunnel-switching-08
 - Multiple tunnels per UDP socket, as well as multiple sessions per tunnel
 - Hidden AVPs
2012-07-09 23:25:32 +02:00
Sylvain Rochet
0797ab6bc6 some buggy compiler get confused with duplicated labels used in enum tcp_state and fsm.h, prepending PPP's ones 2012-07-09 22:12:14 +02:00
Sylvain Rochet
b4df26a75d some buggy compiler get confused with duplicated labels used in enum tcp_state and fsm.h, prepending PPP's ones 2012-07-09 22:04:09 +02:00
Sylvain Rochet
d92c462466 added PPP Sequential API module, based from the Network Interface Sequential API module 2012-07-07 19:50:56 +02:00
Sylvain Rochet
f31b905847 initialize PPP in the lwip_init() function 2012-07-07 17:33:34 +02:00
Sylvain Rochet
572e457e77 improved PPP API header documentation 2012-07-07 15:05:15 +02:00
Sylvain Rochet
be9b23a082 fixed LCP Echo Request/Reply feature 2012-07-07 12:16:48 +02:00
Sylvain Rochet
c9e7531251 Merge branch 'master' into ppp-new 2012-07-04 00:22:33 +02:00
Sylvain Rochet
90faecd86e replaced u_int{8,16,32}_t to lwIP u{8,16,32}_t types
added padding to compiler generated bitfield, this is seen as best practice,
maybe it helps buggy compilers
2012-07-03 22:59:50 +02:00
Ivan Delamer
6c12e5bfbe Allow setting/getting socket option IPV6_V6ONLY for stream sockets
only, as datagram sockets do not support dual IP versions yet.

Change-Id: I2d89bdaa06b19dc0c553c7be6ac6e9a71d3ce8a5
2012-07-03 14:39:25 -06:00
Sylvain Rochet
2e069429c2 removed bool type, replaced by u8_t 2012-07-03 22:03:51 +02:00
James Smith
e65202f825 Applied patch by James Smith to implement IPV6_V6ONLY support in
sockets and netconns.

Change-Id: I2ecd8e218703114890b2d678cc1ccf997a16f5e3
2012-07-03 13:16:04 -06:00
Erik Ekman
11a3057e8e PPP: Add option to skip FCS table
Option PPP_FCS_TABLE is created which controls if PPPoS FCS calculation
should be done against precalculated table or by using a short algorithm.

Default value is 1, keeps old behaviour.
Setting it to 0 saves around 0.5 kB flash.
2012-06-23 15:11:49 +02:00
Sylvain Rochet
ba0c619844 clarified PPP_INPROC_OWNTHREAD documentation 2012-06-23 13:46:51 +02:00
Sylvain Rochet
a83fb30836 fixed PPPoS multithread support 2012-06-23 13:07:43 +02:00
Sylvain Rochet
dc092653f4 now displaying sent packet before PPPoS add its escaping, trailing flags, ... 2012-06-23 12:04:27 +02:00
Sylvain Rochet
25c6278000 fixed some endianess issues with PPPoS 2012-06-23 02:27:03 +02:00
Sylvain Rochet
5033e0e752 display IPV6CP packets 2012-06-23 01:44:52 +02:00
Sylvain Rochet
295eeef9b6 "ISO C forbids conversion of function pointer to object pointer type" - removed callback function pointer display in debug messages. Anyway, this is quite a meaningless information. 2012-06-22 21:48:21 +02:00
Sylvain Rochet
f63b87e28b setting tot_len before using it, oops 2012-06-22 21:43:22 +02:00
Sylvain Rochet
1f780e86d5 PPP timeouts required depend on the number of allowed PPP sessions
Furthermore we need up to 6 timeouts per PPP (AUTH + PAP|CHAP|EAP + LCP + IPCP + IP6CP + PPPoE)

This can be improved with more conditions.
2012-06-22 21:29:12 +02:00
Sylvain Rochet
408a56ffaf phase must be set to initalize each time we try to reconnect 2012-06-22 20:48:08 +02:00
Sylvain Rochet
a84f5d52ff added ppp_pcb to ppp callback 2012-06-22 19:59:46 +02:00
Sylvain Rochet
fb6eed0087 set LL addresses before bringing the interface up for IPv6 2012-06-22 19:45:45 +02:00
Sylvain Rochet
dc242a01b4 don't build ppp_netif_output_ip6() if PPP IPV6 support is disabled 2012-06-22 19:29:55 +02:00
Sylvain Rochet
074d3dd2b1 moved ipv6cp global variables to ppp_pcb 2012-06-22 19:27:03 +02:00
Sylvain Rochet
807afbc879 improved FSM structure size 2012-06-22 18:50:09 +02:00
Sylvain Rochet
8f1eeb1025 improved ipv6cp_options struct size 2012-06-22 18:23:07 +02:00
Sylvain Rochet
dd288f70ec fixed sent PPPoE dump packet and copy everything we need after pppoe_xmit() free'd the pbuf 2012-06-22 18:07:59 +02:00
Sylvain Rochet
6a11134a18 fixed PPPoS suppport compilation 2012-06-22 17:53:39 +02:00
Sylvain Rochet
9b60b55f03 SNMP prefers tot_len 2012-06-22 17:48:31 +02:00
Sylvain Rochet
77aa06df64 improved ppp_write_over_ethernet(), don't MEMCPY the entire packet into a new pbuf 2012-06-22 17:03:59 +02:00
Sylvain Rochet
9b7860d6ec merged ppp_write and ppp_write_pbuf 2012-06-22 14:17:35 +02:00
Sylvain Rochet
bda73b1bc9 replaced call from ppp_write to ppp_write_pbuf 2012-06-21 23:31:23 +02:00
Sylvain Rochet
8576ee0981 randomized seed when using MD5 random support and PPPoE 2012-06-21 23:08:20 +02:00
Sylvain Rochet
8093b55e86 don't destroy and create the PPP interface each time sifup() is called (it is actually called twice with IPv4 + IPv6 enabled) 2012-06-21 22:28:52 +02:00
Sylvain Rochet
b6db4a0e2e PPP IPv6 local link support added 2012-06-21 18:05:17 +02:00
Sylvain Rochet
cd7894dfc9 added compilation macro to eui64.[ch] and cleaned unix-dependant code 2012-06-20 13:39:08 +02:00
Sylvain Rochet
c36d73f42a added raw IPv6 PPP files 2012-06-20 13:29:21 +02:00
Sylvain Rochet
9871c4ff06 improved IPCP control structure size 2012-06-20 00:10:08 +02:00
Sylvain Rochet
e330983408 improved lcp_options structure size 2012-06-20 00:03:08 +02:00
Sylvain Rochet
4bbf443ba2 improved CHAP structure size, however there is not much we can do 2012-06-19 23:42:41 +02:00
Sylvain Rochet
0234c62c3e improved PAP control structure size 2012-06-19 23:37:33 +02:00
Sylvain Rochet
0bdc27186d some more improvements to ppp_pcb 2012-06-19 23:31:20 +02:00
Sylvain Rochet
c51c55b782 LCP and IPCP variable size improved 2012-06-19 23:25:57 +02:00
Sylvain Rochet
26250f1953 removed pcb->chap_mdtype_all 2012-06-19 23:14:31 +02:00
Sylvain Rochet
7ecfe6304a reduced MTU/MRU variables 2012-06-19 23:03:47 +02:00
Sylvain Rochet
b7be03801c improved much more ppp_pcb entry size 2012-06-19 22:53:38 +02:00
Sylvain Rochet
b21cb8a396 removed pcb->num if PPP debug is not compiled 2012-06-19 22:08:14 +02:00
Sylvain Rochet
eadd56a376 replaced exit code (pcb->status) with ppp_ioctl() 2012-06-19 22:00:12 +02:00
Sylvain Rochet
2aa9a66c57 don't duplicate user and password anymore, anyway, the PPP user will have them already allocated as static strings or from configuration flash/file 2012-06-19 21:26:52 +02:00
Sylvain Rochet
8e9c07df39 more idle time limit macros 2012-06-19 18:02:23 +02:00
Sylvain Rochet
1d392f0e76 removed useless flags from ppp_settings 2012-06-19 17:54:29 +02:00
Sylvain Rochet
08cbc1b22b idle time limit and connect time limit are now compile time options 2012-06-19 17:50:02 +02:00
Sylvain Rochet
f744d7a789 reduced ppp_settings types size 2012-06-19 17:42:13 +02:00
Sylvain Rochet
ff2a737094 ppp_settings.remote_name is now a compile time option 2012-06-19 17:38:02 +02:00
Sylvain Rochet
111a1cef52 moved ppp_settings.lax_recv and ppp_settings.noendpoint bool types (so char) to the ppp_settings bitfield 2012-06-19 17:07:02 +02:00
Sylvain Rochet
a44b56dc61 pcb->nak_buffer replaced with a pbuf 2012-06-19 15:36:53 +02:00
Sylvain Rochet
1b586b69bc do not allocated pbuf of more than pcb->peer_mru instead of PPP_MRU, to save some memory 2012-06-18 15:07:48 +02:00
Sylvain Rochet
4a7f2ffc5e pcb->outpacket_buf replaced by pbuf everywhere it was used 2012-06-18 02:21:18 +02:00
Sylvain Rochet
503162ec54 CHAP is now using pbuf instead of pcb->outpacket_buf 2012-06-18 01:18:24 +02:00
Sylvain Rochet
22fad86453 PAP is now using pbuf instead of pcb->outpacket_buf 2012-06-18 01:10:21 +02:00
Sylvain Rochet
8641b8a36e PPP_PCB are now allocated using memp_alloc() 2012-06-17 23:48:55 +02:00
Sylvain Rochet
be2d3b5886 moved back temporarily moved structure definitions from various headers to ppp.h during unit to ppp_pcb transition 2012-06-17 02:33:47 +02:00
Sylvain Rochet
3120487243 cleanified old style C function declaration from utils.c 2012-06-17 01:47:45 +02:00
Sylvain Rochet
4404ef0281 prevent conflict with existing (md4|md5|sha1|des) object file if polarssl is already used elsewhere in the project 2012-06-17 00:55:11 +02:00
Sylvain Rochet
0c68fc409e fixed pppoe_find_softc_by_session() when we have the same PPPoE session id on 2 ethif 2012-06-17 00:33:02 +02:00
Sylvain Rochet
ea7bf19057 fixed most "unit 0" used instead of pcb pointer 2012-06-17 00:17:22 +02:00
Sylvain Rochet
99bf9775d9 NUM_PPP is defined is opt.h, clearing from ppp_impl.h 2012-06-16 18:45:53 +02:00
Sylvain Rochet
0e2d5f9d0e removed unused inpacket_buf in ppp_pcb 2012-06-16 14:53:13 +02:00
Sylvain Rochet
3065b9f968 no more pcb->unit, new user selectable pcb->num for debugging purpose (like netif does) 2012-06-16 04:12:10 +02:00
Sylvain Rochet
cce5fbc7b1 fixed PPPoS xmit_accm ppp_pcb variable access 2012-06-16 03:58:48 +02:00
Sylvain Rochet
82a4d4ec65 LCP global variables moved to ppp_pcb as well as input/output buffers 2012-06-16 03:53:05 +02:00
Sylvain Rochet
708147625f FSM global variables moved to ppp_pcb 2012-06-16 03:30:36 +02:00
Sylvain Rochet
93559a54e9 IPCP global variables moved to ppp_pcb 2012-06-16 03:25:31 +02:00
Sylvain Rochet
f10ddea305 removed fsm->unit 2012-06-16 03:14:26 +02:00
Sylvain Rochet
4a8ff6d824 protent prototype switched from unit to ppp_pcb 2012-06-16 02:43:13 +02:00
Sylvain Rochet
4b7e3af77c IPCP and LCP structures moved to ppp_pcb 2012-06-16 02:13:50 +02:00
Sylvain Rochet
19238a910c global variables removed from chap support 2012-06-15 01:22:01 +02:00
Sylvain Rochet
2deb13df43 EAP is now using ppp_pcb as well 2012-06-15 01:06:27 +02:00
Sylvain Rochet
1ece33e79a PAP and CHAP are now using ppp_pcb* 2012-06-15 00:24:39 +02:00
Sylvain Rochet
844f5e5af1 moved auth.c global variables to ppp_pcb 2012-06-14 00:25:45 +02:00
Sylvain Rochet
51bfac71b0 auth.c functions now use ppp_pcb* as first argument 2012-06-14 00:08:56 +02:00
Sylvain Rochet
81a0fd782f removed unit from ppp_ioctl() 2012-06-13 00:12:55 +02:00
Sylvain Rochet
3a30e5bf78 removed ppp_input_header, replaced using 2 chained pbuf the only area we need it 2012-06-12 23:28:09 +02:00
Sylvain Rochet
a87096cdc9 fixed PPPoS support, improved ppp_input() 2012-06-12 00:59:02 +02:00
Sylvain Rochet
527d99fd39 removed all PPP unit in ppp.c except pih->unit and unit used in debugging output 2012-06-12 00:55:53 +02:00
Sylvain Rochet
6e2722a6d3 started the unit to ppp_pcb replacement 2012-06-11 01:39:03 +02:00
Sylvain Rochet
8694deaabb don't add ppp_pcb_rx to ppp_pcb struct if PPPOS support is disabled 2012-06-10 21:06:02 +02:00
Sylvain Rochet
a226099b04 ppp_close() on PPPoE actually works,
clear persist mode if user asked the connection to shutdown
2012-06-10 01:45:29 +02:00
Sylvain Rochet
336ba8f419 pppoe now have access to the ppp_pcb structure, removed "persist" option copy 2012-06-10 01:08:37 +02:00
Sylvain Rochet
5abdc99f3e no more PPP unit number in PPPoE, now using ppp_pcb 2012-06-10 01:00:50 +02:00
Sylvain Rochet
f7ef9887d7 improved ppp_set_auth() mschap support 2012-06-09 23:38:38 +02:00
Sylvain Rochet
fed76f29d0 added missing EAP_SUPPORT macro 2012-06-09 23:38:26 +02:00
Sylvain Rochet
a3cfbfc6ba ppp_set_auth() modified to handle new handled authtype (mschap + eap) 2012-06-09 23:32:31 +02:00
Sylvain Rochet
444646b65e renamed ppp_control to ppp_pcb, replaced unit number to ppp_pcb in all ppp.h declared functions 2012-06-09 23:06:45 +02:00
Sylvain Rochet
8bd508a73d moved ppp_settings to ppp_control, improved PPP API to really allow multiple PPP sessions 2012-06-09 18:06:55 +02:00
Sylvain Rochet
1cceb4e0ad moved hide_password global variable to ppp_options 2012-06-09 17:05:19 +02:00
Sylvain Rochet
c2d2034ae8 PPPoE persist is working, removing FIXME comments about that 2012-06-09 16:56:32 +02:00
Sylvain Rochet
f94ed922e5 moved exit status global variable to ppp_control 2012-06-09 16:43:12 +02:00
Sylvain Rochet
7a57d28db4 moved listen_time global variable to ppp_settings 2012-06-09 16:18:01 +02:00
Sylvain Rochet
ce5121e659 removed unused "unsuccess" global variable 2012-06-09 16:00:22 +02:00
Sylvain Rochet
a7d7158b05 removed useless error_count global variable from ppp.c 2012-06-09 15:58:51 +02:00
Sylvain Rochet
6b8c78bacc moved remote_name and explicit_remote global variable to ppp_settings 2012-06-09 15:55:01 +02:00
Sylvain Rochet
2da930ba4c removed some useless extern 2012-06-09 15:45:52 +02:00
Sylvain Rochet
772cac7946 removed useless error_count global variable 2012-06-09 15:42:57 +02:00
Sylvain Rochet
42f672d85d phase global variable moved to ppp_control structure 2012-06-09 15:39:16 +02:00
Sylvain Rochet
945f2912a7 using PPP_DEBUG instead of debug global variable 2012-06-09 15:09:00 +02:00
Sylvain Rochet
1ccf516c5e options.c is now empty, removed 2012-06-09 14:43:56 +02:00
Sylvain Rochet
fb396b8fac moved debug option from options.c to ppp.c 2012-06-09 14:42:31 +02:00
Sylvain Rochet
6db3026d47 using our_name from ppp_settings (only used in server mode and disabled by default) 2012-06-09 14:39:44 +02:00
Sylvain Rochet
becc306300 using idle_time_limit from ppp_settings 2012-06-09 14:35:06 +02:00
Sylvain Rochet
4e7ce11684 removed holdoff support, can be handled without persist mode outside lwIP 2012-06-09 14:31:45 +02:00
Sylvain Rochet
6589cf9d8e removed useless options 2012-06-09 14:16:59 +02:00
Sylvain Rochet
552589f098 removed multilink option when multilink support is not compiled 2012-06-09 14:14:06 +02:00
Sylvain Rochet
2ec79c03a0 unused ifunit global variable removed 2012-06-09 01:26:21 +02:00
Sylvain Rochet
21653f0f91 pr_log is unused, don't even try to build it 2012-06-09 01:20:01 +02:00
Sylvain Rochet
b922eaa754 print packet is working back, at least for PPPoE 2012-06-09 00:52:20 +02:00
Sylvain Rochet
d27da93c33 now using maxconnect from ppp_settings 2012-06-07 23:34:06 +02:00
Sylvain Rochet
2e6fa7f8a3 dns server support is done, clearing FIXME entries 2012-06-07 23:05:19 +02:00
Sylvain Rochet
302184938a removed malloc() from ms chap 2012-06-07 23:02:08 +02:00
Sylvain Rochet
e5355cc45f PPP server support is now optional (disabled by default, not working until PPP have a "listen" support) 2012-06-07 22:22:57 +02:00
Sylvain Rochet
2fe778507a fixed randm if random MD5 support is not enabled 2012-06-07 22:19:25 +02:00
Sylvain Rochet
4077422ae2 fixed pbuf leaks in ppp_input() in case of packets not expected 2012-06-07 20:41:21 +02:00
Sylvain Rochet
a9ac45c5f0 added PPPoE persist support (don't timeout sending PADI packets) 2012-06-07 01:48:12 +02:00
Sylvain Rochet
7ef99ee6f3 added a persist option (enabled by default for now until we add a way for users to pass a ppp_settings structure)
improved PPPoE state machine and added persist mode support
2012-06-07 00:46:19 +02:00
Sylvain Rochet
e44aada634 improved PPPoE callback with state values, so that PPP know exactly what is happening on the PPPoE side 2012-06-06 23:42:20 +02:00
Sylvain Rochet
ac0a864e14 fixed typos s/parms/params/g 2012-06-06 22:36:23 +02:00
Sylvain Rochet
3c3331d5ed fixed some debug strings 2012-06-06 22:34:16 +02:00
Sylvain Rochet
6f21f48937 added MTU support (using MRU from the peer) 2012-06-05 23:10:38 +02:00
Sylvain Rochet
2e227f868b PPPoE is now guessing its MTU from the underlying netif MTU (in most cases 1500 minus 8 = 1492, which is the most common PPPoE MTU) 2012-06-05 22:22:35 +02:00
Sylvain Rochet
7d7513c71c re-enabled DNS support 2012-06-04 23:19:23 +02:00
Sylvain Rochet
d95f1e9913 added missing initialisation in ppp_init.c 2012-06-04 22:48:12 +02:00
Sylvain Rochet
1013b49ab7 disabled ppp_over_ethernet_close(), which is not exported and probably bogus, until we fix it 2012-06-04 22:23:10 +02:00
Sylvain Rochet
dc0e15a74e we should reduce nak_buffer[] size 2012-06-04 22:22:37 +02:00
Sylvain Rochet
d6e5ca722f setting default route by default 2012-06-04 19:00:36 +02:00
Sylvain Rochet
cd3ba00479 get_mask now returns "255.255.255.255" by default, which is what we want in almost all cases on a PPP link 2012-06-04 18:58:05 +02:00
Sylvain Rochet
c549dba725 re-enabled LCP echo interval / echo fail 2012-06-04 16:25:16 +02:00
Sylvain Rochet
ca1ad99bea PPPoE reauth bug fixed 2012-06-04 15:31:29 +02:00
Sylvain Rochet
2c7bd7e591 fixed print_string() prototype 2012-06-04 01:45:33 +02:00
Sylvain Rochet
bea45b3c30 cleared IDE warnings 2012-06-04 00:59:24 +02:00
Sylvain Rochet
093c7b4386 cleaned depreacted __P() and __V() macros, removed the legacy varargs.h header 2012-06-04 00:34:28 +02:00
Sylvain Rochet
8332a5aa53 disabled all plugins hooks 2012-06-04 00:12:45 +02:00
Sylvain Rochet
eb020656d2 disabled all plugins hooks 2012-06-04 00:12:17 +02:00
Sylvain Rochet
31456a6dfe removed CamelCase in ppp.c and ppp_impl.h, added compat macro in ppp.h (but disabled for now) 2012-06-03 23:56:56 +02:00
Sylvain Rochet
03fda0f803 removed CamelCase for all ppp.h declared functions 2012-06-03 21:48:10 +02:00
Sylvain Rochet
c09f03f6e8 VJ support is back! 2012-06-03 20:44:47 +02:00
Sylvain Rochet
3bad9ff50a ppp_impl.h is back! 2012-06-03 20:25:32 +02:00
Sylvain Rochet
0663421d01 re-added PPPoS code from the previous port, it builds, maybe it works 2012-06-03 20:05:40 +02:00
Sylvain Rochet
10175caa38 fixed MD5 Random enabling conditions 2012-06-03 16:59:50 +02:00
Sylvain Rochet
103ad75c50 automatically enable MD5 Random support if CHAP or EAP is enabled 2012-06-03 16:51:03 +02:00
Sylvain Rochet
2f5f86d6fc don't build any PPP file if PPP support is disabled 2012-06-03 16:38:26 +02:00
Sylvain Rochet
89d2c2917f more ppp.[ch] cleaning 2012-06-03 16:24:33 +02:00
Sylvain Rochet
05817aa3b9 LQR (Link Quality Report) support is now optional 2012-06-03 14:02:25 +02:00
Sylvain Rochet
5464ed6661 removed all useless header files, merged ppp_defs.h to ppp.h
removed session.[ch] and tty.c which are Unix-centric files and disabled
2012-06-03 13:53:45 +02:00
Sylvain Rochet
05c84a147d added ECP_SUPPORT in opt.h (disabled by default); renamed MD5_SUPPORT to PPP_MD5_RANDM, which is more meaningful 2012-06-03 13:07:46 +02:00
Sylvain Rochet
9c35403b98 clarified a bit more ppp.[ch] 2012-06-03 01:46:46 +02:00
Sylvain Rochet
b5b075eb04 demystified a bit the PPP impl, renamed output() to ppp_output() to prevent conflict 2012-06-03 00:30:12 +02:00
Sylvain Rochet
e1261c9620 removed all system headers except the strict minimum 2012-06-02 23:29:40 +02:00
Sylvain Rochet
5531bca078 make it build with avr32-gcc
Disabled Unix-centric non necessary include files

Changed some include paths

Removed all printf() I put there and there for debugging.

It builds with the avr32 gcc toolchain, meaning we removed
all the pppd code requiring a unix base.
2012-06-02 23:04:03 +02:00
Sylvain Rochet
28b9dd50ff build PolarSSL MD5 if MD5_SUPPORT is enabled (for randm) 2012-06-02 21:31:13 +02:00
Sylvain Rochet
44c2a0a7fc fixed most PPP compilation warnings with -pedantic 2012-06-02 21:25:58 +02:00
Sylvain Rochet
d143acfc76 fixed all PPP compilation warnings with -Wall 2012-06-02 20:46:52 +02:00
Sylvain Rochet
b4d59fd52d removed headers that were initially copied but not used (yet) 2012-06-02 19:37:40 +02:00
Sylvain Rochet
2ee2a1b730 removed sys-linux.c 2012-06-02 19:34:37 +02:00
Sylvain Rochet
86ebc8e46c removed pppd.h and ppp.c, renamed pppmy.c to ppp.c and pppmy.h to ppp.h 2012-06-02 19:30:31 +02:00
Sylvain Rochet
29c5ee6b19 pppd.h disabled, renamed MAX() to LWIP_MAX() 2012-06-02 19:19:51 +02:00
Sylvain Rochet
323aebf1f5 cleaning unused stuff in pppd.h, syslog() is no more used 2012-06-02 18:47:53 +02:00
Sylvain Rochet
a5dd1ccfaa ppp.c disabled, everything required for lwIP moved to our impl 2012-06-02 18:07:34 +02:00
Sylvain Rochet
4dd297cef2 protent table moved to our PPP impl 2012-06-02 17:22:12 +02:00
Sylvain Rochet
7f9fea18ae added pppmy.h in all .c files to easily find conflicts 2012-06-02 17:12:55 +02:00
Sylvain Rochet
adb8b881b4 resolve conflit, ipcp.c defines ip_ntoa() which is already defined by lwIP, disabled ipcp.c::ip_ntoa() and using lwIP one 2012-06-02 17:04:46 +02:00
Sylvain Rochet
d3d1b69c7a more ppp.c cleaning 2012-06-02 16:56:20 +02:00
Sylvain Rochet
922d3716ff PPP statistics optional (non working) compile time option added 2012-06-02 16:41:09 +02:00
Sylvain Rochet
4158222e86 moved new_phase() to our own implementation, re-enabled new_phase() support 2012-06-02 15:00:18 +02:00
Sylvain Rochet
6727c43441 PPP notifier support is now a compile time option
However, as of now, the notify() function is empty, so it requires
some work if someone want to use it.

The notify feature allows someone to be able to follow the
state of the PPP stack (auth ok, ipcp up, initialise, ...), this
is like the callback feature set by pppOverEthernetOpen() and others,
but with more details.
2012-06-02 14:48:04 +02:00
Sylvain Rochet
55c1ec2925 re-enabled auth notifiers 2012-06-02 14:12:54 +02:00
Sylvain Rochet
0f1c18e675 PPP interval timeout support disabled (using lwIP timeout support), protocol_name() moved to our PPP impl and disabled by default 2012-06-02 13:46:45 +02:00
Sylvain Rochet
0de1293ff5 clarifying what is actually the "datainput" entry in protent 2012-06-02 13:03:43 +02:00
Sylvain Rochet
89ab390719 added necessary pppSingleBuf() call before passing the packet to the appropriate PPP subsystem 2012-06-02 02:44:18 +02:00
Sylvain Rochet
88ef3ffa50 POSIX signal support removed 2012-06-02 02:30:43 +02:00
Sylvain Rochet
668d5d9d92 removed set/getenv functions 2012-06-02 02:23:56 +02:00
Sylvain Rochet
6c908ac727 removed more protent fields only used by print packets functions 2012-06-02 02:14:19 +02:00
Sylvain Rochet
2c4bd7162f print packet functions are now optional 2012-06-02 02:07:49 +02:00
Sylvain Rochet
cf18e0776d removed demand prototypes if not compiled-in 2012-06-02 01:55:24 +02:00
Sylvain Rochet
8b866beaeb demand support is now a compile-time option
Obviously, it requires some wiring to know if there is new activity
on a not-yet established PPP interface with the default route
already set.

I don't think any lwIP user will ever need that, all should know
when to bring the link up and down.
2012-06-02 00:53:25 +02:00
Sylvain Rochet
ee5fca7a2b removed pathnames.h and pidfile support 2012-06-02 00:33:37 +02:00
Sylvain Rochet
fc074937f5 Linux ioctl() gone, ECP support optional, CCP support optional
Removed all the used Linux ioctl(), sys_linux.c is entirely disabled.

Replaced unecessary functions to set up a PPP link to null fonctions,
however all stuff necessary to shutdown a PPP link should be done.

Some utils functions related to I/O files are disabled too.

ECP and CCP support only set PPP attributes into the PPP kernel support,
they are now compile-time options and are disabled by default and
obviously not supported (yet? :p)
2012-06-02 00:19:40 +02:00
Sylvain Rochet
a17ea13453 autoselecting which PolarSSL files to use support added 2012-06-01 01:10:02 +02:00
Sylvain Rochet
8bb4ea85b8 removed some useless Linux calls 2012-06-01 01:07:27 +02:00
Sylvain Rochet
26e8372c75 changed PolarSSL compile-time condition 2012-06-01 00:59:15 +02:00
Sylvain Rochet
4704efa32a PAP support is now an optional compile-time feature 2012-05-30 23:32:30 +02:00
Sylvain Rochet
339925e835 CHAP support is now an optional compile-time feature 2012-05-24 00:52:20 +02:00
Sylvain Rochet
28360a7f26 MSCHAP is now an optional compile-time feature 2012-05-23 23:29:19 +02:00
Sylvain Rochet
49bb62d221 and less and less useless auth code (will this end ?) 2012-05-23 00:51:59 +02:00
Sylvain Rochet
04f121b88f less and less auth code 2012-05-23 00:04:07 +02:00
Sylvain Rochet
6ce5c8eb78 disabled upap_rauthreq() 2012-05-22 23:07:28 +02:00
Sylvain Rochet
7736cdae1c replaced BCOPY to lwip-MEMCPY 2012-05-22 23:02:02 +02:00
Sylvain Rochet
05aa1f1ae4 using MEMCPY() instead of memcpy() 2012-05-22 22:13:41 +02:00
Sylvain Rochet
42827cdea2 more and more ppp options removal 2012-05-22 21:59:23 +02:00
Sylvain Rochet
b88dad4034 disabled almost all PPP options strings and support as well as useless file-based auth code 2012-05-22 01:28:30 +02:00
Sylvain Rochet
d0645273df removed HMAC support from ciphers 2012-05-21 23:02:27 +02:00
Sylvain Rochet
dea27e105d cleaned PolarSSL files 2012-05-21 22:48:41 +02:00
Sylvain Rochet
0bfad4392a Commit to prouve we copied the raw BSD PolarSSL files 2012-05-21 22:33:37 +02:00
Sylvain Rochet
4c1b507c07 fixed MS-CHAP and MS-CHAP-V2, MD4 polarssl uses bytes as input length, not bits 2012-05-21 22:26:20 +02:00
Sylvain Rochet
0289055948 Revert "Revert "Added PolarSSL DES library, which is necessary for MSCHAP.""
This reverts commit a820f32ec9.
2012-05-21 22:15:40 +02:00
Sylvain Rochet
83a48dafea Revert "Revert "Replaced md4/md5/sha1 implementations to PolarSSL ones""
This reverts commit ca2fd867b8.
2012-05-21 22:14:29 +02:00
Sylvain Rochet
a7a20a9de4 Revert "now using OpenBSD DES implementation"
This reverts commit a9672e1a21.
2012-05-21 22:14:13 +02:00
Sylvain Rochet
82b67b01ff Revert "removed salted DES ( known as crypt() function ), we don't need it"
This reverts commit 517659640e.
2012-05-21 22:14:02 +02:00
Sylvain Rochet
b896203dcf Revert "Removed all stuff requiring encryption."
This reverts commit c268c5e07c.

Conflicts:

	src/netif/ppp/auth.c
	src/netif/ppp/ppp.c
	src/netif/ppp/pppmy.c
	src/netif/ppp/pppmy.h
2012-05-21 22:04:04 +02:00
Sylvain Rochet
795d5807b5 EAP support is now optional 2012-05-21 01:18:36 +02:00
Sylvain Rochet
7d43f4a1f4 removed useless system header from EAP 2012-05-21 00:03:18 +02:00
Sylvain Rochet
c268c5e07c Removed all stuff requiring encryption.
OpenBSD DES require more than 70 kB of static memory.

The GNU libcrypt DES, for information, require more than 131 kB,
so this is probably the case with all non memory optimised DES.

PolarSSL only required 132 bytes of stack with some kB of .rodata
precomputed tables :-)

I personally don't need MS CHAP v1 or MS CHAP v2, and that was not
supported in the previous PPP port, so there is no regression,
I feel comfortable about removing those hard to port stuff.

If someone want to do the MS CHAP port, he first have to find or
do a small memory footprint DES implementation.
2012-05-20 23:23:14 +02:00
Sylvain Rochet
517659640e removed salted DES ( known as crypt() function ), we don't need it 2012-05-20 22:47:12 +02:00
Sylvain Rochet
a9672e1a21 now using OpenBSD DES implementation 2012-05-20 22:32:24 +02:00
Sylvain Rochet
4570f71f21 modified auth_reset() so that we can choose which auth we want 2012-05-20 20:46:45 +02:00
Sylvain Rochet
ca2fd867b8 Revert "Replaced md4/md5/sha1 implementations to PolarSSL ones"
This reverts commit aa2656cb9e.

Licence issue, we cannot include GPLed source code.
2012-05-20 20:40:27 +02:00
Sylvain Rochet
624da03bad Revert "modified auth_reset() so that we can choose which auth we want"
This reverts commit bf10a27db8.

Licence issue, we cannot include GPLed source code.
2012-05-20 20:40:08 +02:00
Sylvain Rochet
a820f32ec9 Revert "Added PolarSSL DES library, which is necessary for MSCHAP."
This reverts commit de70b710af.

Licence issue, we cannot include GPLed source code.
2012-05-20 20:39:15 +02:00
Sylvain Rochet
f5dc6e80c0 Removed uneeded crypt() from auth.c and session.c 2012-05-20 20:04:05 +02:00
Sylvain Rochet
de70b710af Added PolarSSL DES library, which is necessary for MSCHAP.
Added a README about our PolarSSL included files, clarifying what we did.

Removed crypt(), -lcrypt ( setkey() / encrypt() ) dependencies.
2012-05-20 19:57:37 +02:00
Sylvain Rochet
bf10a27db8 modified auth_reset() so that we can choose which auth we want
also fixed MS-CHAP and MS-CHAP-V2, MD4 polarssl uses bytes as input
length, not bits
2012-05-20 15:27:52 +02:00
Sylvain Rochet
aa2656cb9e Replaced md4/md5/sha1 implementations to PolarSSL ones
Using cleaned PolarSSL md4/md5/sha1 implementations, without changing the API,
so that lwIP users already doing SSL or using PolarSSL don't need to compile
md4/md5/sha1 twice.

Added to that, we need a DES library for MSCHAP, and PolarSSL provided
a DES support.

And finally, PolarSSL is outstanding :-)
2012-05-20 01:44:22 +02:00
Sylvain Rochet
adf2b2bf03 don't compile wkmodulus[] if SRP is not used 2012-05-19 22:59:08 +02:00
Sylvain Rochet
6773326d96 replaced MIN to LWIP_MIN 2012-05-17 23:41:39 +02:00
Sylvain Rochet
1d7efce0dc Removed TDB code, which we cannot port, because it needs a filesystem.
About multilink support.

Multilink uses Samba TDB (Trivial Database Library), which
we cannot port, for the above reason.

We have to choose between doing a memory-shared TDB-clone,
or dropping multilink support at all.
2012-05-17 23:21:09 +02:00
Sylvain Rochet
1a1deb5d58 reworked magic/randm 2012-05-17 22:42:07 +02:00
Sylvain Rochet
bcba806ef0 ported randm module from previous PPP port 2012-05-17 21:45:02 +02:00
Sylvain Rochet
00648c27eb world changed, removed IPX support 2012-05-17 20:22:17 +02:00
Sylvain Rochet
4885b39121 removed run_program() support 2012-05-17 20:17:31 +02:00
Sylvain Rochet
0f3e70b679 removed user and passwd globals 2012-05-17 20:05:37 +02:00
Sylvain Rochet
372a0f9eea moved refuse_mschap, refuse_mschap_v2, refuse_eap from globals to ppp_settings 2012-05-17 19:41:34 +02:00
Sylvain Rochet
2a44bad2e7 removed passwd_from_file usage, removed some of unused PAP file fetch code 2012-05-17 19:29:54 +02:00
Sylvain Rochet
33e8472473 CHAP auth is now working 2012-05-17 19:05:47 +02:00
Sylvain Rochet
8834a8b216 using UNTIMEOUT macro instead of timeout() 2012-05-17 16:36:59 +02:00
Sylvain Rochet
db794c2d32 PPPoL2TP patch from Debian, not used yet, but already fixed 2012-05-17 16:29:00 +02:00
Sylvain Rochet
a1d80c29de fixed demand_rexmit() with new IP addr, maybe we will never support demand or drop it, but it is already patched just in case 2012-05-17 16:23:32 +02:00
Sylvain Rochet
bea796ebc0 pppd: Terminate correctly if lcp_lowerup delayed calling fsm_lowerup 2012-05-17 16:14:30 +02:00
Sylvain Rochet
d4978210f0 using rp-pppoe pppd exits with EXIT_OK after receiving a timeout waiting for PADO due to no modem attached, from Debian patches
http://ppp.samba.org/cgi-bin/ppp-bugs/incoming?id=2211

Using rp-pppoe pppd exits with exitcode 0, whenever there is no modem connected
and pppd get's a timeout while waiting for a PADO.

This happens because status is set to EXIT_OK in main.c at the beginning of the
procedures. Within start_link(), connect() will be called as one of the first
calls.
If that call fails (no pppoe discovery for example), jumps to "fail", which
returns without setting the status variable to failure. So at the end pppd exits
with EXIT_OK.

I moved the status = EXIT_NEGOTIATION_FAILED which will be set later within
start_link, at the top of it. That seems to work out, patch is attached:
2012-05-17 15:56:35 +02:00
Sylvain Rochet
ef59e952d8 added IPCP no/replace default route option from Debian patches, I like the idea 2012-05-17 15:55:27 +02:00
Sylvain Rochet
54d5ee5562 added LCP adaptive echo from Debian patches, I like the idea 2012-05-17 15:50:15 +02:00
Sylvain Rochet
eb75ae05c6 Early development stage of an attempt to port PPPd 2.4.5 to lwIP.
PPPoE works, PPPoS code is not ported at all.

I am using the RP-PPPoE server to do my tests using the following
configuration:

$ cat /etc/ppp/pppoe-server-options
debug
login
lcp-echo-interval 10
lcp-echo-failure 10
ms-dns 192.168.4.130
ms-dns 192.168.4.231
netmask 255.255.255.0
defaultroute
noipdefault
usepeerdns

$ cat /etc/ppp/allip
192.168.4.1-200

$ pppoe-server -C isp -L 192.168.4.254 -p /etc/ppp/allip -I tap0

Plus the usual auth-lines in /etc/ppp/pap-secrets and
/etc/ppp/chap-secrets .

And the unix port minimal "echo" project slightly modified to use
the "tcpip" API, so with threads, which I am going to commit with
NO_SYS as a -Dmacro.

It still use some of the linux'ism, such as syslog() and crypt(),

I do not want to drop the syslog() supports at the moment, this is
pretty useful to debug, and we may just convert the way the syslog() is
done to provide a trace feature to our PPP users, as a compile-time
option.
2012-05-16 02:02:02 +02:00
goldsimon
b56a1501d2 fixed bug #36412: memp.c does not compile when MEMP_OVERFLOW_CHECK > zero and MEMP_SEPARATE_POOLS == 1 2012-05-11 22:56:53 +02:00
goldsimon
fe9c716fbe Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip 2012-05-11 22:37:30 +02:00
goldsimon
bc308c21fc fixed bug: #36380 unsent_oversize mismatch in 1.4.1RC1 (this was a debug-check issue only) 2012-05-08 07:42:32 +02:00
goldsimon
3e41f36ef5 Added a readme.txt about the PPP code. 2012-05-07 22:12:01 +02:00
goldsimon
8d2131884c Added missing name (patch by) 2012-05-05 09:28:24 +02:00
Ivan Delamer
289566afe8 In ip6_input(), do not accept link-local packets on netifs other than
inp.

Change-Id: I7f3c779e69292bc078890e0acdc37112559644ce
2012-05-04 18:25:22 -06:00
Ivan Delamer
944adc56ee Fixed #define that was commited by mistake.
Change-Id: Ic44560284e932b2d7c503155085160647ac82bb8
2012-05-04 18:19:40 -06:00
Ivan Delamer
6e81f722ad In ip6_input(), accept solicited node packets that match the receiving
netif addresses, when multicast is disabled.

Change-Id: I3f59258ee605a820f0a525b696b1dede0d53948f
2012-05-04 18:11:47 -06:00
Ivan Delamer
bfa28f4c30 fixes bug #36389: Use IPv6 Src Address of Echo Response as Destination
Address in Echo Response
2012-05-04 17:43:54 -06:00
Ivan Delamer
3dcd33b08f Fix bug #36391 - inet6_addr_to_ip6addr()
Change-Id: I2ab73901a8552e3c247d95985f6ce5d6ef7d4599
2012-05-04 17:33:06 -06:00
goldsimon
3ac81e9d7c patch by Sylvain Rochet: fixed bug #36283 (PPP struct used on header size computation and not packed) 2012-05-03 20:39:43 +02:00
goldsimon
1704d21356 dhcp: check array bounds before accessing it (bug #36170) 2012-05-03 20:21:50 +02:00
goldsimon
d690775ca1 Added unit test that pbuf_copy returns a correct error code for pbuf queues ending with a zero-length pbuf. 2012-05-03 20:11:23 +02:00
goldsimon
fb07a28c99 fixed bug #36388 (PPP: checksum-only in last pbuf leads to pbuf with zero length) 2012-05-03 19:45:22 +02:00
goldsimon
1dff9aea62 fixed the fix for bug #35945 (SYN packet should provide the recv MSS not the send MSS) if TCP_CALCULATE_EFF_SEND_MSS==0 2012-03-28 11:06:52 +02:00
goldsimon
e5d54f5344 fixed bug #35756 header length calculation problem in ppp/vj.c - removed unused/invalid defines TCPH_OFFSET(_SET). 2012-03-27 20:42:46 +02:00
goldsimon
a558c01589 fixed bug #35945: SYN packet should provide the recv MSS not the send MSS 2012-03-27 20:18:23 +02:00
goldsimon
7043983acc udp_input: fixed unreachable code warning for CHECKSUM_CHECK_UDP==0 2012-03-25 17:20:22 +02:00
goldsimon
dd245c63d7 tcp_abort/tcp_abandon: don't send RST if pcb->state is CLOSED 2012-03-25 17:19:46 +02:00
goldsimon
84d8760561 dhcp unit test: fixed 2 consts, use udp checksum 0x0000 in handcrafted packets so that CHECKSUM_CHECK_UDP==0 is not necessary 2012-03-25 17:18:58 +02:00
goldsimon
e1225cec5f new dhcp unit test: fix compilation for strict C, made local functions static, made some variables and parameters const 2012-03-25 17:15:56 +02:00
goldsimon
5db6bb02d6 TCP unit tests: fix that ip.rterr stats are increased (some unit tests had no netif set) 2012-03-25 17:12:02 +02:00
Erik Ekman
679d3fd5b3 Add unit tests for DHCP
Three simple tests that test the basic functionality of the DHCP client.
They require that UDP checksums are off for now.
2012-03-25 15:34:31 +02:00
goldsimon
c622985fda Better fix for bug #35927 (missing refragmentaion in ip_forward) when IP_FRAG is disabled. 2012-03-25 15:12:42 +02:00
goldsimon
d910786034 added posix-compatibility include files posix/netdb.h and posix/sys/socket.h which are a simple wrapper to the correct lwIP include files. 2012-03-25 15:02:58 +02:00
goldsimon
8dbf572ea5 Fixed bug #35817: do_connect() invalidly signals op_completed for UDP/RAW with LWIP_TCPIP_CORE_LOCKING==1 2012-03-25 14:56:41 +02:00
goldsimon
f8af1a7443 fixed bug #35931: Name space pollution in api_msg.c and netifapi.c 2012-03-25 14:41:27 +02:00
goldsimon
d95bcab053 fixed bug #35927: missing refragmentaion in ip_forward 2012-03-22 19:35:04 +01:00
Ivan Delamer
2b4c10e705 Support single-packet queueing in ND6 (similar to ARP), when
!LWIP_ND6_QUEUEING.
2012-03-22 11:14:49 -06:00
Ivan Delamer
ac4c802089 Disable leftover ND6 queueing code when !LWIP_ND6_QUEUING. 2012-03-22 10:25:50 -06:00
goldsimon
c6e4b8f829 patch by Mason: fixed bug #35907: lwip_gethostbyname_r returns an invalid h_addr_list 2012-03-20 22:06:32 +01:00
goldsimon
52d41d19d3 Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip 2012-03-12 16:43:23 +01:00
goldsimon
0e7df4b193 Removed unnecessary global variable "subnetMask", which is only used in one function (GetMask) 2012-03-12 16:42:18 +01:00
goldsimon
2c9b3b35d1 patch by Bostjan Meglic: fixed bug #35809: PPP GetMask(): Compiler warning on big endian, possible bug on little endian system 2012-03-12 16:39:52 +01:00
Ivan Delamer
773dcae2f9 Missing declarations in supporting IP_HDRINCL. 2012-03-02 09:35:42 -07:00
Ivan Delamer
22e7b674ed Check arguments in nd6, and some other minor fixes nearby. 2012-03-02 09:27:14 -07:00
Ivan Delamer
8c95422204 Early exit when checking if ip6 reassembled packet is valid. 2012-03-02 09:18:54 -07:00
Ivan Delamer
34531a8160 Check that pbuf_header succeeds in IPv6 reassembly. 2012-03-02 09:16:33 -07:00
Ivan Delamer
5c199483cd Support IP_HDRINCL in ip6_output() and ip6_output_hinted(),
previously only supported in ip6_output_if().
2012-03-02 09:06:57 -07:00
Ivan Delamer
c52189557e Fixed error in calculating some IPv6 option header lengths. 2012-03-02 08:59:34 -07:00
Ivan Delamer
bcabe63971 Set ip_data.current_netif earlier to allow ICMPv6 packets in ip6_fwd.
Then set to "accepted" netif, not inp.
2012-03-02 08:53:51 -07:00
goldsimon
193ccaa3b4 IGMP stats: added missing tab (by Gisle Vanem) 2012-03-01 19:21:17 +01:00
goldsimon
c6605766e7 Fixed unused variable warnings produced with the last commit 2012-03-01 19:10:52 +01:00
goldsimon
4fca628d36 Speed up LWIP_TCPIP_CORE_LOCKING by directly calling functions in api_msg.c instead of calling via function pointer. 2012-02-28 12:45:59 +01:00
goldsimon
7f81c62bf0 fixed bug #35595: Impossible to send broadcast without a gateway (introduced when fixing bug# 33551) 2012-02-23 10:14:27 +01:00
goldsimon
fc7da615fb unit tests lwipopts.h: NO_SYS==1, disable netconn and sockets (not tests) -> lwipopts.h is now usable for unix unit test makefile, too 2012-02-22 21:47:33 +01:00
goldsimon
86766f4e20 Minor: cosmetic source code layout changes 2012-02-22 21:35:04 +01:00
goldsimon
8cb0b7d043 Fixed unit tests: adapted lwipopts.h and fixed test_tcp_new_counters_pcb() after adding snd_wnd_max to struct tcp_pcb. 2012-02-22 21:34:22 +01:00
goldsimon
b6cdeeef8e Added lwipopts.h file for unit tests 2012-02-16 13:11:04 +01:00
goldsimon
ac2175fa7d fixed pbuf leak when PPP session is aborted through pppSigHUP() (bug #35541: PPP Memory Leak) 2012-02-16 12:55:14 +01:00
goldsimon
5816bab6a2 fixed bug #35531: Impossible to send multicast without a gateway (introduced when fixing bug# 33551) 2012-02-16 12:30:52 +01:00
goldsimon
d0d650aa67 Patch by Stéphane Lesage:
fixed bug #35536 SNMP: error too big response is malformed
2012-02-16 08:01:54 +01:00
goldsimon
6d5ec9c998 fixed bug #35537: MEMP_NUM_* sanity checks should be disabled with MEMP_MEM_MALLOC==1 2012-02-16 07:33:38 +01:00
goldsimon
fe08467e45 Removed unused variable in ip_debug_print() 2012-02-14 21:29:14 +01:00
goldsimon
26e03b81fe Fixed unused variable warning 2012-02-14 19:41:46 +01:00
goldsimon
f6582fd229 Correctly calculate the default value of MEMP_NUM_SYS_TIMEOUT as needed 2012-02-13 21:38:48 +01:00
goldsimon
5e87126c38 Multiple compilation fixes:
- use C style comments, not C++ style;
- don't use #if with undefined parameter;
2012-02-13 21:38:28 +01:00
goldsimon
c279692cfe Fixed unused local variable warning (patch #7711) 2012-02-13 20:41:58 +01:00
goldsimon
7d0dab9d7d partly fixed bug #25882: TCP hangs on MSS > pcb->snd_wnd (by not creating segments bigger than half the window) 2012-02-12 14:14:19 +01:00
goldsimon
16555ad12e tcp pcb: persist_cnt can be u8_t instead of u32_t (since it is compared against u8_t only) 2012-02-12 14:04:59 +01:00
goldsimon
9a95c2ff08 fixed bug #35435: No pcb state check before adding it to time-wait queue while closing 2012-02-11 18:15:17 +01:00
Ivan Delamer
1d6347c9b0 Allow unicast NA messages without LLA option, in accordance to RFC2461
section 4.4, and as suggested by Phillip Toelke.

Change-Id: Ic9d9a6ad82ec201d25b9fc024936cfb1b41f1a7a
2012-01-27 14:54:39 -07:00
goldsimon
13075460ea fixed bug #35305: pcb may be freed too early on shutdown(WR) 2012-01-22 11:18:36 +01:00
goldsimon
4c3dfb92b7 fixed bug #34636: FIN_WAIT_2 - Incorrect shutdown of TCP pcb: don't let PCBs time out from FIN_WAIT_2 if the RX side wasn't close (by either calling tcp_close or tcp_shutdown(RDWR)) 2012-01-21 18:05:15 +01:00
goldsimon
fc2efaeb8c Fixed my last chagne to pbuf_copy 2012-01-21 16:57:53 +01:00
goldsimon
b15e60243b - fixed bug #35151: DHCP asserts on incoming option lengths;
- fixed wrong CHANGELOG of the last commit
2012-01-20 21:36:52 +01:00
goldsimon
f2de3215c3 pbuf_copy(): moved the check for "p_to != NULL" to a better place. 2012-01-20 21:21:10 +01:00
goldsimon
efbad07643 fixed bug #35291: NULL pointer in pbuf_copy 2012-01-20 21:19:26 +01:00
goldsimon
69d61eda01 Added option CHECKSUM_GEN_ICMP 2012-01-16 09:40:15 +01:00
goldsimon
e9255d3714 Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip 2012-01-12 15:40:41 +01:00
goldsimon
c8647c0396 implemented API functions to access so_options of IP pcbs (UDP, TCP, RAW) (fixes bug #35061) 2011-12-17 22:12:01 +01:00
goldsimon
8114627d6a Fixed typo in define check: LWIP_IPv6_FRAG -> LWIP_IPV6_FRAG 2011-12-14 21:42:51 +01:00
goldsimon
5048a30fc7 Another fix for bug #32417 (debug assert that fires) 2011-12-06 21:21:44 +01:00
Ivan Delamer
ce6fb83ef4 bug #34846: time-exceeded was sometimes not sent to original fragment
source, but to the sender of a packet fragment that triggered a buffer
purge.

Change-Id: I4bf20747bd900150491852649918a85cb7bf2aad
2011-11-29 12:49:43 -07:00
Ivan Delamer
85f8a59d7f Added parenthesis to netif/ip6 macros.
Change-Id: I32d7f28c9e106641e3d5be8342d2c884e166bb0e
2011-11-28 14:07:53 -07:00
goldsimon
dd8729063c fixed bug #31177: tcp timers can corrupt tcp_active_pcbs in some cases 2011-11-25 18:36:52 +01:00
goldsimon
14c766e750 fix for bug #34684 was wrong (netif for arp table entries was only set/reset with SNMP enabled) 2011-11-24 21:11:11 +01:00
goldsimon
3a11a8a01d Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip 2011-11-24 07:47:40 +01:00
goldsimon
988815579a fixed bug #34884: sys_msleep() body needs to be surrounded with '#ifndef sys_msleep' 2011-11-23 20:58:19 +01:00
goldsimon
d1fa13ed52 fix compilation of ip_canforward on 8-/16-bit platforms (where constants are 16-bit and thus cannot be left-shifted by 24) 2011-11-23 09:09:22 +01:00
goldsimon
08b497faea fixed bug #34684: Clear the arp table cache when netif is brought down 2011-11-22 21:44:28 +01:00
goldsimon
96d332e234 Fix icmp6_send_response: cannot assign (packed) ip6_addr_p_t* to ip6_addr_t* -> need to copy the packed address to an aligned address first 2011-11-22 21:41:20 +01:00
Ivan Delamer
440f31a4d3 Add IPv6 timeouts to check for MEMP_NUM_SYS_TIMEOUT).
Change-Id: Ic6a9493cde41652391b34a47e6003b9036f760de
2011-11-17 14:24:16 -07:00
Ivan Delamer
cb91705e03 Generate ICMPv6 responses from a context other than input callback
(e.g. timers in IPv6 reassembly). see bug #34846.

Change-Id: I6b4d27c819291d8371c43288310d57c3f2c1c65f
2011-11-17 10:55:45 -07:00
goldsimon
d12e742373 Fixed bug #34733 Null pointer exception with SOCKET_DEBUG. 2011-11-13 17:06:19 +01:00
goldsimon
7aa7c0f481 SEQ-comparing defines: cast parameters to u32_t for clarity 2011-10-29 21:43:13 +02:00
Ivan Delamer
b3ffa16315 Use pppRecvWakeup only if PPP_INPROC_OWNTHREAD is defined.
Change-Id: Ie800289eb5f6a64d0be1d38eab7154d4aa473d57
2011-10-28 16:22:54 -06:00
Ivan Delamer
09d1f55bce Conditional compilation in ppp.c according to PPP_ options.
Change-Id: I466ce2b0114c9428f5e21bd0a09bb221f40bfc3e
2011-10-28 14:23:20 -06:00
Ivan Delamer
21333d0f18 handle NULL when parsing IPv6 address (check for formatting)
Change-Id: I42e1288689946c295e0bd1490a5eb4d8befb5877
2011-10-28 13:54:16 -06:00
goldsimon
edcc859b58 fixed bug #34638: Dead code in tcp_receive - pcb->dupacks 2011-10-28 13:09:04 +02:00
Ivan Delamer
2ce17a724a Fix bug #34526: nd6_queue_packet() frees too much if out-of-memory
Change-Id: Ib7ac0cb1b5a5389dd5449a908485493bd085ba9d
2011-10-26 14:31:48 -06:00
goldsimon
0fb07ba328 - moved processing of refused_data to an own function (used from tcp_fasttmr and tcp_input);
- improved readability of tcp_slowtmr by using defines to access keepalive variables
2011-10-23 18:10:46 +02:00
goldsimon
78f0307246 Slipif: fixed IPv6 support 2011-10-23 17:38:23 +02:00
goldsimon
c5203ab5ea fixed bug #34429: possible memory corruption with LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT set to 1 2011-10-23 17:31:03 +02:00
goldsimon
3d1a306518 SLIP netif: add support for multiple input strategies (threaded, polling, RX from ISR) 2011-10-21 22:25:44 +02:00
goldsimon
2750d61e92 added missing valid/set_invalid defines for NO_SYS 2011-10-21 19:47:37 +02:00
goldsimon
43ac5ad70d removed the need to disable ARP_QUEUEING when LWIP_ARP is disabled an TCP_QUEUE_OOSEQ when LWIP_TCP is disabled 2011-10-21 13:24:33 +02:00
goldsimon
309e936ad9 Fix default value of TCP_SNDLOWAT for small values of TCP_SND_BUF (broken with my 2nd-last commit) 2011-10-19 12:55:32 +02:00
Simon Goldschmidt
d00fa906cf fixed bug #34592: lwip_gethostbyname_r uses nonstandard error value, removed those unused (nonstandard?) error values from arch.h 2011-10-18 20:56:08 +02:00
Simon Goldschmidt
01839b9c14 fixed default values of TCP_SNDLOWAT and TCP_SNDQUEUELOWAT for small windows (bug #34176 select after non-blocking send times out) 2011-10-18 20:22:09 +02:00
Simon Goldschmidt
1f396946e5 fixed bug #34587: TCP_BUILD_MSS_OPTION doesn't consider netif->mtu, causes slow network 2011-10-18 20:11:39 +02:00
goldsimon
2f58ef781c fixed bug #34581 missing parentheses in udplite sockets code 2011-10-18 11:04:08 +02:00
goldsimon
8b9f70ac08 fixed bug #34580 fcntl() is missing in LWIP_COMPAT_SOCKETS 2011-10-18 11:00:10 +02:00
Simon Goldschmidt
e039d4103f fixed bug #34569: shutdown(SHUT_WR) crashes netconn/socket api 2011-10-17 19:38:47 +02:00
Simon Goldschmidt
0333e81616 fixed bug #34517 (persist timer is started although no zero window is received) by starting the persist timer when a zero window is received, not when we have more data queued for sending than fits into the window 2011-10-13 21:18:16 +02:00
Simon Goldschmidt
cf1be4ae2d fixed bug #34541: LWIP_U32_DIFF is unnecessarily complex: removed that define 2011-10-13 19:29:48 +02:00
Simon Goldschmidt
dc34636598 fixed bug #34540: compiler error when CORE_LOCKING is used and not all protocols are enabled 2011-10-13 19:25:11 +02:00
Simon Goldschmidt
c74d881d3d fixed bug #34534: Error in sending fragmented IP if MEM_ALIGNMENT > 4 2011-10-12 18:17:07 +02:00
Simon Goldschmidt
ab51f3bec0 added unit test cases for seqno wraparound on fast-rexmit and rto-rexmit (unsent/unacked lists must be correctly sorted) 2011-10-11 21:43:27 +02:00
Simon Goldschmidt
b4c4fae3f5 slightly rearranged freeing an acked segment to prevent keeping the reference too long 2011-10-11 21:41:58 +02:00
Simon Goldschmidt
ce98df59f1 Added unit test case for persist timer / zero window probes 2011-10-10 21:06:50 +02:00
Simon Goldschmidt
f29bdd21a7 fixed bug #34426: tcp_zero_window_probe() transmits incorrect byte value when pcb->unacked != NULL 2011-10-09 20:11:33 +02:00
Simon Goldschmidt
9d31401d47 fixed bug #34447 LWIP_IP_ACCEPT_UDP_PORT(dst_port) wrong 2011-10-09 14:30:49 +02:00
Simon Goldschmidt
5c68bbe16f Tried to fix bug #32417 ("TCP_OVERSIZE seems to have problems with (fast-)retransmission"): Reset pcb->unsent_oversize in 2 more places... 2011-09-29 21:12:34 +02:00
Simon Goldschmidt
07c610e068 Implemented limiting data on ooseq queue (task #9989) (define TCP_OOSEQ_MAX_BYTES / TCP_OOSEQ_MAX_PBUFS in lwipopts.h), added unit test for this new feature 2011-09-27 22:42:46 +02:00
Simon Goldschmidt
998f109fc8 fixed bug #28288: Data after FIN in oos queue 2011-09-27 21:08:49 +02:00
goldsimon
cfb70bccc1 bug #34406 dhcp_option_hostname() can overflow the pbuf 2011-09-27 07:49:04 +02:00
Simon Goldschmidt
7524f9006e added unit tests for data-after-FIN 2011-09-26 22:10:11 +02:00
Simon Goldschmidt
bcfe3dacc6 fixed unit tests (one TCP test failed, removed comma at the end of array initializers) 2011-09-26 22:09:27 +02:00
Simon Goldschmidt
6c56151d27 fixed bug #34377 MEM_SIZE_F is not defined if MEM_LIBC_MALLOC==1 2011-09-24 13:59:33 +02:00
Simon Goldschmidt
98274d2145 Reverted invalid fix for invalid bug #34360 done yesterday... 2011-09-23 19:26:29 +02:00
Simon Goldschmidt
1d125f55ba Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/lwip 2011-09-23 19:16:01 +02:00
Simon Goldschmidt
918470affc fixed bug #33871: rejecting TCP_EVENT_RECV() for the last packet including FIN can lose data 2011-09-23 19:14:17 +02:00
Simon Goldschmidt
797f26e45b fixed bug #34360 tcp_shutdown: RST on unacked is not send when shutting down both rx AND tx 2011-09-22 21:38:56 +02:00
Simon Goldschmidt
e145c1d31c Fixed tcp_accepted define (need brackets around the parameter) 2011-09-22 19:19:07 +02:00
Simon Goldschmidt
bb5d0c5c4a fixed bug #34355: nagle does not take snd_buf/snd_queuelen into account 2011-09-22 18:50:18 +02:00
Simon Goldschmidt
0aea1b608a Corrected fix for bug #34072 (UDP broadcast is received from wrong UDP pcb if udp port matches): pcbs bound to IPADDR_ANY did not receive broadcasts any more (bug #34294) 2011-09-22 06:24:58 +02:00
Simon Goldschmidt
a2aa43a426 Implemented timeout on send (TCP only, bug #33820) 2011-09-21 19:36:09 +02:00
Simon Goldschmidt
8d5514603e fixed default value of TCP_SND_BUF to not violate the sanity checks in init.c 2011-09-21 18:47:44 +02:00
Simon Goldschmidt
b9a2feff5e Converted runtime-sanity-checks into compile-time checks that can be disabled (since runtime checks can often not be seen on embedded targets) 2011-09-21 18:35:29 +02:00
goldsimon
f13615d97a fixed bug #34337 (possible NULL pointer in sys_check_timeouts) 2011-09-20 07:21:19 +02:00
Simon Goldschmidt
d6227aece6 splitted ppp.h to an internal and external header file to get a clear separation of which functions an application or port may use (task #11281) 2011-09-11 19:30:28 +02:00
Simon Goldschmidt
6058389974 nd6: use a static buffer to process RA options instead of using mem_malloc() 2011-09-11 13:44:08 +02:00
Simon Goldschmidt
dccad08508 use pcb->mss instead of TCP_MSS for preallocate mss-sized pbufs (bug #34019) 2011-09-11 13:13:26 +02:00
Simon Goldschmidt
112158b056 Added a config option to randomize initial local TCP/UDP ports (so that different port ranges are used after a reboot; bug #33818; this one added tcp_init/udp_init functions again);
fixed a possible endless loop in tcp_new_port() if the number of active PCBs exceeds the number of available ports;
2011-09-11 12:44:01 +02:00
Simon Goldschmidt
5be300736e lwip_accept: fixed warning about accessing uninitialized 'port' when SOCKETS_DEBUG is enabled 2011-09-09 23:20:34 +02:00
Simon Goldschmidt
1b98a64e90 Fixed typo: TCP_SNDQUEUELOWAT must be less than TCP_SND_QUEUELEN (as checked in init.c), not greater 2011-09-09 22:28:01 +02:00
Simon Goldschmidt
4849eb4c54 fixed bug #34072: UDP broadcast is received from wrong UDP pcb if udp port matches 2011-09-09 22:25:59 +02:00
Simon Goldschmidt
5e8ee7e006 Make LWIP_RAND optional (useful for small targets) 2011-09-03 22:27:30 +02:00
Simon Goldschmidt
e27d34d118 DHCP uses LWIP_RAND() for xid's (bug #30302) 2011-09-03 22:27:06 +02:00
Simon Goldschmidt
a0bf8d5740 fixed bug #33952 PUSH flag in incoming packet is lost when packet is aggregated and sent to application 2011-09-03 21:57:26 +02:00
Simon Goldschmidt
17a5ba08e4 unit tests: correctly handle small PBUF_POOL_BUFSIZE settings, prevent NULL-pointer-deref. (ooseq test is still not running correctly...) 2011-09-03 21:25:51 +02:00
Simon Goldschmidt
d0877153bf netconn_alloc(): return on invalid protocol instead of initializing mbox size to 0 2011-09-03 21:24:06 +02:00
Simon Goldschmidt
55011e5308 fixed bug #31809 LWIP_EVENT_API in opts.h is inconsistent compared to other options 2011-09-01 22:25:03 +02:00
Simon Goldschmidt
2697b3c7da Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/lwip 2011-09-01 21:01:38 +02:00
Simon Goldschmidt
b9c17dd1f0 fixed bug #34111 RST for ACK to listening pcb has wrong seqno 2011-09-01 21:00:11 +02:00
goldsimon
aea17bfae2 Fixed bogus IPH_V/HL and IPH_VHL_SET endianess dependency 2011-08-30 13:15:10 +02:00
Simon Goldschmidt
0a5755145c added netif remove callback (bug #32397) 2011-08-24 22:00:10 +02:00
Simon Goldschmidt
249e19769b fixed bug #34124 struct in6_addr does not conform to the standard 2011-08-24 21:40:09 +02:00
Simon Goldschmidt
f64808c385 fixed bug #33956 Wrong error returned when calling accept() on UDP connections 2011-08-24 21:12:12 +02:00
Simon Goldschmidt
2e69b54a4f fixed bug #34057 socklen_t should be a typedef 2011-08-24 20:22:21 +02:00
Simon Goldschmidt
cd5d1ceadf fixed bug #34112 Odd check in pbuf_alloced_custom (typo) 2011-08-24 20:18:47 +02:00
Simon Goldschmidt
c55f6b40ec fixed bug #34122 dhcp: hostname can overflow 2011-08-24 20:12:23 +02:00
Simon Goldschmidt
bf4ec9be22 fixed bug #34121 netif_add/netif_set_ipaddr fail on NULL ipaddr 2011-08-24 19:52:06 +02:00
Simon Goldschmidt
ed0626afeb fixed bug #33962 TF_FIN not always set after FIN is sent. (This merely prevents nagle from not transmitting fast after closing.) 2011-08-22 18:52:27 +02:00
Ivan Delamer
b5305d5a8c Initialize recvmbox size for undefined netconn type, to supress
compiler warning.

Change-Id: I14c3f1786a8ca3513b5d4cf375c4951e4c09ebd6
2011-08-12 09:04:29 -06:00
Ivan Delamer
17efa04ea6 Add cast to IP6_ADDR_BLOCKx 2011-08-09 13:55:40 -06:00
Ivan Delamer
b3f5c8f6b2 Use target address as source address in IPv6 neighbour advertisement
messages.

Change-Id: I06d28eb2903c539de0b51bd7420a81ebf4f28963
2011-08-04 16:36:44 -06:00
Ivan Delamer
4507083148 Fixed bug in serialization of IPv6 addresses.
Change-Id: Ib63540123803317ec25f7cbf580c5159e4100222
2011-08-04 14:18:33 -06:00
Simon Goldschmidt
f4c0018d7a Fixed complier error for CHECKSUM_CHECK_TCP==0 2011-07-28 21:59:28 +02:00
Simon Goldschmidt
c9e1d6cca8 adapted unit tests to changes after adding IPv6 support 2011-07-26 21:55:32 +02:00
Simon Goldschmidt
242dc34115 ETHARP_SUPPORT_VLAN: add support for an external VLAN filter function instead of only checking for one VLAN (define ETHARP_VLAN_CHECK_FN) 2011-07-26 21:03:27 +02:00
Simon Goldschmidt
41c785d77a IPv4: splitted IPv4 header fields version/len and tos, made macros depend on BYTE_ORDER to prevent unnecessary calls to htons() 2011-07-26 20:55:32 +02:00
Simon Goldschmidt
a745528b40 Prevent non-static function that is not declared in header file 2011-07-26 20:21:33 +02:00
Simon Goldschmidt
7465be91d0 Fixed some C compiler warnings 2011-07-24 17:19:17 +02:00
Simon Goldschmidt
d79c5baa1b Removed commas from the end of enum lists 2011-07-24 17:18:55 +02:00
Simon Goldschmidt
46af0d38fa fixed bug #31084 (socket API returns always EMSGSIZE on non-blocking sockets if data size > send buffers) -> now lwip_send() sends as much as possible for non-blocking sockets and only returns EWOULDBLOCK if the buffers are full 2011-07-22 22:05:24 +02:00
Simon Goldschmidt
6323e09a0a init.c: changed some checks from runtime to compiletime (had to adapt some defines in ip.h for that) 2011-07-22 21:59:16 +02:00
Simon Goldschmidt
d94bdb75c8 forgot CHANGELOG: freeing ooseq pbufs when the pbuf pool is empty implemented for NO_SYS==1: when not using sys_check_timeouts(), call PBUF_CHECK_FREE_OOSEQ() at regular intervals from main level. 2011-07-22 21:07:09 +02:00
Simon Goldschmidt
cc3b4dff20 freeing ooseq pbufs when the pbuf pool is empty implemented for NO_SYS==1: when not using sys_check_timeouts(), call PBUF_CHECK_FREE_OOSEQ() at regular intervals from main level. 2011-07-22 21:05:10 +02:00
Simon Goldschmidt
78ac382fdf bug #33634 ip_forward() have a faulty behaviour: Added pbuf flags to mark incoming packets as link-layer broadcast/multicast. Also added code to allow ip_forward() to forward non-broadcast packets to the input netif (set IP_FORWARD_ALLOW_TX_ON_RX_NETIF==1). 2011-07-21 21:47:25 +02:00
Simon Goldschmidt
860072aaaf correctly prefix all functions with 'etharp_' (also static functions) 2011-07-21 21:16:04 +02:00
Simon Goldschmidt
2694a409c6 ETHARP_STATE_STABLE_REREQUESTING: no need for member 'netif' in 'struct etharp_entry' if we re-request only from etharp_output() and use etharp_tmr() to reset the state of such entries to ETHARP_STATE_STABLE: that way, we also only send one ARP request per ARP_TMR_INTERVAL, but only if the entry is really still used. 2011-07-21 20:47:29 +02:00
Simon Goldschmidt
206b1f4631 ETHARP_SUPPORT_STATIC_ENTRIES: don't need the member 'static_entry' on struct etharp_entry, we can use 'state' to mark them as static 2011-07-21 20:40:30 +02:00
Simon Goldschmidt
ef9891e8ff fixed bug #33551 (ARP entries may time out although in use) by sending an ARP request when an ARP entry is used in the last minute before it would time out. 2011-07-21 20:28:18 +02:00
Simon Goldschmidt
bd69890ccd (bug #30185): added LWIP_FIONREAD_LINUXMODE that makes ioctl/FIONREAD return the size of the next pending datagram. 2011-07-21 20:15:39 +02:00
Simon Goldschmidt
fc280c7cd6 Fixed bug #33804 LWIP_IPV6_MLD #define missing from mld6.c 2011-07-20 06:56:20 +02:00
Simon Goldschmidt
435ac2a650 Fixed bug #33801 Corruption of nd6 tables 2011-07-19 21:56:19 +02:00
Simon Goldschmidt
fb0ad2f9ea Fixed bug #33802 tcpip: tcpip_callbackmsg_new sets msg->type to wrong type 2011-07-19 21:52:40 +02:00
goldsimon
7385449f33 Fixed wrong endianess of port in bind() and connect() broken with the last commit 2011-07-06 07:18:06 +00:00
goldsimon
1f4b814d0b Include opt.h so that LWIP_ERROR works correctly 2011-07-06 07:13:45 +00:00
goldsimon
a93d9c4310 Fixed bug #33561 bugs in recvfrom() and sendto() 2011-07-05 19:42:23 +00:00
goldsimon
1813d11b9d Fixed invalid SOCK_ADDR_TYPE_MATCH check in lwip_sendto() 2011-07-04 19:39:16 +00:00
goldsimon
09ac68c196 Fixed documentation after changing sys arch prototypes for 1.4.0 2011-07-04 19:33:33 +00:00
goldsimon
c2fd905e32 No need to pass 'acc' as u16_t since the _base functions are internal (we save one AND op when passing as u32_t) 2011-07-04 19:10:49 +00:00
goldsimon
cc84f28d1b Fixed bug #33672 (checksum calculate error!!!) by folding 'acc' to u16_t before calling checksum_pseudo_*_base functions 2011-06-29 19:54:33 +00:00
goldsimon
2bd498524d Fixed bug #33653 (ip_data.current_ip_header_tot_len calculation errors!) introduced while mergin IPv4 and IPv6 2011-06-29 19:46:21 +00:00
goldsimon
4b934945f3 Slightly reorderd fields of struct tcp_pcb to plug holes introduced by member alignment (to reduce RAM usage) 2011-06-26 17:53:45 +00:00
goldsimon
b666ab0673 Init checks: LWIP_RAND is needed for IPv6, too 2011-06-26 17:51:55 +00:00
goldsimon
6a4c30fe5d fixed bug #31723 (tcp_kill_prio() kills pcbs with the same prio) by updating its documentation only. 2011-06-26 17:37:09 +00:00
goldsimon
4002aef594 fixed bug #33545: With MEM_USE_POOLS==1, mem_malloc can return an unaligned pointer. 2011-06-26 17:31:10 +00:00
goldsimon
ba28d36e67 Fixed bug #33544 (warning in mem.c in lwip 1.4.0 with NO_SYS=1) 2011-06-26 17:13:57 +00:00
goldsimon
4444db2990 Added some more asserts to check that pcb->state != LISTEN 2011-06-26 17:07:13 +00:00
goldsimon
d0026793bf Cleaned up usage of sys.h a bit 2011-06-26 16:51:04 +00:00
goldsimon
93b5cd5ddd Provide a default for SNMP_GET_SYSUPTIME() based on sys_now() 2011-06-26 16:50:28 +00:00
goldsimon
12c2d7e4cf - changed "struct ip_addr" to "ip_addr_t";
- tcp_accepted(): added a note to call this on the listening pcb, not the connection pcb;
- tcp_write(): change last parameter from "copy" to "apiflags", documented the apiflags
2011-06-25 18:39:37 +00:00
idelamer
4eb5acd9e2 Don't forward IPv6 packets that are larger than outgoing MTU, send ICMPv6 message back for Path MTU discovery. 2011-06-22 12:14:58 +00:00
idelamer
0f56d838ec Process IPv6 packets arriving from non-Ethernet links. 2011-06-17 11:06:06 +00:00
idelamer
12a948dacb Allow routing IPv6 packets to neighbours with manually-configured non-link-local addresses. 2011-06-17 11:05:38 +00:00
idelamer
137953605e Allow IPv6 addresses with arbitrary prefix. 2011-06-17 11:04:47 +00:00
idelamer
629fad6f5f Minor edits for for IPv6 compilation 2011-06-17 11:03:15 +00:00
goldsimon
2911c84a69 Fixed compilation error after converting sockaddr_aligned from struct to union 2011-06-12 11:57:34 +00:00
goldsimon
89a1420609 Fix compilation error when checking for hidden variable names ('s8_t i' was hidden in some case statements in nd6_input()). 2011-06-08 16:31:55 +00:00
goldsimon
e584557afe - sockaddr_aligned: use a union instead of a manually aligned struct;
- fixed compilation for different configurations
2011-06-07 19:36:05 +00:00
goldsimon
2ed5413e24 use const char for name pointers in display functions 2011-06-07 19:32:20 +00:00
goldsimon
91532b2d5c Removed unused static function 2011-06-07 19:19:24 +00:00
goldsimon
732cac1c0e Moved static variable from inside the function to global scope 2011-06-07 19:10:55 +00:00
goldsimon
5b04860b8b Moved common call to pbuf_header outside the switch() 2011-06-07 19:10:10 +00:00
goldsimon
5a674f419d Restructured the code a bit to help my dump compiler not creating a jump table in ROM 2011-06-07 19:07:00 +00:00
goldsimon
d30246dc05 Fixed bug #33492 (fixed stats for IPv6 protocols) 2011-06-07 19:05:22 +00:00
goldsimon
af5a913019 Fixed compilation with LWIP_IPV6==0 2011-06-06 16:04:06 +00:00
goldsimon
604e69c7ae - fixed bug #33485 (forgot '!' before SOCK_ADDR_MATCH*);
- fixed 'cast increases alignment' by casting via 'void*';
- introduced 'struct sockaddr_aligned' where the 'base' type is instantiated to make sure the alignment is correct;
2011-06-06 16:00:06 +00:00
goldsimon
d765c9de37 Fixed ipX_netif_get_local_ipX for LWIP_IPV6==0 2011-05-28 09:32:42 +00:00
goldsimon
98b6e2bcce Fixed ip_2_ipX() and ip6_2_ipX() macros #if !LWIP_ALLOW_STATIC_FN_IN_HEADER 2011-05-28 09:32:07 +00:00
goldsimon
d80be7961c use PCB_IS_IPV6(pcb) instead of pcb->isipv6 everywhere; fixed compilation with LWIP_IPV6==1 but LWIP_IGMP==0 2011-05-28 09:30:43 +00:00
goldsimon
2aec3a9789 use PCB_IS_IPV6(pcb) instead of pcb->isipv6 everywhere 2011-05-28 09:28:18 +00:00
goldsimon
ccd7dbe0e4 Added ipX versions for routing 2011-05-26 15:46:44 +00:00
goldsimon
92fcfd7a6f Fixed two compilation errors with different opt.h settings 2011-05-26 14:47:28 +00:00
goldsimon
1b2b054139 Fixed bug #33337 (which is #32906 reappearing after adding IPv6 support) 2011-05-25 17:40:42 +00:00
goldsimon
853d1eac96 Fixed pointless conversion when checking TCP port range (bug #33398) 2011-05-25 17:22:56 +00:00
goldsimon
2ef29d6839 Use conversion defines instead of casting IP addresses 2011-05-25 17:22:13 +00:00
goldsimon
6865806b55 Combined IPv4 and IPv6 code where possible, added defines to access IPv4/IPv6 in non-IP code so that the code is more readable. 2011-05-25 17:16:35 +00:00
goldsimon
9546e65617 Removed autoip_init() since it does nothing; minor coding style changes 2011-05-21 16:01:19 +00:00
goldsimon
5852993243 Removed files of old IPv6 implementation 2011-05-17 19:56:08 +00:00
goldsimon
90a03a77ad Added new files for IPv6 2011-05-17 19:54:40 +00:00
goldsimon
4bfbe7ebeb ... and finally, we got a first working version of a dual-stack lwIP runnin IPv4 and IPv6 in parallel - big thanks to Ivan Delamer! (this is work in progress, so please beware, test a lot and report problems!) 2011-05-17 19:35:14 +00:00
goldsimon
f3c1686a40 replaced tab with spaces 2011-05-16 18:45:51 +00:00
goldsimon
33a587d97e Added a test for fast-rexmit 2011-05-14 15:26:43 +00:00
goldsimon
a444ec5111 patch #7449 allow tcpip callback from interrupt with static memory message 2011-05-14 12:23:10 +00:00
kieranm
5ead1bf5c8 Update version numbers for 1.4.1 development 2011-05-06 09:07:38 +00:00
kieranm
3a267586f4 Update CHANGELOG and version numbers for 1.4.0 release 2011-05-06 08:48:37 +00:00
goldsimon
52271e0366 Used upper case 'L' instead of lower case 'l' for long constant for better readability 2011-04-29 11:37:29 +00:00
goldsimon
e4739da961 Fixed overflow in tcp_new_port() after changing port range to IANA "Dynamic and/or Private Ports" range 2011-04-29 11:23:04 +00:00
goldsimon
80b344e9fc Fixed printf-format error (bug #33079) 2011-04-21 05:15:45 +00:00
goldsimon
036cb26fa3 sys_arch_timeouts() is not needed any more. 2011-04-20 11:31:07 +00:00
goldsimon
33d6dcec5b Fixed bug #33048 (Bad range for IP source port numbers) by using ports in the IANA private/dynamic range (49152 through 65535). 2011-04-13 17:52:00 +00:00
goldsimon
791505ab6e Fixed tcp unit tests after introducing ip_addr_p_t and letting tcp_input check for broadcasts by using current_iphdr_dest. 2011-03-30 18:50:00 +00:00
goldsimon
88e1719d8e Fixed etharp unit test after changing struct etharp_hdr 2011-03-30 18:47:20 +00:00
goldsimon
0885555521 Fixed broken VLAN support. 2011-03-29 18:56:26 +00:00
goldsimon
36c1750b8f ethernet_input: check for minimum packet length to prevent assertions from firing. 2011-03-29 07:55:16 +00:00
goldsimon
11b1c9f19f Fixed bug #32926 (TCP_RMV(&tcp_bound_pcbs) is called on unbound tcp pcbs) by checking if the pcb was bound (local_port != 0). 2011-03-27 17:12:26 +00:00
goldsimon
b5dd87b184 Fixed bug #32280 (ppp: a pbuf is freed twice) 2011-03-27 13:58:26 +00:00
goldsimon
b54c7bedfd Fixed bug #32906: lwip_connect+lwip_send did not work for udp and raw pcbs with LWIP_TCPIP_CORE_LOCKING==1. 2011-03-27 13:36:32 +00:00
goldsimon
783404d8d4 Move tcp_pcb_lists to const section. 2011-03-27 13:04:16 +00:00
goldsimon
3bad9f013e Fixed bug #32820 (Outgoing TCP connections created before route is present never times out) by starting retransmission timer before checking route. 2011-03-27 13:00:54 +00:00
goldsimon
4495516497 Removed 'dataptr' from 'struct tcp_seg' and calculate it in tcp_zero_window_probe (the only place where it was used). 2011-03-27 12:56:16 +00:00
goldsimon
3f849848a4 Fixed bug #32648 (PPP code crashes when terminating a link) by only calling sio_read_abort() if the file descriptor is valid. 2011-03-22 20:59:49 +00:00
goldsimon
7203680146 fixed bug #31748 (Calling non-blocking connect more than once can render a socket useless) since it mainly involves changing "FATAL" classification of error codes: ERR_USE and ERR_ISCONN just aren't fatal. 2011-03-14 21:21:26 +00:00
goldsimon
d793ed3b9b fixed bug #32769 (ESHUTDOWN is linux-specific) by fixing err_to_errno_table (ERR_CLSD: ENOTCONN instead of ESHUTDOWN), ERR_ISCONN: use EALRADY instead of -1 2011-03-13 11:21:06 +00:00
goldsimon
c6de17d1e5 netconn_accept: return ERR_ABRT instead of ERR_CLSD if the connection has been aborted by err_tcp (since this is not a normal closing procedure). 2011-03-13 11:17:18 +00:00
goldsimon
5b084f4b95 tcp_bind: return ERR_VAL instead of ERR_ISCONN when trying to bind with state!=CLOSED; fixed a typo 2011-03-13 11:15:32 +00:00
goldsimon
4e3b2b9f6b Fixed bug #32561 tcp_poll argument definition out-of-order in documentation 2011-02-21 19:26:57 +00:00
goldsimon
856ccb5bb7 Added missing U/UL modifiers to fix 16-bit-arch portability. 2011-02-18 13:31:28 +00:00
goldsimon
dbf5659cd9 Indentation changed 2011-02-18 13:30:35 +00:00
goldsimon
fee0c6afe9 Fixed constant not being 32 bit. 2011-02-17 17:03:12 +00:00
kieranm
fb7d3a159a Update version for 1.4.0 rc2 2011-02-03 12:46:56 +00:00
goldsimon
dc6b4e65e0 Adde missing extern "C" 2011-01-25 11:35:48 +00:00
goldsimon
17d4ef4053 Added missing "extern "C" {" 2011-01-25 06:18:50 +00:00
goldsimon
03be8f88fe Fixed bug #31741: lwip_select seems to have threading problems 2011-01-24 19:28:28 +00:00
goldsimon
effcb90fdf Mreged back changes that were lost during the savannah hack 3 weeks ago (using the sources from http://git.infradead.org/users/dwmw2/lwip.git) 2010-12-20 18:03:51 +00:00
goldsimon
1bd06bee82 Added note about changed ARP_QUEUEING==0 2010-12-02 20:09:58 +00:00
goldsimon
92cdc1e33f Fixed ERR_IS_FATAL so that ERR_WOULDBLOCK is not fatal. 2010-12-02 07:07:18 +00:00
goldsimon
377628216e Fixed bug #31590: getsockopt(... SO_ERROR ...) gives EINPROGRESS after a successful nonblocking connection. 2010-11-22 20:55:57 +00:00
goldsimon
f7627929d5 Fixed bug #31722: IP packets sent with an AutoIP source addr must be sent link-local 2010-11-22 19:55:05 +00:00
goldsimon
b49cf5e7a2 patch #7328: Autoip: ETHADDR16_COPY can be used 2010-11-22 17:35:57 +00:00
goldsimon
231a6cecb4 patch #7329: tcp_timer_needed prototype was ifdef'ed out for LWIP_TIMERS==0 2010-11-22 17:32:12 +00:00
goldsimon
32f02325f9 Added a function to deallocate the struct dhcp from a netif (fixes bug #31525). 2010-11-21 13:41:11 +00:00
goldsimon
f418782c2c tcp_slowtmr(): change the scope of 'pcb2' to reflect its block-only usage. 2010-11-21 10:41:27 +00:00
goldsimon
e52730d1fb Fixed bug #31170: lwip_setsockopt() does not set socket number 2010-11-20 18:01:01 +00:00
goldsimon
d2679e58a6 Fixed bug #31304: Changed SHUT_RD, SHUT_WR and SHUT_RDWR to resemble other stacks. 2010-11-20 17:48:10 +00:00
goldsimon
e3817cd549 Fixed bug #31535: TCP_SND_QUEUELEN must be at least 2 or else no-copy TCP writes will never succeed. 2010-11-20 17:34:10 +00:00
goldsimon
4ace50a7d7 Fix alignment checking of tcphdr: check for MEM_ALIGNMENT, not for 4 2010-11-20 17:30:48 +00:00
goldsimon
fa092c47c8 Fixed bug #31701: Error return value from dns_gethostbyname() does not match documentation: return ERR_ARG instead of ERR_VAL if not initialized or wrong argument. 2010-11-20 16:40:35 +00:00
goldsimon
704d90f693 Fixed bug #31385: sizeof(struct sockaddr) is 30 but should be 16 2010-10-20 17:58:52 +00:00
goldsimon
93dc36e091 Once again fixed #30038: DHCP/AutoIP cooperation failed when replugging the network cable after an AutoIP address was assigned. 2010-10-06 11:40:30 +00:00
goldsimon
4cc36b2284 Fixed bug #30728: tcp_new_port() did not check listen pcbs 2010-08-10 20:15:31 +00:00
goldsimon
aaa8d2795e Don't chain empty pbufs when sending them (fixes bug #30625) 2010-08-03 08:38:59 +00:00
goldsimon
229137cad1 Applied patch #7264 (PPP protocols are rejected incorrectly on big endian architectures) 2010-08-01 11:15:48 +00:00
goldsimon
d73262a0e5 Fixed compilation with TCP or UDP disabled. 2010-07-29 19:25:50 +00:00
goldsimon
cd22a8d851 Fixed bug #30565 (tcp_connect() check bound list): that check did no harm but never did anything 2010-07-28 16:48:51 +00:00
goldsimon
7f7df4ae19 Fixed bug #30447: tcp.c:tcp_bind() - suspicious nested #if 2010-07-28 16:44:59 +00:00
goldsimon
3c5723e49d Fixed invalid fix for bug #30402 (CHECKSUM_GEN_IP_INLINE does not add IP options) 2010-07-21 12:11:22 +00:00
kieranm
960fb14bf5 Update release number for 1.4.0 release candidate 1 2010-07-16 12:50:29 +00:00
kieranm
21e17f649a Fixed SNMP ASN constant defines to not use ! operator 2010-07-16 12:14:01 +00:00
goldsimon
9782c40d21 fixed the change not about tcp_close chang (bug #30444) 2010-07-14 15:53:44 +00:00
goldsimon
04beab4f7d IP_MULTICAST_LOOP shall be disabled by default 2010-07-12 14:10:28 +00:00
goldsimon
194a85387b patch #7239: make tcp_state_str pointers constant 2010-07-12 09:49:00 +00:00
goldsimon
a99219ad1f added missing casts 2010-07-12 09:34:17 +00:00
goldsimon
691410ba18 task #10495: Added support for IP_MULTICAST_LOOP at socket- and raw-API level. 2010-07-12 09:34:11 +00:00
goldsimon
714a43b18c Fixed bug #30402: CHECKSUM_GEN_IP_INLINE does not add IP options 2010-07-10 12:02:28 +00:00
goldsimon
9f457d3331 Updated to current CHANGELOG 2010-07-06 20:18:12 +00:00
goldsimon
60a456f757 Added ip_addr_netmask_valid() to check if a netmask is valid (starting with ones, then only zeros) 2010-07-05 14:20:58 +00:00
goldsimon
2b355d6b34 Added some helper functions to find strings in chained pbufs 2010-07-05 14:18:03 +00:00
goldsimon
48be546357 fixed bug #30300 (shutdown parameter was not initialized in netconn_delete) 2010-06-30 08:33:14 +00:00
goldsimon
0f74a57267 Re-enabled timer logging if LWIP_DEBUG_TIMERNAMES!=0 (without function pointers, only function names), changed parameter names from 'h' to 'handler' 2010-06-29 19:55:21 +00:00
kieranm
272270c7f4 Remove unportable printing of C function pointers 2010-06-28 13:32:13 +00:00
kieranm
e2f014f457 cleanup: fix minor build failures on unix 2010-06-28 13:24:14 +00:00
goldsimon
1fba33628d Fixed compilation error due to unexpected include order 2010-06-25 18:59:29 +00:00
goldsimon
7d604a23f0 From patch #7221: added flag NO_SYS_NO_TIMERS to drop timer support for NO_SYS==1 for easier upgrading 2010-06-24 20:27:49 +00:00
goldsimon
6929a786aa Fixed bug #10088: Correctly implemented shutdown at socket level. 2010-06-24 19:33:14 +00:00
goldsimon
f61b80ca6a Fixed bug #29361 (ip_frag has problems with zero-copy DMA MACs) by adding custom pbufs and implementing custom pbufs that reference other (original) pbufs. Additionally set IP_FRAG_USES_STATIC_BUF=0 as default to be on the safe side. 2010-06-21 18:50:16 +00:00
goldsimon
1aba9f031d nicer code for the last fix 2010-06-17 11:53:16 +00:00
goldsimon
2ffcc52f03 Fixed bug #30159: WomnIP_ACCEPT_LINK_LAYER_ADDRESSING 2010-06-16 19:53:07 +00:00
goldsimon
72518a0d6e fixed typos that MSVS did not complain about 2010-06-16 12:53:46 +00:00
goldsimon
1242575f0f Added an optional define (LWIP_IP_ACCEPT_UDP_PORT) that can allow link-layer-addressed UDP traffic to be received while a netif is down (just like DHCP during configuration) 2010-06-16 12:25:00 +00:00
goldsimon
6ccc2ef804 Removed leading underscore from struct name, added a comment 2010-06-15 20:33:40 +00:00
goldsimon
b3dc6f2b5b ... and forgot one tiny character... 2010-06-15 20:21:30 +00:00
goldsimon
2427917db8 Fixed bug #29970: DHCP endian issue parsing option responses 2010-06-15 20:19:14 +00:00
goldsimon
5ab40f016d Fixed bug #30039: AutoIP does not reuse previous addresses 2010-06-14 20:27:14 +00:00
goldsimon
435115d4fb Use ip_addr_set_zero instead of memset(0) 2010-06-14 20:17:08 +00:00
goldsimon
24d823dae6 bug #30129: struct _ip_addr should be struct ip_addr 2010-06-14 19:52:45 +00:00
goldsimon
2c60a48d02 ip_addr_set_any does not work on pointers... 2010-06-14 19:52:17 +00:00
goldsimon
4b0be4a477 Fixed invalid fix for bug #30038 2010-06-14 19:18:11 +00:00
goldsimon
505dd10d3c Fixed bug #29979 (lwip_sendto did not check parameter "to" != NULL) 2010-06-12 18:46:19 +00:00
goldsimon
ddd2b69f27 bug #29976: forgot some places using the changed IP address (copy vs. pointer) 2010-06-12 18:37:41 +00:00
goldsimon
66b57f89df Fixed bug #30038: dhcp_network_changed doesn't reset AUTOIP coop state 2010-06-12 17:14:00 +00:00
goldsimon
69bd5a29d9 Fixed a possible NULL-pointer deref before checking it 2010-06-12 17:05:54 +00:00
goldsimon
f7479781c1 bug #27352: removed packing from ip_addr_t, the packed version is now only used in protocol headers. Added global storage for current src/dest IP address while in input functions. 2010-05-22 21:11:02 +00:00
goldsimon
9bfeb4e5af Minor: added some spaces for indentation 2010-05-22 21:01:38 +00:00
goldsimon
d3e5ade2da Correctly NULL-terminate h_addr_list 2010-05-17 12:36:45 +00:00
goldsimon
3833dd86aa Added LWIP_DEBUGF warning if dns_send returns an error 2010-05-17 12:29:31 +00:00
goldsimon
25f33c8444 struct etharp_hdr: split _hwlen_protolen into two u8_t's to prevent using htons on little-endian platforms 2010-05-16 16:26:12 +00:00
goldsimon
dae247809b Add preprocessor-macros for compile-time htonl calculation (and use them throughout the stack where applicable) 2010-05-16 15:57:42 +00:00
goldsimon
81df8bdabd Added PP_HTONx/PP_NTOHx macros that can be calculated by the preprocessor (used for constants only) 2010-05-16 15:55:45 +00:00
goldsimon
03e4eb4de8 changed the semantics of LWIP_PREFIX_BYTEORDER_FUNCS to prevent "symbol already defined" i.e. when linking to winsock 2010-05-16 15:09:55 +00:00
goldsimon
290bd400c3 No need to call pppoe_init any more (since the linked list is implicitly initialized to zero by the loader) 2010-05-16 14:35:03 +00:00
goldsimon
5d0785e47a PPPoE now uses its own MEMP pool instead of the heap (moved struct pppoe_softc from ppp_oe.c to ppp_oe.h) 2010-05-16 14:34:16 +00:00
goldsimon
16434568b0 Use a simple linked list (next pointer) instead of sys/queue.h (from BSD) 2010-05-16 14:24:40 +00:00
goldsimon
c0e7d54e37 Removed 2 mem_mallocs: error string can be a global variable, include memory for sc_ac_cookie in struct pppoe_softc; commented out unused code (sc_service_name/sc_concentrator_name) 2010-05-16 14:11:53 +00:00
goldsimon
ccb53d9e7d DNS_LOCAL_HOSTLIST_IS_DYNAMIC uses its own MEMP pool instead of the heap 2010-05-16 14:06:46 +00:00
goldsimon
03bd61c799 DNS_LOCAL_HOSTLIST_IS_DYNAMIC uses its own MEMP pool instead of the heap 2010-05-16 13:36:51 +00:00
goldsimon
6ffd29507c Free recv_data when TF_RXCLOSED is set 2010-05-16 13:12:15 +00:00
goldsimon
a880709776 Let FIN come through although TF_RXCLOSED is set, send RST when data is received although TF_RXCLOSED is set, added TCP_EVENT_CLOSED for clearer code 2010-05-15 18:12:37 +00:00
goldsimon
874d1641df Fix compilation for LWIP_EVENT_API==1 (unused args) 2010-05-15 18:10:55 +00:00
goldsimon
d8d964d09e udp_input/SO_REUSE_RXTOALL: only call pbuf_header if there is a 2nd pcb to pass the data to 2010-05-15 17:11:41 +00:00
goldsimon
46b3cb580d Removed unused SOF_* flags, ip_pcb.so_options can now be an u8_t instead of an u16_t (saves 3 bytes per pcb on a 32-bit platform) 2010-05-15 17:10:08 +00:00
goldsimon
02f5e19420 udp_input: use SO_REUSE && SO_REUSE_RXTOALL to copy incoming (broad-/multicast) data to additional pcbs 2010-05-15 16:46:53 +00:00
goldsimon
a945bf07af SO_REUSE: tcp_input: correctly handle multiple pcbs listening on the same port (but different address): first search for a specific address an only pass to ANY if no specific address has been found listening 2010-05-15 16:45:43 +00:00
goldsimon
7e5b0a9eb6 SO_REUSE: tcp_listen/tcp_connect: make sure that the 5-tuple is unique 2010-05-15 16:44:09 +00:00
goldsimon
a56795c149 Added new option SO_REUSE_RXTOALL to pass received UDP broadcast/multicast packets to more than one pcb 2010-05-15 14:52:39 +00:00
goldsimon
baeb41f5f4 SO_REUSEADDR / SO_REUSE is implemented and safe to use 2010-05-12 22:34:06 +00:00
goldsimon
d0348e0c60 task #6995: Implement SO_REUSEADDR (correctly) 2010-05-12 22:29:58 +00:00
goldsimon
ef0a7ecbcd Remove uused SOF_* flags, define inherited flags in ip.h, not in tcp_in.c 2010-05-12 22:26:06 +00:00
goldsimon
778c65d27c CHECKSUM_GEN_IP_INLINE: Use defines to access the u32_t part of an IP address 2010-05-12 08:11:45 +00:00
goldsimon
f3face9f0c Fix printf-formatter for sio_fd_t/size_t 2010-05-12 07:48:30 +00:00
goldsimon
2edd5230c9 auth_withpeer_fail(): call lcp_close(), like pppd 2.4.5 does 2010-05-11 18:11:46 +00:00
goldsimon
1551bb702d Fixed bug #29855: PPP: Backport a bugfix in LcpSendEchoRequest from pppd 2010-05-11 16:53:41 +00:00
goldsimon
d656e9f28e Added option LWIP_ARP_FILTER_NETIF to use multiple IPs on one hardware interface (by using multiple netifs, each with its own IP) 2010-05-10 14:10:46 +00:00
goldsimon
597764e35b Minor: source code layout 2010-05-10 14:02:52 +00:00
goldsimon
f9f77876a1 .. and deleted NAT again as Christian obviously didn't have the copyright on the code he sent us... THANKS!!! 2010-05-05 19:49:40 +00:00
goldsimon
67d8c7999a Free NAT entries on remove (fixes a memory leak) 2010-05-05 19:39:29 +00:00
goldsimon
a7fdb67e8f task #7506: added NAT support 2010-05-05 19:34:23 +00:00
goldsimon
4d1ff2418e Fixed bug #29271 (Application can't re-use pbufs) by updating the doc to not allow reusing pbufs after passing them to a send function 2010-05-04 19:36:49 +00:00
goldsimon
71f5fdef42 Fixed bug #29769 (sys_check_timeouts: sys_now() may overflow) 2010-05-04 19:27:42 +00:00
goldsimon
abc36471d9 Fixed bug #29763 (CHECKSUM_GEN_IP_INLINE), added macro LWIP_MAKE_U16() that's improved for endianess 2010-05-04 18:59:52 +00:00
goldsimon
4b7288e8f4 use checksum-on-copy for sending UDP data for LWIP_NETIF_TX_SINGLE_PBUF==1 2010-05-02 17:25:33 +00:00
goldsimon
108ed3c81a struct netbuf: reorder members to save some space 2010-05-02 09:10:58 +00:00
goldsimon
f98e5717e5 task #6849: added udp_send(_to/_if) functions that take a precalculated checksum, added pbuf_fill_chksum() to copy data into a pbuf and at the same time calculating the checksum for that data 2010-04-30 20:39:45 +00:00
goldsimon
3685bc4828 fixed a type 2010-04-30 20:37:22 +00:00
goldsimon
72c580236e Create overridable macros for copying 2-byte-aligned IP addresses and MAC addresses 2010-04-29 04:57:31 +00:00
goldsimon
01d2a87f5d Inline generating IP checksum to save a function call 2010-04-28 19:36:51 +00:00
goldsimon
51061fb61e Fixed bug #29617 (sometime cause stall on delete listening connection) 2010-04-21 19:59:40 +00:00
goldsimon
49e8e28cf6 Check that tcp_abort/tcp_abandon isn't called for listen-pcbs 2010-04-21 19:55:14 +00:00
goldsimon
d2c632fb18 patch #7145: Various typos in SNMP files 2010-04-14 19:13:35 +00:00
goldsimon
3562be2188 tabs -> spaces 2010-04-14 07:03:31 +00:00
goldsimon
2e18a9be63 Added an overridable define to get informed when the tcpip_thread processes messages or timeouts to implement a watchdog. 2010-04-14 07:02:26 +00:00
goldsimon
3347762df3 MEMP_OVERFLOW_CHECK: dump the element's pool's index and name when an overflow/underflow is detected 2010-04-12 11:08:11 +00:00
goldsimon
f1bc73c3ed Fixed compilation errors 2010-04-02 16:48:53 +00:00
goldsimon
a96fa7d221 Fixed compilation of debug log code (that is currently commented out) 2010-04-02 16:17:51 +00:00
goldsimon
cc3e01a9f5 Fixed compilation (removed extra tokens after #endif) 2010-03-28 18:47:37 +00:00
goldsimon
6caa389c48 Check IP_FRAG && IP_FRAG_USES_STATIC_BUF && LWIP_NETIF_TX_SINGLE_PBUF 2010-03-28 10:50:05 +00:00
goldsimon
e86446b785 patch #7143: Add a few missing const qualifiers 2010-03-28 10:28:32 +00:00
goldsimon
a00448c35a create a new (contiguous) PBUF_RAM for every outgoing fragment if LWIP_NETIF_TX_SINGLE_PBUF==1 2010-03-28 10:22:48 +00:00
goldsimon
82b9152b8d Removed checking ARP_TABLE_SIZE, this is done by the etharp module itself 2010-03-27 17:12:48 +00:00
goldsimon
d778fbb24f Speedup TX by moving code from find_entry to etharp_output/etharp_query to prevent unnecessary function calls (inspired by patch #7135). 2010-03-27 16:51:27 +00:00
goldsimon
3803a0021d patch #7130: remove meaningless const qualifiers 2010-03-27 16:25:35 +00:00
goldsimon
3c96819a2c Make LWIP_NETIF_TX_SINGLE_PBUF work for TCP, too 2010-03-26 16:54:15 +00:00
goldsimon
846a2fb933 Fixed compiling with different options disabled (TCP/UDP), triggered by bug #29345; don't allocate acceptmbox if LWIP_TCP is disabled 2010-03-26 16:09:02 +00:00
goldsimon
7e9eb55350 Added printf format modifier for mem_size_t depending on heap size 2010-03-26 15:38:01 +00:00
goldsimon
46b7bd6ec3 Make functions static where applicable, add default cases to switches where applicable, prevent old-style function prototypes (without arguments) 2010-03-26 14:07:05 +00:00
goldsimon
8bbe3d2fe0 Correctly cast pointers when assigning from void* 2010-03-26 14:05:56 +00:00
goldsimon
25f59761b3 fixed bug #29346 (removed comma after last enum member) 2010-03-26 14:05:22 +00:00
goldsimon
4b038f13de sys_thread_new: name is a const pointer 2010-03-26 14:04:03 +00:00
goldsimon
da3d84d1dc Fix compilation if ETHARP_SUPPORT_STATIC_ENTRIES==0 2010-03-26 13:40:31 +00:00
goldsimon
5ef976aed5 Fixed bug #29332: lwip_select() processes readset incorrectly 2010-03-25 12:19:39 +00:00
goldsimon
cf0b831971 Fixed bug #29080: Correctly handle remote side overrunning our rcv_wnd in ooseq case. 2010-03-25 06:39:01 +00:00
goldsimon
d861daeb4e Removed function prototype that had no corresponding implementation (pbuf_ref_chain) 2010-03-22 15:46:09 +00:00
goldsimon
0a2eb3fdc8 minor: fixed coding style 2010-03-22 15:45:34 +00:00
goldsimon
6fb248c9e0 task #10088: Fixed a bug in RST-on-close-when-not-all-data-acked implementation (plus removed some unnecessary casts) 2010-03-22 12:32:05 +00:00
goldsimon
40946a79d3 Removed duplicate TCP_REG/TCP_RMV macros, fixed debug macro implementation 2010-03-22 12:27:38 +00:00
goldsimon
124ca0fed2 tcp_listen() did not copy the pcb's prio 2010-03-22 10:06:49 +00:00
goldsimon
5d153ca1b3 Fixed compilation for MEM_USE_POOLS under MSVC (where ++ doesn't work for enums) 2010-03-22 08:38:28 +00:00
goldsimon
a5b0ea97d6 Updated netconn_write doc/comment about api_flags 2010-03-21 12:19:56 +00:00
goldsimon
0a49f2e068 Corrected spelling of ERR_WOULDBLOCK (D was missing) 2010-03-20 12:56:47 +00:00
goldsimon
57594ad7b6 tcp_write: moved initial checks to an own static function for clarity 2010-03-20 12:08:07 +00:00
goldsimon
75bb43698c Disable MEMP_TCPIP_MSG_INPKT pool for LWIP_TCPIP_CORE_LOCKING_INPUT==1 2010-03-20 11:57:34 +00:00
goldsimon
f70014b8ea Added an option to disable tcpip_(un)timeout code since the linker cannot do this automatically to save space. 2010-03-20 11:55:41 +00:00
goldsimon
5fd410db4b Added support for static ARP table entries (added option ETHARP_SUPPORT_STATIC_ENTRIES) (+ added test); refactored the etharp code a bit 2010-03-20 11:45:25 +00:00
goldsimon
385d044f7d Corrected spelling of milliseconds (my dictionary tells me to use two l's :) 2010-03-20 11:34:50 +00:00
goldsimon
d0f1c552e2 Fixed bug #29256: SNMP Trap address was not correctly set 2010-03-19 20:49:13 +00:00
goldsimon
a54bb7205d Added missing casts, use strlen + MEMCPY instead of strcpy (as that might overrun the buffer) 2010-03-16 15:14:14 +00:00
goldsimon
7466474365 Fixed compiler warnings when casting where we know the source is aligned (by casting to void-pointer first) 2010-03-15 10:44:19 +00:00
goldsimon
c4bc9ce59a Fixed alignment warnings when we know alignment is correct (by using LWIP_MEM_ALIGN) 2010-03-15 09:57:03 +00:00
goldsimon
e25c9f7951 Fixed compiler warning when LWIP_SNMP==0 2010-03-15 09:47:43 +00:00
goldsimon
94cbed5096 Corrected comment 2010-03-14 12:35:30 +00:00
goldsimon
f83ace2034 task #6849: Calculate checksum when creating TCP segments, not when (re-)transmitting them. 2010-03-14 11:26:05 +00:00
goldsimon
84ed9de21a Prepared for checksum-on-copy (task #6849):
- Added option LWIP_CHECKSUM_ON_COPY;
- Added function + define lwip_chksum_copy to create checksum when copying data
2010-03-14 11:23:37 +00:00
goldsimon
4e764017c1 Fixed bug #29148 (Incorrect PBUF_POOL_BUFSIZE for ports where ETH_PAD_SIZE > 0) by moving definition of ETH_PAD_SIZE to opt.h and basing PBUF_LINK_HLEN on it. 2010-03-14 10:16:43 +00:00
goldsimon
67f5e17588 Bug #29210: check alignment of struct sockaddr vs. struct sockaddr_in 2010-03-14 09:54:47 +00:00
goldsimon
d13ac66cc4 Fixed sending one byte of data in tcp_zero_window_probe (which I accidentally broke with v1.103) 2010-03-14 09:43:10 +00:00
goldsimon
9f0b7261e5 Fix calculation of tcp_mss(): when timestamps are on, this is pcb->mss - 12 or else NOCOPY-apps might generate unperformant PBUF_REF chains 2010-03-13 15:04:08 +00:00
goldsimon
ad4a869b94 Some fixes to the TCP_OVERSIZE code:
- fix compiling with TCP_OVERSIZE==0;
- fix segment-size calculation when options are used;
2010-03-13 14:29:13 +00:00
goldsimon
79d3b41e13 Reverted the change in struct sockaddr since it wasn't compatible to the standard (bug #29210) 2010-03-13 14:09:52 +00:00
goldsimon
839befe68a Corrected comment 2010-03-12 16:06:08 +00:00
goldsimon
097e8c8eb4 Fixed some issues in the TCP_OVERSIZE code:
- reset tcp_pcb.unsent_oversize when last_unsent is changed;
- added TCP_OVERSIZE_DBGCHECK: check tcp_pcb.unsent_oversize vs. (debug-only) tcp_seg.oversize_left to ensure the pcb counter is correct;
- fixed a memory leak in tcp_write;
2010-03-12 15:40:01 +00:00
goldsimon
90c7d3aaff Temporary upgrade helper: define format string for u8_t as hex if not defined in cc.h 2010-03-10 16:18:12 +00:00
goldsimon
2621e3fa19 Use a union to let struct sockaddr have the same alignment requirements as struct sockaddr_in 2010-03-10 10:53:14 +00:00
goldsimon
36d7f50d77 Renamed tcp_output_set_header to tcp_output_alloc_header and included more code common to all callers 2010-03-09 16:29:19 +00:00
goldsimon
ffbb582dde ip_output: assert for p->ref == 1 to catch TCP retransmissions where the netif hasn't freed the pbuf yet 2010-03-09 16:24:38 +00:00
goldsimon
3bfc07eb92 Added comment, use braces for single-line if-blocks 2010-03-09 15:49:57 +00:00
goldsimon
d91caf1cd3 ip_input: better check for old link-local-address (explicitly check for autoip->llipaddr instead of letting all link-local-addresses through) 2010-03-08 18:24:23 +00:00
goldsimon
2a2be49d2c task #10241 (AutoIP: don't break existing connections when assiging routable address): when checking incoming packets and aborting existing connection on address change, filter out link-local addresses. 2010-03-08 18:17:52 +00:00
goldsimon
d47a04456b bug #29105: Review printf formatters 2010-03-08 17:07:35 +00:00
goldsimon
b9499d07c2 bug #29105: Review printf formatters: added X8_F to cc.h and use it in etharp.c 2010-03-08 17:04:27 +00:00
goldsimon
5d20e690fd Added/corrected casts 2010-03-08 12:17:29 +00:00
goldsimon
1c23bfdc7f Only add hostname if it's not empty (strlen > 0) 2010-03-08 12:15:58 +00:00
goldsimon
d5531a239b bug #28775 (select/event_callback: only check select_cb_list on change) plus use SYS_LIGHTWEIGHT_PROT to protect the select code. This should speed up receiving data on sockets as the select code in event_callback is only executed when select is waiting. 2010-03-07 18:40:54 +00:00
goldsimon
9e37d70163 Create mem_mutext at the end of mem_init. This enables sys_mutex_new to use the heap if required. 2010-03-07 16:50:08 +00:00
goldsimon
99ff7efe80 Use braces for if-blocks 2010-03-06 12:26:20 +00:00
goldsimon
43a08bef14 tcp_accepted(): check pcb state to verify it isn't called on a connection-pcb 2010-03-06 12:06:27 +00:00
goldsimon
92beddd72f task #7013 (Create option to have all packets delivered to netif->output in one piece): Always copy to try to create single pbufs in tcp_write. 2010-03-06 11:55:00 +00:00
goldsimon
f5b783d107 Fixed LWIP_NETIF_TX_SINGLE_PBUF for LWIP_TCPIP_CORE_LOCKING 2010-03-06 11:52:55 +00:00
goldsimon
a5a870c683 LWIP_NETIF_TX_SINGLE_PBUF needs TCP_OVERSIZE >= TCP_MSS for TCP 2010-03-06 11:51:31 +00:00
goldsimon
19ab25c861 LWIP_TCPIP_CORE_LOCKING_INPUT needs LWIP_TCPIP_CORE_LOCKING to work correctly 2010-03-06 11:32:40 +00:00
goldsimon
38fcfcdfac task #10167 (sockets: speed up TCP recv by not allocating a netbuf): added function netconn_recv_tcp_pbuf() for tcp netconns to receive pbufs, not netbufs; use that function for tcp sockets. 2010-03-06 11:29:01 +00:00
goldsimon
957f4d8096 renamed struct lwip_socket to struct lwip_sock to avoid duplicate names (function lwip_socket) 2010-03-06 10:21:03 +00:00
goldsimon
5d4438e652 Don't try to forward link-local addresses 2010-03-06 10:15:39 +00:00
goldsimon
4649c14856 Correctly identify link-local addresses when sending ARP packets 2010-03-06 09:56:52 +00:00
goldsimon
fcf6434b4b Fixed bug #29087: etharp: don't send packets for LinkLocal-addresses to gw 2010-03-06 09:33:17 +00:00
goldsimon
464950d51e Fixed bug #29072: Correctly set ciaddr based on message-type and state. Renamed dhcp_create/delect_request to dhcp_create/delete_msg. 2010-03-05 13:37:37 +00:00
goldsimon
0b5d60db5e Correctly set TCP_WRITE_FLAG_MORE when netconn_write is split into multiple calls to tcp_write. 2010-03-05 11:34:43 +00:00
goldsimon
b6542b977e task #7040 (Work on tcp_enqueue): 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. 2010-03-05 11:14:31 +00:00
goldsimon
2bf1184c39 Added comment after #endif 2010-03-03 16:05:20 +00:00
goldsimon
103b5a760f tcp_connect: send timestamp-option only if (pcb->flags & TF_TIMESTAMP) != NULL (same as for passive open) 2010-03-01 19:05:52 +00:00
goldsimon
2b1c389955 Fixed accessing invalid memory when closing a listening pcb (introduced with tcp_shutdown) 2010-03-01 18:43:37 +00:00
goldsimon
8d9fa63460 PPP: use LWIP_DEBUGF() instead of ppp_trace() 2010-02-22 20:16:39 +00:00
goldsimon
52b87b751f Added a note about socket recv/accept timeout errno value 2010-02-22 19:12:21 +00:00
goldsimon
e934f8aac6 Added/improved comments and debug output; renamed 'pc' to 'pcrx' where appropriate to reflect the variable type 2010-02-22 17:58:05 +00:00
goldsimon
311d16df7d Fixed compilation error after splitting tcp.h/tcp_impl.h 2010-02-22 17:52:09 +00:00
goldsimon
ea78d69c6d Added debug output and missing casts 2010-02-22 17:49:49 +00:00
goldsimon
402597c2cb Fixed bug #28970 (invalid preprocessor macro introduced with LWIP_TCPIP_CORE_LOCKING_INPUT) 2010-02-22 12:57:00 +00:00
goldsimon
68678e21df Fixed compilation for DNS_LOCAL_HOSTLIST==1 and DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1 (bug #28968) 2010-02-22 08:36:23 +00:00
goldsimon
19a9b52c06 Corrected comment 2010-02-21 19:28:46 +00:00
goldsimon
db38ee6630 Added define LWIP_TCPIP_CORE_LOCKING_INPUT that lets tcpip_input omit the thread-change to tcpip_thread and instead lock the core 2010-02-21 12:38:08 +00:00
goldsimon
1d8538bca4 Added const char* name to mem- and memp-stats for easier debugging. 2010-02-21 12:32:29 +00:00
goldsimon
b73dcfb8cf task #10140: Remove DNS_USES_STATIC_BUF (keep the implementation of DNS_USES_STATIC_BUF==1) 2010-02-21 12:15:01 +00:00
goldsimon
bcd4b76d31 Moved stack-internal parts of tcp.h to tcp_impl.h, tcp.h now only contains the actual application programmer's API 2010-02-21 11:35:21 +00:00
goldsimon
7c57ee0c17 Use tcp_debug_state_str() instead of tcp_debug_print_state() 2010-02-21 10:56:00 +00:00
goldsimon
d9157a71bb Task #10088: Correctly implement close() vs. shutdown(). Now the application does not get any more recv callbacks after calling tcp_close(). Added tcp_shutdown(). 2010-02-20 18:05:56 +00:00
goldsimon
eae9798276 Fixed pcb leak when accept-callback is NULL and asserts are disabled 2010-02-20 17:27:08 +00:00
goldsimon
e131d3e32a tcp_alloc: set given prio to the new pcb, not TCP_PRIO_NORMAL; minor: changed comments and source code layout 2010-02-20 10:03:03 +00:00
goldsimon
36043a92e7 Restructured TCP_PCB_COMMON for a smaller size (u16_t at the end) 2010-02-20 10:01:43 +00:00
goldsimon
9b48657444 Added UPGRADING doc file that should help to upgrade apps/ports from older versions of lwIP 2010-02-20 09:36:40 +00:00
goldsimon
52970c2459 Renamed mem_realloc() to mem_trim() to prevent confusion with realloc() 2010-02-19 16:23:46 +00:00
goldsimon
8336796c1a Add matching comment to #endif 2010-02-16 21:05:06 +00:00
goldsimon
16a63c6554 Bug #28917: don't increase error counters for icmp echo response 2010-02-16 20:38:35 +00:00
goldsimon
c637441f52 tcp_seg(s)_free: remove return value, noone uses it 2010-02-16 17:20:10 +00:00
goldsimon
5b221ecd4f Added missing cast; added more debug output 2010-02-16 11:28:40 +00:00
goldsimon
7af77aefa7 Added missing casts 2010-02-16 11:28:15 +00:00
goldsimon
7c2054091d Link status does not depend on LWIP_NETIF_LINK_CALLBACK (fixes bug #28899) 2010-02-15 19:53:46 +00:00
goldsimon
e04e0cb98e Fixed bug #28877 (Duplicate ARP gratuitous packet with LWIP_NETIF_LINK_CALLBACK set on) by only sending if both link- and admin-status of a netif are up 2010-02-14 20:20:28 +00:00
goldsimon
e983865ad5 Disable ETHARP_TRUST_IP_MAC by default since it slows down packet reception and is not really necessary 2010-02-14 18:10:34 +00:00
goldsimon
4c9fe60693 Fixed ARP input processing: only add a new entry if a request was directed as us (RFC 826, Packet Reception), otherwise only update existing entries; internalized some functions 2010-02-14 18:08:16 +00:00
goldsimon
c5dfa4099d Fixed bug #28183 (ARP and TCP/IP cannot be disabled on netif used for PPPoE) by adding a new netif flag (NETIF_FLAG_ETHERNET) that tells the stack the device is an ethernet device but prevents usage of ARP (so that ethernet_input can be used for PPPoE). 2010-02-14 16:44:47 +00:00
goldsimon
524b7bc36b Documented the use of netif flags 2010-02-14 16:00:46 +00:00
goldsimon
8908055b63 Revert my last changes and remove structure packing from struct dns_query and struct dns_answer since they are only used with SMEMCPY 2010-02-14 14:02:05 +00:00
goldsimon
10abe8aba2 Use pointers instead of using SMEMCPY 2010-02-14 12:51:53 +00:00
goldsimon
7b24a6360c Minor speedups: use ip_addr_copy, use SMEMCPY, use htonX on constants instead of variables 2010-02-14 12:43:24 +00:00
goldsimon
96e9689dbd Use new macro ip_addr_copy where applicable 2010-02-14 12:42:49 +00:00
goldsimon
7e0204bb7b Improved some defines working on ip addresses, added faster macro to copy addresses that cannot be NULL 2010-02-14 12:41:46 +00:00
goldsimon
dfb80c6b86 fixed compilation for LWIp_SNMP && PPP_INPROC_MULTITHREADED 2010-02-14 12:26:01 +00:00
goldsimon
838c35acf6 struct ip_hdr: split u16_t _ttl_proto to u8_t _ttl and u8_t _proto to prevent unnecessary loading and htons 2010-02-14 11:42:08 +00:00
goldsimon
c858aa5686 Fixed compiler warnings for checksum algorithms 2 and 3 2010-02-14 11:40:13 +00:00
goldsimon
b1736b13d7 Use checksum algorithm 2 as default as it should be faster than 1 on most (if not all) platforms 2010-02-14 11:31:10 +00:00
goldsimon
cbb86fe590 Added stats for mutexes 2010-02-13 17:26:40 +00:00
goldsimon
a61f5f3a78 Fixed old comments 2010-02-13 17:26:08 +00:00
goldsimon
0792effc2a task #7865 (implement non-blocking send operation) 2010-02-13 17:08:40 +00:00
goldsimon
49c6ce3703 Add a new err_t, ERR_WOULDBLOCK in preparation for non-blocking send 2010-02-13 16:03:12 +00:00
goldsimon
0f05a6aede Fixed compilation for LWIP_DNS==1 after changing sys layer 2010-02-13 15:43:19 +00:00
goldsimon
7ccf8cb731 Fixed compilation with LWIP_DNS==1 after changing sys layer 2010-02-13 15:01:55 +00:00
goldsimon
7c28c66d32 Don't use C++ reserved keyword 'class' 2010-02-13 14:51:46 +00:00
goldsimon
c49a3ab2d6 Fixed compilation for LWIP_SO_RCVBUF==0 2010-02-13 10:06:42 +00:00
goldsimon
8fbaf0304a Added a minimal version of posix fctl() to have a standardised way to set O_NONBLOCK for nonblocking sockets. 2010-02-12 17:59:20 +00:00
goldsimon
f89c08872c Fixed indentation 2010-02-12 17:57:02 +00:00
goldsimon
29eb56a2f6 netif_set_link_up/down: only do something if the link state actually changes 2010-02-12 16:50:23 +00:00
goldsimon
2e795d2706 task #10139 (Prefer statically allocated memory): added autoip_set_struct() and dhcp_set_struct() to let autoip and dhcp work with user-allocated structs instead of callin mem_malloc 2010-02-12 16:42:02 +00:00
goldsimon
8768e4488a patch #6865: use so_options SOF_REUSEADDR instead of flags TF_REUSEADDR (which has ben removed again) 2010-02-12 16:32:31 +00:00
goldsimon
bd3f86e505 Code layout: splitted long line 2010-02-12 16:31:18 +00:00
goldsimon
82e4716784 Fixed comment to our flag names 2010-02-12 16:30:58 +00:00
goldsimon
d3635c5eef patch #6865 (SO_REUSEADDR for TCP): if tcp_pcb.flags has TF_REUSEADDR set, allow binding to endpoint in TIME_WAIT 2010-02-12 15:33:02 +00:00
goldsimon
c73b1b4fa2 Fixed bug #28865 (Cannot close socket/netconn in non-blocking connect) 2010-02-12 15:21:37 +00:00
goldsimon
39df7d048c Added comment about mem_realloc() vs. realloc() 2010-02-12 14:56:34 +00:00
goldsimon
3529349470 Fixed compilation for NO_SYS==1 2010-02-12 13:56:51 +00:00
goldsimon
0030d1ade5 task #10139 (Prefer statically allocated memory): 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; task #7212: Add Mutex concept in sys_arch (define LWIP_COMPAT_MUTEX to let sys.h use binary semaphores instead of mutexes - as before) 2010-02-12 13:49:21 +00:00
goldsimon
2d1631792a struct netconn.socket is only used with LWIP_SOCKET; added comments 2010-02-12 09:58:44 +00:00
goldsimon
b6babe38ea Use braces for if blocks 2010-02-12 09:51:30 +00:00
goldsimon
df7e435b86 Fixed bug #28866 (mem_realloc function defined in mem.h) 2010-02-12 09:30:31 +00:00
goldsimon
9e59f661bc Fixed a compiler warning (comparison between signed and unsigned) 2010-02-10 08:11:18 +00:00
goldsimon
87c2d911c9 Removed invalid assert (always true) 2010-02-10 07:58:21 +00:00
goldsimon
44af02aa1e Fixed wrong printf formatter 2010-02-10 07:58:01 +00:00
goldsimon
45e51d1929 Removed sys_sem_wait_timeout, added comments to the port-supplied sys(-arch)-functions 2010-02-09 21:05:39 +00:00
goldsimon
59a623e648 Use sys_arch_sem_wait instead of sys_sem_wait_timeout (same function, different name) 2010-02-09 21:04:50 +00:00
goldsimon
306f2203fa Fixed bug #22110 (recv() makes receive window update for data that wasn't received by application); added function-like macros to correctly access/change conn->recv_timeout and conn->recv_bufsize 2010-02-09 20:23:39 +00:00
goldsimon
7699b59e27 Another fix for bug #28853 (recv returns 0 on recv-timeout or any other error), fixed err_to_errno_table: ERR_TIMEOUT is EWOULDBLOCK, not ETIMEDOUT 2010-02-09 20:17:06 +00:00
goldsimon
1550c4215d Fixed bug #28853 (lwip_recvfrom() returns 0 on receive time-out or any netconn_recv() error) 2010-02-09 18:46:54 +00:00
goldsimon
a84590273d Merge 3 u8_t for netconn-internal status into one u8_t 'flags' to prevent waisting memory when adding more flags 2010-02-09 18:41:07 +00:00
goldsimon
6fe258c6bc task #10154 (PPP: Update snmp in/out counters for tx/rx packets) 2010-02-09 18:21:21 +00:00
goldsimon
27c1c7a0f7 Added function sys_restart_timeouts() from patch #7085 (Restart system timeout handling) 2010-02-09 17:49:20 +00:00
goldsimon
a668a4e4d1 Fixed compilation for NO_SYS==1 2010-02-09 17:41:34 +00:00
goldsimon
b1250f003d For loopback packets, adjust the stats- and snmp-counters for the loopback netif. 2010-02-09 17:00:57 +00:00
goldsimon
3f8e6c423c Fixed unit tests after changing struct ip_addr to ip_addr_t 2010-02-09 16:40:52 +00:00
goldsimon
077caac76d task #10153 (Integrate loopif into netif.c) - loopif does not have to be created by the port any more, just define LWIP_HAVE_LOOPIF to 1. 2010-02-09 16:01:24 +00:00
goldsimon
91d70a3364 Fixed copying multiple IP addresses from options (e.g. multiple DNS servers) - the amount copied was correct, but the value copied was always the first. 2010-02-09 11:40:46 +00:00
goldsimon
6af20340dd Minor: Fixed indentation after changing struct ip_addr to ip_addr_t 2010-02-09 11:38:59 +00:00
goldsimon
68ab197b68 Fixed a missing cast warning 2010-02-09 11:38:00 +00:00
goldsimon
79e6b4c819 Added reentrant versions of inet_ntoa/ipaddr_ntoa inet_ntoa_r/ipaddr_ntoa_r 2010-02-08 20:14:21 +00:00
goldsimon
ececc3ca45 Internalize another function; use the supplied max_response_time instead of dividing it by 2 2010-02-08 19:50:49 +00:00
goldsimon
630f575017 Moved most defines from igmp.h to igmp.c for clarity since they are not used anywhere else; removed some function prototypes from igmp.h, too 2010-02-08 19:41:53 +00:00
goldsimon
49274c1507 added netif_s/get_igmp_mac_filter() macros 2010-02-08 19:32:40 +00:00
goldsimon
27d4cf6aef Improved IGMP stats (patch from bug #28798) 2010-02-08 19:19:26 +00:00
goldsimon
b156d392cb Fixed bug #28798 (Error in "Max Response Time" processing) and another bug when LWIP_RAND() returns zero. 2010-02-08 18:12:53 +00:00
goldsimon
b0b4290c29 Reduced the time SYS_ARCH_PROTECT is protecting the socket array 2010-02-08 17:25:57 +00:00
goldsimon
90bed0c5ac Added yet another IP-address-modifying define, ip_addr_set_any() 2010-02-08 17:24:08 +00:00
goldsimon
b3caddab30 Minor: source code layout 2010-02-08 17:12:45 +00:00
goldsimon
1017279e68 Minor: removed one space 2010-02-08 17:12:14 +00:00
goldsimon
f74cebcbcd Minot: Fixed comments and code style 2010-02-08 16:53:47 +00:00
goldsimon
848debf999 Fixed bug #28818 (New connection probably not marked writable on accept()) introduced a week ago while implementing non-blocking connect 2010-02-08 12:33:28 +00:00
goldsimon
47756a8faa Fixed macro ip_addr_set_loopback(): htonl was missing (fixes bug #28828: ip_addr.h some macro error) 2010-02-08 12:25:01 +00:00
goldsimon
6c027c153b Fixed compiler warnings 2010-02-08 12:24:29 +00:00
goldsimon
28dc5f491c Correctly initialize netif flags in pppifNetifInit 2010-02-05 11:20:49 +00:00
goldsimon
758e99f362 Added function-like macros to get/set the hostname on a netif 2010-02-05 11:17:55 +00:00
goldsimon
010dc6258e Fixed another compiler warning (missing cast) 2010-02-05 10:35:47 +00:00
goldsimon
a5c5949009 Added missing casts to suppress compiler warnings (this mainly satisfies MSVC - the double casts are a bit ugly but don't hurt...) 2010-02-05 10:09:38 +00:00
goldsimon
d51d6b2d89 Use macros to compare IP addresses 2010-02-05 10:08:49 +00:00
goldsimon
c58dfa2156 Added missing casts to suppress compiler warnings 2010-02-05 10:08:41 +00:00
goldsimon
5d360a6711 Replaced struct ip_addr by typedef ip_addr_t to make changing the actual implementation behind the typedef easier. 2010-02-04 18:47:44 +00:00
goldsimon
24fcf9a86e Accidentally changed the member name of struct ip_addr for testing... 2010-02-04 17:25:22 +00:00
goldsimon
a23b446ddf Use macros defined in ip_addr.h (some of them new) to work with IP addresses (preparation for bug #27352 - Change ip_addr from struct to typedef (u32_t) - and better code). 2010-02-04 17:21:32 +00:00
goldsimon
258fe88232 Added an own debug-print option for timers.c (used TCPIP_DEBUG and SYS_DEBUG as the code was copied from there) 2010-02-04 16:53:10 +00:00
goldsimon
9ff7d29696 Fixed compiler warnings when MEM_SIZE < 64000 2010-02-02 20:14:05 +00:00
goldsimon
30d69d68e3 Fix handling of zero-padding and parse file before sname field (if overloaded, according to the RFC) 2010-02-02 18:26:40 +00:00
goldsimon
4495d9ef5b Fixed an error in dhcp_free_request() from dhcp_inform() 2010-02-02 16:30:11 +00:00
goldsimon
a66039b86c Let netdb use a memp pool for allocating memory when getaddrinfo() is called. 2010-02-01 21:04:29 +00:00
goldsimon
81c5d9e983 Prevent mem_free (leave struct dhcp allocated on dhcp_stop) to prevent calling mem_malloc when restarting dhcp later 2010-02-01 20:20:38 +00:00
goldsimon
c6f7a34abe Prevent mem_malloc in dhcp_inform, fix check for subnet mask (remember if it was given by server or not) set back request_timeout in dhcp_set_state() 2010-02-01 19:55:16 +00:00
goldsimon
72d6f1a418 Don't parse broadcast option, we don't use it anyway (made up from ipaddr and netmask), layout change of struct dhcp 2010-01-31 18:59:37 +00:00
goldsimon
8cb3ea1398 Reworked the code that parses DHCP options: parse them once instead of parsing for every option. This also removes the need for mem_malloc from dhcp_recv and makes it possible to correctly retrieve the BOOTP file. 2010-01-31 17:27:15 +00:00
goldsimon
8712deb0b2 Don't call the link-callback from netif_set_up/down() since
this invalidly retriggers DHCP.
2010-01-31 13:30:47 +00:00
goldsimon
2e8de4f601 Updated comment about recv_bufsize 2010-01-30 15:20:01 +00:00
goldsimon
c22d3b4c98 Use SYS_LIGHTWEIGHT_PROT instead of a semaphore to protect the sockets array since the protection time is short 2010-01-30 15:01:29 +00:00
goldsimon
f8c22c7428 Moved freeing a socket to its own function (free_socket, like alloc_socket 2010-01-30 14:19:18 +00:00
goldsimon
855dcadf7a Added except set support in select (patch #6860) 2010-01-29 23:05:33 +00:00
goldsimon
9c41e1eea3 Replaced tabs with spaces 2010-01-29 23:04:06 +00:00
goldsimon
c70c3eac62 Added function-like macro for struct netconn::non_blocking 2010-01-29 22:21:45 +00:00
goldsimon
e58f4c567a Add non-blocking support for connect (partly from patch #6860) plus many cleanups in socket & netconn API 2010-01-29 22:09:31 +00:00
goldsimon
1dd8300e69 Added comments 2010-01-29 14:41:54 +00:00
goldsimon
5fa0347e64 Cleanly separate the portability file inet.h and its contents from the stack: moved htonX- functions to def.h (and the new def.c - they are not ipv4 dependent), let inet.h depend on ip_addr.h and not the other way round. This fixes bug #28732. 2010-01-29 08:20:32 +00:00
goldsimon
32c16fad42 igmp related: renamed netif pointers from 'interface' to 'netif' to not use keywords (or at least my editor highlights it as one...) 2010-01-28 18:42:40 +00:00
goldsimon
ea3b8f52d5 renamed netif pointer in struct igmp from 'interface' to 'netif' to not use keywords (or at least my editor highlights it as one...); minor layout change 2010-01-28 18:27:26 +00:00
kieranm
95445fc328 Ensure ssthresh >= 2*MSS 2010-01-28 13:14:42 +00:00
goldsimon
21e3cde95c Added missing casts (bug #28659) 2010-01-28 12:05:14 +00:00
goldsimon
d587940801 Keep 'const' of varius snmp structs the same throughout 'derived structs' 2010-01-28 12:04:06 +00:00
goldsimon
f5d4f3d83c For wrong configurations, let the test fail instead of the compiler 2010-01-27 20:37:02 +00:00
goldsimon
04a8b0f85d Added TCP_SNDQUEUELOWAT corresponding to TCP_SNDLOWAT and added tcp_sndqueuelen() - this fixes bug #28605 2010-01-27 18:24:57 +00:00
goldsimon
853e33bdb4 snmp_recv: don't peek the UDP header, p->tot_len does the same; no need for the extra checks at the beginning; don't use so many if/else but if/return instead to make the code more readable 2010-01-27 17:36:37 +00:00
goldsimon
0644c4c08e Fixed bug #27871: Calling tcp_abort() in recv callback can lead to accessing unallocated memory. As a consequence, ERR_ABRT means the application has called tcp_abort()! 2010-01-27 17:22:06 +00:00
goldsimon
606fed8896 Use memp pools for snmp instead of the heap; added 4 new pools. 2010-01-26 20:28:24 +00:00
goldsimon
a5463f0400 Moved missing include 2010-01-26 16:09:03 +00:00
goldsimon
96338314f1 Partly fixed bug #22070 (MIB_OBJECT_WRITE_ONLY not implemented in SNMP): write-only or not-accessible are still returned by getnext (though not by get) 2010-01-25 17:44:07 +00:00
goldsimon
5d3cab0042 Added one more missing cast 2010-01-25 09:19:52 +00:00
goldsimon
e678e1bdcb bug #28659: Missing casts 2010-01-25 08:24:30 +00:00
goldsimon
1811a344f5 Renamed the private mib node from 'private' to 'mib_private' to *not* use reserved C/C++ keywords 2010-01-24 17:25:22 +00:00
goldsimon
ef31aa12e2 Renamed the private mib node from 'private' to 'mib_private' to *not* use reserved C/C++ keywords, added comments, added init-define for private MIB 2010-01-24 17:16:37 +00:00
goldsimon
9dd6c28523 bug #26523: Compiler Warnings 2010-01-24 14:35:28 +00:00
goldsimon
61e5301d49 bug #26523: Compiler Warnings 2010-01-24 13:19:34 +00:00
goldsimon
408829bcf6 Fixed compilation for LWIP_TCPIP_CORE_LOCKING 2010-01-23 18:13:55 +00:00
goldsimon
dbcce3a4be bug #26523: Compiler Warnings 2010-01-23 17:48:36 +00:00
goldsimon
426dd9bfad Fixed bug #28716: select() returns 0 after waiting for less than 1 ms 2010-01-23 15:01:15 +00:00
goldsimon
82318c0ef1 Fixed bug #28651 (tcp_connect: no callbacks called if tcp_enqueue fails) both in raw- and netconn-API 2010-01-21 18:43:37 +00:00
goldsimon
60696a8485 Removed unused function declaration for netbuf_len (is a macro now) 2010-01-21 17:18:15 +00:00
goldsimon
7044385d8e Fixed netconn_err() macro 2010-01-20 07:37:24 +00:00
goldsimon
a7139ef06b Added missing include 2010-01-20 07:36:45 +00:00
goldsimon
52389fc09a Fixed bug #27316 (netconn: Possible deadlock in err_tcp) by using sys_mbox_trypost in err_tcp 2010-01-19 18:34:01 +00:00
goldsimon
972ca9e6c1 reorganised PPP sourcecode to 2.3.11 including some bugfix backports from 2.4.x. 2010-01-18 20:49:43 +00:00
goldsimon
e0c5c4de88 Fixed bug #28679: mem_realloc calculates mem_stats wrong and added test case for it 2010-01-18 17:45:41 +00:00
goldsimon
149f21dc58 Only check for LWIP_RAND() if IGMP is used, for now 2010-01-18 08:19:48 +00:00
goldsimon
9632632b85 Minor: source code layout 2010-01-18 08:11:57 +00:00
goldsimon
cc1e9370af Minor: fixed argument casts for mbox_fetch parameters (to fix compiler warnings) 2010-01-18 08:11:39 +00:00
goldsimon
34139606ca task #10102: "netconn: clean up conn->err threading issues" by adding error return value to struct api_msg_msg 2010-01-17 18:28:56 +00:00
goldsimon
3e1cca65bd task #10102: "netconn: clean up conn->err threading issues" by adding error return value to struct api_msg_msg 2010-01-17 18:28:56 +00:00
goldsimon
0e3c256667 Added comment 2010-01-17 17:37:10 +00:00
goldsimon
618355f5a7 Minor: source code layout 2010-01-17 16:23:26 +00:00
goldsimon
ca11baf1cd Changed netconn_recv() and netconn_accept() to return err_t (bugs #27709 and #28087) 2010-01-17 16:21:07 +00:00
goldsimon
7ede02ca8b Fixed bug #27856: PPP: Set netif link- and status-callback by adding ppp_set_netif_statuscallback()/ppp_set_netif_linkcallback() 2010-01-14 20:04:52 +00:00
goldsimon
2d4e76874c Using typedefs for function prototypes and -pointers throughout the stack for clarity 2010-01-14 20:02:15 +00:00
goldsimon
b463562241 Use protocol definition from tcp.h, not from sockets.h 2010-01-14 19:59:28 +00:00
goldsimon
04f17c4709 Improved includes in snmp 2010-01-14 19:59:03 +00:00
goldsimon
97f797e859 do_connect(): set conn->err to an error if conn->pcb is NULL 2010-01-14 19:49:27 +00:00
goldsimon
9521f54741 Another fix for bug #28562: Segfault @ err_tcp 2010-01-14 15:43:11 +00:00
goldsimon
0e38a52edc Again: Fixed bug #26672 (close connection when receive window = 0) by correctly draining recvmbox/acceptmbox 2010-01-13 15:59:47 +00:00
goldsimon
6df94d3c76 Coding style 2010-01-13 15:17:01 +00:00
goldsimon
59005b544f Minor fix: bug #28555: Retransmission timer only stopped if TCP_QUEUE_OOSEQ==1 2010-01-13 14:24:15 +00:00
goldsimon
8596bb7e7e 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 (patch #6966 and bug #26133) 2010-01-13 13:09:55 +00:00
goldsimon
1c47d15577 Minor speedup ip_output_if when writing TTL/proto to ip header 2010-01-13 12:52:15 +00:00
goldsimon
67c587f9f7 Fixed NO_SYS==0: starting pppInputThread failed; fixed some comments 2010-01-13 11:19:03 +00:00
goldsimon
052be0a328 Added comments 2010-01-13 11:16:47 +00:00
goldsimon
68ddcc6ca7 Fixed bug #13315 (PPP PAP authentication can result in erroneous callbacks) by copying the code from recent pppd 2010-01-11 16:38:56 +00:00
goldsimon
9a2d97ec41 Fixed bug #28551 (Compiler warning introduced with closed bug #28506) 2010-01-11 09:51:33 +00:00
goldsimon
47e770dffa Fixed comment on struct mem.prev 2010-01-11 09:49:31 +00:00
goldsimon
8292cebfd9 Fixed bug #28506 (raw_bind should filter received packets) 2010-01-10 13:45:24 +00:00
goldsimon
c483c13dc4 Fixed bug #28248 (netif_remove doesn't call netif callback) by calling netif_set_down() from netif_remove() 2010-01-10 13:34:21 +00:00
goldsimon
86f2942c2a Minor coding style changes, added assertion 2010-01-10 13:32:36 +00:00
goldsimon
e4d19dc4a0 GCC didn't like memp_memory_XXX -> now using memp_memory_XXX_base (as in Bill's original patch) 2010-01-10 13:09:55 +00:00
goldsimon
763760503b patch #6822 (Add option to place memory pools in separate arrays) - new config option MEMP_SEPARATE_POOLS 2010-01-10 12:44:09 +00:00
goldsimon
13c9d2dade Added/changed comments 2010-01-10 11:48:28 +00:00
goldsimon
97f6c5b239 D'Oh! 2010-01-10 11:42:31 +00:00
goldsimon
f4a9d173a1 bug #28127: remove call to tcp_output() from tcp_ack(_now)() 2010-01-10 11:41:25 +00:00
goldsimon
d85a18752f patch #6463 (IGMP - Adding Random Delay): added define LWIP_RAND() for lwip-wide randomization (to be defined in cc.h) 2010-01-10 10:47:27 +00:00
goldsimon
aa7dd9a8ad Forgot one line & comments 2010-01-10 10:32:56 +00:00
goldsimon
27c9670718 Fixed bug #28529: macro LWIP_DEBUG_TIMERNAMES in timers.h 2010-01-09 19:14:23 +00:00
goldsimon
32833bcd56 Inlined netif_is_up() and netif_is_link_up() as defines for speed reasons; fixed type and macro definition. 2010-01-09 13:25:15 +00:00
goldsimon
53bc34f3e2 Fixed bug #28195 (PPP: remove duplicate TCP/IP protocol header definitions - use the lwIP ones) - deleted unused header file 2010-01-09 12:45:23 +00:00
goldsimon
81640c4a83 Fixed compilation of VJ_SUPPORT after separating tx and rx 2010-01-08 15:52:17 +00:00
goldsimon
533e6b5f8d Fixed bug #26672 (close connection when receive window = 0) by correctly draining recvmbox/acceptmbox 2010-01-08 15:10:03 +00:00
goldsimon
28f0bbd575 Fixed bug #28519 (lwip_recvfrom bug with len > 65535) 2010-01-08 14:51:14 +00:00
goldsimon
39717b2d9d Copy hostname for DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1 since string passed to dns_local_addhost() might be volatile 2010-01-08 14:42:09 +00:00
goldsimon
79c88cdcfd Added function names to timer debug output 2010-01-08 14:08:47 +00:00
goldsimon
8a34c16aee Improved assertion message when MEMP_SYS_TIMEOUT pool is empty 2010-01-08 13:40:50 +00:00
goldsimon
cce192a671 Call tcp_timer_needed() with NO_SYS==1, too 2010-01-07 09:47:30 +00:00
goldsimon
cfe4a12a46 Fixed bug #28496: missing include guards in netdb.h 2010-01-06 16:30:23 +00:00
goldsimon
3269da52cc Initial version of PPP for NO_SYS==1, some TODOs are remaining, but it works... 2009-12-31 17:56:51 +00:00
goldsimon
9c51487d1a Renamed PPP tasks from "pppMain" to "pppInputThread" 2009-12-31 17:21:11 +00:00
goldsimon
3ba5ddefa7 Removed unnecessary tcpip-callbacks: this whole module runs inside the tcpip-thread. This also makes PPPoE usable with NO_SYS==1 2009-12-31 17:18:09 +00:00
goldsimon
1d45aa8d45 Reorganised PPP source code from ucip structure to pppd structure to easily compare our code against the pppd code (around v2.3.1) 2009-12-31 17:08:08 +00:00
goldsimon
a7bcdf4398 Remove warning for TCP_LISTEN_BACKLOG==0 2009-12-31 16:51:17 +00:00
goldsimon
9a0dac5885 Removed unused test function 2009-12-31 16:50:11 +00:00
goldsimon
c9e0652526 Remove C++-style comments 2009-12-31 16:49:36 +00:00
goldsimon
a566f9d8f2 Separated timer implementation from semaphore/mbox implementation, moved timer implementation to timers.c/.h (TASK#7235) 2009-12-31 16:16:44 +00:00
goldsimon
1740b0d421 Some functions were located outside extern "C" {} 2009-12-31 15:57:22 +00:00
goldsimon
802a048302 Commented 2 variables 2009-12-31 15:12:00 +00:00
goldsimon
fa08823ac4 Added an additional option LWIP_ETHERNET to support ethernet without ARP (necessary for pure PPPoE) 2009-12-27 11:42:16 +00:00
goldsimon
a1c0b9da7b Added an additional option LWIP_ETHERNET to support ethernet without ARP (necessary for pure PPPoE) - no changes in the ppp code yet 2009-12-27 11:40:48 +00:00
goldsimon
bf261f4f13 Another fix for bug #28241 (ooseq processing) and adapted corresponding unit test 2009-12-27 11:31:19 +00:00
kieranm
dc8639bc06 Update version numbering for 1.4.0 CVS development 2009-12-24 15:49:12 +00:00
kieranm
125efd8396 Update CHANGELOG for 1.3.2 2009-12-24 15:33:19 +00:00
kieranm
4a9557fa84 Update version information for 1.3.2 2009-12-24 15:32:19 +00:00
kieranm
6b6c82aaee BUG28241: improve oos sequence processing with patches from Oleg Tyshev. 2009-12-24 15:31:44 +00:00
goldsimon
feca27d69e Slightly modified the out-of-sequence-FIN test: receive packets with FIN & data and with FIN alone 2009-12-11 13:07:47 +00:00
goldsimon
fbef894674 tcp_set_state: fail on unimplemented state 2009-12-11 13:07:06 +00:00
goldsimon
2e4bb8b3b7 Added explicit check for number of segments and seqno/len of each segment on pcb->ooseq 2009-12-10 17:34:11 +00:00
goldsimon
e9940acb54 Updated comments on which sio-functions are used 2009-12-07 18:58:13 +00:00
goldsimon
957331fff4 Added a note why MSCHAP currently doesn't work with lwIP PPP 2009-12-07 07:50:24 +00:00
goldsimon
faba395cae Added description about the PPP stack 2009-12-07 07:28:27 +00:00
goldsimon
1d5809679b Various small improvements from patch #6965 (removed _inet_ntoa, set PPP netif down before removing, change log message and comment) 2009-12-06 11:59:56 +00:00
goldsimon
b5014b0966 tcp_process: add state info to log message that is used for multiple states ("TCP connection closed") 2009-12-06 11:57:31 +00:00
goldsimon
b1ad36eece Fixed bug #27079 (Yet another leak in PPP): outpacket_buf can be statically allocated (like in ucip) 2009-12-06 11:12:18 +00:00
goldsimon
1b42286bda pppInit: Remove zeroing the stats - no protocol does that 2009-12-06 10:56:28 +00:00
goldsimon
5da0620c6b Fixed checking input packet length (20 bytes is a valid packet and is used e.g. with MS RAS server) 2009-12-06 10:14:46 +00:00
goldsimon
96e8f16c05 Sligthly reordered struct netif's members to better meet alignment requirements 2009-12-06 08:58:41 +00:00
goldsimon
b5d28e0a9c patch #6969: PPP: missing PAP authentication UNTIMEOUT 2009-12-04 15:41:26 +00:00
goldsimon
73251bc9c1 PPP: Make MAXNAMELEN/MAXSECRETLEN overridable in lwipopts.h 2009-12-04 09:00:55 +00:00
goldsimon
3fa63b35b3 The guy's name is Van Jacobson (not Jabobsen or Jacobsen :-) 2009-12-04 08:57:22 +00:00
goldsimon
65f006e52e Moved the function definitions so that other modules can use the ICMP protocol header definitions when LWIP_ICMP==0 2009-12-04 08:11:57 +00:00
goldsimon
7d46e06824 Fixed bug #28106: dup ack for fast retransmit could have non-zero length 2009-12-03 19:42:35 +00:00
goldsimon
32acb82bc0 Fixed some typos 2009-12-03 18:07:00 +00:00
goldsimon
3a1c5944e7 Fixed bug #27904: TCP sends too many ACKs: delay resetting tcp_input_pcb until after calling the pcb's callbacks 2009-12-02 17:01:29 +00:00
goldsimon
04c5246e02 Fix compilation for PPPOE without PPPOS and VJ_SUPPORT without PPPOS_SUPPORT 2009-12-01 20:46:14 +00:00
goldsimon
46dc1c9bfb Minor (null-pointer check for not-on-list-netif) 2009-12-01 19:59:36 +00:00
goldsimon
b900253c09 tcp_receive(): removed unnecessary return value, added comment 2009-11-29 13:43:38 +00:00
goldsimon
59a5fb7ce8 Fixed bug #28054: Two segments with FIN flag on the out-of-sequence queue, also fixed PBUF_POOL leak in the out-of-sequence code 2009-11-29 13:23:21 +00:00
goldsimon
c5d2e536cf Worked on tcp_oos unit tests, nearly all TCP_QUEUE_OOS code is covered now 2009-11-29 13:20:13 +00:00
goldsimon
aeef0a21f3 Fixed bug #28064: pbuf_alloc(PBUF_POOL) is not thread-safe by queueing a call into tcpip_thread to free ooseq-bufs if the pool is empty 2009-11-29 11:57:35 +00:00
goldsimon
902ad897b8 Initial check-in of some unit tests 2009-11-27 08:03:53 +00:00
goldsimon
478ccee5fc tcp_rexmit(): no need to call tcp_output, since always called from tcp_input and thus tcp_output always returns without sending (prevent confusion by thinking data was sent while in tcp_rexmit!) 2009-11-26 16:44:16 +00:00
goldsimon
43fd5c28b5 Fixed bug #28098: Nagle can prevent fast retransmit from sending segment by basing the nagle-decision on TF_INFR also 2009-11-26 16:42:13 +00:00
goldsimon
4391463832 Got the tcp_nagle_*() defines wrong (inverted) :-( 2009-11-26 15:51:29 +00:00
goldsimon
c8d2d2a8ea Fixed bug #28099 (API required to disable Nagle algorithm at PCB level): added tcp_nagele_*() function-like macros 2009-11-26 15:19:30 +00:00
goldsimon
6795aabecf Fixed filename in last comment 2009-11-22 17:57:19 +00:00
goldsimon
a939c09a6b Fixed bug #27905: FIN isn't combined with data on unsent 2009-11-22 17:55:03 +00:00
goldsimon
35d1c33e0a tcp_alloc: prevent increasing stats.err for MEMP_TCP_PCB when reusing time-wait pcb as suggested by Bill 4 months ago 2009-11-22 17:52:48 +00:00
goldsimon
10edf64873 Fixed bug #27851 (TCP_EVENT_RECV(pcb, NULL,...) results in unreachable code warning) by calling tcp_recv_null if pcb->recv is null. 2009-11-22 16:17:55 +00:00
goldsimon
6d22c38e59 tcp_recv_null: call tcp_recved() if p != NULL to keep the window correct 2009-11-22 16:16:55 +00:00
goldsimon
8a81cb4ba0 Fixed bug #27955: netconn_close may nether return when LWIP_TCPIP_CORE_LOCKING enabled 2009-11-22 16:08:52 +00:00
goldsimon
6bb7f987f2 Fixed bug #28049 (Keep Alive timeout frees pcb then uses it, sometimes causing crash error) by calling tcp_rst() instead of tcp_abort() in tcp_slowtmr() when retransmit timer expires. 2009-11-22 15:44:12 +00:00
goldsimon
1c018caefe move tcp_debug_print_state to prevent accessing pcb when it might already be deallocated due to recv_flags == TF_RESET or TF_CLOSED 2009-11-22 15:42:30 +00:00
goldsimon
0c136893e5 Fixed logging of timeout-function-pointer (pointer to local stack was logged instead of actual function pointer), minor coding style fix 2009-11-22 15:25:13 +00:00
goldsimon
f4c0655190 Fixed usage of logging levels (bug #27948: Incorrect logging levels used in various places) 2009-11-22 15:14:46 +00:00
goldsimon
49bdf32765 Fixed usage of logging levels (bug #27948: Incorrect logging levels used in various places) 2009-11-22 13:31:31 +00:00
goldsimon
88d02a624a Clarified debug levels by renaming level OFF to ALL (the old define still exists for now to prevent breaking old code) 2009-11-22 13:14:57 +00:00
goldsimon
98a58f9e67 tcp_input: move tcp_debug_print_state to prevent accessing pcb when it might already be deallocated due to calling tcp_abort in tcp_process. 2009-11-20 16:56:25 +00:00
goldsimon
b30c6f8b9e Fixed comment: tcp_pcb_remove does *not* deallocate the pcb 2009-11-20 16:43:57 +00:00
goldsimon
94a7fee8c8 Fixed bug #28062: Data received directly after accepting does not wake up select 2009-11-20 16:16:20 +00:00
goldsimon
6f38b63a47 Fixed bug #27994: incorrect define for freeaddrinfo(addrinfo) 2009-11-11 16:52:05 +00:00
goldsimon
70b05c8096 Increased default value for TCP_MSS to 536, updated default value for TCP_WND to 4*TCP_MSS to keep delayed ACK working. 2009-10-30 10:02:06 +00:00
goldsimon
28ac4347d4 Fixed wrong filename 2009-10-29 17:10:19 +00:00
kieranm
dee1d82c11 re-work the fast retransmission code to follow algorithm from TCP/IP
Illustrated
2009-10-29 15:48:57 +00:00
kieranm
6d73f82f41 Update version for 1.3.2 rc 1 2009-10-28 15:17:16 +00:00
kieranm
71ddff4964 Fix BUG#27445: grow cwnd with every duplicate ACK 2009-10-28 15:13:51 +00:00
goldsimon
af3b796488 Corrected parameter spelling in doc 2009-10-27 20:30:44 +00:00
goldsimon
e2de2c6bb2 Added netifapi_netif_set_addr() 2009-10-27 20:29:16 +00:00
goldsimon
2ff0ce2d0a Minor: Improved memory layout/alignment of struct dhcp for 32-bit platforms 2009-10-26 09:59:54 +00:00
goldsimon
b09b8a0ccc Tiny code size improvement using goto instead of duplicating code 2009-10-26 09:55:46 +00:00
goldsimon
db259c3557 Improved heap usage of lwip_getaddrinfo by only allocating one block of memory per call. 2009-10-26 09:30:50 +00:00
goldsimon
bcc87ef851 bug-fix in the TCP_EVENT_RECV macro (has to call tcp_recved if pcb->recv is NULL to keep rcv_wnd correct) 2009-10-25 18:47:44 +00:00
goldsimon
650f16b6d9 Minor: fixed typo 2009-10-25 16:47:41 +00:00
goldsimon
ae2dd38e0d Another fix for bug #26251: RST process in TIME_WAIT TCP state 2009-10-25 11:45:11 +00:00
kieranm
0319c1cf90 Update link to wiki in README file 2009-10-23 15:23:23 +00:00
goldsimon
81f9442ac7 Fixed bug #27783: Silly window avoidance for small window sizes 2009-10-23 13:17:18 +00:00
goldsimon
18ab274af3 Fixed bug #26251: RST process in TIME_WAIT TCP state 2009-10-22 13:37:44 +00:00
goldsimon
65d1f52423 Changed fix for bug #27215 (TCP sent() callback gives leagin and trailing 1 byte len (SYN/FIN)) by decreasing pcb->acked appropriately 2009-10-21 15:42:14 +00:00
goldsimon
f1b82e0e9a bug #27315: zero window probe and FIN: only send pure FIN if the enqueued FIN segment doesn't contain any other data 2009-10-21 15:15:34 +00:00
goldsimon
67411c4299 Minor code simplification (don't store received pbuf, change conditional code to assert where applicable), check pbuf length before testing for valid reply 2009-10-19 20:06:01 +00:00
goldsimon
a37e62b7d0 Removed most calls to udp_connect since they aren't necessary when using udp_sendto_if() - always stay connected to IP_ADDR_ANY. 2009-10-19 16:43:50 +00:00
goldsimon
e2c1f7d5b5 dhcp_unfold_reply: NULL memory might have been freed after mem_malloc returned NULL 2009-10-18 09:26:27 +00:00
goldsimon
ec97fbd101 dhcp_inform(): netif->dhcp pointed to unallocated memory when udp_new() failed 2009-10-18 09:13:47 +00:00
goldsimon
b7d7559cc9 Fixed bug #27215: TCP sent() callback gives leadin and trailing 1 byte len (SYN/FIN) 2009-10-18 08:30:44 +00:00
goldsimon
b4404ff0c8 Corrected typo 2009-10-18 08:23:05 +00:00
goldsimon
502e89f4ad Fixed bug #27315: zero window probe and FIN 2009-10-16 21:07:48 +00:00
goldsimon
d8d8cf7e98 Fixed bug #27390: Source IP check in ip_input() causes it to drop valid DHCP packets -> allow 0.0.0.0 as source address when LWIP_DHCP is enabled 2009-10-16 12:39:24 +00:00
goldsimon
d9a5094068 Fixed bug #27329: dupacks by unidirectional data transmit 2009-10-15 20:09:13 +00:00
goldsimon
a9740c6a44 Fixed bug #27709: conn->err race condition on netconn_recv() timeout by directly returning when sys_arch_mbox_fetch times out. 2009-10-15 14:33:18 +00:00
goldsimon
2dc027401f Fixed bug #27704: autoip starts with wrong address: LWIP_AUTOIP_CREATE_SEED_ADDR() returned address in host byte order instead of network byte order 2009-10-15 14:05:35 +00:00
goldsimon
ac638c85f3 Fixed bug #27504: tcp_enqueue wrongly concatenates segments which are not consecutive when retransmitting unacked segments 2009-10-11 13:06:44 +00:00
goldsimon
c0e22c255c Fixed default values of some stats to only be enabled if used Fixes bug #27338: sys_stats is defined when NO_SYS = 1 2009-10-09 20:18:15 +00:00
goldsimon
1309e5e86f Accidentally endabled to compile the code -> back to #if 0 2009-10-09 20:16:26 +00:00
goldsimon
c34c024dd5 Updated comment in low_level_input() about pbuf len vs. tot_len if using preallocated pbufs (as requested in bug #27576: pbuf_realloc will assert or crash on a non-chained pbuf list) 2009-10-09 19:56:54 +00:00
goldsimon
6ef69ece95 patch #6930: [PATCH trivial] TCP_RMV remove unnecessary check - removed two checks for NULL which are not necessary. 2009-10-07 18:04:24 +00:00
goldsimon
a9cbdc141b patch #6888: Patch for UDP Netbufs to support dest-addr and dest-port 2009-10-07 17:58:30 +00:00
goldsimon
9e5cf1cf8e Reverted change for bug #27252 (Address pointer invalid after freeing pbuf in UDP receive callback) as it made more problems than before :-( 2009-10-07 17:50:46 +00:00
goldsimon
ddc783bee7 Make ip_current_netif() and ip_current_header() a define referring to extern variables to be save the function call. 2009-10-07 17:47:05 +00:00
goldsimon
68f92050e9 Make tcp_debug_state_str() always available, not only in DEBUG mode 2009-10-07 17:44:59 +00:00
goldsimon
bd2bc2ee14 Fixed bug bug #27345: "ip_frag() does not use the LWIP_NETIF_LOOPBACK function" by checking for loopback before calling ip_frag 2009-08-30 20:52:43 +00:00
goldsimon
8a7c1c4926 do_connect: LWIP_ERROR on invalid/disabled protocol 2009-08-30 20:24:08 +00:00
goldsimon
cff3e0cad2 bug #26397: Added SLIP polling support (uses sio_tryread) 2009-08-26 21:06:18 +00:00
stoklund
b55cfbc342 Add patch #6725 to CHANGELOG 2009-08-26 07:18:50 +00:00
goldsimon
3115087d26 Commented the functions, added sio_tryread() for non-blocking read (to be used in slipif-polling mode) 2009-08-25 17:54:28 +00:00
goldsimon
057c51ff6d Use LWIP_UNUSED_ARG() instead of if(){}, fix unused arg warning if LWIP_ARP==0 2009-08-25 17:50:59 +00:00
goldsimon
f2f20cf133 fixed invalid dependency to etharp_query if DHCP_DOES_ARP_CHECK==0 2009-08-25 17:49:47 +00:00
goldsimon
2c618705f0 task #9033: Support IEEE 802.1q tagged frame (VLAN), New configuration options ETHARP_SUPPORT_VLAN and ETHARP_VLAN_CHECK. 2009-08-25 15:24:49 +00:00
goldsimon
bc10ad2356 patch #6900: added define ip_ntoa(struct ip_addr*) 2009-08-25 14:53:25 +00:00
stoklund
857fac1168 Add C++ guards to autoip.h header. 2009-08-24 13:17:42 +00:00
stoklund
103ba9b0fc The DHCP client should enter the REBOOTING state when connecting to a
new network. If DHCP has bound to an address, it must be verified
after netif_set_link_up.
2009-08-24 13:12:37 +00:00
stoklund
d83fc6893b Don't use an AutoIP-configured address on a new network until the address has been configured.
When connecting to a new network with an AutoIP address, take the
interface down until the old address has passed the
AUTOIP_STATE_PROBING state.
2009-08-24 13:11:35 +00:00
goldsimon
e7d5739ce7 Fixed bug #27078: Possible memory leak in pppInit() 2009-08-23 17:40:29 +00:00
goldsimon
8bf57c0e14 Fixed bug #26657: DNS, if host name is "localhost", result is error. 2009-08-23 13:51:12 +00:00
goldsimon
dea7255fc5 Fixed bug #26649: TCP fails when TCP_MSS > TCP_SND_BUF, Fixed wrong parenthesis, added check in init.c 2009-08-23 13:03:20 +00:00
goldsimon
ce3082976c Fixed bug #27266: wait-state debug message in pppMain occurs every ms 2009-08-23 12:37:36 +00:00
goldsimon
362a295e06 Fixed bug #27252: Address pointer invalid after freeing pbuf in UDP receive callback 2009-08-23 11:32:38 +00:00
goldsimon
0e91e2adf2 bug #27267: Added include to string.h where needed 2009-08-23 11:24:51 +00:00
goldsimon
4d49d952b6 patch #6843: tcp.h macro optimization patch (for little endian) 2009-08-23 11:13:19 +00:00
goldsimon
ae7a7a0abf Added function tcp_debug_state_str() to convert a tcp state to a human-readable string. 2009-08-23 10:57:37 +00:00
kieranm
4f265dce60 Update version number for CVS development 2009-08-18 12:53:35 +00:00
kieranm
bd96db8c9f Update version number of 1.3.1 final release 2009-08-18 12:47:13 +00:00
kieranm
0b75917121 BUG27209: handle trimming of segments when out of window or out of
order properly
2009-08-12 08:34:48 +00:00
kieranm
fa2dbc2b1b BUG27199: use snd_wl2 instead of snd_wl1 2009-08-12 08:32:14 +00:00
goldsimon
3a6165f0b9 Added missing include to <string.h> 2009-08-11 14:38:55 +00:00
goldsimon
62c27f7fce Fixed bug #27155: "'NULL' undeclared in inet_checksum.c" 2009-08-03 19:28:35 +00:00
goldsimon
7feb116bae Fixed bug #27105: "realloc() cannot replace mem_realloc()" by making mem_realloc static doing nothing when MEM_LIBC_MALLOC==1 2009-07-28 17:18:46 +00:00
goldsimon
730a938912 Added debug print when rejecting incoming connections due to exceeded listen backlog 2009-07-28 17:04:04 +00:00
goldsimon
3553efb75e Added newline to TCP header flags debug print 2009-07-28 17:02:48 +00:00
kieranm
6111230fe9 Fix compile warning on Linux 2009-07-27 15:39:40 +00:00
kieranm
6bce84e070 Update for 1.3.1rc2 2009-07-27 15:21:36 +00:00
kieranm
a6e316a92d Add missing #include directives 2009-07-27 15:20:33 +00:00
goldsimon
22bcf5892a Fixed bug #27034: "Invalid ASSERT in pbuf_alloc()" to prevent breaking PPP (for now). 2009-07-27 15:17:13 +00:00
goldsimon
cc4b968f0a Fixed bug #27114: Missing #include in api_msg.c on LWIP 1.3.1RC1; added include <string.h> 2009-07-27 15:13:24 +00:00
stoklund
893ddcf61b Implement exponential backoff in dhcp.c 2009-07-23 08:59:13 +00:00
stoklund
cf81dbcca4 Reuse XIDs for DHCP retransmissions 2009-07-23 08:57:45 +00:00
goldsimon
5830200029 Added missing include to netif.h 2009-07-20 15:48:55 +00:00
kieranm
972592cf8a Update version numbers for release candidate 2009-07-09 11:43:28 +00:00
fbernon
ce5699f41b minor changes: typos and coding style 2009-07-09 10:21:16 +00:00
kieranm
1eee0be951 BUG23240 use signed counters for recv_avail and don't increment
counters until message successfully sent to mbox
2009-07-09 09:35:07 +00:00
kieranm
fb555a0633 Update changelog for recent commits 2009-06-25 12:58:52 +00:00
kieranm
2b87f899ab BUG26722: initialise netconn write variables in netconn_alloc 2009-06-25 10:17:18 +00:00
kieranm
776e1926a3 BUG26879: set ret value in TCP_EVENT_ macros when function is not set 2009-06-25 10:03:53 +00:00
kieranm
c232edb83a BUG26301 and BUG26267: correct simultaneous close behaviour, and make
snd_nxt have the same meaning as in the RFCs.
2009-06-25 09:57:36 +00:00
goldsimon
aefeba3fc0 Added note about printf formatter defines 2009-05-20 18:59:05 +00:00
goldsimon
6d4064799a Corrected structure packing 2009-05-20 18:33:45 +00:00
goldsimon
e0e9a63e63 Corrected function implementation of ip_current_* (void was missing) 2009-05-19 18:11:01 +00:00
goldsimon
bcdffce6ce Corrected function definition of ip_current_* (void was missing) 2009-05-19 05:40:30 +00:00
goldsimon
ff97c8a1a9 Moved function definition below defines and typedefs, added missing include to netif.h 2009-05-18 17:56:01 +00:00
goldsimon
30acd1662d fixed bug #26507: "Gratuitous ARP depends on arp_table / uses etharp_query" by adding etharp_gratuitous() 2009-05-12 20:13:45 +00:00
goldsimon
078e2f60d6 bug #26487: Added ip_output_if_opt that can add IP options to the IP header (used by igmp_ip_output_if) 2009-05-12 18:00:47 +00:00
goldsimon
c7ce2792c8 Fixed compilation if LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN) 2009-05-11 16:11:18 +00:00
goldsimon
22d6558f13 task #7013: Added option LWIP_NETIF_TX_SINGLE_PBUF to try to create transmit packets from only one pbuf to help MACs that don't support scatter-gather DMA. 2009-05-10 17:07:25 +00:00
goldsimon
105d72a3c2 Shrinked ICMP code, added option to NOT check icoming ECHO pbuf for size (just use it): LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN 2009-05-09 08:36:36 +00:00
goldsimon
c752e5731c Worked on dns: local host-list can be put into FLASH (by defining storage target/linker section), external function can be defined for lookup, combined dns_local_removehostname/removehostaddr to dns_local_removehost 2009-05-07 15:27:02 +00:00
goldsimon
72e9cf53e7 Added netbuf.h to files that may be called from any thread 2009-05-07 14:20:37 +00:00
goldsimon
e66d315c9b Added more threading info 2009-05-07 14:15:51 +00:00
goldsimon
95f6dc7011 On little endian architectures, use LWIP_PLATFORM_HTONS (if defined) for SWAP_BYTES_IN_WORD to speed up checksumming. 2009-05-06 17:35:50 +00:00
goldsimon
ac9e758f41 Patch #6823: tcp_in.c - small optimization 2009-05-06 17:30:18 +00:00
goldsimon
518b18dad0 Added #if LWIP_SNMP around snmp-internal header files 2009-05-06 15:35:13 +00:00
goldsimon
bdd5586cee Added a word or two on threading, which should be sufficient to close task #6683 2009-05-05 19:33:41 +00:00
goldsimon
14dba4ae2b Added ip_current_netif() & ip_current_header() to receive extended info about the currently received packet. 2009-05-05 17:50:39 +00:00
goldsimon
99d82c4980 Fixed bug #26405: Prematurely released semaphore causes lwip_select() to crash 2009-05-05 17:20:45 +00:00
goldsimon
fb46e0f192 snmp was not initialized in lwip_init() 2009-05-04 19:22:26 +00:00
fbernon
b055128ec4 CHANGELOG: minor, typo 2009-05-04 08:50:24 +00:00
fbernon
e29f94a980 dhcp.c, netbios.c: Changes if IF_SOF_BROADCAST is enabled. 2009-05-04 08:40:44 +00:00
goldsimon
24342eaab0 Fixed bug #26349: Nagle algorithm doesn't send although segment is full (and unsent->next == NULL) 2009-05-03 14:17:33 +00:00
goldsimon
152d22d4f9 fixed tcpip_untimeout (does not need the time, broken after 1.3.0 in CVS only) - fixes compilation of ppp_oe.c 2009-05-02 16:12:35 +00:00
goldsimon
41eecb67d2 fixed bug #25636: SNMPSET value is ignored for integer fields 2009-05-02 15:45:53 +00:00
goldsimon
9317105c37 Addition to patch #6721, bug #25575: call autoip_stop in dhcp_stop if in coop-mode 2009-05-02 15:40:39 +00:00
goldsimon
23d7f5425d Fixed bug #21680: PPP upap_rauthnak() drops legal NAK packets 2009-05-01 12:10:34 +00:00
goldsimon
217f279fdb Fixed bug #24228: Memory corruption with PPP and DHCP 2009-05-01 11:42:36 +00:00
fbernon
d4ecb23015 raw.c, udp.c, init.c, opt.h, ip.h, sockets.h: bug #26309: Implement the SO(F)_BROADCAST filter for all API layers. Avoid the unindented reception of broadcast packets even when this option wasn't set. Port maintainers which want to enable this filter have to set IP_SOF_BROADCAST=1 in opt.h. If you want this option also filter broadcast on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1 in opt.h. 2009-04-29 12:42:43 +00:00
fbernon
42c59e1079 netif.c: minor, fix a warning 2009-04-29 12:39:16 +00:00
goldsimon
3b5993e6ee Integrated patch #6721: new option to adjust the time when DHCP gives over to AUTOIP and some improvements in DHCP/AUTOIP cooperation 2009-04-28 19:29:46 +00:00
goldsimon
4b8255a588 Bug #25608: Made SYS_LIGHTWEIGHT_PROT and sys_now() work with NO_SYS=1 2009-04-27 20:09:52 +00:00
goldsimon
36e3d24331 Fixed a bug in tcp_enqueue introduced with v1.79 of this file while fixing bug #25094 (zero-length pbuf) 2009-04-27 19:00:23 +00:00
goldsimon
261dfdf010 fixed bug #24212: "Deadlocked tcp_retransmit due to exceeded pcb->cwnd": Fixed by sorting the unsent and unacked queues (segments are inserted at the right place in tcp_output and tcp_rexmit) 2009-04-26 12:27:11 +00:00
goldsimon
cbfacb7ed9 bug #26213 "Problem with memory allocation when debugging": memp_sizes contained the wrong sizes (including sanity regions); memp pools for MEM_USE_POOLS were too small; Added option MEM_USE_POOLS_TRY_BIGGER_POOL to try the next bigger malloc pool if one is empty (only usable with MEM_USE_POOLS). 2009-04-25 17:42:27 +00:00
fbernon
4eda29abf9 inet.c: patch #6765: Fix a small problem with the last changes (incorrect behavior, with ip address string not ended by a '\0', a space or a end of line) 2009-04-24 12:14:54 +00:00
goldsimon
c3f7107e2b Fixed some issues with DNS_LOCAL_HOSTLIST 2009-04-23 16:54:30 +00:00
fbernon
67a3976a24 init.c: typo 2009-04-23 15:28:52 +00:00
fbernon
4fba1b1430 netdb.c: remplace some %#p by %p to be more portable. 2009-04-23 14:41:52 +00:00
goldsimon
029b786c77 Fixed bug #26069: Corrected documentation: if tcp_connect fails, pcb->err is called, not pcb->connected (with an error code). 2009-04-21 19:15:16 +00:00
goldsimon
51e02176da task #7507, patch #6786: DNS supports static hosts table. New configuration options DNS_LOCAL_HOSTLIST and DNS_LOCAL_HOSTLIST_IS_DYNAMIC. 2009-04-21 18:35:18 +00:00
goldsimon
ed65d9cd75 Fixed bug #26236: "TCP options (timestamp) don't work with no-copy-tcpwrite": deallocate option data, only concat segments with same flags 2009-04-19 12:42:48 +00:00
goldsimon
542b8fffb1 Fixed bug #25094: "Zero-length pbuf" (options are now allocated in the header pbuf, not the data pbuf); added function comments; "inline" is not supported by ANSI C (tcp_build_timetamp_option) 2009-04-19 12:31:16 +00:00
goldsimon
12c50ed87b tcp_listen_input: format code for #if LWIP_TCP_TIMESTAMPS that calls tcp_enqueue like the other calls. 2009-04-19 12:17:59 +00:00
goldsimon
9d5bf57dd9 fixed bug #25695: Segmentation fault in do_writemore() 2009-04-18 17:48:41 +00:00
goldsimon
04df18bcd3 Changed ??? to LINK_SPEED_OF_YOUR_NETIF_IN_BPS 2009-04-17 10:14:09 +00:00
goldsimon
422ba5bcec tried to fix bug #23559: lwip_recvfrom problem with tcp 2009-04-15 21:13:55 +00:00
goldsimon
27b28a9306 Converted netconn_type() from a function to a macro 2009-04-15 21:04:19 +00:00
goldsimon
620b3e6739 task #9192: mem_free of dhcp->options_in and dhcp->msg_in 2009-04-15 19:53:59 +00:00
goldsimon
580f334274 patch #6808: Add a utility function ip_hinted_output() (for smaller code mainly) 2009-04-15 19:32:01 +00:00
goldsimon
4f52183a39 patch #6765: Supporting new line characters in inet_aton() 2009-04-15 19:06:39 +00:00
goldsimon
a55f354687 patch #6763: Global DHCP XID can be redefined to something more unique 2009-04-15 18:48:10 +00:00
goldsimon
9630c9136b patch #6764: DHCP rebind and renew did not send hostnam option; Converted constant OPTION_MAX_MSG_SIZE to netif->mtu, check if netif->mtu is big enough in dhcp_start 2009-04-15 18:35:04 +00:00
goldsimon
dbd6d7ec8d bug #26027: netbuf_chain resulted in pbuf memory leak 2009-04-15 14:57:32 +00:00
goldsimon
b3a5d6df0d bug #25763: Corrected 4 occurrences of SMEMCPY to MEMCPY; corrected indentation 2009-04-15 14:48:56 +00:00
goldsimon
3587e8481d bug #26121: set_errno can be overridden 2009-04-15 14:33:05 +00:00
kieranm
4f8f6ba205 Patch#6774 TCP_QUEUE_OOSEQ breaks compilation when LWIP_TCP==0 2009-04-09 15:16:26 +00:00
kieranm
f81ed216db Patch#6802 Add do-while-clauses to those function like macros in tcp.h 2009-04-09 15:09:22 +00:00
kieranm
f1a9f7ea70 BUG20515: rework way TCP window updates are calculated and sent 2009-03-31 14:23:40 +00:00
kieranm
4b14621208 TASK9218: add support for TCP timestamp options 2009-03-31 14:13:32 +00:00
kieranm
baf30f5eae BUG20779: cope with SYN packets received during established states,
and retransmission of initial SYN.
2009-03-31 10:55:31 +00:00
kieranm
e7a2ab5de9 BUG26010: set push bit correctly when tcp segments are merged 2009-03-31 10:53:11 +00:00
kieranm
fd41c5de2d Correct change to probe window setting 2009-03-27 11:04:04 +00:00
kieranm
efac109803 BUG25622: handle return code of tcp_enqueue in tcp_listen_input() 2009-03-26 14:31:02 +00:00
kieranm
84505d4cc8 BUG25629: set TCP_ACK flags on keepalive and zero window probes 2009-03-26 14:25:46 +00:00
kieranm
7d8fac62ec Fix compiler warning about %#p 2009-03-25 11:02:24 +00:00
goldsimon
b6e18d9c6f cc.h: Added printf formatter for size_t: SZT_F 2009-02-19 19:29:28 +00:00
goldsimon
c05e968278 Fixed many LWIP_DEBUGF format strings; added new format string SZT_F for size_t 2009-02-18 21:13:06 +00:00
goldsimon
103fe60362 mem_free: fix a warning by converting pointer to mem_ptr_t instead of unsigned long 2009-02-18 20:42:16 +00:00
goldsimon
638020ec70 sys_now() must return u32_t, not unsigned long 2009-02-18 20:37:42 +00:00
goldsimon
56038b6457 Fixed many warnings: use %p to pass pointers to printf 2009-02-18 20:37:09 +00:00
goldsimon
96b788bea7 patch #6528: the buffer used for IP_FRAG_USES_STATIC_BUF could be too small depending on MEM_ALIGNMENT 2009-02-18 16:54:02 +00:00
goldsimon
7b6c11360f Added check: PBUF_POOL_BUFSIZE must be greater than MEM_ALIGNMENT or else the offset of a pbuf may take the full first pbuf in a chain (resulting in the first pbuf having len==0) 2009-02-18 16:50:40 +00:00
goldsimon
ea1eb45e3f etharp_raw: allocating PBUF_RAW for outgoing ARP packets instead of PBUF_LINK is enough. 2009-02-18 16:48:30 +00:00
goldsimon
e001a021d5 patch #6539: (configurable) response to broadcast- and multicast pings 2009-02-16 20:24:29 +00:00
goldsimon
14cb4eb735 fixed arguments of socket functions to match the standard; converted size argument of netconn_write to 'size_t' for that; fixed some warnings 2009-02-16 19:33:51 +00:00
goldsimon
d976c8e85f fixed bug #24440: TCP connection close problem on 64-bit host by moving accept callback function pointer to TCP_PCB_COMMON 2009-02-16 16:50:58 +00:00
goldsimon
d2d33cb984 Fixed compilation error in LWIP_VERSION 2009-02-16 16:43:06 +00:00
goldsimon
eeae59ecb7 LWIP_VERSION: corrected shifting for 16-bit platforms, added LWIP_RC_DEVELOPMENT 2009-02-15 20:44:40 +00:00
goldsimon
466f4e699c Added LWIP_VERSION to get the current version of the stack (implements task #9032: Provide means to get Version of Stack and submodules) 2009-02-12 21:00:11 +00:00
goldsimon
bf09400c4c fixed bug #25345 (DHCPDECLINE is sent with "Maximum message size" option) 2009-02-12 16:16:25 +00:00
goldsimon
c4509e700d added MEMP_MEM_MALLOC to use mem_malloc/mem_free instead of the pool allocator (can save code size with MEM_LIBC_MALLOC if libc-malloc is otherwise used) 2009-02-11 20:43:41 +00:00
goldsimon
6472e3b35e fixed bug #24480 (releasing old udp_pdb and pbuf in dhcp_start) 2009-02-11 20:27:00 +00:00
goldsimon
f9bd5019fa including inet.h because htonl is used 2009-02-11 20:21:20 +00:00
goldsimon
8c7705bbf9 added configurable default valud for netconn->recv_bufsize: RECV_BUFSIZE_DEFAULT (fixes bug #23726: pbuf pool exhaustion on slow recv()) 2009-02-11 19:07:22 +00:00
goldsimon
243e3d0d91 Fixed bug #25544: DHCP_COARSE_TIMER_MSECS could overflow on 16-bit targets 2009-02-11 17:48:34 +00:00
goldsimon
19884f40b8 Moved INADDR_* defines to inet.h; removing dependency from inet.h to ip_addr.h 2009-02-10 20:44:51 +00:00
goldsimon
10c3ce08af fixed bug #25467: Listen backlog is not reset on timeout in SYN_RCVD: Accepts_pending is decrease on a corresponding listen pcb when a connection in state SYN_RCVD is close. 2009-02-10 20:29:38 +00:00
jifl
878532a30d * ipv4/inet_chksum.c, ipv4/lwip/inet_chksum.h: inet_chksum_pseudo_partial()
is only used by UDPLITE at present, so conditionalise it.
2009-01-28 23:58:15 +00:00
jifl
102d69004a * pbuf.c: reclaim pbufs from TCP out-of-sequence segments if we run
out of pool pbufs.
2009-01-28 05:43:35 +00:00
goldsimon
b0c61ffbb1 Reverted last changes since it's wrong when sizeof(int)==2... 2008-12-20 12:24:41 +00:00
goldsimon
9f96f09652 Another fix for bug #6683 (and a typo in changelog) 2008-12-19 18:16:50 +00:00
goldsimon
aa568727d1 patch #6699: fixed some warnings on platform where sizeof(int) == 2 2008-12-19 18:08:29 +00:00
fbernon
411cb39eb4 sockets.c: fixed bug #25051: lwip_recvfrom problem with udp: fromaddr and port uses deleted netbuf. 2008-12-10 21:36:44 +00:00
goldsimon
6777ae2ada Another modification for patch #6683 (Customizable AUTOIP seed address) 2008-12-10 17:08:42 +00:00
goldsimon
2cf3e6e9bc Corrected the range calculation of LWIP_AUTOIP_CREATE_SEED_ADDR, corrected comments 2008-12-04 18:34:48 +00:00
goldsimon
491b73d5f2 Checked in (slightly modified) patch #6683: Customizable AUTOIP "seed" address. This should reduce AUTOIP conflicts if LWIP_AUTOIP_CREATE_SEED_ADDR is overridden. 2008-12-03 15:13:21 +00:00
jifl
1f3fe200df Correct commented description of do_recv().
Reported by Charles Landau on lwip-users.
2008-11-12 19:14:21 +00:00
goldsimon
299e2a7077 fixed bug ##24596: Vulnerability on faulty TCP options length in tcp_parseopt 2008-10-18 15:24:06 +00:00
goldsimon
13a139eef7 fixed bug #24517: IP reassembly crashes on unaligned IP headers by packing the struct ip_reass_helper. 2008-10-15 18:20:23 +00:00
jifl
06df1647e1 * etharp.c (etharp_arp_input): Fix type aliasing problem copying ip address. 2008-10-03 14:47:33 +00:00
jifl
1d2804d6a2 * sockets.c (lwip_accept): Return EWOULDBLOCK if would block on non-blocking
socket.
2008-10-02 13:59:18 +00:00
jifl
ba98bcdc60 * dns.c: Hard-code structure sizes, to avoid issues on some compilers where
padding is included.
2008-10-02 13:53:16 +00:00
jifl
0d7dccba5e * sockets.c (lwip_accept): check addr isn't NULL. If it's valid, do an
assertion check that addrlen isn't NULL.
2008-09-30 14:51:27 +00:00
jifl
c231e95cce * tcp.c: Fix bug #24227, wrong error message in tcp_bind. 2008-09-30 13:50:39 +00:00
jifl
6f6c8c5434 * pbuf.c (pbuf_copy_partial): Improve function description comment. Thanks to Luca Ceresoli 2008-09-30 13:40:41 +00:00
goldsimon
edf72a7dfb fixed one small warning (compared u16_t to <= 0) 2008-08-26 19:57:20 +00:00
goldsimon
ba636e19a2 fixed bug #24132: Cross-dependency between ip_addr.h and inet.h -> moved declaration of struct in_addr from ip_addr.h to inet.h 2008-08-26 19:47:05 +00:00
goldsimon
6374766a55 Added 2 asserts in pbuf_realloc to prevent dereferencing a null pointer in invalid pbuf queues 2008-08-26 19:34:18 +00:00
goldsimon
c779a9f29f Fixed some warnings, changed some debug defines to include better names 2008-07-16 20:36:12 +00:00
goldsimon
ae2d5266c5 removed invalid call to tcp_connect() in do_close_internal() 2008-07-15 11:18:58 +00:00
goldsimon
99db244124 fixed bug #23847: do_close_internal references freed memory 2008-07-14 20:12:36 +00:00
fbernon
8367feafa9 stats.h: Fix some build bugs introduced with patch #6483 (missing some parameters in macros, mainly if MEM_STATS=0 and MEMP_STATS=0). 2008-07-08 09:15:56 +00:00
jifl
f6a28808e3 Fix typo of including type in stats_display_memp empty macro 2008-07-07 12:45:47 +00:00
goldsimon
13d8ae859d fixed bug #21433: Calling mem_free/pbuf_free from interrupt context isn't safe: LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT allows mem_free to run between mem_malloc iterations. Added illegal counter for mem stats. 2008-06-30 18:16:51 +00:00
goldsimon
95b15fe463 Fix typo, add comment 2008-06-27 20:34:51 +00:00
goldsimon
779938ea68 patch #6483: stats module improvement: Added defines to display each module's statistic individually, added stats defines for MEM, MEMP and SYS modules, removed (unused) rexmit counter. 2008-06-27 18:37:53 +00:00
jifl
139944a3ac * tcp_in.c: Fix for bug #23693 as suggested by Art R. Ensure cseg is unused
if tcp_seg_copy fails.
2008-06-24 15:46:38 +00:00
goldsimon
b94e3a874d Added debug trace for incoming eth packets in ethernet_input like suggested in patch #6519 2008-06-19 16:40:59 +00:00
goldsimon
3d8e5003af Fixed includes in netif.c, removed loop_cnt_max member in struct netif (instead the define LWIP_LOOPBACK_MAX_PBUFS is used directly) 2008-06-19 16:27:18 +00:00
goldsimon
94cd14e90d patch #6459: Made err_t overridable to use a more efficient type (define LWIP_ERR_T in cc.h) 2008-06-17 20:27:31 +00:00
goldsimon
c93cfb2c74 Changed two MEMCPY calls to SMEMCPY 2008-06-17 20:16:23 +00:00
goldsimon
521d439a07 Added a configuration option for slipif for symmetry to loopif (patch #6480) 2008-06-17 20:14:05 +00:00
goldsimon
460b18e82c Fixed loopif_poll define (now maps directly to netif_poll) 2008-06-17 20:12:22 +00:00
goldsimon
ef3666ef26 Checked in some ideas of patch #6460 (loop optimizations) and created defines for swapping bytes and folding u32 to u16. 2008-06-17 20:06:25 +00:00
goldsimon
e0aaa87b1f Increasing etharp error stats on unsupported ethtype in ethernet_input() 2008-06-17 19:46:30 +00:00
goldsimon
eba83ab740 Changed loopback code (less difference between NO_SYS = 0 / 1), added setting LWIP_LOOPBACK_MAX_PBUFS to limit loopback-queued pbufs 2008-06-17 19:39:22 +00:00
goldsimon
a8141c53a8 Got the date & place of the newest feature wrong ;-) 2008-06-12 20:21:40 +00:00
goldsimon
88ff8c83e9 Checked in slightly modified version of patch # 6370: Moved loopif code to netif.c so that loopback traffic is supported on all netifs (all local IPs). 2008-06-12 20:10:08 +00:00
kieranm
24e0b25215 Remove redundant "if" statement, and use real rcv_wnd
rather than rcv_ann_wnd when deciding if packets are in-window.
Contributed by <arasmussen@consultant.datasys.swri.edu>
2008-05-30 12:21:29 +00:00
kieranm
7bc881ccc5 Fix BUG#23254. Change macro definition of mem_* to allow
passing as function pointers when MEM_LIBC_MALLOC is defined.
2008-05-30 11:37:15 +00:00
jifl
a3bc6cd666 * err.h, err.c, sockets.c: Fix bug #23119: Reorder timeout error code to
stop it being treated as a fatal error.
2008-05-09 12:14:23 +00:00
jifl
40d4a8fc2f Trivial change: correct sense of comment about LWIP_ERROR macro 2008-04-29 16:51:35 +00:00
fbernon
7be9e292dc sockets.h: minor changes, add comments for ToS options 2008-04-26 10:46:23 +00:00
goldsimon
9ccd31a12e fixed bug #22804: dhcp_stop doesn't clear NETIF_FLAG_DHCP (flag now cleared) 2008-04-15 17:24:54 +00:00
goldsimon
a9aefcc1be Fixed comments for pbuf_copy() and find_entry() as proposed by Luca Ceresoli on lwip-users 2008-04-01 19:05:40 +00:00
goldsimon
05587f5da9 Changed the pbuf_free/mem_free callback functions a little: created extra functions for that 2008-03-28 07:56:47 +00:00
goldsimon
43dd38df0a fixed bug #21433 (Calling mem_free/pbuf_free from interrupt context isn't safe): set LWIP_USE_HEAP_FROM_INTERRUPT to 1 in lwipopts.h or use tcpip_callback_nonblocking(pbuf_free_int, p)/ tcpip_callback_nonblocking(mem_free, m) to free pbufs or heap memory from interrupt context 2008-03-27 19:29:35 +00:00
goldsimon
64fa8d78bc Added global #ifndef __SIO_H__ and some comments 2008-03-27 18:06:02 +00:00
goldsimon
aee9c4c8e6 fixed bug #22249: division by zero could occur if a remote host sent a zero mss as TCP option. 2008-03-26 11:57:12 +00:00
kieranm
bcb4afa886 Update CHANGELOG for 1.3.0 2008-03-23 13:49:39 +00:00
fbernon
7774b57a1c api_msg.c: fix wrong mailbox invalidate (NULL was used instead of SYS_MBOX_NULL). Spoted by Silas Boyd-Wickizer. 2008-03-21 16:23:14 +00:00
goldsimon
90cb4b4e09 Corrected comment in do_writemore() 2008-03-19 20:59:59 +00:00
fbernon
7fa9010f35 igmp.h, igmp.c: Fix bug #22613 "IGMP iphdr problem" (could have some problems to fill the IP header on some targets, use now the ip.h macros to do it). 2008-03-17 13:40:00 +00:00
fbernon
03f888c968 ppp: minor changes: fix some 'is unused' warning when debug is off. 2008-03-16 08:53:58 +00:00
fbernon
e07d71f5e8 sockets.c: Fix bug #22435 "lwip_recvfrom with TCP break;". Using (lwip_)recvfrom with valid "from" and "fromlen" parameters, on a TCP connection caused a crash. Note that using (lwip_)recvfrom like this is a bit slow and that using (lwip)getpeername is the good lwip way to do it (so, using recv is faster on tcp sockets). 2008-03-13 20:03:57 +00:00
fbernon
afcf49ad3a api_msg.c: minor change, fix warning. 2008-03-13 19:57:11 +00:00
fbernon
a2f1892480 api_msg.c: fix the netbuf::addr field to point on the ip_src on the pbuf's copy (about bug#22530). 2008-03-12 12:58:07 +00:00
fbernon
552106e2a4 api_msg.c: Fix bug #22530 "api_msg.c's recv_raw() does not consume data". 2008-03-12 10:55:54 +00:00
jifl
a48370d5e9 * inet_chksum.c: Allow choice of one of the sample algorithms to be
made from lwipopts.h. Fix comment on how to override LWIP_CHKSUM.
2008-03-10 16:12:31 +00:00
jifl
f067d34392 * pbuf.c, ppp.c: Fix warnings on some systems with mem_malloc. 2008-03-04 16:37:46 +00:00
jifl
30d4c243ec * mem.c, stats.c, mem.h: apply patch #6414 to avoid compiler errors
and/or warnings on some systems where mem_size_t and size_t differ.
2008-03-04 16:31:31 +00:00
fbernon
2637f2ad3a inet_chksum.c: minor change for coding style 2008-03-04 14:26:44 +00:00
fbernon
9b92f4c882 dhcp.c: minor change for coding style 2008-03-04 14:25:58 +00:00
kieranm
42344ce20c 2008-03-04 Kieran Mansley (contributions by others)
* Numerous small compiler error/warning fixes from contributions to
    mailing list after 1.3.0 release candidate made.
2008-03-04 13:41:23 +00:00
fbernon
faca23b984 Minor change: add a trace in etharp.c, find_entry 2008-02-21 14:26:14 +00:00
fbernon
0cbd7501a1 Minor changes: fix trace text in etharp.c 2008-02-21 09:16:21 +00:00
jifl
03aa8270a6 document that eth drivers input function should be ethernet_input 2008-02-18 12:27:51 +00:00
marcbou
ef70313e05 Fixed comment for LWIP_POSIX_SOCKETS_IO_NAMES 2008-01-31 18:19:29 +00:00
jifl
2ec3c46838 Fix incorrect units in comment for TCP_MSL. Allow override. 2008-01-28 15:30:06 +00:00
goldsimon
52e8ec03ba Clarify that timeout == 0 means wait forever 2008-01-27 11:28:44 +00:00
goldsimon
c54777d957 Coding style: use named constants instead of numbers only 2008-01-27 11:22:14 +00:00
fbernon
7b11fb75d9 Minor changes: replace directy call to memcpy by MEMCPY macro. 2008-01-26 16:11:39 +00:00
fbernon
e937521014 dns.c: Fix bug #22108 "DNS problem" caused by unaligned structures. 2008-01-25 13:12:12 +00:00
fbernon
f02c39a402 tcp.c, tcp_in.c, tcp.h, opt.h: Rename LWIP_CALCULATE_EFF_SEND_MSS in TCP_CALCULATE_EFF_SEND_MSS to have coherent TCP options names. 2008-01-22 21:15:14 +00:00
fbernon
c580c2be75 Minor changes: fix a warning: "src\core\ipv4\ip_frag.c (782) : warning: potential uninitialized reference to "newpbuflen" in func "_ip_frag"" 2008-01-22 18:56:40 +00:00
fbernon
8d0f689cb5 Minor changes: typo in doc files. 2008-01-21 17:00:07 +00:00
fbernon
bfd96264e6 Minor changes: fix warning in dhcp_unfold_reply when LWIP_DEBUG=0 2008-01-21 16:55:26 +00:00
fbernon
baab7c04f7 Minor changes: fix some traces in ip_frag.c (coding style and end of lines) 2008-01-21 16:53:10 +00:00
jifl
3572ec784d Fix simple compilation error with some compilers to preserve const-ness of ethaddr - from Luca Ceresoli 2008-01-18 19:45:15 +00:00
kieranm
6f00cbb6ef 2008-01-15 Kieran Mansley
* tcp_out.c: BUG20511.  Modify persist timer to start when we are
    prevented from sending by a small send window, not just a zero
    send window.
2008-01-15 13:00:51 +00:00
fbernon
7518acf634 rawapi.txt, api_msg.c, tcp.c, tcp_in.c, tcp.h: changes for task #7675 "Enable to refuse data on a TCP_EVENT_RECV call". Important, behavior changes for the tcp_recv callback (see rawapi.txt). 2008-01-14 21:07:08 +00:00
fbernon
52e6922e5a ip.c: Integrate patch #6369" ip_input : checking before realloc". 2008-01-14 20:53:23 +00:00
fbernon
82ddf82866 Minor change: add comment 2008-01-12 16:46:40 +00:00
fbernon
55bcc20deb tcpip.h, tcpip.c, api.h, api_lib.c, api_msg.c, sockets.c: replace the field netconn::sem per netconn::op_completed like suggested for the task #7490 "Add return value to sys_mbox_post". 2008-01-12 11:52:21 +00:00
fbernon
9906e4c984 api_msg.c, opt.h: replace DEFAULT_RECVMBOX_SIZE per DEFAULT_TCP_RECVMBOX_SIZE, DEFAULT_UDP_RECVMBOX_SIZE and DEFAULT_RAW_RECVMBOX_SIZE (to optimize queues sizes), like suggested for the task #7490 "Add return value to sys_mbox_post". 2008-01-11 23:50:10 +00:00
jifl
886cfbe12d Minor spelling typos and formatting fixes. 2008-01-11 14:28:58 +00:00
fbernon
4e40fee1db tcpip.h, tcpip.c: add tcpip_callback_with_block function for the task #7490 "Add return value to sys_mbox_post". tcpip_callback is always defined as "blocking" ("block" parameter = 1). 2008-01-10 21:47:52 +00:00
fbernon
bceff76c70 tcpip.h, tcpip.c, api.h, api_lib.c, api_msg.c, sockets.c: replace the field netconn::mbox (sys_mbox_t) per netconn::sem (sys_sem_t) for the task #7490 "Add return value to sys_mbox_post". 2008-01-10 21:34:25 +00:00
jifl
b333b7c9dc * opt.h, ip.c: Rename IP_OPTIONS define to IP_OPTIONS_ALLOWED to avoid
conflict with Linux system headers.
2008-01-09 10:05:23 +00:00
fbernon
de4b9b584c Fix DHCP build problem. 2008-01-06 22:07:03 +00:00
jifl
bf924118de * dhcp.c: fix bug #19927: "DHCP NACK problem" by clearing any existing set IP
address entirely on receiving a DHCPNAK, and restarting discovery.
2008-01-06 21:09:11 +00:00
goldsimon
a41f113b8f Added function netconn_free(), which deallocates all mboxes and frees the netconn (to be used from different places) - the PCB is not freed! 2008-01-06 14:28:04 +00:00
fbernon
5941b3c86e sys_arch.txt, api.h, api_lib.c, api_msg.h, api_msg.c, tcpip.c, sys.h, opt.h: Introduce changes for task #7490 "Add return value to sys_mbox_post" with some modifications in the sys_mbox api: sys_mbox_new take a "size" parameters which indicate the number of pointers query by the mailbox. There is three defines in opt.h to indicate sizes for tcpip::mbox, netconn::recvmbox, and for the netconn::acceptmbox. Port maintainers, you can decide to just add this new parameter in your implementation, but to ignore it to keep the previous behavior. The new sys_mbox_trypost function return a value to know if the mailbox is full or if the message is posted. Take a look to sys_arch.txt for more details. This new function is used in tcpip_input (so, can be called in an interrupt context since the function is not blocking), and in recv_udp and recv_raw. 2008-01-05 21:10:32 +00:00
fbernon
caa1834b70 Minor changes in lwip folder: fix some warnings. 2008-01-05 00:13:33 +00:00
fbernon
c61262d839 Minor changes in lwip folder: fix some warnings. 2008-01-04 23:24:05 +00:00
fbernon
9c4daa312d Minor changes in lwip folder: fix some warnings, coding style, and rename "internal" netconn_alloc function. 2008-01-04 23:07:44 +00:00
fbernon
32005617b9 rawapi.txt, api.h, api_lib.c, api_msg.h, api_msg.c, sockets.c, tcp.h, tcp.c, tcp_in.c, init.c, opt.h: rename backlog options with TCP_ prefix, limit the "backlog" parameter in an u8_t, 0 is interpreted as "smallest queue", add documentation in the rawapi.txt file. 2008-01-04 22:18:27 +00:00
fbernon
1dfa246674 Minor changes: fix some PPP traces. 2008-01-03 20:22:14 +00:00
jifl
7e616ea71c * core/ipv4/ip.c (ip_input): Rename ipsrcchecking -> check_ip_src, to make
purpose clearer.
2008-01-03 17:49:25 +00:00
kieranm
99afb15ced Add persist timer 2007-12-31 13:34:47 +00:00
fbernon
22e2540eb6 autoip.c, etharp.c: ip_addr.h: Integrate patch #6348: "Broadcast ARP packets in autoip". The change in etharp_raw could be removed, since all calls to etharp_raw use ethbroadcast for the "ethdst_addr" parameter. But it could be wrong in the future. 2007-12-31 13:22:03 +00:00
fbernon
8d39b1a152 ip.c: Fix bug #21846 "LwIP doesn't appear to perform any IP Source Address Filtering" reported by Tom Evans. 2007-12-30 01:09:11 +00:00
goldsimon
1ed34774c8 tcp.h, opt.h, api.h, api_msg.h, tcp.c, tcp_in.c, api_lib.c, api_msg.c, sockets.c, init.c: task #7252: Implement TCP listen backlog: Warning: raw API applications have to call 'tcp_accepted(pcb)' in their accept callback to keep accepting new connections. 2007-12-21 16:47:56 +00:00
goldsimon
48e62e25e9 sys.h, api_lib.c, api_msg.c, sockets.c: fix bug #21698: "netconn->recv_avail is not protected" by using new macros for interlocked access to modify/test netconn->recv_avail. 2007-12-21 14:59:10 +00:00
kieranm
1cb470662b Whitespace fix. 2007-12-20 15:05:09 +00:00
kieranm
add4874801 2007-12-20 Kieran Mansley (based on patch from Oleg Tyshev)
* tcp_in.c: fix bug# 21535 (nrtx not reset correctly in SYN_SENT stat)e
2007-12-20 14:58:43 +00:00
kieranm
8cc32bc29c 2007-12-20 Kieran Mansley (based on patch from Per-Henrik Lundbolm)
* tcp.c, tcp_in.c, tcp_out.c, tcp.h: fix bug #20199 (better handling
    of silly window avoidance and prevent lwIP from shrinking the window)
2007-12-20 14:51:35 +00:00
fbernon
fc2d28b851 Minor changes in PPP (coding style, tabs, idents...) 2007-12-19 20:47:22 +00:00
goldsimon
a3ef33c56f Removed debug code 2007-12-16 16:24:10 +00:00
goldsimon
ba4254231e Corrected assert when netconn_new_* fails 2007-12-16 16:15:08 +00:00
fbernon
2b54da5070 api_msg.c, err.h, err.c, sockets.c, dns.c, dns.h: replace "enum dns_result" by err_t type. Add a new err_t code "ERR_INPROGRESS". 2007-12-13 23:06:49 +00:00
goldsimon
d2fa5c91a7 Fix bug #21699: segment leak in ooseq processing when last data packet was lost (free last segment if FIN is already received) 2007-12-13 20:24:39 +00:00
fbernon
4653974c2a Minor change: move DNS_MSG_SIZE in opt.h, add comments. 2007-12-12 19:22:20 +00:00
fbernon
de11e7fd75 dns.h, dns.c, opt.h: move DNS options to the "right" place. Most visibles are the ones which have ram usage. 2007-12-12 17:56:03 +00:00
fbernon
1dd1064051 Fix err_stderr[] table with new err.h defines. 2007-12-12 08:25:23 +00:00
fbernon
ac10470643 netdb.c: add a LWIP_DNS_API_HOSTENT_STORAGE option to decide to use a static set of variables (=0) or a local one (=1). In this last case, your port should provide a function "struct hostent* sys_thread_hostent( struct hostent* h)" which have to do a copy of "h" and return a pointer ont the "per-thread" copy. 2007-12-05 23:00:02 +00:00
goldsimon
8d3d08e814 fix bug #21699 (segment leak in ooseq): add assert that all segment lists are empty in tcp_pcb_remove before setting pcb to CLOSED state; don't directly set CLOSED state from LAST_ACK in tcp_process 2007-12-04 20:41:12 +00:00
fbernon
3f96a15fd4 Minor changes (tabs) 2007-12-03 21:44:51 +00:00
goldsimon
22f51f953b Added short comment in file description about how to handle MEM_USE_POOLS / MEM_LIBC_MALLOC 2007-12-03 18:01:28 +00:00
goldsimon
f3f7bd00e5 ip_input: check if a packet is for inp first before checking all other netifs on netif_list (speeds up packet receiving in most cases) 2007-12-03 17:55:01 +00:00
fbernon
a72e4a406f Minor changes: coding style (tabs, ident, etc...). 2007-12-02 23:58:11 +00:00
fbernon
2fe1254aae Minor changes: coding style (tabs, ident, etc...). 2007-12-02 23:38:45 +00:00
fbernon
e4590b26fb Include a temporary sample of queue.h to fix build. 2007-12-02 23:33:58 +00:00
fbernon
325d6e7cfa Minor changes: coding style (tabs, ident, etc...). 2007-12-02 23:24:59 +00:00
fbernon
6bce832060 Minor changes: coding style (tabs, ident, etc...). 2007-12-02 22:56:19 +00:00
fbernon
37a5a87057 Minor changes: coding style (tabs, ident, etc...). 2007-12-02 22:35:55 +00:00
fbernon
865f6eb5f3 Changes for coding style (typo, use LINK_STATS_INC, tabs, ident, etc...). Be careful, even if this change is minor, there is lot of lines modified, so, an error is always possible (I hope there is no problems). 2007-12-02 20:38:02 +00:00
fbernon
dde6ddfd7c process "localhost" name in dns_gethostbyname 2007-12-02 17:15:28 +00:00
goldsimon
47d8d69b81 fix bug #21654: exclude definition of struct timeval from #ifndef FD_SET. If including <sys/time.h> for system-struct timeval, LWIP_TIMEVAL_PRIVATE now has to be set to 0 in lwipopts.h 2007-12-02 15:24:02 +00:00
goldsimon
df1b7ea311 Minor fix: #include "lwip/api.h" was missing to compile cleanly 2007-12-02 15:18:08 +00:00
goldsimon
113a52d091 fix bug #21656 (recvmbox problem in netconn API): always allocate a recvmbox in netconn_new_with_proto_and_callback. For a tcp-listen netconn, this recvmbox is later freed and a new mbox is allocated for acceptmbox. This is a fix for thread-safety and allocates all items needed for a netconn when the netconn is created. 2007-12-02 14:53:50 +00:00
goldsimon
081e4d9209 Minor change: use goto instead of redundant code to return on error in dhcp_rev(). 2007-12-02 14:40:32 +00:00
fbernon
e5a98b6a5b Minor changes: fix some problems with PPPoE include path, add small comments in slip.c (unusual octal values?) 2007-11-30 17:22:20 +00:00
fbernon
2942157ca4 Minor changes: dnsserver initialization with DNS_SERVER_ADDRESS in dns_init 2007-11-30 16:40:46 +00:00
goldsimon
6746beb2a3 Compacted code: moved the code creating a netconn (without pcb) from netconn_new_with_proto_and_callback to new (synchroneous) function netconn_alloc_with_proto_and_callback and call this function from netconn_new_with_proto_and_callback and accept_function. 2007-11-30 12:54:10 +00:00
goldsimon
92aa004b75 connect the UDP pcb to the DNS server (IPaddress and port) to receive faster (unconnected pcbs are very inefficient in udp_input) 2007-11-30 12:46:30 +00:00
goldsimon
b28cd02149 task #7497: Sort lists (pcb, netif, ...) for faster access UDP: move a (connected) pcb selected for input to the front of the list of pcbs so that it is found faster next time. Same for RAW pcbs that have eaten a packet. 2007-11-30 09:44:18 +00:00
goldsimon
cedd5c21e6 first attempt to fix bug #21655 (DHCP doesn't work reliably with multiple netifs): if LWIP_DHCP is enabled, UDP packets to DHCP_CLIENT_PORT are passed to netif->dhcp->pcb only (if that exists) and not to any other pcb for the same port (only solution to let UDP pcbs 'bind' to a netif instead of an IP address) 2007-11-30 08:55:15 +00:00
fbernon
b714cd5f4b First fix for bug #21664 "PPP code is broken". 2007-11-29 22:19:56 +00:00
goldsimon
788892ee7c Minor coding style changes 2007-11-28 21:44:17 +00:00
goldsimon
1b07fecbf3 Introduced ETHARP_STATS 2007-11-28 21:25:06 +00:00
goldsimon
4a01122fb7 Use ICMP_STATS_INC instead of #if ICMP_STATS... 2007-11-28 21:21:06 +00:00
goldsimon
4211da00b3 Use IP_STATS_INC instead of #if IP_STATS... 2007-11-28 21:18:37 +00:00
goldsimon
7f3cff6e09 Use LINK_STATS_INC instead of #if LINK_STATS... 2007-11-28 21:15:55 +00:00
goldsimon
6e612e5def mem_malloc with MEM_USE_POOLS=1: if size > size of biggest pool and custom pools (in addition to the MEM_POOLs) were defined, the first custom pool was used instead of asserting 2007-11-28 18:24:08 +00:00
jgrubb
a7718b2ef3 Minor change: remove unused #define 2007-11-28 17:19:39 +00:00
jgrubb
472407c719 Fix typo (MEMP_POOL_START/END to FIRST/LAST) 2007-11-28 17:19:15 +00:00
goldsimon
f07c1cf874 fixed bug #21643 (udp_send/raw_send don't fail if netif is down) by letting ip_route only use netifs that are up. 2007-11-28 06:48:50 +00:00
jgrubb
ce7c311ecf Add two more sanity checks on memory settings 2007-11-28 00:11:05 +00:00
fbernon
499c63bd0a Fix macro ERR_IS_FATAL (else, no error is fatal). 2007-11-27 21:54:58 +00:00
goldsimon
03777ccb21 Changed error handling: ERR_MEM, ERR_BUF and ERR_RTE are seen as non-fatal, all other errors are fatal. netconns and sockets block most operations once they have seen a fatal error. 2007-11-27 21:15:44 +00:00
goldsimon
b4741332e0 Implemented new function udp_sendto_if which takes the netif to send as an argument (to be able to send on netifs that are down). 2007-11-27 20:13:16 +00:00
goldsimon
3874f5f5e8 Minor coding style changes 2007-11-27 19:55:31 +00:00
fbernon
8c19f9a57e Fix to be able to build SNMP with LWIP_ARP=0. It's not a perfect solution, but I put some @todo points to review them later. 2007-11-27 19:53:47 +00:00
goldsimon
f57c2424cf Fixed bug #21582: pcb->acked accounting can be wrong when ACKs arrive out-of-order 2007-11-26 19:08:39 +00:00
fbernon
181b68b01e Minor change (forgot last CRLF) 2007-11-26 10:24:36 +00:00
fbernon
93d5bed697 Minor change: add #if 0 / #endif in ethernetif.c skeleton to avoid false bug reports. 2007-11-26 10:23:40 +00:00
goldsimon
5743b11925 Check state == CLOSED in tcp_bind and tcp_connect to prevent binding/connecting twice (using LWIP_ERROR: can be disabled) 2007-11-25 18:37:34 +00:00
goldsimon
4dcfdac2f5 initialize netconn->socket to -1 instead of 0 since 0 is a valid socket! 2007-11-25 16:13:56 +00:00
goldsimon
9343b767f8 lock event_callback against lwip_accept for data that arrives right away after an accept (before lwip_accept has processed the new conn) 2007-11-25 16:04:38 +00:00
fbernon
77d9233427 Minor change (redundant code) 2007-11-25 15:32:29 +00:00
goldsimon
f63a3c1f62 Added an explaining comment for the line 'nsock->rcvevent += -1 - newconn->socket;' in lwip_accept 2007-11-25 14:33:23 +00:00
goldsimon
511cdfb951 Minor coding style changes, added some comments 2007-11-25 14:23:59 +00:00
goldsimon
e1f49d990b Fix some warnings discovered by compiling the unixsim under cygwin (gcc pedantic) 2007-11-25 13:57:05 +00:00
goldsimon
1b208d0954 dhcp_unfold_reply() uses pbuf_copy_partial instead of its own copy algorithm; corrected some assert messages 2007-11-25 11:51:44 +00:00
goldsimon
4ac4d56b53 Added documentation / minor code layout changes 2007-11-25 10:43:28 +00:00
goldsimon
c7a0f32c98 Back to old alloc_socket(), lwip_accept had a bug in last revision 2007-11-25 10:04:04 +00:00
goldsimon
be0686d905 Added some more comments and function documentation 2007-11-25 10:01:22 +00:00
fbernon
9940b049ec Minor changes (documentation). 2007-11-25 00:28:06 +00:00
fbernon
3d9c76a69c Minor change (doxygen tags) 2007-11-24 22:13:25 +00:00
goldsimon
7797ada1f5 Added documentation 2007-11-24 21:19:47 +00:00
goldsimon
3fc883e8fb Added the wiki and a note about the mailing lists 2007-11-24 19:49:05 +00:00
goldsimon
8cfd923aaa Added some documentation (mainly what is unimplemented in contrast to 'std-BSD'), alloc_socket returns the sock pointer directly (for speedup) 2007-11-24 17:39:53 +00:00
goldsimon
c86b446d4c Moved lwip_gethostbyname from sockets.c to the new file netdb.c; included lwip_getaddrinfo. 2007-11-24 16:12:02 +00:00
goldsimon
32a09370e1 tcpip.h was not compilable with both NO_SYS and LWIP_NETCONN set to 0 (include sys.h was missing) 2007-11-24 14:50:26 +00:00
fbernon
32c6893081 Minor changes (typo and wrong defines names in sanity checks) 2007-11-22 10:17:16 +00:00
goldsimon
95425552d7 Implemented calculating the effective send-mss based on the MTU of the netif used to send. Enabled by default. Disable by setting LWIP_CALCULATE_EFF_SEND_MSS to 0. This fixes bug #21535. 2007-11-21 18:37:23 +00:00
goldsimon
dc515c7ad3 Fixed bug #20287: tcp_output_nagle sends too early. This fixes the nagle algorithm; nagle now also works for all raw API applications and has to be explicitly disabled with 'tcp_pcb->flags |= TF_NODELAY' 2007-11-21 17:59:03 +00:00
fbernon
c31b405af6 Minor changes in DNS client. 2007-11-20 21:37:04 +00:00
goldsimon
e7483f2e64 Added return value comments to netconn_gethostbyname 2007-11-20 21:23:24 +00:00
goldsimon
9a524dac86 Adopted lwip_gethostbyname and lwip_gethostbyname_r to the new return values of dns_gethostbyname/netconn_gethostbyname 2007-11-20 21:22:45 +00:00
goldsimon
b3c52f574a Added function documentation to dns.c, removed function documentation from dns.h (functions should be documented where they are implemented!), dns_table_entry doesn't have to be packed (slower, bigger code for most machines), converted dns_init to return void, dns_table is implicitly initialized to zero, dns_lookup can be static, dns_send returns correct error values, added some asserts, compacted dns_recv using some (ugly) gotos, compacted dns_gethostbyname by combining the same return value 2007-11-20 20:28:01 +00:00
fbernon
f58515b51e api_msg.c, dns.h, dns.c: Implement DNS_DOES_NAME_CHECK option (check if name received match the name query), implement DNS_USES_STATIC_BUF (the place where copy dns payload to parse the response), return an error if there is no place for a new query, and fix some minor problems. 2007-11-19 22:42:01 +00:00
fbernon
da4df1f414 Fix DNS client TTL processing. 2007-11-18 21:30:45 +00:00
fbernon
7f0640b040 Minor changes on DNS. 2007-11-18 21:04:53 +00:00
fbernon
8c0e6de00a fix DNS problem with pbuf chain. 2007-11-18 20:54:44 +00:00
fbernon
8ff1194b6a Changes on DNS client. Add multiples dns servers support. 2007-11-18 20:30:12 +00:00
goldsimon
9dd4ad6c1f Added thread-safe function gethostbyname_r (as in glibc) 2007-11-18 16:36:34 +00:00
fbernon
4e398e2aa9 Minor changes on DNS client. Coding style & add "response" checking 2007-11-18 15:51:34 +00:00
fbernon
92401faa72 Minor changes on DNS client. Note that "compressed answers are fixed". 2007-11-18 15:01:45 +00:00
fbernon
edc46281a4 Minor changes on DNS client. 2007-11-18 14:19:27 +00:00
goldsimon
6c8b3e3b58 Deleted old inet.c/inet6.c files 2007-11-16 19:32:19 +00:00
goldsimon
1faf0ab9e3 Moved inet files into ipv4/ipv6 directory; splitted inet.c/inet.h into inet and chksum part; changed includes in all lwIP files as appropriate 2007-11-16 19:31:10 +00:00
goldsimon
e6ec23d7cc Added sequential (socket API) function gethostbyname and the struct hostent it uses 2007-11-16 17:29:30 +00:00
goldsimon
e2cd201f6a Added sequential dns resolver function for netconn api (netconn_gethostbyname) 2007-11-16 17:16:17 +00:00
goldsimon
7e447c83fb Turned all hostname variables and parameters into (const char*) 2007-11-16 17:08:03 +00:00
fbernon
0c0e8d6544 opt.h, init.c, tcpip.c, dhcp.c, dns.h, dns.c: add DNS client for simple name requests with RAW api interface. Initialization is done in lwip_init() with build time options. DNS timer is added in tcpip_thread context. DHCP can set DNS server ip addresses when options are received. You need to set LWIP_DNS=1 in your lwipopts.h file (LWIP_DNS=0 in opt.h). DNS_DEBUG can be set to get some traces with LWIP_DEBUGF. Sanity check have been added. There is a "todo" list with points to improve. 2007-11-14 23:27:13 +00:00
fbernon
a4d14722f3 sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c: Fixed bug #20900. Now, most of the netconn_peer and netconn_addr processing is done inside tcpip_thread context in do_getaddr. 2007-11-12 22:39:24 +00:00
goldsimon
8020ba2dc5 tcp_send_ctrl(): call tcp_enqueue with the new flag TCP_WRITE_FLAG_COPY instead of 1 2007-11-12 19:38:25 +00:00
goldsimon
21bbc9a81a Fixed bug: assert fired when MEMP_ARP_QUEUE was empty (which can happen any time). Now the packet simply isn't enqueued when out of memory. 2007-11-10 17:41:46 +00:00
goldsimon
bfe24b138d Patch #6215: added ifAdminStatus write support (if explicitly enabled by defining SNMP_SAFE_REQUESTS to 0); added code to check link status for ifOperStatus if LWIP_NETIF_LINK_CALLBACK is defined. 2007-11-06 20:53:37 +00:00
goldsimon
f3dbd986cb Task #7410: Removed the need to include core header files in api.h (ip/tcp/udp/raw.h) to hide the internal implementation from netconn api applications. 2007-11-06 20:31:28 +00:00
fbernon
ecce865cfe api.h, api_lib.c, api_msg.c, sockets.c, opt.h: add SO_RCVBUF option for UDP & RAW netconn. You need to set LWIP_SO_RCVBUF=1 in your lwipopts.h (it's disabled by default). Netconn API users can use the netconn_recv_bufsize macro to access it. This is a first release which have to be improve for TCP. Note it used the netconn::recv_avail which need to be more "thread-safe" (note there is already the problem for FIONREAD with lwip_ioctl/ioctlsocket). 2007-11-02 10:37:08 +00:00
fbernon
4a6f60937a Minor change, add comment for "apiflags" parameters. 2007-11-01 19:38:01 +00:00
fbernon
cbe9b050a9 sockets.h, sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c, tcp.h, tcp_out.c: Integrate "patch #6250 : MSG_MORE flag for send". MSG_MORE is used at socket api layer, NETCONN_MORE at netconn api layer, and TCP_WRITE_FLAG_MORE at raw api layer. This option enable to delayed TCP PUSH flag on multiple "write" calls. Note that previous "copy" parameter for "write" APIs is now called "apiflags". 2007-11-01 17:37:50 +00:00
goldsimon
2d5908f4de Fixed bug #21494: The send mss (pcb->mss) is set to 536 (or TCP_MSS if that is smaller) as long as no MSS option is received from the remote host. 2007-11-01 16:53:43 +00:00
goldsimon
298d5cf042 Fixed bug #21491: The MSS option sent (with SYN) is now based on TCP_MSS instead of pcb->mss (on passive open now effectively sending our configured TCP_MSS instead of the one received). 2007-11-01 16:23:32 +00:00
goldsimon
853765954e Fixed bug #21181: On active open, the initial congestion window was calculated based on the configured TCP_MSS, not on the MSS option received with SYN+ACK. 2007-11-01 15:51:43 +00:00
goldsimon
7a99d73092 Added some explaining comments. 2007-10-28 17:43:21 +00:00
fbernon
7077d51f1f api.h, api_lib.c, api_msg.c: Add macro API_EVENT in the same spirit than TCP_EVENT_xxx macros to get a code more readable. It could also help to remove some code (like we have talk in "patch #5919 : Create compile switch to remove select code"), but it could be done later. 2007-10-24 12:09:18 +00:00
goldsimon
270c7c1110 Removed check for conn->err for functions whose counterparts in api_msg.c also do the check (1. remove redundant code, 2. check is better done in tcpip thread context) 2007-10-22 20:01:16 +00:00
goldsimon
2d3a64815f Minor coding style fixes, added comment 2007-10-22 19:59:52 +00:00
fbernon
86dc53b72a Minor change (coding style, #if/#endif to include icmp.h is not necessary) 2007-10-16 07:11:35 +00:00
fbernon
649d43c2c5 Minor change (define DHCP_COARSE_TIMER_MSECS - using DHCP_COARSE_TIMER_SECS - to use milliseconds like all others timers) 2007-10-15 21:31:42 +00:00
goldsimon
6d9b44e243 IP_REASSEMBLY: send ICMP time exceeded when discarding datagrams for which the first fragment was received; try to keep the header of the first (octet 0) fragment; combined code to make it smaller; fixed bug in timer: when freeing packets, counter was not updated correctly 2007-10-15 19:33:16 +00:00
goldsimon
e864ba6c91 IP_REASSEMBLY: Changed 'packet' to 'datagram' to match the names used in the RFCs 2007-10-15 19:28:09 +00:00
goldsimon
0686380302 Removed bug on memory failure introduced 3 months ago in rev 1.34 (input pbuf was freed on puf_alloc failure) 2007-10-15 19:18:02 +00:00
fbernon
282e9ead17 Minor change (sanity check for MEMP_NUM_REASSDATA only done if IP_REASSEMBLY=1) 2007-10-12 06:50:16 +00:00
goldsimon
1f08a5e5f5 Added code to free the oldest packets if the IP_REASS_MAX_PBUFS limit is reached or MEMP_REASSDATA is empty. 2007-10-11 19:49:06 +00:00
goldsimon
c41508cc8d Added check that MEMP_NUM_REASSDATA is bigger than IP_REASS_MAX_PBUFS (because each MEMP_NUM_REASSDATA has one pbuf at least!) 2007-10-11 19:26:04 +00:00
goldsimon
187df4464e Added description for MEMP_NUM_REASSDATA and changed the default value to 5. 2007-10-11 19:24:59 +00:00
goldsimon
c94d640e2a Gave the parameters of pbuf_cat() and pbuf_chain() better names to make the use more clear. 2007-10-11 19:24:23 +00:00
fbernon
cf998b7bf8 Minor fix (remove warning) 2007-10-10 08:13:58 +00:00
fbernon
1a104762ea Update documentation for the SNMP uptime timestamp. 2007-10-10 08:12:19 +00:00
fbernon
2a5209bb5a Update documentation for the SNMP uptime timestamp. 2007-10-10 08:05:34 +00:00
fbernon
ebd167b658 Add sanity checking on TCP_MAXRTX and TCP_SYNMAXRTX 2007-10-09 20:48:28 +00:00
goldsimon
c13ec867c9 Forgot two explicit initializations... 2007-10-09 20:00:55 +00:00
goldsimon
199648ff37 Changed initialization: many init functions are not needed any more since we now rely on the compiler initializing global and static variables to zero! 2007-10-09 19:59:56 +00:00
goldsimon
536f2e42d2 Fixed UDPLite receive: checksum was calculated wrong if checksum coverage != tot_len 2007-10-09 19:43:29 +00:00
goldsimon
0f9799d7e0 Added todo: free the oldest entry when the MEMP_REASSDATA pool is empty or the IP_REASS_MAX_PBUFS limit is reached 2007-10-09 19:31:54 +00:00
goldsimon
b1a4b00091 Preprocessor statements have to start at the beginning of a line for old compilers! 2007-10-09 19:30:17 +00:00
goldsimon
c1c9983cfe Removed <warning: potential uninitialized reference to
"buf" in function "lwip_recvfrom">
2007-10-09 19:29:54 +00:00
goldsimon
8980c3f74e Typo in chain_frag_into_packet_and_validate (but obviously worked anyway...) 2007-10-09 06:13:12 +00:00
goldsimon
418f57dd6a Removed type conversion warning in debug statement. 2007-10-08 19:06:58 +00:00
goldsimon
9ef005454a lfree was not updated in mem_realloc! 2007-10-08 18:39:44 +00:00
fbernon
afad35a8ac Minor change (add a default value to tune for MEMP_NUM_REASSDATA in opt.h) 2007-10-08 07:39:24 +00:00
goldsimon
2ca113a218 Fixed UDPLite SENDING: Checksum was always generated too short and also was generated wrong if checksum coverage != tot_len. 2007-10-07 20:19:23 +00:00
fbernon
911ee4d9f9 Minor change (coding style) 2007-10-07 17:41:21 +00:00
fbernon
9804b25acc Fix CHANGELOG entry 2007-10-07 17:30:50 +00:00
fbernon
87e16a8f47 sockets.c, api.h, api_lib.c: First step to fix "bug #20900 : Potential crash error problem with netconn_peer & netconn_addr". VERY IMPORTANT: this change cause an API breakage for netconn_peer, since a parameter type change. Any compiler should cause an error without any changes in yours netconn_peer calls (so, it can't be a "silent change"). It also reduce a little bit the footprint for socket layer (lwip_getpeername & lwip_getsockname use now a common lwip_getaddrname function since netconn_peer & netconn_addr have the same parameters). 2007-10-07 17:26:54 +00:00
goldsimon
e561c7b49d Added check for overlapping or duplicate fragments. ip_reass_init() is not needed any more (the check is done in chain_frag_into_packet_and_validate()). 2007-10-07 11:52:32 +00:00
goldsimon
8cd65eaf46 Check for TCP_SND_QUEUELEN overflow. 2007-10-07 11:27:45 +00:00
goldsimon
b7ef6077df Changed IP_REASSEMBLY to enqueue the received pbufs so that multiple packets can be reassembled simultaneously and no static reassembly buffer is needed. 2007-10-06 15:24:43 +00:00
goldsimon
cb71d6d393 Moved ethernet_input from tcpip.c to etharp.c so all netifs (or ports) can use it. 2007-10-05 14:00:48 +00:00
fbernon
79c00be516 netifapi.h, netifapi.c: add function netifapi_netif_set_default. Change the common function to reduce a little bit the footprint (for all functions using only the "netif" parameter). 2007-10-05 13:34:48 +00:00
fbernon
949efb414a netifapi.h, netifapi.c: add functions netifapi_netif_set_up, netifapi_netif_set_down, netifapi_autoip_start and netifapi_autoip_stop. Use a common function to reduce a little bit the footprint (for all functions using only the "netif" parameter). 2007-10-03 16:54:27 +00:00
jifl
5dd1256769 Small tweak: clarify use of link speed in comments for NETIF_INIT_SNMP. 2007-10-03 09:10:28 +00:00
fbernon
c52ef1d2b3 Minor changes for debug (indent, and set LWIP_DBG_TYPES_ON to LWIP_DBG_ON to have all traces selected display per default, in the same spirit that LWIP_DBG_MIN_LEVEL is set per default to LWIP_DBG_LEVEL_OFF) 2007-09-22 11:16:07 +00:00
fbernon
c7e91d3302 Minor change, sys_prot_t is undefined is NO_SYS=1 2007-09-21 21:23:39 +00:00
jifl
c1bbcf5ed3 Add further checking that MEMP_NUM_SYS_TIMEOUT is high enough 2007-09-21 14:39:03 +00:00
fbernon
87c5a61d07 Minor changes by Andrew Dennison: add sanity check, improve debug messages for memp, fix some warnings... 2007-09-21 12:36:35 +00:00
goldsimon
0aa3d89134 Fixed bug #21080 (tcp_bind without check pcbs in TIME_WAIT state) by checking tcp_tw_pcbs also 2007-09-20 18:27:50 +00:00
kleshov
4ffafdeb86 Fixed bug #21077: inaccuracy in calculation of lwip_stat.mem.used 2007-09-19 17:56:39 +00:00
goldsimon
0bf32b957d Fixed bug #21107 (didn't reset IP TTL in ICMP echo replies) 2007-09-19 06:12:34 +00:00
fbernon
2bdd916b06 udp.h, udp.c, sockets.c: Changes for "#20503 IGMP Improvement". Add IP_MULTICAST_IF option in socket API, and a new field "multicast_ip" in "struct udp_pcb" (for netconn and raw API users), only if LWIP_IGMP=1. Add getsockopt processing for IP_MULTICAST_TTL and IP_MULTICAST_IF. 2007-09-15 15:19:41 +00:00
kleshov
93c487fb75 Fix bug #21077: inaccuracy in calculation of lwip_stat.mem.used 2007-09-15 11:34:06 +00:00
fbernon
036d1aae50 Fix "bug #21075 : pbuf_realloc() use with PBUF_RAM and MEM_LIBC_MALLOC fails" signaled by Bill Florac 2007-09-15 06:53:16 +00:00
kleshov
f600a868f5 Indentation fix 2007-09-13 17:46:13 +00:00
fbernon
95f2d48ac4 Avoid to lost previous error codes in sockets.c and api_lib.c. 2007-09-13 15:03:42 +00:00
fbernon
8c847a85ae Add a sanity check for PPP, and a #if !NO_SYS/#endif for slipif_loop 2007-09-12 19:16:44 +00:00
fbernon
c265fa3331 Add missing #if/#endif to fix build problems with:
#define NO_SYS 0
#define LWIP_SOCKET 0
#define LWIP_NETCONN 0
2007-09-12 09:19:43 +00:00
fbernon
6aab0332e8 Add missing #if/#endif to fix build problems 2007-09-12 09:02:26 +00:00
fbernon
47ae677652 enable to remove SNMP timer (which consumne several cycles even when it's not necessary). snmp_agent.txt tell to call snmp_inc_sysuptime() each 10ms (but, it's intrusive if you use sys_timeout feature). Now, you can decide to call snmp_add_sysuptime(100) each 1000ms (which is bigger "step", but call to a lower frequency). Or, you can decide to not call snmp_inc_sysuptime() or snmp_add_sysuptime(), and to define the SNMP_GET_SYSUPTIME(sysuptime) macro. This one is undefined by default in mib2.c. SNMP_GET_SYSUPTIME is called inside snmp_get_sysuptime(u32_t *value), and enable to change "sysuptime" value only when it's queried (any direct call to "sysuptime" is changed by a call to snmp_get_sysuptime). 2007-09-10 18:50:44 +00:00
jgrubb
54e1b79ac5 Make pbuf_alloc a bit easier to read (change parameter name from "l" to "layer" and use LWIP_MIN instead of ternary operatory) 2007-09-10 18:25:15 +00:00
jgrubb
6afe1f3597 DHCP_DOES_ARP_CHECK is set to 1 by default -- the compile-time checks fail if DHCP is off... So this patch sets the default to be 1 only if both DHCP and ARP are set. 2007-09-10 18:12:13 +00:00
fbernon
4466260480 Remove CVS keyword 2007-09-10 07:56:16 +00:00
fbernon
1c6e31173d Add missing include files. 2007-09-09 22:34:55 +00:00
fbernon
939180c1a1 igmp.h, igmp.c, netif.h, netif.c, ip.c: To enable to have interfaces with IGMP, and others without it, there is a new NETIF_FLAG_IGMP flag to set in netif->flags if you want IGMP on an interface. igmp_stop() is now called inside netif_remove(). igmp_report_groups() is now called inside netif_set_link_up() (need to have LWIP_NETIF_LINK_CALLBACK=1) to resend reports once the link is up (avoid to wait the next query message to receive the matching multicast streams). 2007-09-09 20:46:33 +00:00
fbernon
8205737fdb sockets.c, ip.h, api.h, tcp.h: declare a "struct ip_pcb" which only contains IP_PCB. Add in the netconn's "pcb" union a "struct ip_pcb *ip;" (no size change). Use this new field to access to common pcb fields (ttl, tos, so_options, etc...). Enable to access to these fields with LWIP_TCP=0. 2007-09-07 23:47:02 +00:00
fbernon
75d4c9b446 Add some deprecated options from "task #7142 : Sanity check user-configurable values". 2007-09-07 23:28:02 +00:00
fbernon
e3cd1ac1f9 Minor changes (but in lot of files): add #if/#endif for options where they could miss. #if LWIP_xxx if always put after #include "lwip/opt.h" (note this one indirectly include cc.h). Move others includes inside #if/#endif block. 2007-09-07 23:01:59 +00:00
fbernon
027a70a415 Last sanity checking centralization for "task #7142 : Sanity check user-configurable values". 2007-09-07 17:59:30 +00:00
fbernon
3dfe5f993b DON'T WORRY, it's just a test on CVS keywords (I will remove) 2007-09-07 12:32:40 +00:00
fbernon
f5991dd9b6 DON'T WORRY, it's just a test on CVS keywords (I will remove) 2007-09-07 12:31:50 +00:00
fbernon
58c5d008d5 DON'T WORRY, it's just a test on CVS keywords (I will remove) 2007-09-07 09:23:51 +00:00
fbernon
ac1149156d several-files: replace some #include "arch/cc.h" by "lwip/arch.h", or simply remove it as long as "lwip/opt.h" is included before (this one include "lwip/debug.h" which already include "lwip/arch.h"). Like that, default defines are provided by "lwip/arch.h" if they are not defined in cc.h, in the same spirit than "lwip/opt.h" for lwipopts.h. 2007-09-06 16:43:43 +00:00
fbernon
ca866c0d7d Integrate "task #7272 : LWIP_ICMP option". The new option LWIP_ICMP enable/disable ICMP module inside the IP stack (enable per default). Be careful, disabling ICMP make your product non-compliant to RFC1122, but help to reduce footprint, and to reduce "visibility" on the Internet. 2007-09-05 17:20:45 +00:00
fbernon
90a3f88c08 Change parameters list for sys_thread_new (see "task #7252 : Create sys_thread_new_ex()"). Two new parameters have to be provided: a task name, and a task stack size. For this one, since it's platform dependant, you could define the best one for you in your lwipopts.h. For port maintainers, you can just add these new parameters in your sys_arch.c file, and but it's not mandatory, use them in your OS specific functions. 2007-09-05 16:14:28 +00:00
fbernon
c1f89c5640 Move some build time checkings inside init.c for task #7142 "Sanity check user-configurable values". 2007-09-05 13:19:25 +00:00
fbernon
5865a78c1e Minor fix (add some parenthesis where macro expansion could cause problems) 2007-09-05 10:18:39 +00:00
fbernon
d4616a7fc6 Replace mem_malloc call by memp_malloc, and use a new MEMP_NUM_IGMP_GROUP option (see opt.h to define the value). It will avoid potential fragmentation problems, use a counter to know how many times a group is used on an netif, and free it when all applications leave it. MEMP_NUM_IGMP_GROUP got 8 as default value (and init.c got a sanity check if LWIP_IGMP!=0). 2007-09-04 15:15:20 +00:00
fbernon
d794357504 Fix warnings inside sockets.c with "gcc" compilers. See "Description" in http://www.opengroup.org/onlinepubs/007908799/xns/syssocket.h.html : 2007-09-04 14:30:26 +00:00
fbernon
79b0484e20 Minor changes (fix some warnings like "function declaration isn't a prototype" and "no previous prototype for 'lwip_init'"...) 2007-09-04 13:51:48 +00:00
fbernon
62b4741b19 Changes for "#20503 IGMP Improvement". Initialize igmp_mac_filter to NULL in netif_add (this field should be set in the netif's "init" function). Use the "imr_interface" field (for socket layer) and/or the "interface" field (for netconn layer), for join/leave operations. The igmp_join/leavegroup first parameter change from a netif to an ipaddr. This field could be a netif's ipaddr, or "any" (same meaning than ip_addr_isany). 2007-09-03 14:53:18 +00:00
fbernon
327f06bbaf Replace "netif_default = NULL;" by "netif_set_default(NULL);" in netif_remove (do some processing, like for SNMP...) 2007-09-03 12:22:00 +00:00
fbernon
d7cd90b5b8 Add in igmp_joingroup & igmp_leavegroup a LWIP_ERROR checking on netif value. 2007-09-03 09:56:38 +00:00
fbernon
85fef90c94 Add enum snmp_ifType in snmp.h, and use it in network interfaces for NETIF_INIT_SNMP 2007-08-31 10:14:09 +00:00
fbernon
fca25479ad Minor fix (else, cause build error). Since SO_REUSE is always used in the code (even if the current code is not working), it is defined in opt.h with 0 as default value (it's normal). So, the error is not if it is defined, but if it is defined to 1. 2007-08-31 09:42:32 +00:00
fbernon
231d965bcb Minor fix (use ETHARP_HWADDR_LEN) 2007-08-31 09:02:53 +00:00
jgrubb
6c10282f9a Put back in SO_REUSE 2007-08-30 22:41:24 +00:00
jgrubb
cb399272fd Move deprecated options from opt.h to init.c 2007-08-30 22:33:55 +00:00
fbernon
245bce04d1 Add netbuf.h, netbuf.c, Change api.h, api_lib.c: #7249 "Split netbuf functions from api/api_lib". Now netbuf API is independant of netconn, and can be used with other API (application based on raw API, or future "socket2" API). Ports maintainers just have to add src/api/netbuf.c in their makefile/projects. 2007-08-30 16:55:10 +00:00
fbernon
3101bdf127 Add some others sanity checkings 2007-08-30 16:06:51 +00:00
fbernon
384ae9c407 Minor change (ident, remove comment, change trace text) 2007-08-30 15:53:15 +00:00
fbernon
c671f8e7ef Replace API programmation error checking for IGMP join/leave (ismulticast(addr)) by LWIP_ERROR checking. 2007-08-30 15:48:14 +00:00
jifl
f39b9c85fe Add further checks. Move compile-time checks out of LWIP_DEBUG ifdef 2007-08-30 15:33:51 +00:00
fbernon
ab36270885 igmp.h, igmp.c: Some changes to remove some redundant code, add some traces, and fix some coding style. 2007-08-30 14:20:54 +00:00
fbernon
bd65dd8098 init.c: Add first version of lwip_sanity_check for task #7142 "Sanity check user-configurable values". 2007-08-30 10:15:17 +00:00
fbernon
36b6f308e6 Minor fix (coding style, comments, spaces, endline...) 2007-08-30 09:14:28 +00:00
fbernon
cd208314e0 igmp.h, igmp.c, tcpip.c, init.c, netif.c: change igmp_init and add igmp_start. igmp_start is call inside netif_add. Now, igmp initialization is in the same spirit than the others modules. Modify some IGMP debug traces. 2007-08-29 21:12:32 +00:00
fbernon
da7b5135de Minor Fix (ident) 2007-08-29 20:50:53 +00:00
fbernon
cb3d2b327a Minor fix: replace C++ comments by C comments. 2007-08-29 09:25:17 +00:00
fbernon
48db3a3e92 Add init.h, init.c, Change opt.h, tcpip.c: Task #7213 "Add a lwip_init function" Add lwip_init function to regroup all modules initializations, and to provide a place to add code for task #7142 "Sanity check user-configurable values". Ports maintainers should remove direct initializations calls from their code, and add init.c in their makefiles. Note that lwip_init() function is called inside tcpip_init, but can also be used by raw api users since all calls are disabled when matching options are disabled. Also note that their is new options in opt.h, you should configure in your lwipopts.h (they are enabled per default). 2007-08-29 08:11:06 +00:00
fbernon
7182fb8fb0 tcpip.c: Fix TCPIP_MSG_INPKT processing: now, tcpip_input can be used for any kind of packets. These packets are considered like Ethernet packets (payload pointing to ethhdr) if the netif got the NETIF_FLAG_ETHARP flag. Else, packets are considered like IP packets (payload pointing to iphdr). 2007-08-29 07:51:20 +00:00
fbernon
d7da390ae9 Fix coding style (use #if and not #ifdef) for IPv6 2007-08-28 16:03:53 +00:00
fbernon
54c1025ec0 First fix for "bug #20900 : Potential crash error problem with netconn_peer & netconn_addr". Introduce NETCONN_LISTEN netconn_state and remove obsolete ones (NETCONN_RECV & NETCONN_ACCEPT). 2007-08-27 10:08:53 +00:00
jifl
5e7b7cba31 "Fix" a few more cases where Paradigm C++ may mis-compile 16-bit right shifts on 32-bit quantities 2007-08-27 01:59:52 +00:00
marcbou
5a6b1cbf66 Added CHANGELOG entries for my recent contributions. 2007-08-27 00:14:21 +00:00
marcbou
180e6d2c75 Reset the callbacks and arg (conn) to NULL in do_close_internal(), because
TCP callbacks in api_msg.c can under certain circumstances be called with an
invalid conn pointer after the connection has been closed (and conn has been
freed).
2007-08-26 23:58:33 +00:00
fbernon
acbf25f2eb netif.h, netif.c: Integrate "patch #6163 : Function to check if link layer is up". Add a netif_is_link_up() function if LWIP_NETIF_LINK_CALLBACK option is set. 2007-08-25 10:43:19 +00:00
kieranm
7c90cc6aac inet.c Modify (acc >> 16) test to ((acc >> 16) != 0) to help buggy
compiler (Paradigm C++)
2007-08-24 14:31:53 +00:00
fbernon
261af8dc07 netif.h, netif.c, opt.h: Rename LWIP_NETIF_CALLBACK in LWIP_NETIF_STATUS_CALLBACK to be coherent with new LWIP_NETIF_LINK_CALLBACK option before next release. 2007-08-22 11:26:01 +00:00
fbernon
2f344268ff Minor fix (spaces and comment) 2007-08-22 11:00:02 +00:00
fbernon
42f3c24fc4 tcpip.h, tcpip.c, ethernetif.c, opt.h: remove options ETHARP_TCPIP_INPUT & ETHARP_TCPIP_ETHINPUT, now, only "ethinput" code is supported, even if the name is tcpip_input (we keep the name of 1.2.0 function). 2007-08-22 10:04:35 +00:00
fbernon
c4b97a1710 Forget to rename this line (pbuf->flgs->pbuf->flags) 2007-08-22 08:47:48 +00:00
fbernon
4f76bc42d7 Rename pbuf's "flgs" in "flags" (see in [lwip-devel] Last changes by Marc) 2007-08-20 19:15:43 +00:00
fbernon
fbd5600563 Force a build error if MEMP_NUM_TCPIP_MSG is always defined 2007-08-20 18:53:33 +00:00
fbernon
3259e2eac9 Replace PBUF_LINK_HLEN before PBUF_POOL_BUFSIZE, restore PPP options changed by Marc Boucher but lost with last Jared changes... 2007-08-20 17:05:01 +00:00
jgrubb
baca292f47 Task #7136: Fix bug of wrong file name for centralized mempool settings. 2007-08-20 16:42:16 +00:00
fbernon
8babf0ec73 Fix wrong define for both pool "struct tcpip_msg" + minor fix (coding style) 2007-08-20 16:25:15 +00:00
fbernon
c07d124d4b Minor change (fix comment) 2007-08-20 16:22:17 +00:00
marcbou
a0db1eaa32 Removed PBUF_FLAG_LINK_BROADCAST. 2007-08-17 22:23:42 +00:00
marcbou
dbd61d129d Fix potential pbuf leaks. 2007-08-17 22:15:24 +00:00
jgrubb
21b5fb5ddb Task #7143: Clean up opt.h. Made all the comment formats the same (uses Doxygen style), a couple minor reorderings. Changed a few of the default stats variables to depend on whether the modules were even used (i.e. #define TCP_STATS (LWIP_TCP) ). PPP options could still use some cleaning. 2007-08-17 18:31:05 +00:00
jgrubb
f55fafbc66 *** empty log message *** 2007-08-17 18:19:25 +00:00
jgrubb
768843f1f0 Task #7136: Centralize mempool settings into new memp_std.h and optional user file lwippools.h. (Remove MEMP_POOL_SIZE/NUM flags, add new MEMP_USE_CUSTOM_POOLS option) 2007-08-17 18:18:58 +00:00
jgrubb
cc7d1226ee Task #7136: Centralize mempool settings into new memp_std.h and optional user file lwippools.h. 2007-08-17 17:49:17 +00:00
fbernon
8abafc54a6 Fix comment 2007-08-17 10:49:35 +00:00
fbernon
885695fa67 Minor changes (tabs) 2007-08-17 10:46:07 +00:00
fbernon
e0bf309bb5 Add raw_init in tcpip_init + minor changes (tabs, ident, coding style...) 2007-08-17 09:57:37 +00:00
marcbou
d907bcd57a lwip_recvfrom() tweaks. 2007-08-17 05:55:24 +00:00
marcbou
0167bbb89a Per Frederic's suggestion, renamed
[MEMP_[NUM_]]TCPIP_MSG to [MEMP_[NUM_]]TCPIP_MSG_API
and
    [MEMP_[NUM_]]TCPIP_MSG_INPUT to [MEMP_[NUM_]]TCPIP_MSG_INPKT.

Added defines in opt.h for temporary compatibility with older lwipopts.h.
2007-08-17 02:46:43 +00:00
marcbou
0471aaec52 Use enum pbuf_flag as pbuf_type.
Renumber PBUF_FLAG_*.
2007-08-17 02:09:43 +00:00
marcbou
18636a4df5 Fixed misplaced #endif. 2007-08-17 02:07:26 +00:00
fbernon
2be122875a Minor changes (tabs, ident, coding style...) 2007-08-17 00:30:27 +00:00
marcbou
c517f6daf9 Backed out lwip_close() change after discussion with Frederic. 2007-08-16 23:09:04 +00:00
marcbou
07223bf5ef Backed out last change to netconn_delete() after discussion with Frederic. 2007-08-16 23:06:42 +00:00
marcbou
7862ba583e Moved lwip/src/netif/ppp/ppp_oe.h to lwip/src/include/netif/ppp_oe.h 2007-08-16 21:12:24 +00:00
marcbou
8c10d91135 ethbroadcast now a shared global provided by etharp. 2007-08-16 20:52:59 +00:00
marcbou
c81d0f3393 fix ethernet_input() return code warning. 2007-08-16 20:50:43 +00:00
marcbou
0b8b9e8033 Changed // style comment to /* style */ comment. 2007-08-16 20:41:56 +00:00
marcbou
b73198d5ef Provide default value for MEMP_NUM_TCPIP_MSG_INPUT if not defined. 2007-08-16 20:39:29 +00:00
marcbou
4236699052 Split pbuf flags in pbuf type and flgs.
Improved lwip_recvfrom(). TCP push now propagated.
2007-08-16 20:22:15 +00:00
marcbou
75935ad251 Changed // style comments to /* style */ comments. 2007-08-16 20:17:50 +00:00
marcbou
a3c3f47e17 lwip_close(): call netconn_delete() under socksem to properly handle
concurrent closes.
2007-08-16 20:08:33 +00:00
marcbou
17f07a36ef netconn_delete(): unblock potentially waiting recv. 2007-08-16 20:03:23 +00:00
marcbou
557a0c7ae3 Removed TCPIP_MSG_ETHINPUT. TCPIP_MSG_INPUT now used for
both ETHARP_TCPIP_INPUT and  ETHARP_TCPIP_ETHINPUT.
2007-08-16 19:55:30 +00:00
marcbou
1b98df4a0d Added distinct memp (MEMP_TCPIP_MSG_INPUT) for input packets to prevent
floods from consuming all of MEMP_TCPIP_MSG and starving other message types.
2007-08-16 19:49:08 +00:00
marcbou
58bfb0458e Added PPPoE support to ethernet_input() 2007-08-16 19:16:03 +00:00
marcbou
95cbf95c50 Added mem_calloc(). 2007-08-16 18:37:15 +00:00
marcbou
0b4402ebc8 lwip_accept(): check netconn_peer() error return. 2007-08-16 18:29:37 +00:00
marcbou
d64b3f21e6 Initialize newconn->state to NETCONN_NONE in accept_function;
otherwise it was left to NETCONN_CLOSE and sent_tcp() could prematurely
close the connection.
2007-08-16 18:24:29 +00:00
marcbou
931fcfd0f5 Added PPPoE support and various PPP improvements. 2007-08-16 18:12:20 +00:00
kieranm
a6ca9aa306 * tcp_in.c: Fix for bug #19953 - correct TCP state machine when
* receiving FIN+ACK in SYN_RECV state
2007-08-16 15:57:31 +00:00
fbernon
40ef282982 Minor change: add in tcp_in.c in tcp_input(), some calls to handle error statistics (stats & snmp) 2007-08-14 18:01:34 +00:00
fbernon
9152d6671c Comments Fix for Doxygen documentation 2007-08-09 22:21:44 +00:00
fbernon
d057e95ce3 Minor Fix (remove unused USE_ROUTER_ALERT and some coding style) 2007-08-09 20:21:59 +00:00
fbernon
ac2932bac3 stats.h, stats.c, igmp.h, igmp.c, opt.h: Fix for bug #20503 : IGMP Improvement. Introduce IGMP_STATS to centralize statistics management. 2007-08-09 20:09:22 +00:00
fbernon
118331207b udp.c: Fix for bug #20503 : IGMP Improvement. Enable to receive a multicast packet on a udp pcb binded on an netif's IP address, and not on "any". 2007-08-09 18:34:03 +00:00
fbernon
7c104c8fbb igmp.h, igmp.c, ip.c: Fix minor changes from bug #20503 : IGMP Improvement. This is mainly on using lookup/lookfor, and some coding styles... 2007-08-09 16:53:47 +00:00
fbernon
11c94b6566 Minor fix (spaces) 2007-08-09 10:51:26 +00:00
jgrubb
c555b532a2 Add NETIF_LINK_CALLBACK into the netif_set_link_up/down functions 2007-08-08 18:22:08 +00:00
fbernon
fdc4c25e67 Minor fix (warnings on unused args, wrong type, cast u32_t to u16_t...) 2007-08-01 13:41:31 +00:00
fbernon
083134bc12 Minor fix (warning when LWIP_DEBUG is undefined) 2007-07-29 09:25:19 +00:00
fbernon
f1c4a9ebfa Minor fix (warning when LWIP_DEBUG is undefined) 2007-07-29 08:31:31 +00:00
fbernon
1edd2ed3db Minor fix on pbuf_init (fix warning) and use same coding style that mem.h, sys.h, tcp.h, etc... 2007-07-29 08:23:57 +00:00
fbernon
b8b04271b5 Minor fix (warning, linker helper) signaled by Bill Florac 2007-07-29 08:11:33 +00:00
jifl
f0b33f5ced Make pbuf_init() call be an empty macro for now 2007-07-27 15:06:03 +00:00
fbernon
42eead8f41 igmp.c: Fix bug #20595 to accept IGMPv3 "Query" messages. 2007-07-26 17:10:56 +00:00
goldsimon
33054a18db Added a better comment to explain why tcp_close doesn't care for the return value of tcp_output 2007-07-26 09:31:09 +00:00
goldsimon
f4036e8352 Another fix for bug #20021: by not returning an error if tcp_output fails in tcp_close, the code in do_close_internal gets simpler (tcp_output is called again later from tcp timers). 2007-07-25 19:24:27 +00:00
goldsimon
f9c30017b0 Fixed bug #20429: use the new pbuf_copy_partial instead of the old copy_from_pbuf, which illegally modified the given pbuf; Introduced pbuf_copy_partial, making netbuf_copy_partial use this function. 2007-07-25 18:53:45 +00:00
goldsimon
8be76ed450 tcp_enqueue: pcb->snd_queuelen didn't work for chaine PBUF_RAMs: changed snd_queuelen++ to snd_queuelen += pbuf_clen(p). 2007-07-25 08:46:41 +00:00
fbernon
328b25d561 Minor Fix: remove obsolete MEMP_NUM_API_MSG define and update comment 2007-07-25 07:46:44 +00:00
goldsimon
9eff9676e9 Fix bug #20506: Slow start / initial congestion window starts with 2 * mss (instead of 1 * mss previously) to comply with some newer RFCs and other stacks. 2007-07-25 07:31:29 +00:00
fbernon
a1d8335a8c Fix do_delconn when used with LWIP_TCPIP_CORE_LOCKING=1 on "non-TCP" connections... 2007-07-24 17:27:48 +00:00
fbernon
d5a174364a Minor fix: debug text inside ethernetif_input 2007-07-24 08:49:00 +00:00
goldsimon
62c3de30b9 Fix bug #20480: Check the pcb passed to tcp_listen() for the correct state (must be CLOSED). 2007-07-24 07:41:55 +00:00
goldsimon
ebcb46cd48 Included the mem_malloc pools in memp_names if MEM_USE_POOLS=1 2007-07-18 20:30:21 +00:00
goldsimon
1689361ff2 Another change for fixing bug #20478 (put the memp += MEMP_SIZE in another place) 2007-07-15 10:54:24 +00:00
jgrubb
05e177e2c8 +bug fix #20478: memp_malloc now returns NULL for failed allocation (instead of NULL+MEMP_SIZE) 2007-07-14 00:21:37 +00:00
jgrubb
eb998bda62 Bug fix #20478: memp_malloc returns NULL+MEMP_SIZE rather than NULL on a failed allocation 2007-07-14 00:07:43 +00:00
fbernon
116bcb9dfb opt.h, netif.h, netif.c, ethernetif.c: Add new configuration option to add a link callback in the netif struct, and functions to handle it. Be carefull for port maintainers to add the NETIF_FLAG_LINK_UP flag (like in ethernetif.c) if you want to be sure to be compatible with future changes... 2007-07-13 15:00:40 +00:00
fbernon
6a452951f5 api_msg.c: Fix bug #20318: api_msg "recv" callbacks don't call pbuf_free in all error cases. 2007-07-13 14:28:15 +00:00
fbernon
a891854ef5 Fix bug #20315: possible memory leak problem if tcp_listen failed, because current code doesn't follow rawapi.txt documentation. 2007-07-13 13:59:11 +00:00
fbernon
a2dffd430b Fix minor patch #5741 build error... 2007-07-13 13:12:07 +00:00
kieranm
4ac0580aa0 2007-07-13 Kieran Mansley
* src/core/tcp_in.c Apply patch#5741 from Oleg Tyshev to fix bug in
    out of sequence processing of received packets
2007-07-13 12:24:32 +00:00
fbernon
5d872b26a1 sockets.c: Fix a possible problem because any new socket can't be created during the "close" (which can be "long" since fix for bug #20021). 2007-07-04 21:13:25 +00:00
goldsimon
8d2c8065eb Removed old debug variables from pbuf_copy() 2007-07-04 16:43:54 +00:00
fbernon
bf176ed712 Minor fix (indent) 2007-07-03 21:27:59 +00:00
goldsimon
eb875de67e Added assertions where PBUF_RAM pbufs are used and an assumption is made that this pbuf is in one piece (i.e. not chained). These assumptions clash with the possibility of converting to fully pool-based pbuf implementations, where PBUF_RAM pbufs might be chained. 2007-07-03 20:28:35 +00:00
goldsimon
2a77b9fcc7 Bug in last version (fix to close problems): netconn thread might get active before calling its callback, so conn was already deallocated. 2007-07-03 20:20:33 +00:00
goldsimon
9a4a5b1816 Final fix for bug #20021 and some other problems when closing tcp netconns: removed conn->sem, less context switches when closing, both netconn_close and netconn_delete should safely close tcp connections. 2007-07-03 19:29:59 +00:00
fbernon
3a0ab861c2 ip.h, etharp.c: Fix warnings & errors about LWIP_NETIF_HWADDRHINT (perhaps compiler dependant) 2007-07-03 10:36:21 +00:00
goldsimon
fdc0d30337 #ifdef LWIP_NETIF_HWADDRHINT around IP_PCB.addr_hint 2007-07-03 08:09:50 +00:00
goldsimon
96e4ec4a15 Added option LWIP_NETIF_HWADDRHINT (default=off) to cache ARP table indices with each pcb instead of single-entry cache for the complete stack. 2007-07-02 20:41:22 +00:00
goldsimon
fa4b711495 Added some ASSERTS and casts to prevent warnings when assigning to smaller types. 2007-07-02 20:13:45 +00:00
goldsimon
0113b735ad Fixed a little cast-warning from u32_t to u16_t 2007-07-02 20:07:19 +00:00
goldsimon
d228ff0f43 Removed warning when assigning from u32_t to u16_t by casting to u16_t. 2007-07-01 16:04:35 +00:00
goldsimon
9abbb581c5 Changed tcp_pcb->snd_queuelen from u8_t to u16_t to prevent overflowing when sending many small packets with big send buffer, added assertions and oveflow checks for snd_queuelen. 2007-07-01 15:56:04 +00:00
goldsimon
d7c50f56d7 Fixed a wrong assert statement in etharp_query when ARP_QUEUEING=1 and packets should be queued. 2007-07-01 14:52:09 +00:00
fbernon
b6750de9e8 sockets.h, sockets.c: Implement MSG_PEEK flag for recv/recvfrom functions. 2007-06-30 13:24:11 +00:00
goldsimon
c91caa06d3 Set/get ARP hwlen and protolen in one piece. 2007-06-30 11:42:41 +00:00
goldsimon
6c3c184bc7 Added check to prevent tcp_pcb->snd_queuelen from overflowing. 2007-06-29 17:09:47 +00:00
fbernon
af71292aba Minor fix (extra spaces) 2007-06-29 13:37:33 +00:00
goldsimon
24e29cecae Fixed bug #20287: Fixed nagle algorithm (sending was done too early if a segment contained chained pbufs) 2007-06-28 20:05:38 +00:00
fbernon
ab4c3a326f autoip.c: replace most of rand() calls by a macro LWIP_AUTOIP_RAND which compute a "pseudo-random" value based on netif's MAC and some autoip fields. It's always possible to define this macro in your own lwipopts.h to always use C library's rand(). Note that autoip_create_rand_addr doesn't use this macro. 2007-06-28 18:05:38 +00:00
goldsimon
d73ca29a07 Fixed minor indentation fault 2007-06-28 10:29:13 +00:00
fbernon
d6fbe45296 netifapi.h, netifapi.c, tcpip.h, tcpip.c: Update code to handle the option LWIP_TCPIP_CORE_LOCKING, and do some changes to be coherent with last modifications in api_lib/api_msg (use pointers and not type with table, etc...) 2007-06-28 10:11:05 +00:00
fbernon
dd1cd5e491 sockets.c: process NETCONN_RAW connections with LWIP_TCPIP_CORE_LOCKING=1 2007-06-28 09:56:37 +00:00
goldsimon
2b02db2675 Remove warning in tcp_enqueue (cast from u32_t to u16_t) 2007-06-27 16:42:20 +00:00
goldsimon
6f93a8f091 Set the err_to_errno_table to be const 2007-06-26 17:38:52 +00:00
goldsimon
47074c897e Removed warning: LWIP_DEBUGF had wrong argument count 2007-06-26 08:12:15 +00:00
goldsimon
2270f0d172 Fixed bug #20259: struct udp_hdr was lacking the packin defines. 2007-06-26 07:32:17 +00:00
goldsimon
1b5d3466ba etharp_arp_input: stricter checking of hwtype, proto, hwlen & protolen allows us to leave some header fields like they are when sending ARP reply (only changing the addresses is needed) 2007-06-25 18:03:23 +00:00
goldsimon
dcc2247a90 Fixed bug #20253: icmp_dest_unreach was called with a wrong p->payload for udp packets with no matching pcb. 2007-06-25 17:30:16 +00:00
goldsimon
00b7aeb49b Fixed bug #20220: UDP PCB search in udp_input(): a non-local match could get udp input packets if the remote side matched. 2007-06-25 17:24:31 +00:00
goldsimon
4f5b781b88 Moved filling of ethernet header for outgoing IP packets into an extra function to reduce code size. 2007-06-25 17:20:10 +00:00
goldsimon
b51d1b79a3 Combined etharp_request with etharp_raw for both LWIP_AUTOIP =0 and =1 to remove redundant code. 2007-06-24 12:51:22 +00:00
goldsimon
4848de3a8e etharp_tmr function had a bug (pending entries were pending for too long) 2007-06-24 12:46:13 +00:00
goldsimon
88b1cebe1d Sorry, checked in some of my local changes with the LWIP_ERROR modification! 2007-06-23 13:09:58 +00:00
goldsimon
bb9e9e5480 Changed the expression of LWIP_ERROR to the same as for LWIP_ASSERT 2007-06-22 20:50:21 +00:00
goldsimon
786a7fbaf4 no-pool-big-enough was not correctly caught 2007-06-22 20:26:30 +00:00
goldsimon
0ce27296aa ASSERTS were using old MEM_ALIGN define, therefore, was not compilable without LWIP_NOASSERT defined 2007-06-22 20:23:26 +00:00
fbernon
a1d176b643 autoip.h/.c: change autoip_init & autoip_create_rand_addr to use netif's MAC address and tried_llipaddr to generate an "autoip"... 2007-06-22 18:54:34 +00:00
goldsimon
0c18e653e8 Introduced the option MEM_USE_POOLS to use 4 pools with different sized elements instead of a heap. This both prevents memory fragmentation and gives a higher speed at the cost of more memory consumption. Turned off by default. 2007-06-21 20:12:11 +00:00
goldsimon
065b8c945b Added ASSERT to check that lwip_send(to) is not called for length not fitting into u16_t (for UDP & RAW sockets) 2007-06-21 19:58:31 +00:00
goldsimon
f49fc35f55 Converted the length argument of netconn_write (and therefore also api_msg_msg.msg.w.len) from u16_t into int to be able to send a bigger buffer than 64K with one time (mainly used from lwip_send). 2007-06-21 19:32:26 +00:00
goldsimon
67795ad26e Corrected do_write for LWIP_TCPIP_CORE_LOCKING=1 2007-06-21 19:14:02 +00:00
goldsimon
2aef8bad55 Moved the nagle algorithm from netconn_write/do_write into a define (tcp_output_nagle) in tcp.h to provide it to raw api users, too. 2007-06-21 18:55:09 +00:00
goldsimon
9f05cabf87 Fixed bug #20021: Moved sendbuf-processing in netconn_write from api_lib.c to api_msg.c to also prevent multiple context-changes on low memory or empty send-buffer. 2007-06-21 18:40:21 +00:00
fbernon
4c07b1606c Minor changes: fix some comments for Doygen documentation 2007-06-21 07:17:29 +00:00
goldsimon
d3f0a3211d Changed etharp to use a defined hardware address length of 6 to avoid loading netif->hwaddr_len every time (since this file is only used for ethernet and struct eth_addr already had a defined length of 6). 2007-06-19 16:22:55 +00:00
fbernon
ec7333d406 Some changes for AutoIP integration in tcpip.c, and some comments. 2007-06-19 10:11:27 +00:00
fbernon
6a40426421 Minor fix: warning, type... for patch #5952 : Integration of AutoIP module 2007-06-18 21:45:34 +00:00
goldsimon
c9ebb895a1 Removed warning "empty body in an if statement" in tcp_receive() for LWIP_DEBUG=0 2007-06-18 20:08:31 +00:00
goldsimon
f66bbda8b1 Ooops, checked in a wrong (test-) version before! 2007-06-18 19:52:55 +00:00
goldsimon
da2d9f3733 Shortened some lines to ~80 2007-06-18 19:36:58 +00:00
goldsimon
9e0252b209 Corrected two formatters in LWIP_DEBUGF calls 2007-06-18 19:23:27 +00:00
goldsimon
531ea17088 Forgot to implement getsockopt for SO_NO_CHECK 2007-06-17 19:18:59 +00:00
fbernon
e89f5983be tcp_in.c: Fix bug #20126 : Zero ssthresh bug (by Per-Henrik Lundblom and Kieran Mansley). 2007-06-17 16:15:34 +00:00
goldsimon
6784fd64f3 Done some work on task #6933: converted some LWIP_ASSERTs to LWIP_ERROR to give back an error return value for LWIP_NOASSERT=1 2007-06-17 15:20:21 +00:00
goldsimon
ced2543be0 Done some work on task #6933: converted some LWIP_ASSERTs to LWIP_ERROR to give back an error return value for LWIP_NOASSERT=1 2007-06-17 14:39:50 +00:00
goldsimon
261e92c57b In accept_function, one LWIP_ERROR had a wrong expression (since it is inverted compared to LWIP_ASSERT...) 2007-06-17 14:38:32 +00:00
goldsimon
55bd48dc10 Always align PBUF_POOL_BUFSIZE, pbuf_init is not needed any more, minor changes to meet coding style requirements 2007-06-17 14:36:19 +00:00
goldsimon
96dc30dea2 Done some work on task #1549 (function documentation) 2007-06-17 12:18:11 +00:00
goldsimon
ea7b0052f3 Implemented socket options SO_NO_CHECK for UDP sockets to disable UDP checksum generation on transmit. 2007-06-17 11:46:30 +00:00
goldsimon
1db9013bc4 Done some work on task #1549 (function documentation) 2007-06-16 15:08:47 +00:00
goldsimon
060cbe15d6 Done some work on task #1549 (function documentation), added some LWIP_ERROR checks, don't call pcb_new() from do_bind() and do_connect() since a netconn without pcb can't exist any more (after the recent changes to netconn_new_*()) 2007-06-16 15:07:11 +00:00
goldsimon
8532d0d152 Added comments for the callback functions included in struct tcp_listen_pcb 2007-06-16 15:04:50 +00:00
goldsimon
173e63f01b Minor fix: coding style 2007-06-16 15:03:09 +00:00
goldsimon
066daf21ef Added comments for the callback functions included in structs tcp_pcb, udp_pcb and raw_pcb. 2007-06-16 14:33:37 +00:00
goldsimon
10f4604939 Corrected some copy & paste errors 2007-06-16 14:09:27 +00:00
goldsimon
08ab2d89f4 Created define instead of extra-function for netconn_new, netconn_new_with_callback and netconn_err, added netconn_type NETCONN_INVALID 2007-06-16 13:58:32 +00:00
goldsimon
775deefeaa Done some work on task #1549 (function documentation), added some LWIP_ERROR checks, created define instead of extra-function for netconn_new, netconn_new_with_callback and netconn_err 2007-06-16 13:57:30 +00:00
goldsimon
cbf281589b Fixed bug #20180 (TCP pcbs listening on IP_ADDR_ANY could get changed in netif_set_ipaddr if previous netif->ip_addr.addr was 0. 2007-06-16 13:32:10 +00:00
goldsimon
f1d95379bc Changed all references to old debug defines to the new ones (e.g. LWIP_DBG_TRACE) 2007-06-16 11:39:01 +00:00
goldsimon
7c4377af0e Added debug output for icmp_input if ip_output_if worked or not. 2007-06-16 11:23:26 +00:00
goldsimon
f93b8fe377 pbuf_copy(): removed copy & paste error which did not copy pbuf chains correctly 2007-06-14 17:40:39 +00:00
goldsimon
978c68dcf8 pbuf_copy: chained pbufs were not copied correctly because of wrong packet-queue-check 2007-06-14 07:22:43 +00:00
goldsimon
c0925d2d04 minor fix in assertion text 2007-06-14 07:21:55 +00:00
goldsimon
15e8208457 pcb_new sets conn->err if protocol is not implemented -> netconn_new_..() does not allocate a new connection for unsupported protocols. 2007-06-13 19:00:21 +00:00
fbernon
d8fe18c28e api_lib.c: change return expression in netconn_addr and netconn_peer, because conn->err was reset to ERR_OK without any reasons (and error was lost)... 2007-06-13 18:08:49 +00:00
fbernon
9ee85fb1b6 debug.h, api_msg.c: change LWIP_ERROR to use it to check errors like invalid pointers or parameters, and let the possibility to redefined it in cc.h. Use this macro to check "conn" parameter in api_msg.c functions (some others change will be done...). 2007-06-13 18:00:54 +00:00
fbernon
bdbc96f453 opt.h, mem.h, mem.c, memp.c, pbuf.c, ip_frag.c, vj.c: Fix bug #20162. Rename MEM_ALIGN in LWIP_MEM_ALIGN and MEM_ALIGN_SIZE in LWIP_MEM_ALIGN_SIZE to avoid some macro names collision with some OS macros. 2007-06-13 17:17:26 +00:00
fbernon
5f7831b3c8 Minor fix (comment is not at the good place) 2007-06-13 09:04:03 +00:00
goldsimon
6336279ce0 In udp_input, for UDP Lite, chksum_len_tx was used instead of chksum_len_rx 2007-06-12 07:03:32 +00:00
fbernon
ab4b59afb9 Partial fix for bug# 20147: "getsockopt() with SO_ERROR option" 'socket layer error is not updated if no operation on netconn). 2007-06-11 20:16:38 +00:00
goldsimon
046a270156 Added UDP lite support for sockets 2007-06-11 18:43:16 +00:00
goldsimon
2f293d53ba UDP Lite: corrected the use of chksum_len (based on RFC3828: if it's 0, create checksum over the complete packet. On RX, if it's < 8 (and not 0), discard the packet. Also removed the duplicate 'udphdr->chksum = 0' for both UDP & UDP Lite. 2007-06-11 18:03:57 +00:00
fbernon
1d7caed340 tcp_out.c: Fix for bug #20075 : "A problem with keep-alive timer and TCP flags" where TCP flags wasn't initialized in tcp_keepalive. Reported by Srinivas Gollakota with help of Oleg Tyshev. 2007-06-11 13:59:10 +00:00
fbernon
5993c816d8 Minor fix. Add "static" to IGMP's global variables, and rename group_list to igmp_group_list... 2007-06-11 07:27:12 +00:00
fbernon
15ccac78d9 Minor fix. Add comments in source file from documentation text file by Dominik Spies. 2007-06-11 07:26:10 +00:00
fbernon
d81841f54e Minor fix (coding style) 2007-06-10 20:02:43 +00:00
goldsimon
95f4c02381 Included switch LWIP_UDPLITE (enabled by default) to switch off UDP-Lite support if not needed (reduces udp.c code size) 2007-06-10 12:02:24 +00:00
goldsimon
df0e4492a7 Forgot some brackets in an if statement in v1.109 2007-06-10 09:49:04 +00:00
fbernon
e01f342048 Contrib module by Dominik Spies: autoip.h, autoip.c, dhcp.h, dhcp.c, netif.h, netif.c, etharp.h, etharp.c, opt.h: AutoIP implementation available for IPv4, with new options LWIP_AUTOIP and LWIP_DHCP_AUTOIP_COOP if you want to cooperate with DHCP. Some tips to adapt (see TODO mark in the source code). 2007-06-09 16:57:04 +00:00
fbernon
792f5b3f22 Patch from Jared Momose (j.momose@ieee.org) for bug #19699 : "Bug in SNMP ASN1 decode; submitted patch" 2007-06-09 10:36:21 +00:00
fbernon
a42baedc28 Just add a comment to explain that the lwip_sendto patch for LWIP_TCPIP_CORE_LOCKING option is just show a sample (it's not a full implementation, RAW connection and "to" field are not handled, ...) 2007-06-09 09:59:16 +00:00
goldsimon
6607cab902 set netif->output to etharp_output by default to save a function call 2007-06-08 22:42:43 +00:00
goldsimon
3a09de82e3 Corrected #if ... when to include copy_from_pbuf() 2007-06-08 22:20:59 +00:00
goldsimon
c028619cdd Modified order of parameters for etharp_output() to match netif->output so etharp_output() can be used directly as netif->output to save one function call. 2007-06-08 22:20:05 +00:00
goldsimon
6b1dc21383 Changed etharp_tmr() to be smaller 2007-06-08 22:19:23 +00:00
goldsimon
613acd93c0 Minor change: don't define some local (unused) variables if LWIP_TCPIP_CORE_LOCKING=1 2007-06-08 21:33:28 +00:00
goldsimon
837cb42679 Done some work on task #1549 (function documentation) 2007-06-08 20:59:17 +00:00
goldsimon
0e9cb48ea1 Changed define NETIF_INIT_SNMP(type, speed) to include the name of the struct netif to change... 2007-06-08 19:59:20 +00:00
fbernon
090aaefb39 Add LWIP_TCPIP_CORE_LOCKING option (0 as default value) to experiment "locking" as feature to communicate with tcpip_thread for sequential API (netconn & socket layers). Add a alternative code for lwip_sendto to how the code can be optimized with such feature.... 2007-06-08 19:27:59 +00:00
goldsimon
0b9c9f9ede pbuf_copy(): Corrected a wrong comment & try to behave correctly if LWIP_NOASSERT is defined 2007-06-08 17:27:36 +00:00
goldsimon
8e65fb920f loopif_output(): use pbuf_copy() to copy the pbuf to reduce code size 2007-06-08 17:24:58 +00:00
goldsimon
945460c67e Added define NETIF_INIT_SNMP(type, speed) to initialize per-netif snmp variables, added initialization of those to slipif and loopif. 2007-06-08 17:17:41 +00:00
goldsimon
b7e4d2a8ff Done some work on task #1549 (function documentation) and minor changes to meet coding standard + added some comments to make the code easier to read. 2007-06-08 17:10:05 +00:00
fbernon
9768657fc7 Minor fix (spaces) 2007-06-08 16:24:28 +00:00
goldsimon
a185e19bc1 Let lookup_group() call lookfor_group() to reduce code size, done some work on task #1549 (function documentation) and minor changes to meet coding standard 2007-06-08 12:54:40 +00:00
goldsimon
b7603f8600 Done some work on task #1549 (function documentation) 2007-06-08 12:52:46 +00:00
goldsimon
d8d281281c Done some work on task #1549 (function documentation) 2007-06-08 12:08:44 +00:00
goldsimon
5ee9c95ebd Fixed a cast warning by including the type to TCP_PCB_COMMON: (Moved members common to structures tcp_pcp and tcp_listen_pcb into define TCP_PCB_COMMON (like IP_PCB) to keep (possible) code changes consistent.) 2007-06-08 12:00:45 +00:00
goldsimon
fb5a1a2c0f Minor changes to meet coding standard 2007-06-08 11:51:57 +00:00
goldsimon
4a5a7ee922 Done some work on task #1549 (function documentation) 2007-06-08 11:49:59 +00:00
goldsimon
d258bc263a Done some work on task #1549 (function documentation) 2007-06-08 11:35:54 +00:00
goldsimon
8a30754e9c Done some work on task #1549 (function documentation) and minor changes to meet coding standard 2007-06-08 11:30:14 +00:00
goldsimon
a14bc9ed44 Moved members common to structures tcp_pcp and tcp_listen_pcb into define TCP_PCB_COMMON (like IP_PCB) to keep (possible) code changes consistent. 2007-06-08 11:28:47 +00:00
fbernon
75adf4bac6 Fix typo and remove RAW_STATS (not used) 2007-06-08 07:22:21 +00:00
goldsimon
8d6013454c Done some work on task #1549 (function documentation) 2007-06-07 21:36:20 +00:00
goldsimon
1a25062af0 Done some work on task #1549 (function documentation) 2007-06-07 21:29:44 +00:00
goldsimon
8aedcadd3e Done some work on task #1549 (function documentation) and minor changes to meet coding standard 2007-06-07 21:29:13 +00:00
goldsimon
027d59fd46 Done some work on task #1549 (function documentation) 2007-06-07 20:56:48 +00:00
fbernon
273e70e403 Minor, fix an obsolete comment about LWIP_SO_RCVTIMEO 2007-06-07 14:18:38 +00:00
goldsimon
aee6c1f72f Corrected setsockopt for LWIP_IGMP=1 (did not compile & errors were not returned) 2007-06-05 18:46:10 +00:00
goldsimon
9ee40d9f88 Defined IGMP_DEBUG defaulting to LWIP_DBG_OFF in opt.h 2007-06-05 18:19:48 +00:00
goldsimon
754fe60979 Typo in lwip_setsockopt() (getsockopt_internal was called instead of setsockopt_internal!!!) 2007-06-05 07:38:39 +00:00
goldsimon
3a429eabcd Set q to NULL after freeing it before returning: cleaner code! 2007-06-04 10:42:03 +00:00
fbernon
9209a2ee33 Minor fix for warning: pbuf_copy declaration is now mandatory (since it's used in icmp.c) 2007-06-04 09:54:58 +00:00
goldsimon
3a607a197e opt.h, ip_frag.c, ip_frag.h, ip.c: Added option IP_FRAG_USES_STATIC_BUF (defaulting to off for now) that can be set to 0 to send fragmented packets by passing PBUF_REFs down the stack. 2007-06-03 18:36:42 +00:00
goldsimon
3639daa329 IPv6: #define IPH_PROTO(hdr) (iphdr->nexthdr) to remove #ifdef IPv6 in udp_input() 2007-06-03 18:10:33 +00:00
goldsimon
8fd6a61df6 Done some work on task #1549 (function documentation) 2007-06-03 18:05:52 +00:00
goldsimon
a6b0d40f9d Converted some DEBUGFs that should never happen to LWIP_ASSERTs 2007-06-03 17:18:33 +00:00
goldsimon
974cf08e5d udp_input(): Input pbuf was not freed if pcb had no recv function registered, p->payload was modified without modifying p->len if sending icmp_dest_unreach() (had no negative effect but was definitively wrong). 2007-06-03 11:32:03 +00:00
goldsimon
75fd6fc4a4 Needed for patch to bug #19937: pbuf_copy is always compiled, not only if ARP_QUEUEING is enabled 2007-06-03 11:28:25 +00:00
goldsimon
4f7dc3c76c Done some work on task #1549 (function documentation) 2007-06-03 11:26:55 +00:00
goldsimon
7abfe74fa4 Corrected bug #19937: ICMP assumes p_buf has space for ethernet header. Allocating new pbuf if the input pbuf isn't big enough. 2007-06-03 10:48:23 +00:00
goldsimon
d5a159d7af Done some work on task #1549 (function documentation) 2007-06-02 17:12:36 +00:00
goldsimon
add68e0da1 Checked in patch #5914: Moved sockopt processing into tcpip_thread. 2007-06-01 17:15:54 +00:00
goldsimon
a85f9db5b1 Made etharp_find_addr() use find_entry to concentrate the knowledge of arp_table layout in find_entry(). 2007-06-01 17:11:47 +00:00
goldsimon
c43ab76bbe Use TCP_RMV instead of tcp_pcb_remove when removing pcbs from tcp_bound_pcbs list (bug introduced while fixing bug #1895) 2007-05-29 11:02:53 +00:00
goldsimon
98df3c6e0a Removed LWIP_DEBUG_ASSERT 2007-05-24 07:19:34 +00:00
fbernon
0a4130a4ff Minor, fix files modified by last patch... 2007-05-23 19:49:55 +00:00
fbernon
93828fde80 Fixed patch #5965 : Remove unused conntype in struct api_msg_msg, by Simon Goldsmith 2007-05-23 19:28:07 +00:00
fbernon
a3fdc33f88 api_lib.c: Implement SO_RCVTIMEO for accept and recv on TCP connections, such present in patch #5959. 2007-05-23 19:18:09 +00:00
fbernon
a330917ee8 api_lib.c, sockets.c: Fixed bug #5958 for netconn_listen (acceptmbox only allocated by do_listen if success) and netconn_accept errors handling. In most of api_lib functions, we replace some errors checkings like "if (conn==NULL)" by ASSERT, except for netconn_delete. 2007-05-23 18:43:30 +00:00
fbernon
0fe5dd8d43 api_lib.c: Fixed bug #5957 "Safe-thread problem inside netconn_recv" to return an error code if it's impossible to fetch a pbuf on a TCP connection (and not directly close the recvmbox). 2007-05-23 17:53:35 +00:00
fbernon
953d783a3e api.h, api_lib.c, api_msg.c, sockets.c: group the different NETCONN_UDPxxx code in only one part... 2007-05-23 17:46:53 +00:00
fbernon
d1ef610822 Minor fix (spaces, indent) and check for LWIP_SO_RCVTIMEO.. 2007-05-22 21:29:04 +00:00
fbernon
2ff620e1b5 sys.h, sys.c, api_lib.c, tcpip.c: remove sys_mbox_fetch_timeout() (was only used for LWIP_SO_RCVTIMEO option) and use sys_arch_mbox_fetch() instead of sys_mbox_fetch() in api files. Now, users SHOULD NOT use internal lwIP features like "sys_timeout" in their application threads. 2007-05-22 20:51:34 +00:00
goldsimon
0aaf69769f Fixed bug #1895 (tcp_bind not correct) by introducing a list of bound but unconnected (and non-listening) tcp_pcbs. 2007-05-22 20:48:36 +00:00
goldsimon
b5ab0c5285 Included some missing braces in lwip_send & lwip_sendto (if !LWIP_UDP && !LWIP_RAW) 2007-05-22 20:32:22 +00:00
goldsimon
2442b985bf Broke some (too long) lines down to multiple lines, made the file fit our coding standards 2007-05-22 20:30:30 +00:00
goldsimon
78201c0146 Added some comments, better max-size-check, removed Adams original mem_malloc. 2007-05-22 19:38:12 +00:00
fbernon
499f4689be api.h, api_lib.c, api_msg.h, api_msg.c: change the struct api_msg_msg to see which parameters are used by which do_xxx function, and to avoid "misusing" parameters (patch #5938). 2007-05-22 09:54:00 +00:00
fbernon
2106f491d0 Minors fix (spaces, comments, unused variable) 2007-05-22 08:20:18 +00:00
goldsimon
81ac03a28b Included patch #5938: changed raw_pcb.protocol from u16_t to u8_t since for IPv4 and IPv6, proto is only 8 bits wide. This affects the api, as there, the protocol was u16_t, too. 2007-05-22 07:31:06 +00:00
fbernon
980af63b8d Remove warning (missing include) 2007-05-21 16:55:57 +00:00
goldsimon
613644bfc6 Re-included unneeded cases in do_disconnect() and do_send() to prevent warnings. 2007-05-21 09:52:23 +00:00
fbernon
7f5d6bc964 api_msg.c: Fix some errors forwarding (https://savannah.nongnu.org/task/?6880) 2007-05-19 16:27:02 +00:00
fbernon
d5e37309e5 Minor Fix (unsed code, spaces, idents..) 2007-05-19 16:24:40 +00:00
fbernon
6bfa99a774 Minor fixs to reduce footprint on the "recv part" of Sequential API... 2007-05-19 13:54:56 +00:00
fbernon
c899097802 Remove warning in snmp/msg_in.c 2007-05-19 10:19:14 +00:00
goldsimon
70187bd47e Gave the overflow functions some better names which correspond to the (future) mem.c function names 2007-05-18 21:10:33 +00:00
goldsimon
018efc9631 Check the user-overridable defines MEMP_SANITY_REGION_BEFORE and MEMP_SANITY_REGION_AFTER for aligment. 2007-05-18 20:25:27 +00:00
goldsimon
a4f4e6e71d Addition to patch #5913: decrease size of memp_memory.
Added option MEMP_OVERFLOW_CHECK to check for memp elements to overflow.
2007-05-18 19:48:44 +00:00
goldsimon
cde11f9d9c Added some new functions as null-definitions if NO_SYS=1 2007-05-18 18:34:34 +00:00
goldsimon
8fa3b6802e Added #if !NO_SYS to most of the api files since they only work with a sys layer (makes it easier for port projects). 2007-05-18 11:27:46 +00:00
goldsimon
4192df97ec Corrected check of PBUF_POOL overflow 2007-05-18 11:13:34 +00:00
goldsimon
9085abd838 Added comments whether fields are host or network byte order (task #1568) 2007-05-17 12:45:50 +00:00
goldsimon
874415a193 Added comments whether fields are host or network byte order (task #1568) 2007-05-17 12:21:32 +00:00
goldsimon
5e9d80fbdb tcpip_input()/tcpip_ethinput(): don't free the pbuf if returning ERR_MEM, that is the netif driver's responsibility 2007-05-17 09:04:36 +00:00
goldsimon
75f7f21eb0 ...and again replacing tab by spaces ;-) 2007-05-17 09:02:30 +00:00
goldsimon
c01e265e07 changes tabs to spaces 2007-05-17 08:55:50 +00:00
goldsimon
5c89228878 Fix bug #19729: free pbuf if netif->input() returns != ERR_OK. 2007-05-16 19:54:54 +00:00
goldsimon
2740a81103 If a udp_pcb has a local_ip set, check if it is the same as the one of the netif used for sending to prevent sending from old addresses after a netif address gets changed (partly fixes bug #3168). 2007-05-16 18:55:25 +00:00
goldsimon
a27dc1e908 Finally removed all occurences of PBUF_STATS :-) 2007-05-16 18:00:36 +00:00
goldsimon
e9abfa6602 Removed PBUF_STATS and related code from opt.h & msg_in.c 2007-05-16 14:15:54 +00:00
fbernon
0f8a2d6418 tcpip.c, igmp.h, igmp.c: Fixed bug "#19800 : IGMP: igmp_tick() will not work with NO_SYS=1". Note that igmp_init is always in tcpip_thread (and not in tcpip_init) because we have to be sure that network interfaces are already added (mac filter is updated only in igmp_init for the moment). 2007-05-16 14:12:52 +00:00
goldsimon
2e479b88a8 Updated stats.h/.c to reflect the integration of pbuf pool into memp 2007-05-16 13:49:44 +00:00
goldsimon
fd982597fe Removed semaphores from memp, changed sys_sem_wait calls into sys_arch_sem_wait calls to prevent timers from running while waiting for the heap. This fixes bug #19167. 2007-05-16 11:02:07 +00:00
goldsimon
887077b5a4 pbuf_alloc(PBUF_POOL): Added asserts to make sure payload+len is still in bound of the pbuf (also to make sure bug #15659 is fixed). 2007-05-16 10:45:28 +00:00
fbernon
4e71ec4480 Minor fix (tabs) 2007-05-15 16:34:30 +00:00
goldsimon
8ef712787a Aligned MIN_SIZE, memset(0) the complete ram_heap instead of only the used area, only to be on the safe side... 2007-05-15 10:35:48 +00:00
goldsimon
6c39b8a10c Found a little bug in ARP_QUEUEING: if pbuf_alloc for the packet to be queued failed, pbuf_copy was called with a NULL pointer. 2007-05-14 20:10:46 +00:00
fbernon
3c32c993f5 Include inet.h to avoid warnings (see http://savannah.nongnu.org/patch/?5865). 2007-05-14 08:32:08 +00:00
goldsimon
62d705903e task #6831: removed the option PBUF_POOL_USES_MEMP and removed the old pbuf pool code, pbuf pool now always allocates from a memp pool 2007-05-13 18:17:22 +00:00
goldsimon
a5e2e9ea03 (see task #6831): Included new option PBUF_POOL_USES_MEMP to use a memp pool for PBUF_POOL pbufs instead of the old pool implementation in pbuf.c to remove redundant code. 2007-05-13 16:16:03 +00:00
goldsimon
055e3d52b6 Modified struct pbuf size determination so that sizeof(struct pbuf) does not necessarily be a multiple of MEM_ALIGNMENT 2007-05-13 16:12:29 +00:00
goldsimon
efd3104fd0 Fixed bug from patch #5865 by moving the defines for socket options (lwip_set/-getsockopt) used with level IPPROTO_TCP from tcp.h to sockets.h. 2007-05-13 14:34:02 +00:00
goldsimon
bd570561e8 Fix for bug #19740: 2 static functions are unused, simply ifdefing them out for now to get rid of warnings 2007-05-13 11:08:04 +00:00
goldsimon
19d49db305 sys.h: moved #include "arch/sys_arch.h" down a little, so that functions using the defines SYS_ARCH_TIMEOUT/SYS_MBOX_EMPTY can be define as static (inline) in sys_arch.h. This should not affect any others since the defines couldn't be overridden anyway... 2007-05-13 10:31:51 +00:00
goldsimon
ab4993fda2 Ooops, checked in the wrong version before :-( 2007-05-11 19:42:50 +00:00
goldsimon
6f4056cf99 - Changed mem_malloc(): near fit behaves like exact fit since mem->next is always used
- Included some more alignment statements
- Every malloced block is at least MIN_SIZE big (can be overridden, can be used to work against fragmentation)
- Added many comments so that the next developer knows what I was thinking :-)
2007-05-11 19:42:10 +00:00
fbernon
9cf1390dc6 sockets.c, api_lib.c, api_msg.h, api_msg.c, netifapi.h, netifapi.c, tcpip.c: Include a function pointer instead of a table index in the message to reduce footprint. Disable some part of lwip_send and lwip_sendto if some options are not set (LWIP_TCP, LWIP_UDP, LWIP_RAW). 2007-05-11 08:58:23 +00:00
goldsimon
6a2e323792 Added some ASSERTs and NULL-pointer checks to sys_timeout/sys_untimeout 2007-05-10 14:23:38 +00:00
goldsimon
d4834803ae Included opt.h before checking the options. 2007-05-10 11:00:16 +00:00
goldsimon
84fc489e0c Included patch #5448: include '#ifdef __cplusplus \ extern "C" {' in all header files. Now you can write your application using the lwIP stack in C++ and simply #include the core files. Note I have left out the netif/ppp/*h header files for now, since I don't know which files are included by applications and which are for internal use only. 2007-05-10 10:59:20 +00:00
goldsimon
255d5a748f Included patch #5920: Create define to override C-library memcpy. 2 Defines are created: MEMCPY() for normal memcpy, SMEMCPY() for situations where some compilers might inline the copy and save a function call. Also replaced all calls to memcpy() with calls to (S)MEMCPY(). 2007-05-10 05:20:05 +00:00
goldsimon
b41520f9e2 Removed unused pbuf stats items 2007-05-08 18:55:29 +00:00
goldsimon
0e881170c2 Fixed 3 typos of the version checked in yesterday... 2007-05-08 18:09:14 +00:00
goldsimon
1571881f7a If MEM_LIBC_MALLOC==1, allow the defines (e.g. mem_malloc() -> malloc()) to be overriden in case the C-library malloc implementation is not protected against concurrent access. 2007-05-08 11:00:49 +00:00
goldsimon
4dbf1dcad4 mem_realloc: Added assert to check that memory is shrinked, not expanded. 2007-05-08 10:50:19 +00:00
goldsimon
824ef1ff2c Another attempt to fix bug #17922 2007-05-07 19:48:29 +00:00
goldsimon
79d9b36ece Further update to ARP queueing: Changed pbuf_copy() implementation so that it can be reused (don't allocate the target pbuf inside pbuf_copy()). 2007-05-04 21:31:25 +00:00
goldsimon
be316e81a7 Introduced fast one-entry-cache to speed up ARP lookup when sending multiple packets to the same host. 2007-05-04 19:31:27 +00:00
goldsimon
615e52d396 Prototype of igmp_tick() in igmp.h did not match the one in igmp.c 2007-05-04 16:30:37 +00:00
goldsimon
7f232b43ff checked in patch #5913: in memp_malloc() we can return memp as mem to save a little RAM (next pointer of memp is not used while not in pool). 2007-05-04 15:52:11 +00:00
fbernon
5a12aeb4a1 sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c: Fix bug #19162 "lwip_sento: a possible to corrupt remote addr/port connection state". Reduce problems "not enought memory" with netbuf (if we receive lot of datagrams). Improve lwip_sendto (only one exchange between sockets api and api_msg which run in tcpip_thread context). Add netconn_sento function. WARNING, if you directly access to "fromaddr" & "fromport" field from netbuf struct, these fields are now renamed "addr" & "port". 2007-05-04 15:18:29 +00:00
fbernon
05ea5f05ae Minor fix (tab, indent...) to respect source code style... 2007-05-04 15:14:14 +00:00
jifl
e895aa71a4 * sockets.c: Fix ioctl FIONREAD when some data remains from last recv.
(patch #3574).
2007-05-03 19:13:27 +00:00
fbernon
eb28133b1f Remove forgotten printf in pbuf_init(). 2007-05-02 09:26:51 +00:00
goldsimon
c66932ab25 Checked in patch #5453: removed mutex/other locking stuff if SYS_LIGHTWEIGHT_PROT=0, moved some pbuf pool logic to static functions 2007-04-30 13:18:22 +00:00
goldsimon
36e8213e42 PBUF_POOL_BUFSIZE: For the default length, alignment check in pbuf_init() failed. 2007-04-30 13:12:33 +00:00
goldsimon
cde6d0deed pbuf_alloc() / pbuf_realloc(): added LWIP_DEBUG_ASSERT() and cast operator when assigning s32_t to u16_t to get rid of compiler warnings 2007-04-30 11:56:48 +00:00
goldsimon
b462cb4575 Define ETH_PAD_SIZE after including opt.h to avoid conflict with lwipopts.h 2007-04-30 11:45:39 +00:00
goldsimon
dd4ccfc672 task #6792: added added LWIP_DEBUG_ASSERT(x,y), which triggers #ifndef LWIP_NOASSERT and #ifdef LWIP_DEBUG 2007-04-29 16:35:55 +00:00
goldsimon
6006e2f917 Changed some includes for loopif and added comments 2007-04-24 08:42:32 +00:00
goldsimon
4bedb07aa0 Added some more LWIP_UNUSED_ARG()s 2007-04-24 08:35:19 +00:00
goldsimon
02e194b15f fix bug #2595: "loopif results
in NULL reference for incoming TCP packets". Loopif has to be configured
(using LWIP_LOOPIF_MULTITHREADING) to directly call netif->input()
(multithreading environments, e.g. netif->input() = tcpip_input()) or
putting packets on a list that is fed to the stack by calling loopif_poll()
(single-thread / NO_SYS / polling environment where e.g.
netif->input() = ip_input).
2007-04-23 20:00:29 +00:00
goldsimon
82e579a29d Changed the comment to pbuf_realloc() that it can't grow (only shrink) chains to reflect the fact that we decided not to change this. 2007-04-17 17:48:35 +00:00
jifl
eacac8ee1d * sockets.h: FD_SETSIZE needs to match number of sockets, which is
MEMP_NUM_NETCONN in sockets.c right now.
2007-04-17 14:50:08 +00:00
jifl
cd19d81411 * pbuf.c: Use s32_t in pbuf_realloc(), as an s16_t can't reliably hold
the difference between two u16_t's.
2007-04-17 14:44:41 +00:00
jifl
748ba22a19 * icmp.c: Reset IP header TTL in ICMP ECHO responses (bug #19580). 2007-04-12 18:55:44 +00:00
kieranm
79be888b6f * tcp.c, tcp_in.c, tcp_out.c, tcp.h: Modify way the retransmission
timer is reset to fix bug#19434, with help from Oleg Tyshev.
2007-04-12 14:56:07 +00:00
jifl
58b3b0603d Note succesful error return for sys_arch_mbox_tryfetch 2007-04-12 02:50:08 +00:00
jifl
9d43d74ee3 Document new sys_arch_mbox_tryfetch requirement for ports 2007-04-12 01:30:53 +00:00
fbernon
9bc49b3268 opt.h: rename DBG_TYPES_ON & DBG_MIN_LEVEL with LWIP_ prefix. 2007-04-12 00:16:30 +00:00
jifl
d92e0dec22 From bug #19222 comment #18. Minor tweak to sys_mbox_fetch to avoid redundant
code.
2007-04-11 23:16:49 +00:00
goldsimon
7932bf483b Ongoing fix to patch #5822: converted more statements like (void)arg; into LWIP_UNUSED_ARG(arg); 2007-04-11 19:39:24 +00:00
goldsimon
e54f3fdaac 3rd fix for bug #11400 (arp-queuing): More pbufs than previously thought need to be copied (everything but PBUF_ROM!). Cleaned up pbuf.c: removed functions no needed any more (by etharp). 2007-04-11 18:50:45 +00:00
jifl
e8b055b8d3 Oops, forgot final version of Changelog for last change I made. 2007-04-11 16:20:07 +00:00
jifl
0c94f22ded * sys.h, api_lib.c: Provide new sys_mbox_tryfetch function.
Require ports to provide new sys_arch_mbox_tryfetch function to get
    a message if one is there, otherwise return with SYS_MBOX_EMPTY.
2007-04-11 15:41:03 +00:00
kieranm
05909d6fa7 Apply patch #5745: Fix "Constant is long" warnings with 16bit
compilers.  Contributed by avatar@mmlab.cse.yzu.edu.tw
2007-04-11 13:32:41 +00:00
jifl
712a22e18c Applied patch #5832 from Tai-hwa Liang to keep ipv6 building. 2007-04-10 13:18:14 +00:00
fbernon
35893e36dd opt.h, tcpip.h, tcpip.c, netifapi.h, netifapi.c: New configuration option LWIP_NETIF_API allow to use thread-safe functions to add/remove netif in list, and to start/stop dhcp clients, using new functions from netifapi.h. Disable as default (no port change to do). 2007-04-06 10:09:24 +00:00
fbernon
787eecbf43 Fix mistakes in netconn's error field checking. 2007-04-05 21:11:16 +00:00
fbernon
5f1aac1450 api_msg.c: Fix bug #16830: "err_tcp() posts to connection mailbox when no pend on the mailbox is active". Now, the post is only done during a connect, and do_send, do_write and do_join_leave_group don't do anything if a previous error was signaled. 2007-04-05 16:54:20 +00:00
fbernon
7fdd312cca sockets.c: remplace ENOBUFS errors on alloc_socket by ENFILE to be more BSD compliant. 2007-04-05 16:49:33 +00:00
goldsimon
f16911f7dd comment to the last check-in was incomplete: Introduced #define LWIP_UNUSED_ARG(x) use this for and architecture-independent form to tell the compiler you intentionally are not using this variable. Can be overriden in cc.h. 2007-04-04 19:55:42 +00:00
goldsimon
f6bdd2cae4 Introduced #define LWIP_UNUSED_ARG(x) use this for and architecture-independent form to tell the compiler you intentionally are not using this variable. Can be overriden in cc.h. 2007-04-04 19:54:22 +00:00
goldsimon
f8aa14d402 Fix bug #5848: add #if PAP_SUPPORT around the whole file pap.h 2007-04-04 19:21:27 +00:00
goldsimon
11a4f5538b Change names of 2 global variables again, as the previous names did not have lwip-style... 2007-04-03 16:33:14 +00:00
fbernon
26e88dc2c1 Don't set the IP_DF ("Don't fragment") flag in the IP header in IP output packets. See patch #5834. 2007-04-03 14:08:11 +00:00
goldsimon
34fcccc50b - Changed the names of some variables in SNMP module to avoid them shadowing each other (which produces a lot of warnings and makes the code hard to maintain)
- Added missing defines for 3 snmp-functions if LWIP_SNMP==0
2007-04-02 20:39:24 +00:00
goldsimon
2f53df93e8 Removed printf formatter warning introduced by last check-in (changed local variable from u32_t to u16_t) 2007-04-02 20:34:18 +00:00
fbernon
996d5fda69 ip.c: if IP_REASSEMBLY is set to 1, don't set the IP_DF ("Don't fragment") flag in the IP header in IP output packets. 2007-03-30 13:30:42 +00:00
fbernon
f75be85eea Add NETIF_FLAG_ETHARP flag and comments in this skeleton. 2007-03-30 10:32:57 +00:00
fbernon
f1412f5e5a api_msg.c: add a "pcb_new" helper function to avoid redundant code, and to add missing pcb allocations checking (in do_bind, and for each raw_new). Fix style. 2007-03-30 09:42:16 +00:00
fbernon
4208bcd8d1 Fix on NETIF_FLAG_ETHARP test (test inverted) 2007-03-30 09:25:41 +00:00
fbernon
5368a760cf most of files: prefix all debug.h define with "LWIP_" to avoid any conflict with others environment defines (these were too "generic"). 2007-03-30 08:47:04 +00:00
fbernon
9ec08fa76a Missing recv_timeout initialize in accept_function. Minor style fix (indent, mbox checking...) 2007-03-28 18:21:24 +00:00
fbernon
913a99dd35 api.h, api_lib.c, sockets.c: netbuf_ref doesn't check its internal pbuf_alloc call result and can cause a crash. lwip_send now check netbuf_ref result. 2007-03-28 17:26:06 +00:00
goldsimon
d956a39fec sockets.c Remove "#include <errno.h>" from sockets.c to avoid multiple
definition of macros (in errno.h and lwip/arch.h) if LWIP_PROVIDE_ERRNO is
    defined. This is the way it should have been already (looking at
    doc/sys_arch.txt)
2007-03-28 14:49:04 +00:00
kieranm
01d9bd573e 2007-03-28 Kieran Mansley
* opt.h Change default PBUF_POOL_BUFSIZE (again) to accomodate default MSS +
    IP and TCP headers *and* physical link headers
2007-03-28 12:27:38 +00:00
fbernon
d301b69dae Minor. Add LWIP_NETIF_HOSTNAME in skeleton and comment on #endif for LWIP_SNMP. 2007-03-28 10:29:06 +00:00
fbernon
c1fe7517ec opt.h, netif.h, dhcp.h, dhcp.c: New configuration option LWIP_NETIF_HOSTNAME allow to define a hostname in netif struct (this is just a pointer, so, you can use a hardcoded string, point on one of your's ethernetif field, or alloc a string you will free yourself). It will be used by DHCP to register a client hostname, but can also be use when you call snmp_set_sysname. 2007-03-28 09:39:12 +00:00
fbernon
cd1c96db56 netif.h, netif.c: A new NETIF_FLAG_ETHARP flag is defined in netif.h, to allow to initialize a network interface's flag with. It tell this interface is an ethernet device, and we can use ARP with it to do a "gratuitous ARP" (RFC 3220 "IP Mobility Support for IPv4" section 4.6) when interface is "up" with netif_set_up(). 2007-03-28 09:23:35 +00:00
goldsimon
4aee4c1ac7 Free pbuf if pbuf_header() fails 2007-03-26 19:27:11 +00:00
goldsimon
bef0503545 Removed warning: sizeof() was automatically casted to negative 2007-03-26 18:57:30 +00:00
goldsimon
7aea2cd6f1 Remove warnings: "converting from 'u32_t' to 'u16_t': possible loss of data": check that received timeout values fit into u16_t. 2007-03-26 18:52:52 +00:00
goldsimon
028d707077 Remove warning in netif_add(): "converting from 's16' to 'u8_t': possible loss of data" (static variable netifnum) 2007-03-26 17:19:12 +00:00
goldsimon
c9df03d1a9 Remove warnings: "comparision between signed and unsigned" and "converting from 'unsigned long' to 'u8_t': possible loss of data" 2007-03-26 17:15:23 +00:00
fbernon
19338d2774 opt.h, tcpip.c: New configuration option LWIP_ARP allow to disable ARP init at build time if you only use PPP or SLIP. The default is enable. Note we don't have to call etharp_init in your port's initilization sequence if you use tcpip.c, because this call is done in tcpip_init function. 2007-03-26 16:13:46 +00:00
fbernon
005e5f2f72 api_lib.c (from Dmitry Potapov) : patch for netconn_write(), fixes a possible race condition which cause to send some garbage. It is not a definitive solution, but the patch does solve the problem for most cases. 2007-03-26 15:37:48 +00:00
fbernon
e54cd23ecb stats.h, stats.c, msg_in.c: Stats counters can be change to u32_t if necessary with the new option LWIP_STATS_LARGE. If you need this option, define LWIP_STATS_LARGE to 1 in your lwipopts.h. More, unused counters are not defined in the stats structs, and not display by stats_display(). Note that some options (SYS_STATS and RAW_STATS) are defined but never used. Fix msg_in.c with the correct #if test for a stat display. 2007-03-22 16:36:45 +00:00
fbernon
544e469eeb api_msg.h, api_msg.c: Remove obsolete API_MSG_ACCEPT and do_accept (never used). 2007-03-22 09:34:18 +00:00
fbernon
db739d16ce api_lib.c: somes resources couldn't be freed if there was errors during netconn_new_with_proto_and_callback. 2007-03-22 09:27:04 +00:00
fbernon
5fff6e7ff8 ethernetif.c: update netif->input calls to check return value. In older ports, it's a good idea to upgrade them, even if before, there could be another problem (access to an uninitialized mailbox). 2007-03-22 09:09:27 +00:00
goldsimon
776c01e60b fixed bug #5067 (essentialy a signed/unsigned warning fixed by casting to unsigned). 2007-03-21 21:14:06 +00:00
fbernon
3eb38d7611 api_lib.c, api_msg.c, tcpip.c: integrate sys_mbox_fetch(conn->mbox, NULL) calls from api_lib.c to tcpip.c's tcpip_apimsg(). Now, use a local variable and not a dynamic one from memp to send tcpip_msg to tcpip_thread in a synchrone call. Free tcpip_msg from tcpip_apimsg is not done in tcpip_thread. This give a faster and more reliable communication between api_lib and tcpip. 2007-03-21 16:38:58 +00:00
fbernon
766159e27e opt.h: Add LWIP_NETIF_CALLBACK (to avoid compiler warning) and set it to 0. 2007-03-21 15:35:02 +00:00
fbernon
bb34d8cfd1 api_msg.c, igmp.c, igmp.h: Fix C++ style comments 2007-03-21 14:47:52 +00:00
fbernon
a880469d7d Remove obsolete include from my port. 2007-03-21 13:57:45 +00:00
kieranm
e5147d5562 * netif.c, netif.h: Apply patch#4197 with some changes (originator: rireland@hmgsl.com).
Provides callback on netif up/down state change.
2007-03-21 13:24:20 +00:00
kieranm
d7ff85850c 2007-03-21 Kieran Mansley
* opt.h Change default PBUF_POOL_BUFSIZE to accomodate default MSS +
    IP and TCP headers
2007-03-21 13:05:51 +00:00
kieranm
7294cb080b * Fix all uses of pbuf_header to check the return value. In some
cases just assert if it fails as I'm not sure how to fix them, but
    this is no worse than before when they would carry on regardless
    of the failure.
2007-03-21 12:55:00 +00:00
kieranm
b422864d5d sockets.c, igmp.c, igmp.h, memp.h: Fix C++ style comments and
comment out missing header include in icmp.c
2007-03-21 12:50:04 +00:00
fbernon
eab3667b61 memp.h, stats.c: Fix stats_display function where memp_names table wasn't synchronized with memp.h 2007-03-20 18:12:06 +00:00
fbernon
713e89cdb2 tcpip.c: Initialize tcpip's mbox, and verify if initialized in tcpip_input, tcpip_ethinput, tcpip_callback, tcpip_apimsg, to fix a init problem with network interfaces. Also fix a compiler warning. 2007-03-20 18:01:40 +00:00
kieranm
b290f0442d udp.c: Only try and use pbuf_header() to make space for headers if
not a ROM or REF pbuf.
2007-03-20 16:58:08 +00:00
fbernon
b035a6196a Add return types to tcpip_apimsg() and api_msg_post() to check ERR_MEM problems (api_lib.c can be change now). 2007-03-19 20:35:32 +00:00
fbernon
e4cd00b5ea Remove unimplemented "memp_realloc" function from memp.h. 2007-03-19 20:23:58 +00:00
goldsimon
3bb13829fe checked in patch #5796: pbuf_alloc: len field claculation caused memory corruption. 2007-03-11 20:07:37 +00:00
fbernon
1af676385c Add igmp.h and igmp.c inside tree :
src/core/ipv4/igmp.c
src/include/ipv4/lwip/igmp.h
2007-03-11 19:45:32 +00:00
fbernon
a24a170b84 New configuration option LWIP_IGMP to enable IGMP processing. Based on only one filter per all network interfaces. Declare a new function in netif to enable to control the MAC filter (to reduce lwIP traffic processing).
Mace Gael for the upper layers, Steve Reynolds for lower ones...
2007-03-11 19:16:38 +00:00
goldsimon
bc4b3764fc Fixed bug #19251 (missing `const' qualifier in socket functions), to get more compatible to standard POSIX sockets. 2007-03-11 17:57:13 +00:00
fbernon
9b143dd5dc Based on patch from Dmitry Potapov, bug#19225.
Add asserts inside bind, connect and sendto to check input parameters. Remove excessive set_errno() calls after get_socket(), because errno is set inside of get_socket(). Move last sock_set_errno() inside lwip_close.
2007-03-11 16:53:37 +00:00
fbernon
5c65d4733b Keepalive values can be configured at run time with LWIP_TCP_KEEPALIVE, but don't change this unless you know what you're doing (default are RFC1122 compliant). Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set in seconds.
Old TCP_KEEPALIVE can always be used, and its only difference with TCP_KEEPIDLE is this last use seconds and not milliseconds with setsockopt.

Some documentation (not perfect, but...):

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.commtechref/doc/commtrf2/setsockopt.htm
2007-03-11 15:53:43 +00:00
goldsimon
41a84ef1d3 Fixed bug #11400-2: New etharp queueing introduced bug: memp_memory was allocated too small. 2007-03-09 07:15:04 +00:00
fbernon
86cecd6700 Keepalive values can be configured at compile time, but don't change this unless you know what you're doing (default are RFC1122 compliant). 2007-03-08 21:02:39 +00:00
fbernon
fdcb87db19 Implement LWIP_SO_RCVTIMEO configuration option to enable/disable SO_RCVTIMEO on UDP sockets/netconn. 2007-03-08 20:58:46 +00:00
goldsimon
a868832776 Initialize dhcp timers in tcpip_thread (if LWIP_DHCP) to protect the stack from concurrent access. 2007-03-08 10:37:31 +00:00
goldsimon
5eabd4591a SNMP UDP ports can be configured at compile time 2007-03-08 10:32:29 +00:00
goldsimon
91afefa61a Reverted pbuf_alloc() to REV 1.82 2007-03-07 15:47:54 +00:00
goldsimon
ea7bdb8e9e Last change (reduce code size if not used) had a bug... 2007-03-06 19:37:32 +00:00
fbernon
7cda728469 Fix some "little" build problems, and a redundancy call to "lwip_stats.link.recv++;" in low_level_input() & ethernetif_input().
If LINK_STATS was defined, tcpip.c couldn't be build.
Even if IP_FRAG or IP_REASSEMBLY were set, ip_frag.c functions are not build.
2007-03-06 19:31:49 +00:00
fbernon
7fd37d4e87 Implement SO_RCVTIMEO on UDP sockets/netconn. 2007-03-06 16:41:02 +00:00
goldsimon
874bfe19d2 Reduce code size: don't include code in those files if IP_FRAG == 0 and IP_REASSEMBLY == 0 2007-03-06 15:27:58 +00:00
fbernon
ed07d481d6 opt.h, ip_frag.h, tcpip.h, tcpip.c, ethernetif.c: add new configuration option named ETHARP_TCPIP_ETHINPUT, which enable the new tcpip_ethinput. Allow to do ARP processing for incoming packets inside tcpip_thread (protecting ARP layer against concurrent access). You can also disable old code using tcp_input with new define ETHARP_TCPIP_INPUT set to 0. Older ports have to use tcpip_ethinput. 2007-03-06 14:18:02 +00:00
goldsimon
7115975212 fixed compiler warning "initialization dircards qualifiers from pointer target type" 2007-03-06 07:28:22 +00:00
fbernon
ddf0982d0f opt.h, sockets.h: add new configuration options (LWIP_POSIX_SOCKETS_IO_NAMES, ETHARP_TRUST_IP_MAC, review SO_REUSE).
Also include directly tcp.h in sockets.h to improve application independancy from ip stack (avoid to include directly in application the "unknown" tcp.h if you need options like TCP_NODELAY and TCP_KEEPALIVE in application.
2007-03-05 14:43:11 +00:00
goldsimon
7b54ddd828 Corrected patch to bug #19168 2007-03-04 17:21:43 +00:00
fbernon
1ffd049833 api_msg.c: Remove some compiler warnings : parameter "pcb" was never referenced. 2007-03-04 16:25:04 +00:00
fbernon
12e0a2ef7d api_lib.c: Fix "[patch #5764] api_lib.c cleanup: after patch #5687" (from Dmitry Potapov).
The api_msg struct stay on the stack (not moved to netconn struct).
2007-03-04 14:49:46 +00:00
goldsimon
9da7afb345 Fixed buf #19168 based on patch by Dmitry Potapov 2007-03-04 12:45:58 +00:00
goldsimon
1f544e087b Fix BUG#11400 - don't corrupt existing pbuf chain when enqueuing multiple pbufs to a pending ARP request 2007-03-04 12:12:42 +00:00
fbernon
e1b6a4cb21 udp.c: remove obsolete line "static struct udp_pcb *pcb_cache = NULL;"
Its is static, and never used in udp.c except udp_init().
2007-03-03 17:00:44 +00:00
goldsimon
bb8522b737 tcpip.c: Moved call to ip_init(), udp_init() and tcp_init() from tcpip_thread() to tcpip_init() 2007-03-03 16:22:38 +00:00
fbernon
e075581d76 no message 2007-03-02 19:35:15 +00:00
kieranm
527d18a526 2007-02-28 Kieran Mansley (based on patch from Simon Goldschmidt)
* api_lib.c, tcpip.c, memp.c, memp.h: make API msg structs allocated
    on the stack and remove the API msg type from memp
2007-02-28 14:15:43 +00:00
kieranm
5ace5976a1 * pbuf.c: Fix BUG#17645 - ensure pbuf payload pointer is not moved
outside the region of the pbuf by pbuf_header()
2007-02-28 13:45:35 +00:00
kieranm
c52ac01fbc sockets.c: Fix BUG#19161 - ensure milliseconds timeout is non-zero
when supplied timeout is also non-zero
2007-02-28 12:52:44 +00:00
jifl
f4f2bfe379 Ensure the size of each pbuf in the pool meets alignment constraints 2007-02-27 16:50:05 +00:00
jifl
75beb3bd35 Fix incorrect comparison in get_socket().
Spotted by Frederic Bernon.
2007-02-26 20:16:38 +00:00
jifl
1d22294974 * sockets.h, sockets.c: Move socket initialization to new
lwip_socket_init() function.
2007-02-26 20:01:04 +00:00
jifl
de665f7cf9 2007-02-26 Jonathan Larmour (based on patch from Simon Goldschmidt)
* api_lib.c: Use memcpy in netbuf_copy_partial.
2007-02-26 19:49:49 +00:00
christiaans
205520c620 Fix the fix for GETSHORT and GETLONG bug #19052, needs to be tested by some PPP user. 2007-02-14 08:08:35 +00:00
likewise
3551b2a2a1 Release 1.2.0. 2006-12-05 10:09:17 +00:00
christiaans
11f2e8d1a6 Added MEM_LIBC_MALLOC option as workaround for failing mem_malloc(). 2006-12-04 08:24:25 +00:00
christiaans
a91374a916 Added MEM_LIBC_MALLOC option as workaround for failing mem_malloc(). 2006-12-01 15:38:56 +00:00
christiaans
36e6c26545 Included xid to some DEBUGFs. 2006-12-01 13:52:07 +00:00
christiaans
9a68f74857 Fixed false triggers of request_timeout. 2006-11-30 16:25:43 +00:00
christiaans
b96c15890c Disabled alignment fix. Stepping back, #17922 fix fails on my target, DHCP won't start, I don't understand. 2006-11-28 13:29:05 +00:00
christiaans
5a6b26d69e In netif_add() fixed clearing of ip_addr, netmask, gw and flags. 2006-11-28 13:12:15 +00:00
christiaans
a3d912a801 Fixed uninitalized variable warnings (using gcc 4.1.1) 2006-11-27 15:37:44 +00:00
christiaans
b4f1deaa46 Accepted patch #5493 IP frag/reass config item tweak. 2006-11-27 14:48:21 +00:00
christiaans
976bce4c7f Changed heap to use naturally aligned start address and added near-fit case to #17922 fix. 2006-11-27 14:23:24 +00:00
christiaans
77e0f77850 Added snmp_send_trap() parameter, caller must pass enterprise id for enterprise secific traps. 2006-11-27 08:43:10 +00:00
christiaans
a885cbf8ed Removed mem_dump() reference. 2006-11-22 09:56:39 +00:00
christiaans
b6af5d9bda Initial attempt at fixing bug #17922, calling for reviewers. This seems to work for me, more or less, but it looks like it breaks TCP. 2006-11-22 08:27:38 +00:00
christiaans
b72677c3ce Added missing NULL return checks for snmp_mib_lrn_alloc() and trimmed whitespace at line ends. 2006-11-17 11:07:25 +00:00
christiaans
5e44122552 Trimmed whitespace at line ends. 2006-11-17 11:05:26 +00:00
christiaans
d4b6471d39 Replaced tabs with space. 2006-11-17 10:51:13 +00:00
christiaans
fe1bea9538 Added netif_set_up and call protection for NULL function pointers. Bug #16602 and #17777. 2006-11-02 12:25:57 +00:00
christiaans
2f41e2b0ec Made ip_id static again, fixing bug #18065. This is required when outputting IP fragments. 2006-11-01 09:33:14 +00:00
christiaans
bd86f95512 Cold case #9191 fixes for NC30 compiler for the M16 mcu, reported by Bjorn Sundman. 2006-10-25 07:51:17 +00:00
christiaans
5fcf6418cf Added warning about using mem_malloc in sys_arch.c, cold case bug #1913 . 2006-10-24 09:10:26 +00:00
christiaans
4e583dab2e Again, fixed decoding of negative integers in snmp_asn1_dec_s32t(), tnx to though testing by Sander. 2006-10-13 13:45:06 +00:00
christiaans
bc182cab7c Removed EXPERIMENTAL status. 2006-10-13 12:00:35 +00:00
christiaans
f6f6f11838 Fixed decoding of negative integers in snmp_asn1_dec_s32t(), removed EXPERIMENTAL status. 2006-10-13 11:59:45 +00:00
christiaans
b5f4672155 Partially accepted patch #5449 for ANSI C compatibility / build fixes. Fixed bug #17574 corrected UDP-Lite protocol identifier. 2006-10-11 12:04:04 +00:00
christiaans
729da3c873 Fixed Nagle algorithm as reported by Bob Grice. 2006-10-10 07:48:27 +00:00
christiaans
8a31c6f807 Only mentioning SNMP development additions instead of changes, since we're in pre-alpha. 2006-10-06 10:44:24 +00:00
christiaans
2539b5cf61 Fixed up mib_external_node support, snmpwalk works for external objects. 2006-10-06 08:41:24 +00:00
christiaans
f7881e58bb Improved message parse robustness. Rejecting 'error requests'. Removed invalid genError return on varbindlist parse error, changed badValue into noSuchName error for non-writeable objects. 2006-10-04 09:15:23 +00:00
christiaans
25ed4e9d16 Fixed clearing of head and tail pointers in snmp_mib_node_delete(). 2006-10-03 10:41:48 +00:00
christiaans
7eddf93b36 Added missing snmp_delete_arpidx_tree() in find_entry where entry state was set to ETHARP_STATE_EMPTY. 2006-10-03 10:39:37 +00:00
christiaans
cfb082a20b Added external mibnode panic closure functions, tobe called for error responses. 2006-10-02 10:13:04 +00:00
christiaans
e440590c37 Fixed snmp_mib_node_insert() to return 2, for node present (not inserted). Also solves invalid rootnode count for this case. 2006-09-29 13:34:38 +00:00
christiaans
c851a19ab2 Added en->get_value_a() call for zero size get_value replies, e.g. for closing external transactions. 2006-09-28 11:46:24 +00:00
christiaans
c2f9d7dee0 Fixed encoding of object sub identifiers with trailing zero. 2006-09-28 11:43:49 +00:00
christiaans
473e567047 Added en->set_value_a() call for closing external transactions. 2006-09-27 15:11:30 +00:00
christiaans
64dab92c6b Redesign of snmp_msg_event() fsm, added SNMP SET to fsm. 2006-09-27 07:25:16 +00:00
christiaans
f576755b13 Added snmp_msg_event_loop() prototype. 2006-09-22 08:09:08 +00:00
christiaans
d0f279ece4 Set TODO_SNMP_MSG_EVENT to 1. Moved some more code from snmp_recv() to snmp_event_service(). 2006-09-22 08:05:17 +00:00
christiaans
a5532ffd4d Added one strategic LWIP_DEBUGF to snmp_send_response(). 2006-09-22 08:03:16 +00:00
christiaans
cb412134dd Added newlines to LWIP_DEBUGFs. 2006-09-22 08:00:56 +00:00
christiaans
d079aae0e0 Fixed NULL dereferencing for zero length raw data. 2006-09-22 07:59:44 +00:00
christiaans
eabfb233b8 Moved SNMP_CONCURRENT_REQUESTS to opt.h, babysteps for external MIB nodes. 2006-09-20 13:33:50 +00:00
christiaans
960e724ad3 Improved mib node struct for external object access and moved get_object_def() calls to the message processing bit. 2006-09-14 15:08:54 +00:00
christiaans
82c46f957a Fixed double iterator bug in send_trap(), multiple trap destinations work ok now. 2006-09-12 12:46:36 +00:00
christiaans
320ea29861 Added some lines for SET command. 2006-09-12 10:03:46 +00:00
christiaans
c5e99ada63 Fixed sysObjectID length to copy private IDs with unkown lengths properly. 2006-09-08 09:22:28 +00:00
christiaans
c5bd3f5e3b Documented TRAP destination setup. 2006-09-07 14:46:41 +00:00
christiaans
a88d054d05 Improved TRAP interfacing. Varbinds maybe allocated at (external) trap source as wel. Added trap destination settings. 2006-09-07 14:17:03 +00:00
christiaans
6576802287 Fixed compilation for LWIP_SNMP 0. 2006-09-07 07:39:49 +00:00
christiaans
693316c83f Corrected snmp_delete_arpidx_tree() to be called in the expired state, not only maxage. 2006-09-06 13:01:47 +00:00
christiaans
41ff80e5d3 First getnext succes, values are returned insead of NULLs, empty tables are skipped. Limitation: a single varbind per request, so 'snmptable' will fail. 2006-09-06 10:14:07 +00:00
christiaans
56c5fdbeaf Added newlines in debug output, small optimalisations, more work on 'getnext', fixed 'get' on udp table. 2006-09-04 09:22:48 +00:00
christiaans
130d39cc03 Changed index structs to mib_list_node structs to place the table index trees directly in the mib tree. 2006-09-01 07:14:50 +00:00
christiaans
1485edf8e1 Added index tree node structs and functions, e.g. to be used for ARP table indexes. 2006-08-29 11:28:28 +00:00
christiaans
514ee867a6 Pacified GCC warnings and elaborated getnext to work on scalars, tables don't work yet. 2006-08-21 11:52:58 +00:00
christiaans
3cc7a406f4 Pacified GCC warnings and fixed double mem_free() while returning nosuchname err. 2006-08-21 11:51:19 +00:00
christiaans
c3f82acf7a Pacified GCC warnings. 2006-08-21 11:50:03 +00:00
christiaans
cdb7557d88 Added SNMP counters. 2006-08-18 10:18:42 +00:00
christiaans
2dcbd016e6 Added tree expansion func protos for getnext. 2006-08-17 14:16:30 +00:00
christiaans
7d1728f05a Started with getnext and ensure zero length identifiers are accepted. 2006-08-17 14:14:58 +00:00
christiaans
4b5c14470a Fixed htons into htonl for trap desctination ip. 2006-08-17 14:11:45 +00:00
christiaans
f198b11f27 Accepting zero length identifiers e.g. for getnext operation. Uncommon but valid. 2006-08-17 14:09:57 +00:00
christiaans
7d16087789 Fixed bug #17200, added check for broadcast destinations for PCBs bound to a unicast address. 2006-08-17 09:40:15 +00:00
christiaans
d734cd986c Moved noleafs_get_object_def() and noleafs_get_value() protos from mib2.c to snmp_structs.h 2006-08-15 07:28:43 +00:00
christiaans
8559f3e583 MIB-2 object values near to completion, just committing for keeping the flame alive. 2006-08-11 14:16:36 +00:00
christiaans
d0b81d3b20 Corrected comment typo. 2006-08-11 14:13:39 +00:00
christiaans
43bf9a8e46 Added SNMP counters, moved some defines. 2006-08-11 14:12:05 +00:00
christiaans
19f57bf810 Exported udp_pcbs in udp.h (for SNMP agent). 2006-08-11 14:09:48 +00:00
christiaans
469012b544 Added etharp_find_addr(), finds eth/IP address pair by interface ptr and IP address. 2006-08-08 15:10:42 +00:00
christiaans
9b11c4670d Corrected returned object id for interfaces.ifTable.ifEntry.ifSpecific to zeroDotZero (0.0). 2006-08-07 11:35:32 +00:00
christiaans
7eeaf8eaa5 Corrected object identifier codec for object ids not starting with .iso.dod (e.g. zeroDotZero (0.0)). 2006-08-07 11:32:44 +00:00
christiaans
a82e02ef15 Partial fix for bug #15926, flushing TCP output in do_close(). 2006-08-07 10:00:44 +00:00
christiaans
d8922d0410 Added minimalistic SNMP GET functionality. 2006-07-14 12:54:38 +00:00
christiaans
5c628d2a61 Added netif SNMP init. 2006-07-14 11:17:00 +00:00
christiaans
54bb20b486 Added SNMP statistics to struct netif and changed SNMP macro glue. 2006-07-14 09:58:02 +00:00
christiaans
57a6eaae7b Added SNMP debug options. 2006-07-10 12:41:25 +00:00
christiaans
7a5cb21056 Fixed (experi)mental typo. 2006-07-07 11:33:36 +00:00
christiaans
333c3f18c0 Initial commit. Expirimental code, please note this is not yet fully functional. 2006-07-07 09:49:31 +00:00
christiaans
6b2979027e Add preliminairy documentation for the SNMP agent. 2006-07-07 08:03:04 +00:00
christiaans
12f9adbdd3 Added ip_frag_init() prototype. 2006-07-04 08:24:55 +00:00
christiaans
a5cab96ff3 Added ip_frag_init() and some LWIP_DEBUGFs. 2006-07-04 08:24:17 +00:00
christiaans
dd060ceed3 Added ip_frag_init() to ip_init(). 2006-07-04 08:23:33 +00:00
christiaans
c89b085e5b Mentioned some recent cold case fixes. 2006-06-27 10:39:06 +00:00
christiaans
63140ca7f8 Applied patch for cold case bug #11135. 2006-06-27 10:33:52 +00:00
christiaans
cbe83f32b6 Honoured Pedro Alves namespace request, following lwip style struct naming. 2006-06-22 11:22:47 +00:00
christiaans
3bffb0a181 Added struct obj_id and a few system group access funcs. 2006-06-22 09:33:10 +00:00
christiaans
09dc9c89a8 Added mib-2 snmp group statistics prototypes. 2006-06-19 13:04:11 +00:00
christiaans
09707a3e81 Prepared some SNMP options. 2006-06-19 13:03:09 +00:00
christiaans
d821277430 Fixed cold case bug #1748, printing of mem_size_t and u16_t statistics. 2006-06-15 07:10:04 +00:00
christiaans
1f01634029 Applied patch #5146 to handle allocation failures in accept() by Kevin Lawson. 2006-06-14 08:02:35 +00:00
curtmcd
dd314e1bdf Fix incorrect calculation of dhcp->dns_count.
Comment out unused static dhcp_get_option_short() to avoid warning.
2006-06-08 00:16:56 +00:00
curtmcd
1dae102359 Fix debug print, remove reference to TCP_COARSE_TIMEOUT 2006-05-31 21:23:26 +00:00
curtmcd
b306594cad Remove unused mem_reallocm 2006-05-31 21:23:01 +00:00
curtmcd
b60b7cf8fe Use isprint() instead of isascii() as it's more common
Change return type of inet_aton from s8_t to int (standard)
Touch up comments and white space
2006-05-30 19:09:41 +00:00
curtmcd
0148128881 Fix gcc warning per discussion on lwip-users 2006.04.25: dereferencing
type-punned pointer will break strict-aliasing rules.  Use memcpy
instead of structure copy; code is not in critical path.
2006-05-26 19:05:41 +00:00
curtmcd
076a884651 Add comment about purpose of struct ip_addr2.
Improve white space formatting, add parens in IP4_ADDR().
2006-05-26 18:52:27 +00:00
christiaans
7026bbcdd4 Removed conn->sem creation and destruction from netconn_write() and added sys_sem_new to netconn_new_* 2006-05-26 07:39:39 +00:00
curtmcd
6158aa684b udp_input() operated by removing the IP and UDP headers, putting back
the UDP header, then re-removing it.  However, pbuf_header() can't add
back the UDP header on pbufs of type PBUF_REF, so these would all get
dropped for bad checksum.  This change addresses the problem and
simplifies things by stripping each header just once.
2006-05-26 02:40:54 +00:00
curtmcd
047e3455f7 Improve formatting by fixing wrong indents and lines too long. 2006-05-26 01:36:16 +00:00
christiaans
9ca9649c1b Disabled ARP table update on ingress IP packets. 2006-05-05 13:34:13 +00:00
likewise
9a23e9839b Initial commit of FILES in doc/ 2006-04-28 11:45:00 +00:00
christiaans
7fc966dced Optimized for speed and size. Test against zero for both the inverted and non-inverted address. (old and new-style broadcasts) 2006-04-24 07:26:06 +00:00
curtmcd
680afa4229 memp_memory could be unaligned, causing one buffer in the memp pool to
be unaligned, resulting in nasty random data corruption on some CPUs.
Also, clean up the code a little and save a few bytes.
2006-04-12 21:07:44 +00:00
likewise
313743c833 Fix for out-of-sequence FIN handling, patch by Oleg Tychev. 2006-04-08 00:36:25 +00:00
likewise
6cb19d7e34 Dangling inseg.p pointer fix by Pedro Alves. 2006-04-08 00:13:49 +00:00
likewise
ef0575a26d Remained indictator where new changes should go. 2006-04-07 22:31:09 +00:00
christiaans
c9db715bae addr->addr test size and speed optimalisation (helping a dumb compiler) 2006-04-04 07:21:54 +00:00
christiaans
ed1e3899af Added optimalization hints. 2006-03-31 09:26:42 +00:00
christiaans
7446e31fce Address copy loops optimized for speed. 2006-03-29 13:16:40 +00:00
christiaans
94abf9d935 Added LWIP_PLATFORM_BYTESWAP optimalisation flag and macro glue. 2006-03-29 10:15:43 +00:00
christiaans
d9b4ab1658 Pbuf flag test size and speed optimalisation (helping a dumb compiler). 2006-03-28 15:06:33 +00:00
christiaans
39f8538776 Fixed compilation warning on sizeof(), reported by Beach at 20060320. 2006-03-21 08:28:15 +00:00
likewise
fef5c4c9a0 Added upcoming 1.1.1 release to Changelog. 2006-03-15 11:20:46 +00:00
christiaans
61dc2e7dd5 Added pbuf_alloc() return value checks in ip_frag(). 2006-03-03 11:25:36 +00:00
christiaans
11a820458f Increased ip_reassbitmap size with 1, added assertions to catch boundary cases.
Beautified indentation again.
2006-03-02 15:45:19 +00:00
likewise
9e7418090d pbuf alignment fix. 2006-03-01 16:57:43 +00:00
likewise
0b3b713123 Removed 'even sndbuf' fix in TCP, this fix was a ugly hack for the incomplete checksum routine that does not work now that the checksum routine is fixed. 2006-03-01 16:53:41 +00:00
christiaans
00f8cf57cd Added IP reassembly timer. 2006-03-01 14:51:58 +00:00
christiaans
c55c375b0a Removed tabs, default LWIP_HAVE_LOOPIF to 0 to slim footprint. 2006-03-01 10:41:23 +00:00
likewise
db76ca248b 2006-02-27 Merged patch by Curt McDowell
pbuf.c: Fix alignment; pbuf_init() would not work unless pbuf_pool_memory[] is properly aligned.
2006-02-27 14:11:19 +00:00
christiaans
182e1909b2 Patch from Curt McDowell fixes err_to_errno macro. 2006-02-13 08:14:11 +00:00
christiaans
3aea7bc053 Removed timer dependency on sys.c (raw-API). Beautified indentation. 2006-02-13 08:12:07 +00:00
christiaans
39c35732de Code style fix, C++ into C comments. 2006-02-13 08:09:01 +00:00
christiaans
6c8850698d Small optimalization for udp_input(). 2006-01-02 12:06:02 +00:00
christiaans
818a726679 History update and listing PPP problems as todo. 2005-12-20 11:52:44 +00:00
likewise
f8663a7129 Remove PCBs which stay in LAST_ACK state too long. 2005-12-20 11:03:18 +00:00
christiaans
7571fe5d13 Fixed unused variable warning. 2005-12-15 08:27:30 +00:00
christiaans
60dc1c22f7 Disabled the added summing routine to preserve code space, fixed some comments. 2005-12-15 08:26:00 +00:00
likewise
02b575e9e4 Added Curt McDowell's platform-independent optimized checksum routine. 2005-12-14 22:51:35 +00:00
likewise
6facaf8f05 Trailing dangling byte in checksum should be considered MSB. 2005-12-14 22:29:03 +00:00
likewise
319a972e75 Duplicate FIN ACK race condition fix by Kelvin Lawson. 2005-12-14 21:58:14 +00:00
christiaans
61cdbb30a6 Added some more fixes to the lwip_standard_chksum() comments. 2005-12-14 12:55:12 +00:00
likewise
5088a38b9f README now points to savannah.txt instead of duplicating its nfo. 2005-12-12 09:35:34 +00:00
likewise
f5c6a6d075 Typo fix: tens of kilobytes instead of tenths of kilobytes. 2005-12-12 09:33:33 +00:00
likewise
b5340dd739 Updated CVS server host names and documentation about pserver anonymous, SSH non-anonymous access to it. 2005-12-12 09:32:47 +00:00
likewise
e1dcfcbb76 Updated comment on optimization and aim of this generic algorithm. 2005-12-12 09:32:05 +00:00
christiaans
43d448e73f Fixed lwip_standard_chksum() for unaligned memory access. Verified to work on c16x and BSD on P4. 2005-12-09 08:59:08 +00:00
christiaans
33fbb06604 Fixed void ptr address increment bug reported by Bertrik Sikken. 2005-11-25 12:23:03 +00:00
christiaans
e1b215aa73 Introduced cc.h formatters and removed SO_REUSE from transport layers. 2005-11-25 12:03:38 +00:00
christiaans
6a17ef925d Described initialization procedure. 2005-11-02 08:08:06 +00:00
christiaans
7599985a0a Some build fixes for OpenBSD. 2005-10-10 07:27:31 +00:00
likewise
07c0bc288a Mention of multiple pbuf fix in slipif and unaligned access fix in checksumming. 2005-07-17 15:33:16 +00:00
likewise
f05d392920 Unaligned 16-bit access fix for the standard checksum routine by Peter Jolasson. 2005-07-17 15:30:27 +00:00
likewise
e11d57c883 Fixes bug #13807: slipif_input() garbles large (i.e. multiple pbufs) inbound datagrams. 2005-07-17 15:13:34 +00:00
likewise
baf377679a 2005-06-08 Leon Woestenberg <leon.woestenberg@gmx.net>
* tcp_in.c: Send reset on unexpected ACK in two cases. Fix submitted by olaf.peters@technolution.
2005-06-08 18:57:05 +00:00
likewise
f9355136d8 2005-06-08 Leon Woestenberg <leon.woestenberg@gmx.net>
* udp.c: Fixed memory leak; when ip_route() failed, a possibly allocated q was never de-allocated. Fixed by called ip_route() before allocating q.
2005-06-08 18:35:00 +00:00
likewise
bb76e69567 Mentioned unaligned access fix. 2005-02-04 13:45:55 +00:00
likewise
533fc217d4 4 February 2004, Leon Woestenberg <leon.woestenberg@gmx.net>
tcp_in.c: Applied fix patch for bug #2679.
tcp_out.c: Applied fix patch for bug #2679.
http://savannah.nongnu.org/bugs/?func=detailitem&item_id=2679
2005-02-04 13:43:13 +00:00
likewise
ac5c6695c1 4 February 2004, Leon Woestenberg <leon.woestenberg@gmx.net>
tcp_out.c: queue was not initialized to NULL, but was referenced in memerr cleanup code.
2005-02-04 13:31:29 +00:00
likewise
3160488352 queue was referenced before initialization in first goto memerr branch code. Replaced goto branch by its minimal equivalent error handling code. 2005-02-04 13:28:50 +00:00
likewise
8579e4144f More robust DHCP ARP reply checking. 2005-01-24 23:02:29 +00:00
likewise
6880fa62f8 Added some missing string.h includes. 2005-01-24 21:05:47 +00:00
likewise
2cf4287197 Mention of missing semicolon, and pcb->recv() called even when NULL. 2005-01-04 12:22:44 +00:00
likewise
86c774443c Fixed missing semicolon in LWIP_DEBUG statement. 2005-01-04 12:20:25 +00:00
likewise
3b715f4602 3 January 2004, Leon Woestenberg <leon.woestenberg@gmx>
udp.c: pcb->recv() callback was called even when it was NULL.
2005-01-03 17:54:21 +00:00
likewise
ec0c2bea6e Changed behaviour into implementation. 2005-01-01 18:06:21 +00:00
likewise
1b3682cfa9 Updated CHANGELOG. 2004-12-30 01:28:16 +00:00
likewise
2a9ee35411 Removed assertion that always equaled true. 2004-12-27 14:50:03 +00:00
likewise
0e0a7d82de Re-enabled ARP packet queueing. (Now that multi-packet queueing is disabled in etharp.c). 2004-12-27 14:45:12 +00:00
likewise
dfa96852f0 Disabled queueing more than 1 packet on a ARP entry, as I suspect this clashes with the TCP segment queueing. 2004-12-27 14:44:19 +00:00
likewise
a549ec0382 Added inline source documentation. 2004-12-27 14:42:02 +00:00
likewise
c61f01b206 tcp_write(): optimize order of valid states checks, most common first.
added assertion: when the queues are NULL, queuelen must be zero.
remove ACK flags from a PCB, only when we could succesfully sent
an empty ACK packet.
2004-12-26 01:36:37 +00:00
likewise
15257f4524 Update comment on ETHARP_QUEUEING. Defaulted to being disabled. 2004-12-24 21:58:53 +00:00
christiaans
089378ef87 christiaans: cosmetic change debug formatters as requested by Tom. 2004-12-07 08:16:27 +00:00
christiaans
805f495d84 christiaans: Fixed SO_REUSE default to 0. Actually we should fix udp so it won't depend on the socket layer. 2004-12-06 11:50:53 +00:00
likewise
928dd94ba6 etharp.c: Corrected DHCP_DOES_ARP_CHECK behaviour. 2004-11-30 17:22:18 +00:00
likewise
b429918b32 etharp.c: re-arranged code in find_entry(), supposedly making it more readable for all cases. 2004-11-29 11:01:20 +00:00
likewise
62a37a4876 Updates the FILES contents to better reflect the current state. 2004-11-29 09:39:51 +00:00
likewise
0e96ece6c6 Surround definition of tcp_timer_needed with #if !NO_SYS #endif. (see lwip-users 15-11-2004). 2004-11-28 18:23:00 +00:00
likewise
f1eca32536 Mentioned ARP race fix. 2004-11-28 18:06:47 +00:00
likewise
ed59dc1ada Prevented a race condition between a new ARP request and the ARP timer.
Timeouts stay the same (halved the ARP timer, doubled the counts), but
ETHARP_MAX_PENDING should be at least 2 to prevent it from reaching 0 right away,
giving too little time for any ARP responses to be noted.
2004-11-28 18:00:20 +00:00
likewise
a5cd3fcafd Added a missing "not" in the comment, the code was correct. 2004-11-25 14:04:45 +00:00
likewise
f3def542ee Compile dammit 2004-11-25 14:03:31 +00:00
likewise
aa249922df Removed redundant closing bracket. 2004-11-25 13:59:06 +00:00
likewise
37a0c57bed 2004-11-25 Leon Woestenberg <leon.woestenberg@gmx.net>
* ip.c: Exploit the fact that ip_addr_isbroadcast() now checks that the
     given IP address actually belongs to the network of the given interface.
2004-11-25 13:57:05 +00:00
likewise
90b7e68b4e Removed the Smurf. 2004-11-25 13:52:34 +00:00
likewise
1a0c497007 Mentioned Kieran's and my changes - Leon. 2004-11-25 13:33:57 +00:00
likewise
fd49ee3c8d 2004-11-25 Leon Woestenberg <leon.woestenberg@gmx.net>
* ipv4/ip_addr.h: Renamed ip_addr_maskcmp() to _netcmp() as we are
    comparing network addresses (identifiers), not the network masks
    themselves.
  * ipv4/ip_addr.c: ip_addr_isbroadcast() now checks that the given
    IP address actually belongs to the network of the given interface.
2004-11-25 13:33:07 +00:00
likewise
3488a5c3c4 2004-11-25 Leon Woestenberg <leon.woestenberg@gmx.net>
* etharp.c: ETHARP_CREATE is renamed to ETHARP_TRY_HARD.
    Do not try hard to insert arbitrary packet's source address,
    etharp_ip_input() now calls etharp_update() without ETHARP_TRY_HARD.
    etharp_query() now always DOES call ETHARP_TRY_HARD so that users
    querying an address will see it appear in the cache (DHCP could
    suffer from this when a server invalidly gave an in-use address.)
2004-11-25 13:32:31 +00:00
likewise
ae4955f59e Replaced erronous LWIP_ERRORF with LWIP_DEBUGF 2004-11-25 11:23:37 +00:00
likewise
fab107a9df DECLINE message was unicast instead of broadcast 2004-11-25 11:10:53 +00:00
kieranm
bb87d19e84 Kieran Mansley - kjm25@cam.ac.uk - 24th Nov 2004
* Increase pcb->snd_buf by 1 when an ACK is received in SYN_SENT state to ensure correct operation
2004-11-24 17:05:41 +00:00
kieranm
4e309b7992 Kieran Mansley - kjm25@cam.ac.uk - 24th Nov 2004
* Changed pcb->rttest from u16_t to u32_t - comparisons with tcp_ticks (which is u32_t) were failing after 9 hours of operation
2004-11-24 17:04:34 +00:00
kieranm
64aa4c716d Kieran Mansley - kjm25@cam.ac.uk - 24th Nov 2004
* Increased argument checking at start of pbuf_queue() and made resulting errors more verbose
2004-11-24 17:03:03 +00:00
jani
6b0852a21f reduce msleep interval from 250 to 1 ms in ppp 2004-11-09 13:03:32 +00:00
jani
8afd3e882e #if directive style fix 2004-11-09 11:44:06 +00:00
likewise
791fa28817 Removed static declaration of dhcp_release(). 2004-11-04 19:19:29 +00:00
christiaans
3fab752640 Removed struct netif; forward decl. is already included from ip_addr.h.
Hit me if it breaks exsisting code.
2004-10-29 14:57:38 +00:00
christiaans
67dd939d83 Match update_arp_entry() to prototype. 2004-10-28 08:21:33 +00:00
likewise
ec9b447be1 17th October 2004 Leon Woestenberg <leon.woestenberg@gmx.net>
rawapi.txt: Explicitly name full nomenclature for two different API's.
2004-10-17 21:28:25 +00:00
likewise
99e3fe9ae1 17th October 2004 Leon Woestenberg <leon.woestenberg@gmx.net>
ethernetif.c: Fix lwip/stats.h support, reported by Andrew McGeachie.
2004-10-17 18:13:18 +00:00
likewise
eb99d21022 Mentioned adapted TCP behaviour; send ACK even if one was pending, iff rcv_wnd is above threshold. 2004-10-16 15:12:56 +00:00
likewise
793cbcdff8 Mentioned adapted TCP behaviour; send ACK even if one was pending, iff rcv_wnd is above threshold. 2004-10-16 15:07:26 +00:00
kieranm
751557bcbf 16th October 2004 - Kieran Mansley - kjm25@cam.ac.uk
- Add code to tcp_recved() to send an ACK (window update)
immediately, even if one is already pending, if the rcv_wnd is above a
threshold (currently TCP_WND/2)
 - This avoids waiting for a timer to expire to send a delayed ACK in
order to open the window if the stack is only receiving data.
2004-10-16 12:57:52 +00:00
likewise
252dcd8626 Reverted back the TCP_BETWEEN macro. It does not work on all archs. 2004-10-14 12:24:52 +00:00
likewise
0ad7ea16d2 Bring interface up/down with netif_set_up/down(). Fixes bug 10547. 2004-10-14 11:57:53 +00:00
likewise
79842d4fdd Mentioned TCP retransmit time-out changes contributed by Sam Jansen, committed Kieran Mansley. 2004-10-13 21:40:51 +00:00
kieranm
1e1f5d5462 Kieran Mansley - kjm25@cam.ac.uk - 20th September 2004
* Change the return type of ethernetif_init from void to err_t to avoid confusing porters.
2004-09-20 17:00:31 +00:00
kieranm
19d8ffe177 Kieran Mansley - kjm25@cam.ac.uk - 20th September 2004
* Check if the pbuf is NULL before freeing it, when draining the mbox as part of netconn_delete.
2004-09-20 16:58:01 +00:00
kieranm
4cb8192c1d Kieran Mansley - kjm25@cam.ac.uk - 20th September 2004
* Corrected "out by one" error on one of the TCP_SEQ_BETWEEN macro calls introduced recently
2004-09-20 16:53:48 +00:00
kieranm
2ed5bc5195 Kieran Mansley - kjm25@cam.ac.uk - 12th September 2004
Applied patch from Sam Jansen as detailed in
http://lists.gnu.org/archive/html/lwip-users/2004-07/msg00106.html
to correctly handle retransmission after a retransmission timeout
2004-09-12 16:34:06 +00:00
kieranm
fae1397468 Rename lwip_chksum and add LWIP_CHKSUM macro so that ports can "override" the standard implementation with one of their own. 2004-09-12 16:17:58 +00:00
kieranm
e871548772 Fixed typo (missing "{") in previous checkin 2004-09-12 16:03:54 +00:00
kieranm
a3d27e30e0 Add TCP_SEQ_BETWEEN macro for comparing a range of sequence numbers 2004-09-12 15:56:12 +00:00
likewise
89abd1f58e Do no longer try to free pbuf when TCP_EVENT_RECV() is called without a callback handler, and without packet.
The standard HTTP server failed on this (as reported by three users).
2004-09-08 22:33:46 +00:00
softins
fae709d9ea Added my July and August updates. 2004-08-20 16:56:20 +00:00
softins
36df79b207 Make sure the first pbuf queued on an ARP entry is properly ref counted. 2004-08-20 09:17:52 +00:00
likewise
b9ebcd7738 Ingress TCP keep-alive with garbage byte support. 2004-08-17 09:32:31 +00:00
likewise
515fb5a3fd First packet on queue generated assertion failure. Reported by David Haas on lwip-users on Friday 13th. 2004-08-17 08:39:43 +00:00
likewise
785f90d9fa Updated the use of Savannah docs (merged from STABLE-0_7 branch). 2004-08-11 00:15:03 +00:00
likewise
22ac311496 Support for PACK_STRUCT_USE_INCLUDES was broken.
Added one missing PACK_STRUCT_END.
2004-08-10 14:50:44 +00:00
likewise
0e31ca73c0 Have PBUF_LINK_HLEN default to 14 bytes (for Ethernet). 2004-08-10 14:41:12 +00:00
likewise
98ba558fa5 Mentioned 1.0.0. 2004-07-29 11:28:27 +00:00
softins
c4ef1e5c19 Add (int) cast in LWIP_DEBUGF() to avoid compiler warnings about comparison. 2004-07-27 16:19:16 +00:00
softins
1fa0d66f15 Stop compiler complaining of empty if statement when LWIP_DEBUGF() empty. 2004-07-27 16:08:26 +00:00
softins
4680307a34 Stop compiler complaining of empty if statement when LWIP_DEBUGF() empty.
Close an unclosed comment.
2004-07-27 16:08:05 +00:00
softins
42a6fa972d Corrected IPH_TOS() macro: returns a byte, so doesn't need htons(). 2004-07-27 14:46:24 +00:00
softins
1da6c35a6d Added a couple of casts to quiet the compiler.
No need to test isascii(c) before isdigit(c) or isxdigit(c).
2004-07-27 14:43:58 +00:00
likewise
7c427a4dce Made some comments more explicit. 2004-07-25 23:41:01 +00:00
likewise
c2abae538b pbuf_free() assert triggered by NULLified inseg.p. Reported by Karl Jeacle on 25-7-2004 on lwip-users. 2004-07-25 23:17:07 +00:00
kieranm
eb69032773 Kieran Mansley - kjm25@cam.ac.uk - 23rd July 2004
Now handle CLOSED state in tcp_close() explicitely, and free the pcb.
This is for the case that a pcb has been allocated but never used (so
is in the default "CLOSED" state) and needs to be freed.
2004-07-23 13:07:00 +00:00
likewise
fb5452910f I hate it when it takes twice to fix a typo 2004-07-22 22:10:17 +00:00
likewise
a6d37fcb25 Removed copy-paste errors. 2004-07-22 22:07:00 +00:00
likewise
fb18e1f036 Removed obsolete debug define. 2004-07-22 21:56:31 +00:00
likewise
786cbee510 Support for learning DNS servers through DHCP. 2004-07-22 21:56:09 +00:00
softins
a4f5673ff3 Small corrections to some debugging statements, to pacify compiler. 2004-07-22 08:06:00 +00:00
softins
1121f2b7f7 Made data types consistent in inet_ntoa().
Added casts for return values of checksum routines, to pacify compiler.
2004-07-22 08:03:02 +00:00
softins
4d30218eb2 Updated low_level_output() to match prototype for netif->linkoutput
and changed low_level_input() similarly for consistency.
2004-07-21 09:31:03 +00:00
softins
d7699ca81d Changed debug statements to use the tidier ip4_addrN() macros. 2004-07-21 09:23:11 +00:00
softins
afc3bc6b65 Added trivial (int) cast to keep compiler happier. 2004-07-21 08:57:05 +00:00
softins
6f066fca82 Changed recv_raw() from int to u8_t, to match prototype of raw_recv() in raw.h
and so avoid compiler error.
2004-07-21 08:55:26 +00:00
softins
5e24ae49a6 Removed spurious semicolon and added missing end-of-comment. 2004-07-21 08:36:15 +00:00
likewise
bf74ffe974 Outgoing packets caused ARP requests even when the destination IP was already cached.
Matched documentation.
2004-07-20 23:18:09 +00:00
likewise
2074861b57 Outgoing packets caused ARP requests even when the destination IP was already cached. 2004-07-20 23:07:54 +00:00
likewise
58b64d42f1 Additional fix for TCP retransmit fix (as discussed by Sam Jansen en Kieran Mansley on lwip-devel, July 13 2004). 2004-07-14 23:21:53 +00:00
likewise
a6ab0405ea Disabled some code by #if 0 #endif rather than /* */. 2004-07-14 23:19:08 +00:00
kieranm
8273b54108 Kieran Mansley - 14th July 2004
* Only move a single segment from the unacked queue to the unsent queue when performing a retransmit
2004-07-14 09:48:27 +00:00
kieranm
c356f560e8 Kieran Mansley - 14th July 2004
* Fixed whitespace indenting in parts of tcp_in.c
 * Changed adjustment of ssthresh in response to fast retransmit
 * Commented out iteration of unsent list when new ACK received as we no longer put all unacked data on unsent list when retransmitting
2004-07-14 09:45:01 +00:00
likewise
8d052ecf24 Source documentation added. 2004-07-12 20:42:16 +00:00
likewise
45e36d9f56 Dependencies on C library memset() etc., so include <string.h>. 2004-07-05 00:00:21 +00:00
likewise
c222d8b672 Updated with latest changes. 2004-07-04 23:52:40 +00:00
likewise
efed3f1f0d Mentioned placement of closing curly brace (block end). 2004-07-04 23:44:43 +00:00
likewise
7524893802 Dependencies on C library memset() etc., so include <string.h>. 2004-07-04 23:43:38 +00:00
likewise
25a0273b05 LWIP_TIMEVAL_PRIVATE must be defined in architecture cc.h file, either 1 or 0. Defaults to 1.
Dependencies on C library memset() etc., so include <string.h> and <errno.h>.
2004-07-04 23:43:02 +00:00
likewise
ce0410b205 LWIP_TIMEVAL_PRIVATE must be defined in architecture cc.h file, either 1 or 0. Defaults to 1. 2004-07-04 23:42:14 +00:00
likewise
efe5ce5c78 Made loop counters unsigned where possible. 2004-07-04 23:40:44 +00:00
likewise
07f52b4b96 Fixed compile errors. 2004-06-30 22:14:03 +00:00
likewise
0be3598990 Style fixes. 2004-06-30 18:42:54 +00:00
likewise
c3284c30cd Make restarting() DHCP on on interface more robust by cleaning old state information. 2004-06-30 18:42:33 +00:00
likewise
2d94bf4998 Bug fix: etharp_output() should not free pbufs.
Bug was introduced in 1.60 and reported by Tim Newsham on 30-Jun-2004 on lwip-users.
2004-06-30 18:41:39 +00:00
likewise
31c1e72b8c ip_forward() returns netif on which packet was forwarded. 2004-06-30 18:39:17 +00:00
likewise
d11fcafad8 Added netif up/down basics. 2004-06-30 18:38:07 +00:00
kieranm
27c6d299cf Kieran Mansley - kjm25@cam.ac.uk - 30th May 2004
* Fixed bug #9160 after discussion on mailing list
 - alters use of MEM_ALIGN_SIZE in pbuf_alloc when calling mem_malloc for a PBUF_RAM pbuf
2004-05-30 14:04:30 +00:00
kieranm
450dd65165 Kieran Mansley - kjm25@cam.ac.uk - 26th May 2004
* Fixed bug 9076 (changes to pbuf tot_len and seg dataptr when trimming front edge of a received packet)
2004-05-26 10:04:15 +00:00
likewise
26819e6c39 Fixed documentation for internal function. 2004-05-13 00:28:38 +00:00
likewise
6587efb3e8 Fixed #if ETHARP_QUEUEING to #if ARP_QUEUEING. 2004-05-07 01:20:28 +00:00
likewise
8d2200f29b Optimized search loop a bit. Conditional code for ETHARP_QUEUEING option. 2004-05-07 01:06:56 +00:00
likewise
e4295396ac Re-instantiated the pack directives. Nested structs do break individual field natural alignment on arm-gcc. 2004-05-06 03:27:13 +00:00
likewise
5c7a70df28 Fixed wrong argument to find_entry() in etharp_query(). 2004-05-06 02:55:53 +00:00
likewise
16a7a8258f Fixed ETH_EMPTY into ETHARP_STABLE_EMPTY. 2004-05-06 02:54:06 +00:00
likewise
fb1f61b212 Do not empty entries unless allowed to in find_entry(). 2004-05-06 02:51:15 +00:00
likewise
c3137df39c More fixes. 2004-05-06 02:49:10 +00:00
likewise
2df9cd7262 Exported etharp_request(). 2004-05-06 02:43:47 +00:00
likewise
a23f6afbee Fixed typos. 2004-05-06 02:38:42 +00:00
likewise
e37f7fafc1 Optimized through re-use of common code. Results in 50 lines less and more modular code.
Work towards timed out and retries of ARP requests. Currently, one timed out ARP request.
2004-05-06 02:35:27 +00:00
likewise
7b803465ad Simplified update_arp_entry(). 2004-05-06 00:14:39 +00:00
likewise
273612b251 Prevent non-unicast addresses from polluting the ARP cache. 2004-05-05 23:47:33 +00:00
likewise
e2bc8e86e2 Removed a closing bracket, left over after removing pack directives. 2004-05-05 23:04:17 +00:00
likewise
79110ba469 Removed all structure packing directives. Protocol header fields are naturally aligned by design.
(Earlier, the 14-byte ethernet header screwed this up, this had already been fixed by adding two pad bytes.)
Assumption is that compilers do not align with larger-than-sizeof(type) boundaries.
Pre-tag PRE_PACK_REMOVE. Post-tag POST_TAG_REMOVE.
2004-05-05 19:16:51 +00:00
428 changed files with 132093 additions and 23211 deletions

4
.gitattributes vendored Normal file
View File

@@ -0,0 +1,4 @@
# These files are text and should be normalized
*.txt text
*.c text
*.h text

12
.gitignore vendored Normal file
View File

@@ -0,0 +1,12 @@
/src/apps/snmp/LwipMibCompiler/CCodeGeneration/bin/
/src/apps/snmp/LwipMibCompiler/CCodeGeneration/obj/
/src/apps/snmp/LwipMibCompiler/LwipMibCompiler/bin/
/src/apps/snmp/LwipMibCompiler/LwipMibCompiler/obj/
/src/apps/snmp/LwipMibCompiler/LwipMibViewer/bin/
/src/apps/snmp/LwipMibCompiler/LwipMibViewer/obj/
/src/apps/snmp/LwipMibCompiler/LwipSnmpCodeGeneration/bin/
/src/apps/snmp/LwipMibCompiler/LwipSnmpCodeGeneration/obj/
/src/apps/snmp/LwipMibCompiler/SharpSnmpLib/bin/
/src/apps/snmp/LwipMibCompiler/SharpSnmpLib/obj/
/src/apps/snmp/LwipMibCompiler/LwipMibCompiler.userprefs
/src/apps/snmp/LwipMibCompiler/*.suo

3674
CHANGELOG

File diff suppressed because it is too large Load Diff

80
README
View File

@@ -7,21 +7,26 @@ 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 tenths of kilobytes of free RAM and room for
in embedded systems with tens of kilobytes of free RAM and room for
around 40 kilobytes of code ROM.
FEATURES
* IP (Internet Protocol) including packet forwarding over multiple
network interfaces
* ICMP (Internet Control Message Protocol) for network maintenance
and debugging
* UDP (User Datagram Protocol) including experimental UDP-lite
extensions
* TCP (Transmission Control Protocol) with congestion control, RTT
estimation and fast recovery/fast retransmit
* Specialized API for enhanced performance
* Optional Berkeley socket API
* IP (Internet Protocol) 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
* UDP (User Datagram Protocol) including experimental UDP-lite extensions
* TCP (Transmission Control Protocol) with congestion control, RTT estimation
and fast recovery/fast retransmit
* Specialized raw/native API for enhanced performance
* Optional Berkeley-like socket API
* DNS (Domain names resolver)
* SNMP (Simple Network Management Protocol)
* DHCP (Dynamic Host Configuration Protocol)
* AUTOIP (for IPv4, conform with RFC 3927)
* PPP (Point-to-Point Protocol)
* ARP (Address Resolution Protocol) for Ethernet
LICENSE
@@ -35,40 +40,19 @@ 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, CVS and the
help improve lwIP by use of Savannah's interface, Git and the
mailing list. A core team of developers will commit changes to the
CVS source tree.
Git source tree.
The lwIP TCP/IP stack is maintained in the 'lwip' CVS module and
contributions (such as platform ports) are in the 'contrib' module.
The lwIP TCP/IP stack is maintained in the 'lwip' Git module and
contributions (such as platform ports) are in the 'contrib' Git module.
The CVS main trunk is the stable branch, which contains bug fixes and
tested features. The latest stable branch can be checked out by doing:
cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/lwip login
cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/lwip co lwip
See doc/savannah.txt for details on Git server access for users and
developers.
The 'STABLE' tag in the stable branch will represent the most stable
revision (which may be somewhat older to protect us from errors
introduced by merges). This 'STABLE' tagged version can be checked out
by doing:
cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/lwip login
cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/lwip co -r STABLE lwip
The 'DEVEL' branch is the active development branch, which contains
bleeding edge changes, and may be instable. It can be checkout by doing:
cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/lwip login
cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/lwip co -r DEVEL lwip
The current contrib CVS tree can be checked out by doing:
cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/lwip login
cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/lwip co contrib
Last night's CVS tar ball can be downloaded from:
http://savannah.gnu.org/cvs.backups/lwip.tar.gz
The current CVS trees are web-browsable:
http://savannah.nongnu.org/cgi-bin/viewcvs/lwip/lwip/
http://savannah.nongnu.org/cgi-bin/viewcvs/lwip/contrib/
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/
@@ -81,12 +65,22 @@ lwIP are at the official lwIP home page:
http://www.sics.se/~adam/lwip/
Self documentation of the source code is regularly extracted from the
current CVS sources and is available from this web page:
current Git sources and is available from this web page:
http://www.nongnu.org/lwip/
There is now a constantly growin 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/
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>
Leon Woestenberg <leon.woestenberg@gmx.net>

148
UPGRADING Normal file
View File

@@ -0,0 +1,148 @@
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]
* TODO
(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

6
doc/FILES Normal file
View File

@@ -0,0 +1,6 @@
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.
snmp_agent.txt - The documentation for the lwIP SNMP agent.
sys_arch.txt - The documentation for a system abstraction layer of lwIP.

View File

@@ -6,7 +6,7 @@ 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 bugreports, fixes, enhancements, platform ports etc.
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.
@@ -14,25 +14,27 @@ features of Savannah help us not lose users' input.
2.1 Source code style:
1. do not use tabs.
2. identation is two spaces per level.
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. spaces surrounding assignment and comparisons.
8. use current source code style as further reference.
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 behaviour.)
(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 CVS sources.)
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
@@ -44,20 +46,13 @@ features of Savannah help us not lose users' input.
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. Trivial patches (compiler warning, indentation and spelling fixes or anything obvious which takes a line or two)
can go to the lwip-users list. This is still the fastest way of interaction and the list is not so crowded
as to allow for loss of fixes. Putting bugs on Savannah and subsequently closing them is too much an overhead
for reporting a compiler warning fix.
6. 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
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've 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 to post an url to a tarball or zip from which it can be imported
to the contrib CVS module. Then you get CVS access and have to maintain your port :)
[1] - lwIP CVS should not be just a place to keep your port so you don't have to set up your own CVS :)
Especially welcome are ports to common enough OS/hardware that others can have access too.
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.

292
doc/doxygen/lwip.Doxyfile Normal file
View File

@@ -0,0 +1,292 @@
# Doxyfile 1.5.4
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "lwIP 1.3.0"
PROJECT_NUMBER = "lwIP 1.3.0"
OUTPUT_DIRECTORY = C:/OPENSOURCE/LwIP/doxygen
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class " \
"The $name widget " \
"The $name file " \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = C:\OPENSOURCE\lwip
STRIP_FROM_INC_PATH = C:\OPENSOURCE\lwip
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
TYPEDEF_HIDES_STRUCT = NO
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = YES
HIDE_UNDOC_CLASSES = YES
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = YES
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text "
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = C:\OPENSOURCE\lwip\lwip
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.c \
*.cc \
*.cxx \
*.cpp \
*.c++ \
*.java \
*.ii \
*.ixx \
*.ipp \
*.i++ \
*.inl \
*.h \
*.hh \
*.hxx \
*.hpp \
*.h++ \
*.idl \
*.odl \
*.cs \
*.php \
*.php3 \
*.inc \
*.m \
*.mm \
*.dox
RECURSIVE = YES
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = NO
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = C:/OPENSOURCE/lwIP/doxygen/output/html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
HTML_DYNAMIC_SECTIONS = NO
CHM_FILE = lwip.chm
HHC_LOCATION =
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = YES
RTF_OUTPUT = C:/OPENSOURCE/lwIP/doxygen/output/rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = NO
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH = C:\OPENSOURCE\lwip\lwip
INCLUDE_FILE_PATTERNS =
PREDEFINED = NO_SYS=0 \
SYS_LIGHTWEIGHT_PROT=1 \
LWIP_ICMP=1 \
LWIP_RAW=1 \
LWIP_DHCP=1 \
LWIP_UDPLITE=1 \
LWIP_UDP=1 \
LWIP_IGMP=1 \
LWIP_TCP=1 \
LWIP_SNMP=1 \
MEMP_OVERFLOW_CHECK=1 \
MEMP_SANITY_CHECK=1 \
LWIP_ARP=1 \
LWIP_NETIF_HOSTNAME=1 \
LWIP_NETIF_API=1 \
LWIP_NETIF_CALLBACK=1 \
LWIP_NETIF_LINK_CALLBACK=1 \
LWIP_AUTOIP=1 \
ARP_QUEUEING=1 \
LWIP_STATS=1 \
MEM_USE_POOLS=0 \
LWIP_DNS=1 \
LWIP_SOCKETS=1 \
LWIP_NETCONN=1 \
"LWIP_DNS && LWIP_SOCKET " \
"(LWIP_DNS && LWIP_SOCKET)=1 "
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = NO
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = NO

47
doc/doxygen/main_page.h Normal file
View File

@@ -0,0 +1,47 @@
/*! \mainpage lwIP Documentation
*
* \section intro_sec 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 resource 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.
*
* \section lwip_features_sec lwIP features:
*
* \li \c IP (Internet Protocol) including packet forwarding over multiple network interfaces\n
* \li \c ICMP (Internet Control Message Protocol) for network maintenance and debugging\n
* \li \c IGMP (Internet Group Management Protocol) for multicast traffic management\n
* \li \c UDP (User Datagram Protocol) including experimental UDP-lite extensions\n
* \li \c TCP (Transmission Control Protocol) with congestion control, RTT estimation and fast recovery/fast retransmit\n
* \li \c raw/native API for enhanced performance\n
* \li \c Optional Berkeley-like socket API\n
* \li \c DNS (Domain names resolver)\n
* \li \c SNMP (Simple Network Management Protocol)\n
* \li \c DHCP (Dynamic Host Configuration Protocol)\n
* \li \c AUTOIP (for IPv4, conform with RFC 3927)\n
* \li \c PPP (Point-to-Point Protocol)\n
* \li \c ARP (Address Resolution Protocol) for Ethernet\n
*
* \section install_sec Documentation
*
* 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.\n
* http://savannah.nongnu.org/projects/lwip/\n
* \n
* The original out-dated homepage of lwIP and Adam Dunkels' papers on lwIP are at the official lwIP home page:\n
* http://www.sics.se/~adam/lwip/\n
* \n
* Self documentation of the source code is regularly extracted from the current Git sources and is available from this web page:\n
* http://www.nongnu.org/lwip/\n
* \n
* There is now a constantly growin wiki about lwIP at\n
* http://lwip.wikia.com/\n
* \n
* Also, there are mailing lists you can subscribe at\n
* http://savannah.nongnu.org/mail/?group=lwip\n
* plus searchable archives:\n
* http://lists.nongnu.org/archive/html/lwip-users/\n
* http://lists.nongnu.org/archive/html/lwip-devel/\n
* \n
* 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.\n
*
*/

423
doc/ppp.txt Normal file
View File

@@ -0,0 +1,423 @@
PPP interface for lwIP
Author: Sylvain Rochet
Table of Contents:
1 - Supported PPP protocols and features
2 - Raw API PPP example for all protocols
3 - PPPoS input path (raw API, IRQ safe API, TCPIP API)
4 - Thread safe PPP API (PPPAPI)
5 - Upgrading from lwIP <= 1.4.x to lwIP >= 1.5.x
1 Supported PPP protocols and features
======================================
Supported Low level protocols:
* PPP over serial using HDLC-like framing, such as wired dialup modems
or mobile telecommunications GPRS/EDGE/UMTS/HSPA+/LTE modems
* PPP over Ethernet, such as xDSL modems
* PPP over L2TP (Layer 2 Tunneling Protocol) LAC (L2TP Access Concentrator),
IP tunnel over UDP, such as VPN access
Supported auth protocols:
* PAP, Password Authentication Protocol
* CHAP, Challenge-Handshake Authentication Protocol, also known as CHAP-MD5
* MSCHAPv1, Microsoft version of CHAP, version 1
* MSCHAPv2, Microsoft version of CHAP, version 2
* EAP, Extensible Authentication Protocol
Supported address protocols:
* IPCP, IP Control Protocol, IPv4 addresses negotiation
* IP6CP, IPv6 Control Protocol, IPv6 link-local addresses negotiation
Supported encryption protocols:
* MPPE, Microsoft Point-to-Point Encryption
Supported compression or miscellaneous protocols, for serial links only:
* PFC, Protocol Field Compression
* ACFC, Address-and-Control-Field-Compression
* ACCM, Asynchronous-Control-Character-Map
* VJ, Van Jacobson TCP/IP Header Compression
2 Raw API PPP example for all protocols
=======================================
As usual, raw API for lwIP means the lightweight API which *MUST* only be used
for NO_SYS=1 systems or called inside lwIP core thread for NO_SYS=0 systems.
/*
* Globals
* =======
*/
/* The PPP control block */
ppp_pcb *ppp;
/* The PPP IP interface */
struct netif ppp_netif;
/*
* PPP status callback
* ===================
*
* PPP status callback is called on PPP status change (up, down, …) from lwIP
* core thread
*/
/* PPP status callback example */
static void 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: {
#if LWIP_DNS
ip_addr_t ns;
#endif /* LWIP_DNS */
printf("status_cb: Connected\n");
#if PPP_IPV4_SUPPORT
printf(" our_ipaddr = %s\n", ipaddr_ntoa(&pppif->ip_addr));
printf(" his_ipaddr = %s\n", ipaddr_ntoa(&pppif->gw));
printf(" netmask = %s\n", ipaddr_ntoa(&pppif->netmask));
#if LWIP_DNS
ns = dns_getserver(0);
printf(" dns1 = %s\n", ipaddr_ntoa(&ns));
ns = dns_getserver(1);
printf(" dns2 = %s\n", ipaddr_ntoa(&ns));
#endif /* LWIP_DNS */
#endif /* PPP_IPV4_SUPPORT */
#if PPP_IPV6_SUPPORT
printf(" our6_ipaddr = %s\n", ip6addr_ntoa(netif_ip6_addr(pppif, 0)));
#endif /* PPP_IPV6_SUPPORT */
break;
}
case PPPERR_PARAM: {
printf("status_cb: Invalid parameter\n");
break;
}
case PPPERR_OPEN: {
printf("status_cb: Unable to open PPP session\n");
break;
}
case PPPERR_DEVICE: {
printf("status_cb: Invalid I/O device for PPP\n");
break;
}
case PPPERR_ALLOC: {
printf("status_cb: Unable to allocate resources\n");
break;
}
case PPPERR_USER: {
printf("status_cb: User interrupt\n");
break;
}
case PPPERR_CONNECT: {
printf("status_cb: Connection lost\n");
break;
}
case PPPERR_AUTHFAIL: {
printf("status_cb: Failed authentication challenge\n");
break;
}
case PPPERR_PROTOCOL: {
printf("status_cb: Failed to meet protocol\n");
break;
}
case PPPERR_PEERDEAD: {
printf("status_cb: Connection timeout\n");
break;
}
case PPPERR_IDLETIMEOUT: {
printf("status_cb: Idle Timeout\n");
break;
}
case PPPERR_CONNECTTIME: {
printf("status_cb: Max connect time reached\n");
break;
}
case PPPERR_LOOPBACK: {
printf("status_cb: Loopback detected\n");
break;
}
default: {
printf("status_cb: Unknown error code %d\n", err_code);
break;
}
}
/*
* This should be in the switch case, this is put outside of the switch
* case for example readability.
*/
if (err_code == PPPERR_NONE) {
return;
}
/* ppp_close() was previously called, don't reconnect */
if (err_code == PPPERR_USER) {
/* ppp_free(); -- can be called here */
return;
}
/*
* Try to reconnect in 30 seconds, if you need a modem chatscript you have
* to do a much better signaling here ;-)
*/
ppp_connect(pcb, 30);
}
/*
* Creating a new PPPoS session
* ============================
*
* In lwIP, PPPoS is not PPPoSONET, in lwIP PPPoS is PPPoSerial.
*/
#include "netif/ppp/pppos.h"
/*
* PPPoS serial output callback
*
* ppp_pcb, PPP control block
* data, buffer to write to serial port
* len, length of the data buffer
* ctx, optional user-provided callback context pointer
*
* Return value: len if write succeed
*/
static u32_t output_cb(ppp_pcb *pcb, u8_t *data, u32_t len, void *ctx) {
return uart_write(UART, data, len);
}
/*
* Create a new PPPoS interface
*
* ppp_netif, netif to use for this PPP link, i.e. PPP IP interface
* output_cb, PPPoS serial output callback
* status_cb, PPP status callback, called on PPP status change (up, down, …)
* ctx_cb, optional user-provided callback context pointer
*/
ppp = pppos_create(&ppp_netif,
output_cb, status_cb, ctx_cb);
/*
* Creating a new PPPoE session
* ============================
*/
#include "netif/ppp/pppoe.h"
/*
* Create a new PPPoE interface
*
* ppp_netif, netif to use for this PPP link, i.e. PPP IP interface
* ethif, already existing and setup Ethernet interface to use
* service_name, PPPoE service name discriminator (not supported yet)
* concentrator_name, PPPoE concentrator name discriminator (not supported yet)
* status_cb, PPP status callback, called on PPP status change (up, down, …)
* ctx_cb, optional user-provided callback context pointer
*/
ppp = pppoe_create(&ppp_netif,
&ethif,
service_name, concentrator_name,
status_cb, ctx_cb);
/*
* Creating a new PPPoL2TP session
* ===============================
*/
#include "netif/ppp/pppol2tp.h"
/*
* Create a new PPPoL2TP interface
*
* ppp_netif, netif to use for this PPP link, i.e. PPP IP interface
* netif, optional already existing and setup output netif, necessary if you
* want to set this interface as default route to settle the chicken
* and egg problem with VPN links
* ipaddr, IP to connect to
* port, UDP port to connect to (usually 1701)
* secret, L2TP secret to use
* secret_len, size in bytes of the L2TP secret
* status_cb, PPP status callback, called on PPP status change (up, down, …)
* ctx_cb, optional user-provided callback context pointer
*/
ppp = pppol2tp_create(&ppp_netif,
struct netif *netif, ip_addr_t *ipaddr, u16_t port,
u8_t *secret, u8_t secret_len,
ppp_link_status_cb_fn link_status_cb, void *ctx_cb);
/*
* PPP link configuration
* ======================
*/
/* Auth configuration, this is pretty self-explanatory */
ppp_set_auth(ppp, PPPAUTHTYPE_ANY, "login", "password");
/* Set this interface as default route */
ppp_set_default(ppp);
/*
* Initiate PPP connection
* =======================
*/
/*
* Initiate PPP negotiation, without waiting (holdoff=0), can only be called
* if PPP session is in the dead state (i.e. disconnected).
*/
u16_t holdoff = 0;
ppp_connect(ppp, holdoff);
/*
* Closing PPP connection
* ======================
*/
/*
* Initiate the end of the PPP session, without carrier lost signal
* (nocarrier=0), meaning a clean shutdown of PPP protocols.
* You can call this function at anytime.
*/
u8_t nocarrier = 0;
ppp_close(ppp, nocarrier);
/*
* Then you must wait your status_cb() to be called, it may takes from a few
* seconds to several tens of seconds depending on the current PPP state.
*/
/*
* Freeing a PPP connection
* ========================
*/
/*
* Free the PPP control block, can only be called if PPP session is in the
* dead state (i.e. disconnected). You need to call ppp_close() before.
*/
ppp_free(ppp);
3 PPPoS input path (raw API, IRQ safe API, TCPIP API)
=====================================================
Received data on serial port should be sent to lwIP using the pppos_input()
function or the pppos_input_tcpip() function.
If NO_SYS is 1 and if PPP_INPROC_IRQ_SAFE is 0 (the default), pppos_input()
is not IRQ safe and then *MUST* only be called inside your main loop.
Whatever the NO_SYS value, if PPP_INPROC_IRQ_SAFE is 1, pppos_input() is IRQ
safe and can be safely called from an interrupt context, using that is going
to reduce your need of buffer if pppos_input() is called byte after byte in
your rx serial interrupt.
if NO_SYS is 0, the thread safe way outside an interrupt context is to use
the pppos_input_tcpip() function to pass input data to the lwIP core thread
using the TCPIP API. This is thread safe in all cases but you should avoid
passing data byte after byte because it uses heavy locking (mailbox) and it
allocates pbuf, better fill them !
if NO_SYS is 0 and if PPP_INPROC_IRQ_SAFE is 1, you may also use pppos_input()
from an RX thread, however pppos_input() is not thread safe by itself. You can
do that *BUT* you should NEVER call pppos_connect(), pppos_listen() and
ppp_free() if pppos_input() can still be running, doing this is NOT thread safe
at all. Using PPP_INPROC_IRQ_SAFE from an RX thread is discouraged unless you
really know what you are doing, your move ;-)
/*
* Fonction to call for received data
*
* ppp, PPP control block
* buffer, input buffer
* buffer_len, buffer length in bytes
*/
void pppos_input(ppp, buffer, buffer_len);
or
void pppos_input_tcpip(ppp, buffer, buffer_len);
4 Thread safe PPP API (PPPAPI)
==============================
There is a thread safe API for all corresponding ppp_* functions, you have to
enable LWIP_PPP_API in your lwipopts.h file, then see include/lwip/pppapi.h,
this is actually pretty obvious.
5 Upgrading from lwIP <= 1.4.x to lwIP >= 1.5.x
===============================================
PPP API was fully reworked between 1.4.x and 1.5.x releases. However porting
from previous lwIP version is pretty easy:
* Previous PPP API used an integer to identify PPP sessions, we are now
using ppp_pcb* control block, therefore all functions changed from "int ppp"
to "ppp_pcb *ppp"
* struct netif was moved outside the PPP structure, you have to provide a netif
for PPP interface in pppoX_create() functions
* PPP session are not started automatically after you created them anymore,
you have to call ppp_connect(), this way you can configure the session before
starting it.
* Previous PPP API used CamelCase, we are now using snake_case.
* Previous PPP API mixed PPPoS and PPPoE calls, this isn't the case anymore,
PPPoS functions are now prefixed pppos_ and PPPoE functions are now prefixed
pppoe_, common functions are now prefixed ppp_.
* New PPPERR_ error codes added, check you have all of them in your status
callback function
* Only the following include files should now be used in user application:
#include "lwip/pppapi.h"
#include "netif/ppp/pppos.h"
#include "netif/ppp/pppoe.h"
#include "netif/ppp/pppol2tp.h"
Functions from ppp.h can be used, but you don't need to include this header
file as it is already included by above header files.
* PPP_INPROC_OWNTHREAD was broken by design and was removed, you have to create
your own serial rx thread
* PPP_INPROC_MULTITHREADED option was misnamed and confusing and was renamed
PPP_INPROC_IRQ_SAFE, please read the "PPPoS input path" documentation above
because you might have been fooled by that
* If you used tcpip_callback_with_block() on ppp_ functions you may wish to use
the PPPAPI API instead.
* ppp_sighup and ppp_close functions were merged using an optional argument
"nocarrier" on ppp_close.
* DNS servers are now only remotely asked if LWIP_DNS is set and we are now
unconditionally registering them, which is probably the wanted behavior in
almost all cases. If you need it conditional contact us and we will made it
conditional.
* PPPoS now requires a serial output callback
* PPP_MAXIDLEFLAG is now in ms instead of jiffies

View File

@@ -1,20 +1,76 @@
Raw TCP/IP interface for lwIP 0.5
Raw TCP/IP interface for lwIP
Author: Adam Dunkels
Authors: Adam Dunkels, Leon Woestenberg, Christiaan Simons
lwIP provides two Application Program's Interfaces (APIs) for programs
to use for communication with the TCP/IP code: the sequential API
(often just called "the API") and the raw TCP/IP interface. This
document is intended as a description of the latter. For lwIP versions
lower than 0.5, this API was not documented.
lwIP provides three Application Program's Interfaces (APIs) for programs
to use for communication with the TCP/IP code:
* low-level "core" / "callback" or "raw" API.
* higher-level "sequential" API.
* BSD-style socket API.
The raw API (sometimes called native API) is an event-driven API designed
to be used without an operating system that implements zero-copy send and
receive. This API is also used by the core stack for interaction between
the various protocols. It is the only API available when running lwIP
without an operating system.
The sequential API provides a way for ordinary, sequential, programs
to use the lwIP stack. It is quite similar to the BSD socket API. The
model of execution is based on the open-read-write-close
model of execution is based on the blocking open-read-write-close
paradigm. Since the TCP/IP stack is event based by nature, the TCP/IP
code and the application program must reside in different execution
contexts (threads).
The socket API is a compatibility API for existing applications,
currently it is built on top of the sequential API. It is meant to
provide all functions needed to run socket API applications running
on other platforms (e.g. unix / windows etc.). However, due to limitations
in the specification of this API, there might be incompatibilities
that require small modifications of existing programs.
** Multithreading
lwIP started targeting single-threaded environments. When adding multi-
threading support, instead of making the core thread-safe, another
approach was chosen: there is one main thread running the lwIP core
(also known as the "tcpip_thread"). When running in a multithreaded
environment, raw API functions MUST only be called from the core thread
since raw API functions are not protected from concurrent access (aside
from pbuf- and memory management functions). Application threads using
the sequential- or socket API communicate with this main thread through
message passing.
As such, the list of functions that may be called from
other threads or an ISR is very limited! Only functions
from these API header files are thread-safe:
- api.h
- netbuf.h
- netdb.h
- netifapi.h
- pppapi.h
- sockets.h
- sys.h
Additionaly, memory (de-)allocation functions may be
called from multiple threads (not ISR!) with NO_SYS=0
since they are protected by SYS_LIGHTWEIGHT_PROT and/or
semaphores.
Netconn or Socket API functions are thread safe against the
core thread but they are not reentrant at the control block
granularity level. That is, a UDP or TCP control block must
not be shared among multiple threads without proper locking.
If SYS_LIGHTWEIGHT_PROT is set to 1 and
LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT is set to 1,
pbuf_free() may also be called from another thread or
an ISR (since only then, mem_free - for PBUF_RAM - may
be called from an ISR: otherwise, the HEAP is only
protected by semaphores).
** The remainder of this document discusses the "raw" API. **
The raw TCP/IP interface allows the application program to integrate
better with the TCP/IP code. Program execution is event based by
having callback functions being called from within the TCP/IP
@@ -30,14 +86,28 @@ the raw TCP/IP interface are more difficult to understand. Still, this
is the preferred way of writing applications that should be small in
code size and memory usage.
Both APIs can be used simultaneously by different application
All APIs can be used simultaneously by different application
programs. In fact, the sequential API is implemented as an application
program using the raw TCP/IP interface.
Do not confuse the lwIP raw API with raw Ethernet or IP sockets.
The former is a way of interfacing the lwIP network stack (including
TCP and UDP), the later refers to processing raw Ethernet or IP data
instead of TCP connections or UDP packets.
Raw API applications may never block since all packet processing
(input and output) as well as timer processing (TCP mainly) is done
in a single execution context.
--- Callbacks
Program execution is driven by callbacks. Each callback is an ordinary
Program execution is driven by callbacks functions, which are then
invoked by the lwIP core when activity related to that application
occurs. A particular application may register to be notified via a
callback function for events such as incoming data available, outgoing
data sent, error notifications, poll timer expiration, connection
closed, etc. An application can provide a callback function to perform
processing for any or all of these events. Each callback is an ordinary
C function that is called from within the TCP/IP code. Every callback
function is passed the current TCP or UDP connection state as an
argument. Also, in order to be able to keep program specific state,
@@ -67,7 +137,7 @@ incoming connections or be explicitly connected to another host.
Creates a new connection identifier (PCB). If memory is not
available for creating the new pcb, NULL is returned.
- err_t tcp_bind(struct tcp_pcb *pcb, struct ip_addr *ipaddr,
- err_t tcp_bind(struct tcp_pcb *pcb, ip_addr_t *ipaddr,
u16_t port)
Binds the pcb to a local IP address and port number. The IP address
@@ -95,14 +165,29 @@ incoming connections or be explicitly connected to another host.
listening connection. If so, the memory associated with the pcb
passed as an argument to tcp_listen() will not be deallocated.
- struct tcp_pcb *tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog)
Same as tcp_listen, but limits the number of outstanding connections
in the listen queue to the value specified by the backlog argument.
To use it, your need to set TCP_LISTEN_BACKLOG=1 in your lwipopts.h.
- void tcp_accepted(struct tcp_pcb *pcb)
Inform lwIP that an incoming connection has been accepted. This would
usually be called from the accept callback. This allows lwIP to perform
housekeeping tasks, such as allowing further incoming connections to be
queued in the listen backlog.
ATTENTION: the PCB passed in must be the listening pcb, not the pcb passed
into the accept callback!
- void tcp_accept(struct tcp_pcb *pcb,
err_t (* accept)(void *arg, struct tcp_pcb *newpcb,
err_t err))
Specified the callback function that should be called when a new
connection arrives on a listening connection.
- err_t tcp_connect(struct tcp_pcb *pcb, struct ip_addr *ipaddr,
- err_t tcp_connect(struct tcp_pcb *pcb, ip_addr_t *ipaddr,
u16_t port, err_t (* connected)(void *arg,
struct tcp_pcb *tpcb,
err_t err));
@@ -115,14 +200,15 @@ incoming connections or be explicitly connected to another host.
function specified as the fourth argument (the "connected" argument)
when the connection is established. If the connection could not be
properly established, either because the other host refused the
connection or because the other host didn't answer, the "connected"
function will be called with an the "err" argument set accordingly.
connection or because the other host didn't answer, the "err"
callback function of this pcb (registered with tcp_err, see below)
will be called.
The tcp_connect() function can return ERR_MEM if no memory is
available for enqueueing the SYN segment. If the SYN indeed was
enqueued successfully, the tcp_connect() function returns ERR_OK.
--- Sending TCP data
TCP data is sent by enqueueing the data with a call to
@@ -130,15 +216,19 @@ tcp_write(). When the data is successfully transmitted to the remote
host, the application will be notified with a call to a specified
callback function.
- err_t tcp_write(struct tcp_pcb *pcb, void *dataptr, u16_t len,
u8_t copy)
- err_t tcp_write(struct tcp_pcb *pcb, const void *dataptr, u16_t len,
u8_t apiflags)
Enqueues the data pointed to by the argument dataptr. The length of
the data is passed as the len parameter. The copy argument is either
0 or 1 and indicates whether the new memory should be allocated for
the data to be copied into. If the argument is 0, no new memory
should be allocated and the data should only be referenced by
pointer.
the data is passed as the len parameter. The apiflags can be one or more of:
- TCP_WRITE_FLAG_COPY: indicates whether the new memory should be allocated
for the data to be copied into. If this flag is not given, no new memory
should be allocated and the data should only be referenced by pointer. This
also means that the memory behind dataptr must not change until the data is
ACKed by the remote host
- TCP_WRITE_FLAG_MORE: indicates that more data follows. If this is omitted,
the PSH flag is set in the last segment created by this call to tcp_write.
If this flag is given, the PSH flag is not set.
The tcp_write() function will fail and return ERR_MEM if the length
of the data exceeds the current send buffer size or if the length of
@@ -153,7 +243,7 @@ callback function.
- void tcp_sent(struct tcp_pcb *pcb,
err_t (* sent)(void *arg, struct tcp_pcb *tpcb,
u16_t len))
u16_t len))
Specifies the callback function that should be called when data has
successfully been received (i.e., acknowledged) by the remote
@@ -175,13 +265,16 @@ window.
Sets the callback function that will be called when new data
arrives. The callback function will be passed a NULL pbuf to
indicate that the remote host has closed the connection.
indicate that the remote host has closed the connection. If
there are no errors and the callback function is to return
ERR_OK, then it must free the pbuf. Otherwise, it must not
free the pbuf so that lwIP core code can store it.
- void tcp_recved(struct tcp_pcb *pcb, u16_t len)
Must be called when the application has received the data. The len
argument indicates the length of the received data.
--- Application polling
@@ -194,8 +287,9 @@ if a call to tcp_write() has failed because memory wasn't available,
the application may use the polling functionality to call tcp_write()
again when the connection has been idle for a while.
- void tcp_poll(struct tcp_pcb *pcb, u8_t interval,
err_t (* poll)(void *arg, struct tcp_pcb *tpcb))
- void tcp_poll(struct tcp_pcb *pcb,
err_t (* poll)(void *arg, struct tcp_pcb *tpcb),
u8_t interval)
Specifies the polling interval and the callback function that should
be called to poll the application. The interval is specified in
@@ -221,29 +315,23 @@ again when the connection has been idle for a while.
Aborts the connection by sending a RST (reset) segment to the remote
host. The pcb is deallocated. This function never fails.
ATTENTION: When calling this from one of the TCP callbacks, make
sure you always return ERR_ABRT (and never return ERR_ABRT otherwise
or you will risk accessing deallocated memory or memory leaks!
If a connection is aborted because of an error, the application is
alerted of this event by the err callback. Errors that might abort a
connection are when there is a shortage of memory. The callback
function to be called is set using the tcp_err() function.
- void tcp_err(struct tcp_pcb *pcb, void (* err)(void *arg,
err_t err))
err_t err))
The error callback function does not get the pcb passed to it as a
parameter since the pcb may already have been deallocated.
--- Lower layer TCP interface
TCP provides a simple interface to the lower layers of the
system. During system initialization, the function tcp_init() has
to be called before any other TCP function is called. When the system
is running, the two timer functions tcp_fasttmr() and tcp_slowtmr()
must be called with regular intervals. The tcp_fasttmr() should be
called every TCP_FAST_INTERVAL milliseconds (defined in tcp.h) and
tcp_slowtmr() should be called every TCP_SLOW_INTERVAL milliseconds.
--- UDP interface
The UDP interface is similar to that of TCP, but due to the lower
@@ -259,14 +347,14 @@ level of complexity of UDP, the interface is significantly simpler.
Removes and deallocates the pcb.
- err_t udp_bind(struct udp_pcb *pcb, struct ip_addr *ipaddr,
- err_t udp_bind(struct udp_pcb *pcb, ip_addr_t *ipaddr,
u16_t port)
Binds the pcb to a local address. The IP-address argument "ipaddr"
can be IP_ADDR_ANY to indicate that it should listen to any local IP
address. The function currently always return ERR_OK.
- err_t udp_connect(struct udp_pcb *pcb, struct ip_addr *ipaddr,
- err_t udp_connect(struct udp_pcb *pcb, ip_addr_t *ipaddr,
u16_t port)
Sets the remote end of the pcb. This function does not generate any
@@ -284,9 +372,135 @@ level of complexity of UDP, the interface is significantly simpler.
- void udp_recv(struct udp_pcb *pcb,
void (* recv)(void *arg, struct udp_pcb *upcb,
struct pbuf *p,
struct ip_addr *addr,
ip_addr_t *addr,
u16_t port),
void *recv_arg)
Specifies a callback function that should be called when a UDP
datagram is received.
datagram is received.
--- System initalization
A truly complete and generic sequence for initializing the lwIP stack
cannot be given because it depends on additional initializations for
your runtime environment (e.g. timers).
We can give you some idea on how to proceed when using the raw API.
We assume a configuration using a single Ethernet netif and the
UDP and TCP transport layers, IPv4 and the DHCP client.
Call these functions in the order of appearance:
- lwip_init()
Initialize the lwIP stack and all of its subsystems.
- netif_add(struct netif *netif, const ip4_addr_t *ipaddr,
const ip4_addr_t *netmask, const ip4_addr_t *gw,
void *state, netif_init_fn init, netif_input_fn input)
Adds your network interface to the netif_list. Allocate a struct
netif and pass a pointer to this structure as the first argument.
Give pointers to cleared ip_addr structures when using DHCP,
or fill them with sane numbers otherwise. The state pointer may be NULL.
The init function pointer must point to a initialization function for
your Ethernet netif interface. The following code illustrates its use.
err_t netif_if_init(struct netif *netif)
{
u8_t i;
for (i = 0; i < ETHARP_HWADDR_LEN; i++) {
netif->hwaddr[i] = some_eth_addr[i];
}
init_my_eth_device();
return ERR_OK;
}
For Ethernet drivers, the input function pointer must point to the lwIP
function ethernet_input() declared in "netif/etharp.h". Other drivers
must use ip_input() declared in "lwip/ip.h".
- netif_set_default(struct netif *netif)
Registers the default network interface.
- netif_set_link_up(struct netif *netif)
This is the hardware link state; e.g. whether cable is plugged for wired
Ethernet interface. This function must be called even if you don't know
the current state. Having link up and link down events is optional but
DHCP and IPv6 discover benefit well from those events.
- netif_set_up(struct netif *netif)
This is the administrative (= software) state of the netif, when the
netif is fully configured this function must be called.
- dhcp_start(struct netif *netif)
Creates a new DHCP client for this interface on the first call.
You can peek in the netif->dhcp struct for the actual DHCP status.
- sys_check_timeouts()
When the system is running, you have to periodically call
sys_check_timeouts() which will handle all timers for all protocols in
the stack; add this to your main loop or equivalent.
--- Optimalization hints
The first thing you want to optimize is the lwip_standard_checksum()
routine from src/core/inet.c. You can override this standard
function with the #define LWIP_CHKSUM <your_checksum_routine>.
There are C examples given in inet.c or you might want to
craft an assembly function for this. RFC1071 is a good
introduction to this subject.
Other significant improvements can be made by supplying
assembly or inline replacements for htons() and htonl()
if you're using a little-endian architecture.
#define LWIP_PLATFORM_BYTESWAP 1
#define LWIP_PLATFORM_HTONS(x) <your_htons>
#define LWIP_PLATFORM_HTONL(x) <your_htonl>
Check your network interface driver if it reads at
a higher speed than the maximum wire-speed. If the
hardware isn't serviced frequently and fast enough
buffer overflows are likely to occur.
E.g. when using the cs8900 driver, call cs8900if_service(ethif)
as frequently as possible. When using an RTOS let the cs8900 interrupt
wake a high priority task that services your driver using a binary
semaphore or event flag. Some drivers might allow additional tuning
to match your application and network.
For a production release it is recommended to set LWIP_STATS to 0.
Note that speed performance isn't influenced much by simply setting
high values to the memory options.
For more optimization hints take a look at the lwIP wiki.
--- Zero-copy MACs
To achieve zero-copy on transmit, the data passed to the raw API must
remain unchanged until sent. Because the send- (or write-)functions return
when the packets have been enqueued for sending, data must be kept stable
after that, too.
This implies that PBUF_RAM/PBUF_POOL pbufs passed to raw-API send functions
must *not* be reused by the application unless their ref-count is 1.
For no-copy pbufs (PBUF_ROM/PBUF_REF), data must be kept unchanged, too,
but the stack/driver will/must copy PBUF_REF'ed data when enqueueing, while
PBUF_ROM-pbufs are just enqueued (as ROM-data is expected to never change).
Also, data passed to tcp_write without the copy-flag must not be changed!
Therefore, be careful which type of PBUF you use and if you copy TCP data
or not!

View File

@@ -2,42 +2,34 @@ Daily Use Guide for using Savannah for lwIP
Table of Contents:
1 - Obtaining lwIP from the CVS repository
2 - Committers/developers CVS access using SSH (to be written)
3 - Merging from DEVEL branch to main trunk (stable branch)
1 - Obtaining lwIP from the Git repository
2 - Committers/developers Git access using SSH
3 - Merging a development branch to master branch
4 - How to release lwIP
1 Obtaining lwIP from the CVS repository
1 Obtaining lwIP from the Git repository
----------------------------------------
To perform an anonymous CVS checkout of the main trunk (this is where
To perform an anonymous Git clone of the master branch (this is where
bug fixes and incremental enhancements occur), do this:
export CVS_RSH=ssh
cvs -d:ext:anoncvs@subversions.gnu.org:/cvsroot/lwip checkout lwip
(If SSH asks about authenticity of the host, you can check the key
fingerprint against http://savannah.nongnu.org/cvs/?group=lwip)
git clone git://git.savannah.nongnu.org/lwip.git
Or, obtain a stable branch (updated with bug fixes only) as follows:
cvs -d:ext:anoncvs@subversions.gnu.org:/cvsroot/lwip checkout -r STABLE-0_7 -d lwip-0.7 lwip
git clone --branch DEVEL-1_4_1 git://git.savannah.nongnu.org/lwip.git
Or, obtain a specific (fixed) release as follows:
cvs -d:ext:anoncvs@subversions.gnu.org:/cvsroot/lwip checkout -r STABLE-0_7_0 -d lwip-0.7.0 lwip
git clone --branch STABLE-1_4_1 git://git.savannah.nongnu.org/lwip.git
Or, obtain a development branch (considered unstable!) as follows:
cvs -d:ext:anoncvs@subversions.gnu.org:/cvsroot/lwip checkout -r DEVEL -d lwip-DEVEL lwip
3 Committers/developers CVS access using SSH
2 Committers/developers Git access using SSH
--------------------------------------------
The Savannah server uses SSH (Secure Shell) protocol 2 authentication and encryption.
As such, CVS commits to the server occur through a SSH tunnel for project members.
As such, Git commits to the server occur through a SSH tunnel for project members.
To create a SSH2 key pair in UNIX-like environments, do this:
ssh-keygen -t dsa
ssh-keygen -t dsa
Under Windows, a recommended SSH client is "PuTTY", freely available with good
documentation and a graphic user interface. Use its key generator.
@@ -46,114 +38,83 @@ Now paste the id_dsa.pub contents into your Savannah account public key list. Wa
a while so that Savannah can update its configuration (This can take minutes).
Try to login using SSH:
ssh -v your_login@subversions.gnu.org
ssh -v your_login@git.sv.gnu.org
If it tells you:
Linux vcs.savannah.gnu.org 2.6.32-5-xen-686 #1 SMP Wed Jun 17 17:10:03 UTC 2015 i686
Authenticating with public key "your_key_name"...
Server refused to allocate pty
Interactive shell login is not possible for security reasons.
VCS commands are allowed.
Last login: Tue May 15 23:10:12 2012 from 82.245.102.129
You tried to execute:
Sorry, you are not allowed to execute that command.
Shared connection to git.sv.gnu.org closed.
then you could login; Savannah refuses to give you a shell - which is OK, as we
are allowed to use SSH for CVS only. Now, you should be able to do this:
are allowed to use SSH for Git only. Now, you should be able to do this:
git clone your_login@git.sv.gnu.org:/srv/git/lwip.git
export CVS_RSH=ssh
cvs -d:ext:your_login@subversions.gnu.org:/cvsroot/lwip checkout lwip
after which you can edit your local files with bug fixes or new features and
commit them. Make sure you know what you are doing when using CVS to make
After which you can edit your local files with bug fixes or new features and
commit them. Make sure you know what you are doing when using Git to make
changes on the repository. If in doubt, ask on the lwip-members mailing list.
3 Merging from DEVEL branch to main trunk (stable)
--------------------------------------------------
(If SSH asks about authenticity of the host, you can check the key
fingerprint against https://savannah.nongnu.org/git/?group=lwip
Merging is a delicate process in CVS and requires the
following disciplined steps in order to prevent conflicts
in the future. Conflicts can be hard to solve!
Merging from branch A to branch B requires that the A branch
has a tag indicating the previous merger. This tag is called
'merged_from_A_to_B'. After merging, the tag is moved in the
A branch to remember this merger for future merge actions.
3 - Merging a development branch to master branch
-------------------------------------------------
IMPORTANT: AFTER COMMITTING A SUCCESFUL MERGE IN THE
REPOSITORY, THE TAG MUST BE SET ON THE SOURCE BRANCH OF THE
MERGE ACTION (REPLACING EXISTING TAGS WITH THE SAME NAME).
Merging is a straightforward process in Git. How to merge all changes in a
development branch since our last merge from main:
Merge all changes in DEVEL since our last merge to main:
Checkout the master branch:
git checkout master
In the working copy of the main trunk:
cvs update -P -jmerged_from_DEVEL_to_main -jDEVEL
Merge the development branch to master:
git merge your-development-branch
(This will apply the changes between 'merged_from_DEVEL_to_main'
and 'DEVEL' to your work set of files)
Resolve any conflict.
We can now commit the merge result.
cvs commit -R -m "Merged from DEVEL to main."
Commit the merge result.
git commit -a
If this worked out OK, we now move the tag in the DEVEL branch
to this merge point, so we can use this point for future merges:
Push your commits:
git push
cvs rtag -F -r DEVEL merged_from_DEVEL_to_main lwip
4 How to release lwIP
---------------------
First, checkout a clean copy of the branch to be released. Tag this set with
tag name "STABLE-0_6_3". (I use release number 0.6.3 throughout this example).
First, tag the release using Git: (I use release number 1.4.1 throughout
this example).
git tag -a STABLE-1_4_1
Login CVS using pserver authentication, then export a clean copy of the
tagged tree. Export is similar to a checkout, except that the CVS metadata
is not created locally.
Share the tag reference by pushing it to remote:
git push origin STABLE-1_4_1
export CVS_RSH=ssh
cvs -d:ext:anoncvs@subversions.gnu.org:/cvsroot/lwip export -r STABLE-0_6_3 -d lwip-0.6.3 lwip
Prepare the release:
cp -r lwip lwip-1.4.1
rm -rf lwip-1.4.1/.git lwip-1.4.1/.gitattributes
Archive this directory using tar, gzip'd, bzip2'd and zip'd.
Archive the current directory using tar, gzip'd, bzip2'd and zip'd.
tar czvf lwip-1.4.1.tar.gz lwip-1.4.1
tar cjvf lwip-1.4.1.tar.bz2 lwip-1.4.1
zip -r lwip-1.4.1.zip lwip-1.4.1
tar czvf lwip-0.6.3.tar.gz lwip-0.6.3
tar cjvf lwip-0.6.3.tar.bz2 lwip-0.6.3
zip -r lwip-0.6.3.zip lwip-0.6.3
Now, sign the archives with a detached GPG binary signature as follows:
gpg -b lwip-1.4.1.tar.gz
gpg -b lwip-1.4.1.tar.bz2
gpg -b lwip-1.4.1.zip
First, make a local release directory to work in, I use "lwip-releases":
mkdir lwip-releases
cd lwip-releases
Now, make a new release by creating a new directory for it (these are
Savannah conventions so that it shows up in the Files list real nice):
mkdir stable.pkg
mkdir stable.pkg 0.6.3
We can now copy the tar archive we made earlier into the release directory:
cp ../../../lwip-0.6.3.tar.gz .
Finally, synchronize this directory upwards to Savannah:
rsync -n -e "ssh -1" -t -u -v -r *.pkg likewise@savannah.nongnu.org:/upload/lwip
This does a "dry run": no files are modified! After you have confirmed that
this is what you intended to do, remove "-n" and actually synchronize for
real. The release should now be available here:
http://savannah.nongnu.org/files/?group=lwip
---
Explanation of rsync options used:
-t: preserve file timestamps
-u: do not overwrite existing files, unless they are older
-v: be verbose (long format file attributes)
-r: recurse into directories
-n: dry-run, do not modify anything.
---
Upload these files using anonymous FTP:
ncftp ftp://savannah.gnu.org/incoming/savannah/lwip
ncftp> mput *1.4.1.*
Additionally, you may post a news item on Savannah, like this:
A new 0.6.3 release is now available here:
http://savannah.nongnu.org/files/?group=lwip&highlight=0.6.3
A new 1.4.1 release is now available here:
http://savannah.nongnu.org/files/?group=lwip&highlight=1.4.1
You will have to submit this via the user News interface, then approve
this via the Administrator News interface.
this via the Administrator News interface.

165
doc/snmp_agent.txt Normal file
View File

@@ -0,0 +1,165 @@
SNMPv1 agent for lwIP
Author: Christiaan Simons
This is a brief introduction how to use and configure the SNMP agent.
Note the agent uses the raw-API UDP interface so you may also want to
read rawapi.txt to gain a better understanding of the SNMP message handling.
0 Agent Capabilities
====================
SNMPv1 per RFC1157
This is an old(er) standard but is still widely supported.
For SNMPv2c and v3 have a greater complexity and need many
more lines of code. IMHO this breaks the idea of "lightweight IP".
Note the S in SNMP stands for "Simple". Note that "Simple" is
relative. SNMP is simple compared to the complex ISO network
management protocols CMIP (Common Management Information Protocol)
and CMOT (CMip Over Tcp).
MIB II per RFC1213
The standard lwIP stack management information base.
This is a required MIB, so this is always enabled.
When builing lwIP without TCP, the mib-2.tcp group is omitted.
The groups EGP, CMOT and transmission are disabled by default.
Most mib-2 objects are not writable except:
sysName, sysLocation, sysContact, snmpEnableAuthenTraps.
Writing to or changing the ARP and IP address and route
tables is not possible.
Note lwIP has a very limited notion of IP routing. It currently
doen't have a route table and doesn't have a notion of the U,G,H flags.
Instead lwIP uses the interface list with only one default interface
acting as a single gateway interface (G) for the default route.
The agent returns a "virtual table" with the default route 0.0.0.0
for the default interface and network routes (no H) for each
network interface in the netif_list.
All routes are considered to be up (U).
Loading additional MIBs
MIBs can only be added in compile-time, not in run-time.
There is no MIB compiler thus additional MIBs must be hand coded.
Large SNMP message support
The packet decoding and encoding routines are designed
to use pbuf-chains. Larger payloads than the minimum
SNMP requirement of 484 octets are supported if the
PBUF_POOL_SIZE and IP_REASS_BUFSIZE are set to match your
local requirement.
1 Building the Agent
====================
First of all you'll need to add the following define
to your local lwipopts.h:
#define LWIP_SNMP 1
and add the source files in lwip/src/core/snmp
and some snmp headers in lwip/src/include/lwip to your makefile.
Note you'll might need to adapt you network driver to update
the mib2 variables for your interface.
2 Running the Agent
===================
The following function calls must be made in your program to
actually get the SNMP agent running.
Before starting the agent you should supply pointers
to non-volatile memory for sysContact, sysLocation,
and snmpEnableAuthenTraps. You can do this by calling
snmp_set_syscontact()
snmp_set_syslocation()
snmp_set_snmpenableauthentraps()
Additionally you may want to set
snmp_set_sysdescr()
snmp_set_sysobjid() (if you have a private MIB)
snmp_set_sysname()
Also before starting the agent you need to setup
one or more trap destinations using these calls:
snmp_trap_dst_enable();
snmp_trap_dst_ip_set();
3 Private MIBs
==============
If want to extend the agent with your own private MIB you'll need to
add the following define to your local lwipopts.h:
#define SNMP_PRIVATE_MIB 1
You must provide the private_mib.h and associated files yourself.
Note we don't have a "MIB compiler" that generates C source from a MIB,
so you're required to do some serious coding if you enable this!
Note the lwIP enterprise ID (26381) is assigned to the lwIP project,
ALL OBJECT IDENTIFIERS LIVING UNDER THIS ID ARE ASSIGNED BY THE lwIP
MAINTAINERS!
If you need to create your own private MIB you'll need
to apply for your own enterprise ID with IANA: http://www.iana.org/numbers.html
You can set it by passing a struct snmp_obj_id to the agent
using snmp_set_sysobjid(&my_object_id), just before snmp_init().
Note the object identifiers for thes MIB-2 and your private MIB
tree must be kept in sorted ascending (lexicographical) order.
This to ensure correct getnext operation.
An example for a private MIB is part of the "minimal Unix" project:
contrib/ports/unix/proj/minimal/lwip_prvmib.c
The next chapter gives a more detailed description of the
MIB-2 tree and the optional private MIB.
4 The Gory Details
==================
4.0 Object identifiers and the MIB tree.
We have three distinct parts for all object identifiers:
The prefix
.iso.org.dod.internet
the middle part
.mgmt.mib-2.ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaPhysAddress
and the index part
.1.192.168.0.1
Objects located above the .internet hierarchy aren't supported.
Currently only the .mgmt sub-tree is available and
when the SNMP_PRIVATE_MIB is enabled the .private tree
becomes available too.
Object identifiers from incoming requests are checked
for a matching prefix, middle part and index part
or are expanded(*) for GetNext requests with short
or inexisting names in the request.
(* we call this "expansion" but this also
resembles the "auto-completion" operation)
The middle part is usually located in ROM (const)
to preserve precious RAM on small microcontrollers.
However RAM location is possible for a dynamically
changing private tree.
The index part is handled by functions which in
turn use dynamically allocated index trees from RAM.
These trees are updated by e.g. the etharp code
when new entries are made or removed form the ARP cache.
/** @todo more gory details */

View File

@@ -34,31 +34,42 @@ in the sys_arch.h file. Mailboxes are equivalently represented by the
type "sys_mbox_t". lwIP does not place any restrictions on how
sys_sem_t or sys_mbox_t are represented internally.
Since lwIP 1.4.0, semaphore and mailbox functions are prototyped in a way that
allows both using pointers or actual OS structures to be used. This way, memory
required for such types can be either allocated in place (globally or on the
stack) or on the heap (allocated internally in the "*_new()" functions).
The following functions must be implemented by the sys_arch:
- void sys_init(void)
Is called to initialize the sys_arch layer.
- sys_sem_t sys_sem_new(u8_t count)
- err_t sys_sem_new(sys_sem_t *sem, u8_t count)
Creates and returns a new semaphore. The "count" argument specifies
the initial state of the semaphore.
Creates a new semaphore. The semaphore is allocated to the memory that 'sem'
points to (which can be both a pointer or the actual OS structure).
The "count" argument specifies the initial state of the semaphore (which is
either 0 or 1).
If the semaphore has been created, ERR_OK should be returned. Returning any
other error will provide a hint what went wrong, but except for assertions,
no real error handling is implemented.
- void sys_sem_free(sys_sem_t sem)
- void sys_sem_free(sys_sem_t *sem)
Deallocates a semaphore.
- void sys_sem_signal(sys_sem_t sem)
- void sys_sem_signal(sys_sem_t *sem)
Signals a semaphore.
- u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout)
- u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
Blocks the thread while waiting for the semaphore to be
signaled. If the "timeout" argument is non-zero, the thread should
only be blocked for the specified time (measured in
milliseconds).
milliseconds). If the "timeout" argument is zero, the thread should be
blocked until the semaphore is signalled.
If the timeout argument is non-zero, the return value is the number of
milliseconds spent waiting for the semaphore to be signaled. If the
@@ -69,25 +80,52 @@ The following functions must be implemented by the sys_arch:
Notice that lwIP implements a function with a similar name,
sys_sem_wait(), that uses the sys_arch_sem_wait() function.
- sys_mbox_t sys_mbox_new(void)
- int sys_sem_valid(sys_sem_t *sem)
Creates an empty mailbox.
Returns 1 if the semaphore is valid, 0 if it is not valid.
When using pointers, a simple way is to check the pointer for != NULL.
When directly using OS structures, implementing this may be more complex.
This may also be a define, in which case the function is not prototyped.
- void sys_mbox_free(sys_mbox_t mbox)
- void sys_sem_set_invalid(sys_sem_t *sem)
Invalidate a semaphore so that sys_sem_valid() returns 0.
ATTENTION: This does NOT mean that the semaphore shall be deallocated:
sys_sem_free() is always called before calling this function!
This may also be a define, in which case the function is not prototyped.
- err_t sys_mbox_new(sys_mbox_t *mbox, int size)
Creates an empty mailbox for maximum "size" elements. Elements stored
in mailboxes are pointers. You have to define macros "_MBOX_SIZE"
in your lwipopts.h, or ignore this parameter in your implementation
and use a default size.
If the mailbox has been created, ERR_OK should be returned. Returning any
other error will provide a hint what went wrong, but except for assertions,
no real error handling is implemented.
- void sys_mbox_free(sys_mbox_t *mbox)
Deallocates a mailbox. If there are messages still present in the
mailbox when the mailbox is deallocated, it is an indication of a
programming error in lwIP and the developer should be notified.
- void sys_mbox_post(sys_mbox_t mbox, void *msg)
- void sys_mbox_post(sys_mbox_t *mbox, void *msg)
Posts the "msg" to the mailbox.
Posts the "msg" to the mailbox. This function have to block until
the "msg" is really posted.
- u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout)
- err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
Try to post the "msg" to the mailbox. Returns ERR_MEM if this one
is full, else, ERR_OK if the "msg" is posted.
- u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout)
Blocks the thread until a message arrives in the mailbox, but does
not block the thread longer than "timeout" milliseconds (similar to
the sys_arch_sem_wait() function). The "msg" argument is a result
the sys_arch_sem_wait() function). If "timeout" is 0, the thread should
be blocked until a message arrives. The "msg" argument is a result
parameter that is set by the function (i.e., by doing "*msg =
ptr"). The "msg" parameter maybe NULL to indicate that the message
should be dropped.
@@ -98,29 +136,45 @@ The following functions must be implemented by the sys_arch:
Note that a function with a similar name, sys_mbox_fetch(), is
implemented by lwIP.
- struct sys_timeouts *sys_arch_timeouts(void)
Returns a pointer to the per-thread sys_timeouts structure. In lwIP,
each thread has a list of timeouts which is repressented as a linked
list of sys_timeout structures. The sys_timeouts structure holds a
pointer to a linked list of timeouts. This function is called by
the lwIP timeout scheduler and must not return a NULL value.
- u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
This is similar to sys_arch_mbox_fetch, however if a message is not
present in the mailbox, it immediately returns with the code
SYS_MBOX_EMPTY. On success 0 is returned.
To allow for efficient implementations, this can be defined as a
function-like macro in sys_arch.h instead of a normal function. For
example, a naive implementation could be:
#define sys_arch_mbox_tryfetch(mbox,msg) \
sys_arch_mbox_fetch(mbox,msg,1)
although this would introduce unnecessary delays.
- int sys_mbox_valid(sys_mbox_t *mbox)
Returns 1 if the mailbox is valid, 0 if it is not valid.
When using pointers, a simple way is to check the pointer for != NULL.
When directly using OS structures, implementing this may be more complex.
This may also be a define, in which case the function is not prototyped.
- void sys_mbox_set_invalid(sys_mbox_t *mbox)
Invalidate a mailbox so that sys_mbox_valid() returns 0.
ATTENTION: This does NOT mean that the mailbox shall be deallocated:
sys_mbox_free() is always called before calling this function!
This may also be a define, in which case the function is not prototyped.
In a single threadd sys_arch implementation, this function will
simply return a pointer to a global sys_timeouts variable stored in
the sys_arch module.
If threads are supported by the underlying operating system and if
such functionality is needed in lwIP, the following function will have
to be implemented as well:
- sys_thread_t sys_thread_new(void (* thread)(void *arg), void *arg, int prio)
- sys_thread_t sys_thread_new(char *name, void (* thread)(void *arg), void *arg, int stacksize, int prio)
Starts a new thread with priority "prio" that will begin its execution in the
function "thread()". The "arg" argument will be passed as an argument to the
thread() function. The id of the new thread is returned. Both the id and
the priority are system dependent.
Starts a new thread named "name" with priority "prio" that will begin its
execution in the function "thread()". The "arg" argument will be passed as an
argument to the thread() function. The stack size to used for this thread is
the "stacksize" parameter. The id of the new thread is returned. Both the id
and the priority are system dependent.
- sys_prot_t sys_arch_protect(void)
@@ -143,6 +197,23 @@ to be implemented as well:
more information. This function is only required if your port is supporting
an operating system.
For some configurations, you also need:
- u32_t sys_now(void)
This optional function returns the current time in milliseconds (don't care
for wraparound, this is only used for time diffs).
Not implementing this function means you cannot use some modules (e.g. TCP
timestamps, internal timeouts for NO_SYS==1).
Note:
Be carefull with using mem_malloc() in sys_arch. When malloc() refers to
mem_malloc() you can run into a circular function call problem. In mem.c
mem_init() tries to allcate a semaphore using mem_malloc, which of course
can't be performed when sys_arch uses mem_malloc.
-------------------------------------------------------------------------------
Additional files required for the "OS support" emulation layer:
-------------------------------------------------------------------------------
@@ -163,6 +234,8 @@ cc.h - Architecture environment, some compiler specific, some
Platform specific diagnostic output -
LWIP_PLATFORM_DIAG(x) - non-fatal, print a message.
LWIP_PLATFORM_ASSERT(x) - fatal, print message and abandon execution.
Portability defines for printf formatters:
U16_F, S16_F, X16_F, U32_F, S32_F, X32_F, SZT_F
"lightweight" synchronization mechanisms -
SYS_ARCH_DECL_PROTECT(x) - declare a protection state variable.

View File

@@ -1,11 +1,13 @@
api/ - The code for the API.
api/ - The code for the high-level wrapper API. Not needed if
you use the lowel-level call-back/raw API.
core/ - The core of the TPC/IP stack; protocol implementations,
memory and buffer management, and the low-level raw API.
core/ - The core files including protocol implementations, memory
and buffer management etc.
include/ - lwIP include files.
netif/ - Generic network interface device drivers are kept here.
netif/ - Generic network interface device drivers are kept here,
as well as the ARP module.
For more information on the various subdirectories, check the FILES
file in each directory.

167
src/Filelists.mk Normal file
View File

@@ -0,0 +1,167 @@
#
# 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>
#
# COREFILES, CORE4FILES: The minimum set of files needed for lwIP.
COREFILES=$(LWIPDIR)/core/def.c \
$(LWIPDIR)/core/dns.c \
$(LWIPDIR)/core/inet_chksum.c \
$(LWIPDIR)/core/init.c \
$(LWIPDIR)/core/ip.c \
$(LWIPDIR)/core/mem.c \
$(LWIPDIR)/core/memp.c \
$(LWIPDIR)/core/netif.c \
$(LWIPDIR)/core/pbuf.c \
$(LWIPDIR)/core/raw.c \
$(LWIPDIR)/core/stats.c \
$(LWIPDIR)/core/sys.c \
$(LWIPDIR)/core/tcp.c \
$(LWIPDIR)/core/tcp_in.c \
$(LWIPDIR)/core/tcp_out.c \
$(LWIPDIR)/core/timers.c \
$(LWIPDIR)/core/udp.c
CORE4FILES=$(LWIPDIR)/core/ipv4/autoip.c \
$(LWIPDIR)/core/ipv4/dhcp.c \
$(LWIPDIR)/core/ipv4/icmp.c \
$(LWIPDIR)/core/ipv4/igmp.c \
$(LWIPDIR)/core/ipv4/ip_frag.c \
$(LWIPDIR)/core/ipv4/ip4.c \
$(LWIPDIR)/core/ipv4/ip4_addr.c
CORE6FILES=$(LWIPDIR)/core/ipv6/dhcp6.c \
$(LWIPDIR)/core/ipv6/ethip6.c \
$(LWIPDIR)/core/ipv6/icmp6.c \
$(LWIPDIR)/core/ipv6/ip6.c \
$(LWIPDIR)/core/ipv6/ip6_addr.c \
$(LWIPDIR)/core/ipv6/ip6_frag.c \
$(LWIPDIR)/core/ipv6/mld6.c \
$(LWIPDIR)/core/ipv6/nd6.c
# APIFILES: The files which implement the sequential and socket APIs.
APIFILES=$(LWIPDIR)/api/api_lib.c \
$(LWIPDIR)/api/api_msg.c \
$(LWIPDIR)/api/err.c \
$(LWIPDIR)/api/netbuf.c \
$(LWIPDIR)/api/netdb.c \
$(LWIPDIR)/api/netifapi.c \
$(LWIPDIR)/api/sockets.c \
$(LWIPDIR)/api/tcpip.c
# NETIFFILES: Files implementing various generic network interface functions
NETIFFILES=$(LWIPDIR)/netif/ethernet.c $(LWIPDIR)/netif/etharp.c \
$(LWIPDIR)/netif/slipif.c
# SIXLOWPAN: 6LoWPAN
SIXLOWPAN=$(LWIPDIR)/netif/lowpan6.c \
# PPPFILES: PPP
PPPFILES=$(LWIPDIR)/netif/ppp/auth.c \
$(LWIPDIR)/netif/ppp/ccp.c \
$(LWIPDIR)/netif/ppp/chap-md5.c \
$(LWIPDIR)/netif/ppp/chap_ms.c \
$(LWIPDIR)/netif/ppp/chap-new.c \
$(LWIPDIR)/netif/ppp/demand.c \
$(LWIPDIR)/netif/ppp/eap.c \
$(LWIPDIR)/netif/ppp/ecp.c \
$(LWIPDIR)/netif/ppp/eui64.c \
$(LWIPDIR)/netif/ppp/fsm.c \
$(LWIPDIR)/netif/ppp/ipcp.c \
$(LWIPDIR)/netif/ppp/ipv6cp.c \
$(LWIPDIR)/netif/ppp/lcp.c \
$(LWIPDIR)/netif/ppp/magic.c \
$(LWIPDIR)/netif/ppp/mppe.c \
$(LWIPDIR)/netif/ppp/multilink.c \
$(LWIPDIR)/netif/ppp/ppp.c \
$(LWIPDIR)/netif/ppp/pppapi.c \
$(LWIPDIR)/netif/ppp/pppcrypt.c \
$(LWIPDIR)/netif/ppp/pppoe.c \
$(LWIPDIR)/netif/ppp/pppol2tp.c \
$(LWIPDIR)/netif/ppp/pppos.c \
$(LWIPDIR)/netif/ppp/upap.c \
$(LWIPDIR)/netif/ppp/utils.c \
$(LWIPDIR)/netif/ppp/vj.c \
$(LWIPDIR)/netif/ppp/polarssl/arc4.c \
$(LWIPDIR)/netif/ppp/polarssl/des.c \
$(LWIPDIR)/netif/ppp/polarssl/md4.c \
$(LWIPDIR)/netif/ppp/polarssl/md5.c \
$(LWIPDIR)/netif/ppp/polarssl/sha1.c
# LWIPNOAPPSFILES: All LWIP files without apps
LWIPNOAPPSFILES=$(COREFILES) \
$(CORE4FILES) \
$(CORE6FILES) \
$(APIFILES) \
$(NETIFFILES) \
$(PPPFILES) \
$(SIXLOWPAN)
# SNMPFILES: SNMPv2c agent
SNMPFILES=$(LWIPDIR)/apps/snmp/snmp_asn1.c \
$(LWIPDIR)/apps/snmp/snmp_core.c \
$(LWIPDIR)/apps/snmp/snmp_mib2.c \
$(LWIPDIR)/apps/snmp/snmp_mib2_icmp.c \
$(LWIPDIR)/apps/snmp/snmp_mib2_interfaces.c \
$(LWIPDIR)/apps/snmp/snmp_mib2_ip.c \
$(LWIPDIR)/apps/snmp/snmp_mib2_snmp.c \
$(LWIPDIR)/apps/snmp/snmp_mib2_system.c \
$(LWIPDIR)/apps/snmp/snmp_mib2_tcp.c \
$(LWIPDIR)/apps/snmp/snmp_mib2_udp.c \
$(LWIPDIR)/apps/snmp/snmp_msg.c \
$(LWIPDIR)/apps/snmp/snmpv3.c \
$(LWIPDIR)/apps/snmp/snmp_netconn.c \
$(LWIPDIR)/apps/snmp/snmp_pbuf_stream.c \
$(LWIPDIR)/apps/snmp/snmp_raw.c \
$(LWIPDIR)/apps/snmp/snmp_scalar.c \
$(LWIPDIR)/apps/snmp/snmp_table.c \
$(LWIPDIR)/apps/snmp/snmp_threadsync.c \
$(LWIPDIR)/apps/snmp/snmp_traps.c \
$(LWIPDIR)/apps/snmp/snmpv3_mbedtls.c \
$(LWIPDIR)/apps/snmp/snmpv3_dummy.c
# HTTPDFILES: HTTP server
HTTPDFILES=$(LWIPDIR)/apps/httpd/fs.c \
$(LWIPDIR)/apps/httpd/httpd.c
# LWIPERFFILES: IPERF server
LWIPERFFILES=$(LWIPDIR)/apps/lwiperf/lwiperf.c
# SNTPFILES: SNTP client
SNTPFILES=$(LWIPDIR)/apps/sntp/sntp.c
# NETBIOSNSFILES: NetBIOS name server
NETBIOSNSFILES=$(LWIPDIR)/apps/netbiosns/netbiosns.c
# LWIPAPPFILES: All LWIP APPs
LWIPAPPFILES=$(SNMPFILES) \
$(HTTPDFILES) \
$(LWIPERFFILES) \
$(SNTPFILES) \
$(NETBIOSNSFILES)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,14 @@
/**
* @file
* Error Management module
*
*/
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* 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,
@@ -11,21 +17,21 @@
* 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.
* 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
* 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>
*
*/
@@ -34,26 +40,36 @@
#ifdef LWIP_DEBUG
static char *err_strerr[] = {"Ok.",
"Out of memory error.",
"Buffer error.",
"Connection aborted.",
"Connection reset.",
"Connection closed.",
"Not connected.",
"Illegal value.",
"Illegal argument.",
"Routing problem.",
"Address in use."
static const char *err_strerr[] = {
"Ok.", /* ERR_OK 0 */
"Out of memory error.", /* ERR_MEM -1 */
"Buffer error.", /* ERR_BUF -2 */
"Timeout.", /* ERR_TIMEOUT -3 */
"Routing problem.", /* ERR_RTE -4 */
"Operation in progress.", /* ERR_INPROGRESS -5 */
"Illegal value.", /* ERR_VAL -6 */
"Operation would block.", /* ERR_WOULDBLOCK -7 */
"Address in use.", /* ERR_USE -8 */
"Already connecting.", /* ERR_ALREADY -9 */
"Already connected.", /* ERR_ISCONN -10 */
"Not connected.", /* ERR_CONN -11 */
"Low-level netif error.", /* ERR_IF -12 */
"Connection aborted.", /* ERR_ABRT -13 */
"Connection reset.", /* ERR_RST -14 */
"Connection closed.", /* ERR_CLSD -15 */
"Illegal argument." /* ERR_ARG -16 */
};
char *
/**
* Convert an lwip internal error to a string representation.
*
* @param err an lwip internal err_t
* @return a string representation for err
*/
const char *
lwip_strerr(err_t err)
{
return err_strerr[-err];
}
#endif /* LWIP_DEBUG */

245
src/api/netbuf.c Normal file
View File

@@ -0,0 +1,245 @@
/**
* @file
* Network buffer management
*
*/
/*
* 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>
*
*/
#include "lwip/opt.h"
#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */
#include "lwip/netbuf.h"
#include "lwip/memp.h"
#include <string.h>
/**
* Create (allocate) and initialize a new netbuf.
* The netbuf doesn't yet contain a packet buffer!
*
* @return a pointer to a new netbuf
* NULL on lack of memory
*/
struct
netbuf *netbuf_new(void)
{
struct netbuf *buf;
buf = (struct netbuf *)memp_malloc(MEMP_NETBUF);
if (buf != NULL) {
buf->p = NULL;
buf->ptr = NULL;
ip_addr_set_zero(&buf->addr);
buf->port = 0;
#if LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY
#if LWIP_CHECKSUM_ON_COPY
buf->flags = 0;
#endif /* LWIP_CHECKSUM_ON_COPY */
buf->toport_chksum = 0;
#if LWIP_NETBUF_RECVINFO
ip_addr_set_zero(&buf->toaddr);
#endif /* LWIP_NETBUF_RECVINFO */
#endif /* LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY */
return buf;
} else {
return NULL;
}
}
/**
* Deallocate a netbuf allocated by netbuf_new().
*
* @param buf pointer to a netbuf allocated by netbuf_new()
*/
void
netbuf_delete(struct netbuf *buf)
{
if (buf != NULL) {
if (buf->p != NULL) {
pbuf_free(buf->p);
buf->p = buf->ptr = NULL;
}
memp_free(MEMP_NETBUF, buf);
}
}
/**
* Allocate memory for a packet buffer for a given netbuf.
*
* @param buf the netbuf for which to allocate a packet buffer
* @param size the size of the packet buffer to allocate
* @return pointer to the allocated memory
* NULL if no memory could be allocated
*/
void *
netbuf_alloc(struct netbuf *buf, u16_t size)
{
LWIP_ERROR("netbuf_alloc: invalid buf", (buf != NULL), return NULL;);
/* Deallocate any previously allocated memory. */
if (buf->p != NULL) {
pbuf_free(buf->p);
}
buf->p = pbuf_alloc(PBUF_TRANSPORT, size, PBUF_RAM);
if (buf->p == NULL) {
return NULL;
}
LWIP_ASSERT("check that first pbuf can hold size",
(buf->p->len >= size));
buf->ptr = buf->p;
return buf->p->payload;
}
/**
* Free the packet buffer included in a netbuf
*
* @param buf pointer to the netbuf which contains the packet buffer to free
*/
void
netbuf_free(struct netbuf *buf)
{
LWIP_ERROR("netbuf_free: invalid buf", (buf != NULL), return;);
if (buf->p != NULL) {
pbuf_free(buf->p);
}
buf->p = buf->ptr = NULL;
}
/**
* Let a netbuf reference existing (non-volatile) data.
*
* @param buf netbuf which should reference the data
* @param dataptr pointer to the data to reference
* @param size size of the data
* @return ERR_OK if data is referenced
* ERR_MEM if data couldn't be referenced due to lack of memory
*/
err_t
netbuf_ref(struct netbuf *buf, const void *dataptr, u16_t size)
{
LWIP_ERROR("netbuf_ref: invalid buf", (buf != NULL), return ERR_ARG;);
if (buf->p != NULL) {
pbuf_free(buf->p);
}
buf->p = pbuf_alloc(PBUF_TRANSPORT, 0, PBUF_REF);
if (buf->p == NULL) {
buf->ptr = NULL;
return ERR_MEM;
}
((struct pbuf_rom*)buf->p)->payload = dataptr;
buf->p->len = buf->p->tot_len = size;
buf->ptr = buf->p;
return ERR_OK;
}
/**
* Chain one netbuf to another (@see pbuf_chain)
*
* @param head the first netbuf
* @param tail netbuf to chain after head, freed by this function, may not be reference after returning
*/
void
netbuf_chain(struct netbuf *head, struct netbuf *tail)
{
LWIP_ERROR("netbuf_ref: invalid head", (head != NULL), return;);
LWIP_ERROR("netbuf_chain: invalid tail", (tail != NULL), return;);
pbuf_cat(head->p, tail->p);
head->ptr = head->p;
memp_free(MEMP_NETBUF, tail);
}
/**
* Get the data pointer and length of the data inside a netbuf.
*
* @param buf netbuf to get the data from
* @param dataptr pointer to a void pointer where to store the data pointer
* @param len pointer to an u16_t where the length of the data is stored
* @return ERR_OK if the information was retrieved,
* ERR_BUF on error.
*/
err_t
netbuf_data(struct netbuf *buf, void **dataptr, u16_t *len)
{
LWIP_ERROR("netbuf_data: invalid buf", (buf != NULL), return ERR_ARG;);
LWIP_ERROR("netbuf_data: invalid dataptr", (dataptr != NULL), return ERR_ARG;);
LWIP_ERROR("netbuf_data: invalid len", (len != NULL), return ERR_ARG;);
if (buf->ptr == NULL) {
return ERR_BUF;
}
*dataptr = buf->ptr->payload;
*len = buf->ptr->len;
return ERR_OK;
}
/**
* Move the current data pointer of a packet buffer contained in a netbuf
* to the next part.
* The packet buffer itself is not modified.
*
* @param buf the netbuf to modify
* @return -1 if there is no next part
* 1 if moved to the next part but now there is no next part
* 0 if moved to the next part and there are still more parts
*/
s8_t
netbuf_next(struct netbuf *buf)
{
LWIP_ERROR("netbuf_free: invalid buf", (buf != NULL), return -1;);
if (buf->ptr->next == NULL) {
return -1;
}
buf->ptr = buf->ptr->next;
if (buf->ptr->next == NULL) {
return 1;
}
return 0;
}
/**
* Move the current data pointer of a packet buffer contained in a netbuf
* to the beginning of the packet.
* The packet buffer itself is not modified.
*
* @param buf the netbuf to modify
*/
void
netbuf_first(struct netbuf *buf)
{
LWIP_ERROR("netbuf_free: invalid buf", (buf != NULL), return;);
buf->ptr = buf->p;
}
#endif /* LWIP_NETCONN */

410
src/api/netdb.c Normal file
View File

@@ -0,0 +1,410 @@
/**
* @file
* API functions for name resolving
*
*/
/*
* 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
*
*/
#include "lwip/netdb.h"
#if LWIP_DNS && LWIP_SOCKET
#include "lwip/err.h"
#include "lwip/mem.h"
#include "lwip/memp.h"
#include "lwip/ip_addr.h"
#include "lwip/api.h"
#include "lwip/dns.h"
#include <string.h>
#include <stdlib.h>
/** helper struct for gethostbyname_r to access the char* buffer */
struct gethostbyname_r_helper {
ip_addr_t *addr_list[2];
ip_addr_t addr;
char *aliases;
};
/** h_errno is exported in netdb.h for access by applications. */
#if LWIP_DNS_API_DECLARE_H_ERRNO
int h_errno;
#endif /* LWIP_DNS_API_DECLARE_H_ERRNO */
/** define "hostent" variables storage: 0 if we use a static (but unprotected)
* set of variables for lwip_gethostbyname, 1 if we use a local storage */
#ifndef LWIP_DNS_API_HOSTENT_STORAGE
#define LWIP_DNS_API_HOSTENT_STORAGE 0
#endif
/** define "hostent" variables storage */
#if LWIP_DNS_API_HOSTENT_STORAGE
#define HOSTENT_STORAGE
#else
#define HOSTENT_STORAGE static
#endif /* LWIP_DNS_API_STATIC_HOSTENT */
/**
* Returns an entry containing addresses of address family AF_INET
* for the host with name name.
* Due to dns_gethostbyname limitations, only one address is returned.
*
* @param name the hostname to resolve
* @return an entry containing addresses of address family AF_INET
* for the host with name name
*/
struct hostent*
lwip_gethostbyname(const char *name)
{
err_t err;
ip_addr_t addr;
/* buffer variables for lwip_gethostbyname() */
HOSTENT_STORAGE struct hostent s_hostent;
HOSTENT_STORAGE char *s_aliases;
HOSTENT_STORAGE ip_addr_t s_hostent_addr;
HOSTENT_STORAGE ip_addr_t *s_phostent_addr[2];
HOSTENT_STORAGE char s_hostname[DNS_MAX_NAME_LENGTH + 1];
/* query host IP address */
err = netconn_gethostbyname(name, &addr);
if (err != ERR_OK) {
LWIP_DEBUGF(DNS_DEBUG, ("lwip_gethostbyname(%s) failed, err=%d\n", name, err));
h_errno = HOST_NOT_FOUND;
return NULL;
}
/* fill hostent */
s_hostent_addr = addr;
s_phostent_addr[0] = &s_hostent_addr;
s_phostent_addr[1] = NULL;
strncpy(s_hostname, name, DNS_MAX_NAME_LENGTH);
s_hostname[DNS_MAX_NAME_LENGTH] = 0;
s_hostent.h_name = s_hostname;
s_aliases = NULL;
s_hostent.h_aliases = &s_aliases;
s_hostent.h_addrtype = AF_INET;
s_hostent.h_length = sizeof(ip_addr_t);
s_hostent.h_addr_list = (char**)&s_phostent_addr;
#if DNS_DEBUG
/* dump hostent */
LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_name == %s\n", s_hostent.h_name));
LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_aliases == %p\n", (void*)s_hostent.h_aliases));
/* h_aliases are always empty */
LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addrtype == %d\n", s_hostent.h_addrtype));
LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_length == %d\n", s_hostent.h_length));
LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list == %p\n", (void*)s_hostent.h_addr_list));
if (s_hostent.h_addr_list != NULL) {
u8_t idx;
for (idx=0; s_hostent.h_addr_list[idx]; idx++) {
LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list[%i] == %p\n", idx, s_hostent.h_addr_list[idx]));
LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list[%i]-> == %s\n", idx, ipaddr_ntoa((ip_addr_t*)s_hostent.h_addr_list[idx])));
}
}
#endif /* DNS_DEBUG */
#if LWIP_DNS_API_HOSTENT_STORAGE
/* this function should return the "per-thread" hostent after copy from s_hostent */
return sys_thread_hostent(&s_hostent);
#else
return &s_hostent;
#endif /* LWIP_DNS_API_HOSTENT_STORAGE */
}
/**
* Thread-safe variant of lwip_gethostbyname: instead of using a static
* buffer, this function takes buffer and errno pointers as arguments
* and uses these for the result.
*
* @param name the hostname to resolve
* @param ret pre-allocated struct where to store the result
* @param buf pre-allocated buffer where to store additional data
* @param buflen the size of buf
* @param result pointer to a hostent pointer that is set to ret on success
* and set to zero on error
* @param h_errnop pointer to an int where to store errors (instead of modifying
* the global h_errno)
* @return 0 on success, non-zero on error, additional error information
* is stored in *h_errnop instead of h_errno to be thread-safe
*/
int
lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf,
size_t buflen, struct hostent **result, int *h_errnop)
{
err_t err;
struct gethostbyname_r_helper *h;
char *hostname;
size_t namelen;
int lh_errno;
if (h_errnop == NULL) {
/* ensure h_errnop is never NULL */
h_errnop = &lh_errno;
}
if (result == NULL) {
/* not all arguments given */
*h_errnop = EINVAL;
return -1;
}
/* first thing to do: set *result to nothing */
*result = NULL;
if ((name == NULL) || (ret == NULL) || (buf == NULL)) {
/* not all arguments given */
*h_errnop = EINVAL;
return -1;
}
namelen = strlen(name);
if (buflen < (sizeof(struct gethostbyname_r_helper) + namelen + 1 + (MEM_ALIGNMENT - 1))) {
/* buf can't hold the data needed + a copy of name */
*h_errnop = ERANGE;
return -1;
}
h = (struct gethostbyname_r_helper*)LWIP_MEM_ALIGN(buf);
hostname = ((char*)h) + sizeof(struct gethostbyname_r_helper);
/* query host IP address */
err = netconn_gethostbyname(name, &h->addr);
if (err != ERR_OK) {
LWIP_DEBUGF(DNS_DEBUG, ("lwip_gethostbyname(%s) failed, err=%d\n", name, err));
*h_errnop = HOST_NOT_FOUND;
return -1;
}
/* copy the hostname into buf */
MEMCPY(hostname, name, namelen);
hostname[namelen] = 0;
/* fill hostent */
h->addr_list[0] = &h->addr;
h->addr_list[1] = NULL;
h->aliases = NULL;
ret->h_name = hostname;
ret->h_aliases = &h->aliases;
ret->h_addrtype = AF_INET;
ret->h_length = sizeof(ip_addr_t);
ret->h_addr_list = (char**)&h->addr_list;
/* set result != NULL */
*result = ret;
/* return success */
return 0;
}
/**
* Frees one or more addrinfo structures returned by getaddrinfo(), along with
* any additional storage associated with those structures. If the ai_next field
* of the structure is not null, the entire list of structures is freed.
*
* @param ai struct addrinfo to free
*/
void
lwip_freeaddrinfo(struct addrinfo *ai)
{
struct addrinfo *next;
while (ai != NULL) {
next = ai->ai_next;
memp_free(MEMP_NETDB, ai);
ai = next;
}
}
/**
* Translates the name of a service location (for example, a host name) and/or
* a service name and returns a set of socket addresses and associated
* information to be used in creating a socket with which to address the
* specified service.
* Memory for the result is allocated internally and must be freed by calling
* lwip_freeaddrinfo()!
*
* Due to a limitation in dns_gethostbyname, only the first address of a
* host is returned.
* Also, service names are not supported (only port numbers)!
*
* @param nodename descriptive name or address string of the host
* (may be NULL -> local address)
* @param servname port number as string of NULL
* @param hints structure containing input values that set socktype and protocol
* @param res pointer to a pointer where to store the result (set to NULL on failure)
* @return 0 on success, non-zero on failure
*
* @todo: implement AI_V4MAPPED, AI_ADDRCONFIG
*/
int
lwip_getaddrinfo(const char *nodename, const char *servname,
const struct addrinfo *hints, struct addrinfo **res)
{
err_t err;
ip_addr_t addr;
struct addrinfo *ai;
struct sockaddr_storage *sa = NULL;
int port_nr = 0;
size_t total_size;
size_t namelen = 0;
int ai_family;
if (res == NULL) {
return EAI_FAIL;
}
*res = NULL;
if ((nodename == NULL) && (servname == NULL)) {
return EAI_NONAME;
}
if (hints != NULL) {
ai_family = hints->ai_family;
if ((ai_family != AF_UNSPEC)
#if LWIP_IPV4
&& (ai_family != AF_INET)
#endif /* LWIP_IPV4 */
#if LWIP_IPV6
&& (ai_family != AF_INET6)
#endif /* LWIP_IPV6 */
) {
return EAI_FAMILY;
}
} else {
ai_family = AF_UNSPEC;
}
if (servname != NULL) {
/* service name specified: convert to port number
* @todo?: currently, only ASCII integers (port numbers) are supported (AI_NUMERICSERV)! */
port_nr = atoi(servname);
if ((port_nr <= 0) || (port_nr > 0xffff)) {
return EAI_SERVICE;
}
}
if (nodename != NULL) {
/* service location specified, try to resolve */
if ((hints != NULL) && (hints->ai_flags & AI_NUMERICHOST)) {
/* no DNS lookup, just parse for an address string */
if (!ipaddr_aton(nodename, &addr)) {
return EAI_NONAME;
}
#if LWIP_IPV4 && LWIP_IPV6
if ((IP_IS_V6_VAL(addr) && ai_family == AF_INET) ||
(IP_IS_V4_VAL(addr) && ai_family == AF_INET6)) {
return EAI_NONAME;
}
#endif /* LWIP_IPV4 && LWIP_IPV6 */
} else {
#if LWIP_IPV4 && LWIP_IPV6
/* AF_UNSPEC: prefer IPv4 */
u8_t type = NETCONN_DNS_IPV4_IPV6;
if (ai_family == AF_INET) {
type = NETCONN_DNS_IPV4;
} else if (ai_family == AF_INET6) {
type = NETCONN_DNS_IPV6;
}
#endif /* LWIP_IPV4 && LWIP_IPV6 */
err = netconn_gethostbyname_addrtype(nodename, &addr, type);
if (err != ERR_OK) {
return EAI_FAIL;
}
}
} else {
/* service location specified, use loopback address */
if ((hints != NULL) && (hints->ai_flags & AI_PASSIVE)) {
ip_addr_set_any(ai_family == AF_INET6, &addr);
} else {
ip_addr_set_loopback(ai_family == AF_INET6, &addr);
}
}
total_size = sizeof(struct addrinfo) + sizeof(struct sockaddr_storage);
if (nodename != NULL) {
namelen = strlen(nodename);
if (namelen > DNS_MAX_NAME_LENGTH) {
/* invalid name length */
return EAI_FAIL;
}
LWIP_ASSERT("namelen is too long", total_size + namelen + 1 > total_size);
total_size += namelen + 1;
}
/* If this fails, please report to lwip-devel! :-) */
LWIP_ASSERT("total_size <= NETDB_ELEM_SIZE: please report this!",
total_size <= NETDB_ELEM_SIZE);
ai = (struct addrinfo *)memp_malloc(MEMP_NETDB);
if (ai == NULL) {
return EAI_MEMORY;
}
memset(ai, 0, total_size);
sa = (struct sockaddr_storage *)(void*)((u8_t*)ai + sizeof(struct addrinfo));
if (IP_IS_V6_VAL(addr)) {
#if LWIP_IPV6
struct sockaddr_in6 *sa6 = (struct sockaddr_in6*)sa;
/* set up sockaddr */
inet6_addr_from_ip6addr(&sa6->sin6_addr, ip_2_ip6(&addr));
sa6->sin6_family = AF_INET6;
sa6->sin6_len = sizeof(struct sockaddr_in6);
sa6->sin6_port = htons((u16_t)port_nr);
ai->ai_family = AF_INET6;
#endif /* LWIP_IPV6 */
} else {
#if LWIP_IPV4
struct sockaddr_in *sa4 = (struct sockaddr_in*)sa;
/* set up sockaddr */
inet_addr_from_ipaddr(&sa4->sin_addr, ip_2_ip4(&addr));
sa4->sin_family = AF_INET;
sa4->sin_len = sizeof(struct sockaddr_in);
sa4->sin_port = htons((u16_t)port_nr);
ai->ai_family = AF_INET;
#endif /* LWIP_IPV4 */
}
/* set up addrinfo */
if (hints != NULL) {
/* copy socktype & protocol from hints if specified */
ai->ai_socktype = hints->ai_socktype;
ai->ai_protocol = hints->ai_protocol;
}
if (nodename != NULL) {
/* copy nodename to canonname if specified */
ai->ai_canonname = ((char*)ai + sizeof(struct addrinfo) + sizeof(struct sockaddr_storage));
MEMCPY(ai->ai_canonname, nodename, namelen);
ai->ai_canonname[namelen] = 0;
}
ai->ai_addrlen = sizeof(struct sockaddr_storage);
ai->ai_addr = (struct sockaddr*)sa;
*res = ai;
return 0;
}
#endif /* LWIP_DNS && LWIP_SOCKET */

206
src/api/netifapi.c Normal file
View File

@@ -0,0 +1,206 @@
/**
* @file
* Network Interface Sequential API module
*
*/
/*
* 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"
#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */
#include "lwip/netifapi.h"
#include "lwip/memp.h"
#include "lwip/priv/tcpip_priv.h"
#define NETIFAPI_VAR_REF(name) API_VAR_REF(name)
#define NETIFAPI_VAR_DECLARE(name) API_VAR_DECLARE(struct netifapi_msg, name)
#define NETIFAPI_VAR_ALLOC(name) API_VAR_ALLOC(struct netifapi_msg, MEMP_NETIFAPI_MSG, name, ERR_MEM)
#define NETIFAPI_VAR_FREE(name) API_VAR_FREE(MEMP_NETIFAPI_MSG, name)
/**
* Call netif_add() inside the tcpip_thread context.
*/
static err_t
netifapi_do_netif_add(struct tcpip_api_call_data *m)
{
struct netifapi_msg *msg = (struct netifapi_msg*)m;
if (!netif_add( msg->netif,
#if LWIP_IPV4
API_EXPR_REF(msg->msg.add.ipaddr),
API_EXPR_REF(msg->msg.add.netmask),
API_EXPR_REF(msg->msg.add.gw),
#endif /* LWIP_IPV4 */
msg->msg.add.state,
msg->msg.add.init,
msg->msg.add.input)) {
return ERR_IF;
} else {
return ERR_OK;
}
}
#if LWIP_IPV4
/**
* Call netif_set_addr() inside the tcpip_thread context.
*/
static err_t
netifapi_do_netif_set_addr(struct tcpip_api_call_data *m)
{
struct netifapi_msg *msg = (struct netifapi_msg*)m;
netif_set_addr( msg->netif,
API_EXPR_REF(msg->msg.add.ipaddr),
API_EXPR_REF(msg->msg.add.netmask),
API_EXPR_REF(msg->msg.add.gw));
return ERR_OK;
}
#endif /* LWIP_IPV4 */
/**
* Call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) inside the
* tcpip_thread context.
*/
static err_t
netifapi_do_netif_common(struct tcpip_api_call_data *m)
{
struct netifapi_msg *msg = (struct netifapi_msg*)m;
if (msg->msg.common.errtfunc != NULL) {
return msg->msg.common.errtfunc(msg->netif);
} else {
msg->msg.common.voidfunc(msg->netif);
return ERR_OK;
}
}
/**
* Call netif_add() in a thread-safe way by running that function inside the
* tcpip_thread context.
*
* @note for params @see netif_add()
*/
err_t
netifapi_netif_add(struct netif *netif,
#if LWIP_IPV4
const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw,
#endif /* LWIP_IPV4 */
void *state, netif_init_fn init, netif_input_fn input)
{
err_t err;
NETIFAPI_VAR_DECLARE(msg);
NETIFAPI_VAR_ALLOC(msg);
#if LWIP_IPV4
if (ipaddr == NULL) {
ipaddr = IP4_ADDR_ANY;
}
if (netmask == NULL) {
netmask = IP4_ADDR_ANY;
}
if (gw == NULL) {
gw = IP4_ADDR_ANY;
}
#endif /* LWIP_IPV4 */
NETIFAPI_VAR_REF(msg).netif = netif;
#if LWIP_IPV4
NETIFAPI_VAR_REF(msg).msg.add.ipaddr = NETIFAPI_VAR_REF(ipaddr);
NETIFAPI_VAR_REF(msg).msg.add.netmask = NETIFAPI_VAR_REF(netmask);
NETIFAPI_VAR_REF(msg).msg.add.gw = NETIFAPI_VAR_REF(gw);
#endif /* LWIP_IPV4 */
NETIFAPI_VAR_REF(msg).msg.add.state = state;
NETIFAPI_VAR_REF(msg).msg.add.init = init;
NETIFAPI_VAR_REF(msg).msg.add.input = input;
err = tcpip_api_call(netifapi_do_netif_add, &API_VAR_REF(msg).call);
NETIFAPI_VAR_FREE(msg);
return err;
}
#if LWIP_IPV4
/**
* Call netif_set_addr() in a thread-safe way by running that function inside the
* tcpip_thread context.
*
* @note for params @see netif_set_addr()
*/
err_t
netifapi_netif_set_addr(struct netif *netif,
const ip4_addr_t *ipaddr,
const ip4_addr_t *netmask,
const ip4_addr_t *gw)
{
err_t err;
NETIFAPI_VAR_DECLARE(msg);
NETIFAPI_VAR_ALLOC(msg);
if (ipaddr == NULL) {
ipaddr = IP4_ADDR_ANY;
}
if (netmask == NULL) {
netmask = IP4_ADDR_ANY;
}
if (gw == NULL) {
gw = IP4_ADDR_ANY;
}
NETIFAPI_VAR_REF(msg).netif = netif;
NETIFAPI_VAR_REF(msg).msg.add.ipaddr = NETIFAPI_VAR_REF(ipaddr);
NETIFAPI_VAR_REF(msg).msg.add.netmask = NETIFAPI_VAR_REF(netmask);
NETIFAPI_VAR_REF(msg).msg.add.gw = NETIFAPI_VAR_REF(gw);
err = tcpip_api_call(netifapi_do_netif_set_addr, &API_VAR_REF(msg).call);
NETIFAPI_VAR_FREE(msg);
return err;
}
#endif /* LWIP_IPV4 */
/**
* call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) in a thread-safe
* way by running that function inside the tcpip_thread context.
*
* @note use only for functions where there is only "netif" parameter.
*/
err_t
netifapi_netif_common(struct netif *netif, netifapi_void_fn voidfunc,
netifapi_errt_fn errtfunc)
{
err_t err;
NETIFAPI_VAR_DECLARE(msg);
NETIFAPI_VAR_ALLOC(msg);
NETIFAPI_VAR_REF(msg).netif = netif;
NETIFAPI_VAR_REF(msg).msg.common.voidfunc = voidfunc;
NETIFAPI_VAR_REF(msg).msg.common.errtfunc = errtfunc;
err = tcpip_api_call(netifapi_do_netif_common, &API_VAR_REF(msg).call);
NETIFAPI_VAR_FREE(msg);
return err;
}
#endif /* LWIP_NETIF_API */

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,14 @@
/**
* @file
* Sequential API Main thread module
*
*/
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* 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,
@@ -11,167 +17,493 @@
* 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.
* 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
* 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"
#if !NO_SYS /* don't build if not configured for use in lwipopts.h */
#include "lwip/priv/tcpip_priv.h"
#include "lwip/sys.h"
#include "lwip/memp.h"
#include "lwip/pbuf.h"
#include "lwip/mem.h"
#include "lwip/init.h"
#include "lwip/ip.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"
#include "lwip/pbuf.h"
#include "netif/etharp.h"
#include "lwip/tcpip.h"
#define TCPIP_MSG_VAR_REF(name) API_VAR_REF(name)
#define TCPIP_MSG_VAR_DECLARE(name) API_VAR_DECLARE(struct tcpip_msg, name)
#define TCPIP_MSG_VAR_ALLOC(name) API_VAR_ALLOC(struct tcpip_msg, MEMP_TCPIP_MSG_API, name, ERR_MEM)
#define TCPIP_MSG_VAR_FREE(name) API_VAR_FREE(MEMP_TCPIP_MSG_API, name)
static void (* tcpip_init_done)(void *arg) = NULL;
/* global variables */
static tcpip_init_done_fn tcpip_init_done;
static void *tcpip_init_done_arg;
static sys_mbox_t mbox;
#if LWIP_TCP
static int tcpip_tcp_timer_active = 0;
#if LWIP_TCPIP_CORE_LOCKING
/** The global semaphore to lock the stack. */
sys_mutex_t lock_tcpip_core;
#endif /* LWIP_TCPIP_CORE_LOCKING */
static void
tcpip_tcp_timer(void *arg)
{
(void)arg;
tcp_tmr();
if (tcp_active_pcbs || tcp_tw_pcbs) {
sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);
} else {
tcpip_tcp_timer_active = 0;
}
}
void
tcp_timer_needed(void)
{
if (!tcpip_tcp_timer_active && (tcp_active_pcbs || tcp_tw_pcbs)) {
tcpip_tcp_timer_active = 1;
sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);
}
}
#endif /* LWIP_TCP */
/**
* The main lwIP thread. This thread has exclusive access to lwIP core functions
* (unless access to them is not locked). Other threads communicate with this
* thread using message boxes.
*
* It also starts all the timers to make sure they are running in the right
* thread context.
*
* @param arg unused argument
*/
static void
tcpip_thread(void *arg)
{
struct tcpip_msg *msg;
LWIP_UNUSED_ARG(arg);
(void)arg;
ip_init();
#if LWIP_UDP
udp_init();
#endif
#if LWIP_TCP
tcp_init();
#endif
if (tcpip_init_done != NULL) {
tcpip_init_done(tcpip_init_done_arg);
}
LOCK_TCPIP_CORE();
while (1) { /* MAIN Loop */
sys_mbox_fetch(mbox, (void *)&msg);
UNLOCK_TCPIP_CORE();
LWIP_TCPIP_THREAD_ALIVE();
/* wait for a message, timeouts are processed while waiting */
sys_timeouts_mbox_fetch(&mbox, (void **)&msg);
LOCK_TCPIP_CORE();
if (msg == NULL) {
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: invalid message: NULL\n"));
LWIP_ASSERT("tcpip_thread: invalid message", 0);
continue;
}
switch (msg->type) {
#if !LWIP_TCPIP_CORE_LOCKING
case TCPIP_MSG_API:
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API message %p\n", (void *)msg));
api_msg_input(msg->msg.apimsg);
msg->msg.api_msg.function(msg->msg.api_msg.msg);
break;
case TCPIP_MSG_INPUT:
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: IP packet %p\n", (void *)msg));
ip_input(msg->msg.inp.p, msg->msg.inp.netif);
case TCPIP_MSG_API_CALL:
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API CALL message %p\n", (void *)msg));
msg->msg.api_call.arg->err = msg->msg.api_call.function(msg->msg.api_call.arg);
sys_sem_signal(msg->msg.api_call.sem);
break;
#endif /* !LWIP_TCPIP_CORE_LOCKING */
#if !LWIP_TCPIP_CORE_LOCKING_INPUT
case TCPIP_MSG_INPKT:
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: PACKET %p\n", (void *)msg));
msg->msg.inp.input_fn(msg->msg.inp.p, msg->msg.inp.netif);
memp_free(MEMP_TCPIP_MSG_INPKT, msg);
break;
#endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */
#if LWIP_TCPIP_TIMEOUT
case TCPIP_MSG_TIMEOUT:
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: TIMEOUT %p\n", (void *)msg));
sys_timeout(msg->msg.tmo.msecs, msg->msg.tmo.h, msg->msg.tmo.arg);
memp_free(MEMP_TCPIP_MSG_API, msg);
break;
case TCPIP_MSG_UNTIMEOUT:
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: UNTIMEOUT %p\n", (void *)msg));
sys_untimeout(msg->msg.tmo.h, msg->msg.tmo.arg);
memp_free(MEMP_TCPIP_MSG_API, msg);
break;
#endif /* LWIP_TCPIP_TIMEOUT */
case TCPIP_MSG_CALLBACK:
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK %p\n", (void *)msg));
msg->msg.cb.f(msg->msg.cb.ctx);
msg->msg.cb.function(msg->msg.cb.ctx);
memp_free(MEMP_TCPIP_MSG_API, msg);
break;
case TCPIP_MSG_CALLBACK_STATIC:
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK_STATIC %p\n", (void *)msg));
msg->msg.cb.function(msg->msg.cb.ctx);
break;
default:
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: invalid message: %d\n", msg->type));
LWIP_ASSERT("tcpip_thread: invalid message", 0);
break;
}
memp_free(MEMP_TCPIP_MSG, msg);
}
}
/**
* Pass a received packet to tcpip_thread for input processing
*
* @param p the received packet
* @param inp the network interface on which the packet was received
* @param input_fn input function to call
*/
err_t
tcpip_inpkt(struct pbuf *p, struct netif *inp, netif_input_fn input_fn)
{
#if LWIP_TCPIP_CORE_LOCKING_INPUT
err_t ret;
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_inpkt: PACKET %p/%p\n", (void *)p, (void *)inp));
LOCK_TCPIP_CORE();
ret = input_fn(p, inp);
UNLOCK_TCPIP_CORE();
return ret;
#else /* LWIP_TCPIP_CORE_LOCKING_INPUT */
struct tcpip_msg *msg;
LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(mbox));
msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_INPKT);
if (msg == NULL) {
return ERR_MEM;
}
msg->type = TCPIP_MSG_INPKT;
msg->msg.inp.p = p;
msg->msg.inp.netif = inp;
msg->msg.inp.input_fn = input_fn;
if (sys_mbox_trypost(&mbox, msg) != ERR_OK) {
memp_free(MEMP_TCPIP_MSG_INPKT, msg);
return ERR_MEM;
}
return ERR_OK;
#endif /* LWIP_TCPIP_CORE_LOCKING_INPUT */
}
/**
* Pass a received packet to tcpip_thread for input processing with
* ethernet_input or ip_input
*
* @param p the received packet, p->payload pointing to the Ethernet header or
* to an IP header (if inp doesn't have NETIF_FLAG_ETHARP or
* NETIF_FLAG_ETHERNET flags)
* @param inp the network interface on which the packet was received
*/
err_t
tcpip_input(struct pbuf *p, struct netif *inp)
{
struct tcpip_msg *msg;
msg = memp_malloc(MEMP_TCPIP_MSG);
if (msg == NULL) {
pbuf_free(p);
return ERR_MEM;
}
msg->type = TCPIP_MSG_INPUT;
msg->msg.inp.p = p;
msg->msg.inp.netif = inp;
sys_mbox_post(mbox, msg);
return ERR_OK;
#if LWIP_ETHERNET
if (inp->flags & (NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET)) {
return tcpip_inpkt(p, inp, ethernet_input);
} else
#endif /* LWIP_ETHERNET */
return tcpip_inpkt(p, inp, ip_input);
}
/**
* Call a specific function in the thread context of
* tcpip_thread for easy access synchronization.
* A function called in that way may access lwIP core code
* without fearing concurrent access.
*
* @param f the function to call
* @param ctx parameter passed to f
* @param block 1 to block until the request is posted, 0 to non-blocking mode
* @return ERR_OK if the function was called, another err_t if not
*/
err_t
tcpip_callback(void (*f)(void *ctx), void *ctx)
tcpip_callback_with_block(tcpip_callback_fn function, void *ctx, u8_t block)
{
struct tcpip_msg *msg;
msg = memp_malloc(MEMP_TCPIP_MSG);
LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(mbox));
msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API);
if (msg == NULL) {
return ERR_MEM;
return ERR_MEM;
}
msg->type = TCPIP_MSG_CALLBACK;
msg->msg.cb.f = f;
msg->msg.cb.function = function;
msg->msg.cb.ctx = ctx;
sys_mbox_post(mbox, msg);
if (block) {
sys_mbox_post(&mbox, msg);
} else {
if (sys_mbox_trypost(&mbox, msg) != ERR_OK) {
memp_free(MEMP_TCPIP_MSG_API, msg);
return ERR_MEM;
}
}
return ERR_OK;
}
void
tcpip_apimsg(struct api_msg *apimsg)
#if LWIP_TCPIP_TIMEOUT
/**
* call sys_timeout in tcpip_thread
*
* @param msec time in milliseconds for timeout
* @param h function to be called on timeout
* @param arg argument to pass to timeout function h
* @return ERR_MEM on memory error, ERR_OK otherwise
*/
err_t
tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg)
{
struct tcpip_msg *msg;
msg = memp_malloc(MEMP_TCPIP_MSG);
LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(mbox));
msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API);
if (msg == NULL) {
memp_free(MEMP_API_MSG, apimsg);
return;
return ERR_MEM;
}
msg->type = TCPIP_MSG_API;
msg->msg.apimsg = apimsg;
sys_mbox_post(mbox, msg);
msg->type = TCPIP_MSG_TIMEOUT;
msg->msg.tmo.msecs = msecs;
msg->msg.tmo.h = h;
msg->msg.tmo.arg = arg;
sys_mbox_post(&mbox, msg);
return ERR_OK;
}
void
tcpip_init(void (* initfunc)(void *), void *arg)
/**
* call sys_untimeout in tcpip_thread
*
* @param msec time in milliseconds for timeout
* @param h function to be called on timeout
* @param arg argument to pass to timeout function h
* @return ERR_MEM on memory error, ERR_OK otherwise
*/
err_t
tcpip_untimeout(sys_timeout_handler h, void *arg)
{
struct tcpip_msg *msg;
LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(mbox));
msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API);
if (msg == NULL) {
return ERR_MEM;
}
msg->type = TCPIP_MSG_UNTIMEOUT;
msg->msg.tmo.h = h;
msg->msg.tmo.arg = arg;
sys_mbox_post(&mbox, msg);
return ERR_OK;
}
#endif /* LWIP_TCPIP_TIMEOUT */
/**
* Sends a message to TCPIP thread to call a function. Caller thread blocks on
* on a provided semaphore, which ist NOT automatically signalled by TCPIP thread,
* this has to be done by the user.
* It is recommended to use LWIP_TCPIP_CORE_LOCKING since this is the way
* with least runtime overhead.
*
* @param fn function to be called from TCPIP thread
* @param apimsg argument to API function
* @param sem semaphore to wait on
* @return ERR_OK if the function was called, another err_t if not
*/
err_t
tcpip_send_msg_wait_sem(tcpip_callback_fn fn, void *apimsg, sys_sem_t* sem)
{
#if LWIP_TCPIP_CORE_LOCKING
LWIP_UNUSED_ARG(sem);
LOCK_TCPIP_CORE();
fn(apimsg);
UNLOCK_TCPIP_CORE();
return ERR_OK;
#else /* LWIP_TCPIP_CORE_LOCKING */
TCPIP_MSG_VAR_DECLARE(msg);
LWIP_ASSERT("semaphore not initialized", sys_sem_valid(sem));
LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(mbox));
TCPIP_MSG_VAR_ALLOC(msg);
TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API;
TCPIP_MSG_VAR_REF(msg).msg.api_msg.function = fn;
TCPIP_MSG_VAR_REF(msg).msg.api_msg.msg = apimsg;
sys_mbox_post(&mbox, &TCPIP_MSG_VAR_REF(msg));
sys_arch_sem_wait(sem, 0);
TCPIP_MSG_VAR_FREE(msg);
return ERR_OK;
#endif /* LWIP_TCPIP_CORE_LOCKING */
}
/**
* Synchronously calls function in TCPIP thread and waits for its completion.
* It is recommended to use LWIP_TCPIP_CORE_LOCKING (preferred) or
* LWIP_NETCONN_SEM_PER_THREAD.
* If not, a semaphore is created and destroyed on every call which is usually
* an expensive/slow operation.
* @param fn Function to call
* @param call Call parameters
* @return Return value from tcpip_api_call_fn
*/
err_t
tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call_data *call)
{
#if LWIP_TCPIP_CORE_LOCKING
err_t err;
LOCK_TCPIP_CORE();
err = fn(call);
UNLOCK_TCPIP_CORE();
return err;
#else /* LWIP_TCPIP_CORE_LOCKING */
TCPIP_MSG_VAR_DECLARE(msg);
err_t err;
LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(mbox));
#if !LWIP_NETCONN_SEM_PER_THREAD
err = sys_sem_new(&call->sem, 0);
if (err != ERR_OK) {
return err;
}
#endif /* LWIP_NETCONN_SEM_PER_THREAD */
TCPIP_MSG_VAR_ALLOC(msg);
TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API_CALL;
TCPIP_MSG_VAR_REF(msg).msg.api_call.arg = call;
TCPIP_MSG_VAR_REF(msg).msg.api_call.function = fn;
#if LWIP_NETCONN_SEM_PER_THREAD
TCPIP_MSG_VAR_REF(msg).msg.api_call.sem = LWIP_NETCONN_THREAD_SEM_GET();
#else /* LWIP_NETCONN_SEM_PER_THREAD */
TCPIP_MSG_VAR_REF(msg).msg.api_call.sem = &call->sem;
#endif /* LWIP_NETCONN_SEM_PER_THREAD */
sys_mbox_post(&mbox, &TCPIP_MSG_VAR_REF(msg));
sys_arch_sem_wait(TCPIP_MSG_VAR_REF(msg).msg.api_call.sem, 0);
TCPIP_MSG_VAR_FREE(msg);
#if !LWIP_NETCONN_SEM_PER_THREAD
sys_sem_free(&call->sem);
#endif /* LWIP_NETCONN_SEM_PER_THREAD */
return call->err;
#endif /* LWIP_TCPIP_CORE_LOCKING */
}
/**
* Allocate a structure for a static callback message and initialize it.
* This is intended to be used to send "static" messages from interrupt context.
*
* @param function the function to call
* @param ctx parameter passed to function
* @return a struct pointer to pass to tcpip_trycallback().
*/
struct tcpip_callback_msg*
tcpip_callbackmsg_new(tcpip_callback_fn function, void *ctx)
{
struct tcpip_msg *msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API);
if (msg == NULL) {
return NULL;
}
msg->type = TCPIP_MSG_CALLBACK_STATIC;
msg->msg.cb.function = function;
msg->msg.cb.ctx = ctx;
return (struct tcpip_callback_msg*)msg;
}
/**
* Free a callback message allocated by tcpip_callbackmsg_new().
*
* @param msg the message to free
*/
void
tcpip_callbackmsg_delete(struct tcpip_callback_msg* msg)
{
memp_free(MEMP_TCPIP_MSG_API, msg);
}
/**
* Try to post a callback-message to the tcpip_thread mbox
* This is intended to be used to send "static" messages from interrupt context.
*
* @param msg pointer to the message to post
* @return sys_mbox_trypost() return code
*/
err_t
tcpip_trycallback(struct tcpip_callback_msg* msg)
{
LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(mbox));
return sys_mbox_trypost(&mbox, msg);
}
/**
* Initialize this module:
* - initialize all sub modules
* - start the tcpip_thread
*
* @param initfunc a function to call when tcpip_thread is running and finished initializing
* @param arg argument to pass to initfunc
*/
void
tcpip_init(tcpip_init_done_fn initfunc, void *arg)
{
lwip_init();
tcpip_init_done = initfunc;
tcpip_init_done_arg = arg;
mbox = sys_mbox_new();
sys_thread_new(tcpip_thread, NULL, TCPIP_THREAD_PRIO);
if (sys_mbox_new(&mbox, TCPIP_MBOX_SIZE) != ERR_OK) {
LWIP_ASSERT("failed to create tcpip_thread mbox", 0);
}
#if LWIP_TCPIP_CORE_LOCKING
if (sys_mutex_new(&lock_tcpip_core) != ERR_OK) {
LWIP_ASSERT("failed to create lock_tcpip_core", 0);
}
#endif /* LWIP_TCPIP_CORE_LOCKING */
sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO);
}
/**
* Simple callback function used with tcpip_callback to free a pbuf
* (pbuf_free has a wrong signature for tcpip_callback)
*
* @param p The pbuf (chain) to be dereferenced.
*/
static void
pbuf_free_int(void *p)
{
struct pbuf *q = (struct pbuf *)p;
pbuf_free(q);
}
/**
* A simple wrapper function that allows you to free a pbuf from interrupt context.
*
* @param p The pbuf (chain) to be dereferenced.
* @return ERR_OK if callback could be enqueued, an err_t if not
*/
err_t
pbuf_free_callback(struct pbuf *p)
{
return tcpip_callback_with_block(pbuf_free_int, p, 0);
}
/**
* A simple wrapper function that allows you to free heap memory from
* interrupt context.
*
* @param m the heap memory to free
* @return ERR_OK if callback could be enqueued, an err_t if not
*/
err_t
mem_free_callback(void *m)
{
return tcpip_callback_with_block(mem_free, m, 0);
}
#endif /* !NO_SYS */

179
src/apps/httpd/fs.c Normal file
View File

@@ -0,0 +1,179 @@
/*
* 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/apps/httpd_opts.h"
#include "lwip/def.h"
#include "lwip/apps/fs.h"
#include "fsdata.h"
#include <string.h>
#if HTTPD_USE_CUSTOM_FSDATA
#include "fsdata_custom.c"
#else /* HTTPD_USE_CUSTOM_FSDATA */
#include "fsdata.c"
#endif /* HTTPD_USE_CUSTOM_FSDATA */
/*-----------------------------------------------------------------------------------*/
#if LWIP_HTTPD_CUSTOM_FILES
int fs_open_custom(struct fs_file *file, const char *name);
void fs_close_custom(struct fs_file *file);
#if LWIP_HTTPD_FS_ASYNC_READ
u8_t fs_canread_custom(struct fs_file *file);
u8_t fs_wait_read_custom(struct fs_file *file, fs_wait_cb callback_fn, void *callback_arg);
int fs_read_async_custom(struct fs_file *file, char *buffer, int count, fs_wait_cb callback_fn, void *callback_arg);
#else /* LWIP_HTTPD_FS_ASYNC_READ */
int fs_read_custom(struct fs_file *file, char *buffer, int count);
#endif /* LWIP_HTTPD_FS_ASYNC_READ */
#endif /* LWIP_HTTPD_CUSTOM_FILES */
/*-----------------------------------------------------------------------------------*/
err_t
fs_open(struct fs_file *file, const char *name)
{
const struct fsdata_file *f;
if ((file == NULL) || (name == NULL)) {
return ERR_ARG;
}
#if LWIP_HTTPD_CUSTOM_FILES
if (fs_open_custom(file, name)) {
file->is_custom_file = 1;
return ERR_OK;
}
file->is_custom_file = 0;
#endif /* LWIP_HTTPD_CUSTOM_FILES */
for (f = FS_ROOT; f != NULL; f = f->next) {
if (!strcmp(name, (const char *)f->name)) {
file->data = (const char *)f->data;
file->len = f->len;
file->index = f->len;
file->pextension = NULL;
file->flags = f->flags;
#if HTTPD_PRECALCULATED_CHECKSUM
file->chksum_count = f->chksum_count;
file->chksum = f->chksum;
#endif /* HTTPD_PRECALCULATED_CHECKSUM */
#if LWIP_HTTPD_FILE_STATE
file->state = fs_state_init(file, name);
#endif /* #if LWIP_HTTPD_FILE_STATE */
return ERR_OK;
}
}
/* file not found */
return ERR_VAL;
}
/*-----------------------------------------------------------------------------------*/
void
fs_close(struct fs_file *file)
{
#if LWIP_HTTPD_CUSTOM_FILES
if (file->is_custom_file) {
fs_close_custom(file);
}
#endif /* LWIP_HTTPD_CUSTOM_FILES */
#if LWIP_HTTPD_FILE_STATE
fs_state_free(file, file->state);
#endif /* #if LWIP_HTTPD_FILE_STATE */
LWIP_UNUSED_ARG(file);
}
/*-----------------------------------------------------------------------------------*/
#if LWIP_HTTPD_DYNAMIC_FILE_READ
#if LWIP_HTTPD_FS_ASYNC_READ
int
fs_read_async(struct fs_file *file, char *buffer, int count, fs_wait_cb callback_fn, void *callback_arg)
#else /* LWIP_HTTPD_FS_ASYNC_READ */
int
fs_read(struct fs_file *file, char *buffer, int count)
#endif /* LWIP_HTTPD_FS_ASYNC_READ */
{
int read;
if(file->index == file->len) {
return FS_READ_EOF;
}
#if LWIP_HTTPD_FS_ASYNC_READ
LWIP_UNUSED_ARG(callback_fn);
LWIP_UNUSED_ARG(callback_arg);
#endif /* LWIP_HTTPD_FS_ASYNC_READ */
#if LWIP_HTTPD_CUSTOM_FILES
if (file->is_custom_file) {
#if LWIP_HTTPD_FS_ASYNC_READ
return fs_read_async_custom(file, buffer, count, callback_fn, callback_arg);
#else /* LWIP_HTTPD_FS_ASYNC_READ */
return fs_read_custom(file, buffer, count);
#endif /* LWIP_HTTPD_FS_ASYNC_READ */
}
#endif /* LWIP_HTTPD_CUSTOM_FILES */
read = file->len - file->index;
if(read > count) {
read = count;
}
MEMCPY(buffer, (file->data + file->index), read);
file->index += read;
return(read);
}
#endif /* LWIP_HTTPD_DYNAMIC_FILE_READ */
/*-----------------------------------------------------------------------------------*/
#if LWIP_HTTPD_FS_ASYNC_READ
int
fs_is_file_ready(struct fs_file *file, fs_wait_cb callback_fn, void *callback_arg)
{
if (file != NULL) {
#if LWIP_HTTPD_FS_ASYNC_READ
#if LWIP_HTTPD_CUSTOM_FILES
if (!fs_canread_custom(file)) {
if (fs_wait_read_custom(file, callback_fn, callback_arg)) {
return 0;
}
}
#else /* LWIP_HTTPD_CUSTOM_FILES */
LWIP_UNUSED_ARG(callback_fn);
LWIP_UNUSED_ARG(callback_arg);
#endif /* LWIP_HTTPD_CUSTOM_FILES */
#endif /* LWIP_HTTPD_FS_ASYNC_READ */
}
return 1;
}
#endif /* LWIP_HTTPD_FS_ASYNC_READ */
/*-----------------------------------------------------------------------------------*/
int
fs_bytes_left(struct fs_file *file)
{
return file->len - file->index;
}

View File

@@ -0,0 +1,21 @@
<html>
<head><title>lwIP - A Lightweight TCP/IP Stack</title></head>
<body bgcolor="white" text="black">
<table width="100%">
<tr valign="top"><td width="80">
<a href="http://www.sics.se/"><img src="/img/sics.gif"
border="0" alt="SICS logo" title="SICS logo"></a>
</td><td width="500">
<h1>lwIP - A Lightweight TCP/IP Stack</h1>
<h2>404 - Page not found</h2>
<p>
Sorry, the page you are requesting was not found on this
server.
</p>
</td><td>
&nbsp;
</td></tr>
</table>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 B

View File

@@ -0,0 +1,47 @@
<html>
<head><title>lwIP - A Lightweight TCP/IP Stack</title></head>
<body bgcolor="white" text="black">
<table width="100%">
<tr valign="top"><td width="80">
<a href="http://www.sics.se/"><img src="/img/sics.gif"
border="0" alt="SICS logo" title="SICS logo"></a>
</td><td width="500">
<h1>lwIP - A Lightweight TCP/IP Stack</h1>
<p>
The web page you are watching was served by a simple web
server running on top of the lightweight TCP/IP stack <a
href="http://www.sics.se/~adam/lwip/">lwIP</a>.
</p>
<p>
lwIP is an open source implementation of the TCP/IP
protocol suite that was originally written by <a
href="http://www.sics.se/~adam/lwip/">Adam Dunkels
of the Swedish Institute of Computer Science</a> but now is
being actively developed by a team of developers
distributed world-wide. Since it's release, lwIP has
spurred a lot of interest and has been ported to several
platforms and operating systems. lwIP can be used either
with or without an underlying OS.
</p>
<p>
The focus of the lwIP TCP/IP implementation is to reduce
the RAM usage while still having a full scale TCP. This
makes lwIP suitable for use in embedded systems with tens
of kilobytes of free RAM and room for around 40 kilobytes
of code ROM.
</p>
<p>
More information about lwIP can be found at the lwIP
homepage at <a
href="http://savannah.nongnu.org/projects/lwip/">http://savannah.nongnu.org/projects/lwip/</a>
or at the lwIP wiki at <a
href="http://lwip.wikia.com/">http://lwip.wikia.com/</a>.
</p>
</td><td>
&nbsp;
</td></tr>
</table>
</body>
</html>

298
src/apps/httpd/fsdata.c Normal file
View File

@@ -0,0 +1,298 @@
#include "lwip/apps/fs.h"
#include "lwip/def.h"
#include "fsdata.h"
#define file_NULL (struct fsdata_file *) NULL
static const unsigned int dummy_align__img_sics_gif = 0;
static const unsigned char data__img_sics_gif[] = {
/* /img/sics.gif (14 chars) */
0x2f,0x69,0x6d,0x67,0x2f,0x73,0x69,0x63,0x73,0x2e,0x67,0x69,0x66,0x00,0x00,0x00,
/* HTTP header */
/* "HTTP/1.0 200 OK
" (17 bytes) */
0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
0x0a,
/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
" (63 bytes) */
0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
/* "Content-type: image/gif
" (27 bytes) */
0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,
0x61,0x67,0x65,0x2f,0x67,0x69,0x66,0x0d,0x0a,0x0d,0x0a,
/* raw file data (724 bytes) */
0x47,0x49,0x46,0x38,0x39,0x61,0x46,0x00,0x22,0x00,0xa5,0x00,0x00,0xd9,0x2b,0x39,
0x6a,0x6a,0x6a,0xbf,0xbf,0xbf,0x93,0x93,0x93,0x0f,0x0f,0x0f,0xb0,0xb0,0xb0,0xa6,
0xa6,0xa6,0x80,0x80,0x80,0x76,0x76,0x76,0x1e,0x1e,0x1e,0x9d,0x9d,0x9d,0x2e,0x2e,
0x2e,0x49,0x49,0x49,0x54,0x54,0x54,0x8a,0x8a,0x8a,0x60,0x60,0x60,0xc6,0xa6,0x99,
0xbd,0xb5,0xb2,0xc2,0xab,0xa1,0xd9,0x41,0x40,0xd5,0x67,0x55,0xc0,0xb0,0xaa,0xd5,
0x5e,0x4e,0xd6,0x50,0x45,0xcc,0x93,0x7d,0xc8,0xa1,0x90,0xce,0x8b,0x76,0xd2,0x7b,
0x65,0xd1,0x84,0x6d,0xc9,0x99,0x86,0x3a,0x3a,0x3a,0x00,0x00,0x00,0xb8,0xb8,0xb8,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2c,0x00,0x00,
0x00,0x00,0x46,0x00,0x22,0x00,0x00,0x06,0xfe,0x40,0x90,0x70,0x48,0x2c,0x1a,0x8f,
0xc8,0xa4,0x72,0xc9,0x6c,0x3a,0x9f,0xd0,0xa8,0x74,0x4a,0xad,0x5a,0xaf,0xd8,0xac,
0x76,0xa9,0x40,0x04,0xbe,0x83,0xe2,0x60,0x3c,0x50,0x20,0x0d,0x8e,0x6f,0x00,0x31,
0x28,0x1c,0x0d,0x07,0xb5,0xc3,0x60,0x75,0x24,0x3e,0xf8,0xfc,0x87,0x11,0x06,0xe9,
0x3d,0x46,0x07,0x0b,0x7a,0x7a,0x7c,0x43,0x06,0x1e,0x84,0x78,0x0b,0x07,0x6e,0x51,
0x01,0x8a,0x84,0x08,0x7e,0x79,0x80,0x87,0x89,0x91,0x7a,0x93,0x0a,0x04,0x99,0x78,
0x96,0x4f,0x03,0x9e,0x79,0x01,0x94,0x9f,0x43,0x9c,0xa3,0xa4,0x05,0x77,0xa3,0xa0,
0x4e,0x98,0x79,0x0b,0x1e,0x83,0xa4,0xa6,0x1f,0x96,0x05,0x9d,0xaa,0x78,0x01,0x07,
0x84,0x04,0x1e,0x1e,0xbb,0xb8,0x51,0x84,0x0e,0x43,0x05,0x07,0x77,0xa5,0x7f,0x42,
0xb1,0xb2,0x01,0x63,0x08,0x0d,0xbb,0x01,0x0c,0x7a,0x0d,0x44,0x0e,0xd8,0xaf,0x4c,
0x05,0x7a,0x04,0x47,0x07,0x07,0xb7,0x80,0xa2,0xe1,0x7d,0x44,0x05,0x01,0x04,0x01,
0xd0,0xea,0x87,0x93,0x4f,0xe0,0x9a,0x49,0xce,0xd8,0x79,0x04,0x66,0x20,0x15,0x10,
0x10,0x11,0x92,0x29,0x80,0xb6,0xc0,0x91,0x15,0x45,0x1e,0x90,0x19,0x71,0x46,0xa8,
0x5c,0x04,0x0e,0x00,0x22,0x4e,0xe8,0x40,0x24,0x9f,0x3e,0x04,0x06,0xa7,0x58,0xd4,
0x93,0xa0,0x1c,0x91,0x3f,0xe8,0xf0,0x88,0x03,0xb1,0x21,0xa2,0x49,0x00,0x19,0x86,
0xfc,0x52,0x44,0xe0,0x01,0x9d,0x29,0x21,0x15,0x25,0x50,0xf7,0x67,0x25,0x1e,0x06,
0xfd,0x4e,0x9a,0xb4,0x90,0xac,0x15,0xfa,0xcb,0x52,0x53,0x1e,0x8c,0xf2,0xf8,0x07,
0x92,0x2d,0x08,0x3a,0x4d,0x12,0x49,0x95,0x49,0xdb,0x14,0x04,0xc4,0x14,0x85,0x29,
0xaa,0xe7,0x01,0x08,0xa4,0x49,0x01,0x14,0x51,0xe0,0x53,0x91,0xd5,0x29,0x06,0x1a,
0x64,0x02,0xf4,0xc7,0x81,0x9e,0x05,0x20,0x22,0x64,0xa5,0x30,0xae,0xab,0x9e,0x97,
0x53,0xd8,0xb9,0xfd,0x50,0xef,0x93,0x02,0x42,0x74,0x34,0xe8,0x9c,0x20,0x21,0xc9,
0x01,0x68,0x78,0xe6,0x55,0x29,0x20,0x56,0x4f,0x4c,0x40,0x51,0x71,0x82,0xc0,0x70,
0x21,0x22,0x85,0xbe,0x4b,0x1c,0x44,0x05,0xea,0xa4,0x01,0xbf,0x22,0xb5,0xf0,0x1c,
0x06,0x51,0x38,0x8f,0xe0,0x22,0xec,0x18,0xac,0x39,0x22,0xd4,0xd6,0x93,0x44,0x01,
0x32,0x82,0xc8,0xfc,0x61,0xb3,0x01,0x45,0x0c,0x2e,0x83,0x30,0xd0,0x0e,0x17,0x24,
0x0f,0x70,0x85,0x94,0xee,0x05,0x05,0x53,0x4b,0x32,0x1b,0x3f,0x98,0xd3,0x1d,0x29,
0x81,0xb0,0xae,0x1e,0x8c,0x7e,0x68,0xe0,0x60,0x5a,0x54,0x8f,0xb0,0x78,0x69,0x73,
0x06,0xa2,0x00,0x6b,0x57,0xca,0x3d,0x11,0x50,0xbd,0x04,0x30,0x4b,0x3a,0xd4,0xab,
0x5f,0x1f,0x9b,0x3d,0x13,0x74,0x27,0x88,0x3c,0x25,0xe0,0x17,0xbe,0x7a,0x79,0x45,
0x0d,0x0c,0xb0,0x8b,0xda,0x90,0xca,0x80,0x06,0x5d,0x17,0x60,0x1c,0x22,0x4c,0xd8,
0x57,0x22,0x06,0x20,0x00,0x98,0x07,0x08,0xe4,0x56,0x80,0x80,0x1c,0xc5,0xb7,0xc5,
0x82,0x0c,0x36,0xe8,0xe0,0x83,0x10,0x46,0x28,0xe1,0x84,0x14,0x56,0x68,0xa1,0x10,
0x41,0x00,0x00,0x3b,};
static const unsigned int dummy_align__404_html = 1;
static const unsigned char data__404_html[] = {
/* /404.html (10 chars) */
0x2f,0x34,0x30,0x34,0x2e,0x68,0x74,0x6d,0x6c,0x00,0x00,0x00,
/* HTTP header */
/* "HTTP/1.0 404 File not found
" (29 bytes) */
0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x34,0x30,0x34,0x20,0x46,0x69,0x6c,
0x65,0x20,0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e,0x64,0x0d,0x0a,
/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
" (63 bytes) */
0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
/* "Content-type: text/html
" (27 bytes) */
0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x0d,0x0a,
/* raw file data (565 bytes) */
0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x3c,0x74,
0x69,0x74,0x6c,0x65,0x3e,0x6c,0x77,0x49,0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,0x69,
0x67,0x68,0x74,0x77,0x65,0x69,0x67,0x68,0x74,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,
0x20,0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x3c,0x2f,
0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x20,0x62,0x67,0x63,
0x6f,0x6c,0x6f,0x72,0x3d,0x22,0x77,0x68,0x69,0x74,0x65,0x22,0x20,0x74,0x65,0x78,
0x74,0x3d,0x22,0x62,0x6c,0x61,0x63,0x6b,0x22,0x3e,0x0d,0x0a,0x0d,0x0a,0x20,0x20,
0x20,0x20,0x3c,0x74,0x61,0x62,0x6c,0x65,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,
0x31,0x30,0x30,0x25,0x22,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,
0x72,0x20,0x76,0x61,0x6c,0x69,0x67,0x6e,0x3d,0x22,0x74,0x6f,0x70,0x22,0x3e,0x3c,
0x74,0x64,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x38,0x30,0x22,0x3e,0x09,0x20,
0x20,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,
0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x73,0x69,0x63,0x73,0x2e,0x73,
0x65,0x2f,0x22,0x3e,0x3c,0x69,0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x69,
0x6d,0x67,0x2f,0x73,0x69,0x63,0x73,0x2e,0x67,0x69,0x66,0x22,0x0d,0x0a,0x09,0x20,
0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3d,0x22,0x30,0x22,0x20,0x61,0x6c,0x74,0x3d,
0x22,0x53,0x49,0x43,0x53,0x20,0x6c,0x6f,0x67,0x6f,0x22,0x20,0x74,0x69,0x74,0x6c,
0x65,0x3d,0x22,0x53,0x49,0x43,0x53,0x20,0x6c,0x6f,0x67,0x6f,0x22,0x3e,0x3c,0x2f,
0x61,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x74,0x64,0x20,0x77,0x69,
0x64,0x74,0x68,0x3d,0x22,0x35,0x30,0x30,0x22,0x3e,0x09,0x20,0x20,0x0d,0x0a,0x09,
0x20,0x20,0x3c,0x68,0x31,0x3e,0x6c,0x77,0x49,0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,
0x69,0x67,0x68,0x74,0x77,0x65,0x69,0x67,0x68,0x74,0x20,0x54,0x43,0x50,0x2f,0x49,
0x50,0x20,0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x09,0x20,
0x20,0x3c,0x68,0x32,0x3e,0x34,0x30,0x34,0x20,0x2d,0x20,0x50,0x61,0x67,0x65,0x20,
0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e,0x64,0x3c,0x2f,0x68,0x32,0x3e,0x0d,0x0a,
0x09,0x20,0x20,0x3c,0x70,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x53,0x6f,0x72,
0x72,0x79,0x2c,0x20,0x74,0x68,0x65,0x20,0x70,0x61,0x67,0x65,0x20,0x79,0x6f,0x75,
0x20,0x61,0x72,0x65,0x20,0x72,0x65,0x71,0x75,0x65,0x73,0x74,0x69,0x6e,0x67,0x20,
0x77,0x61,0x73,0x20,0x6e,0x6f,0x74,0x20,0x66,0x6f,0x75,0x6e,0x64,0x20,0x6f,0x6e,
0x20,0x74,0x68,0x69,0x73,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x73,0x65,0x72,0x76,
0x65,0x72,0x2e,0x20,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x09,
0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x74,0x64,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x0d,0x0a,0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x2f,0x74,0x72,
0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,
0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,
0x6d,0x6c,0x3e,0x0d,0x0a,};
static const unsigned int dummy_align__index_html = 2;
static const unsigned char data__index_html[] = {
/* /index.html (12 chars) */
0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x00,
/* HTTP header */
/* "HTTP/1.0 200 OK
" (17 bytes) */
0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
0x0a,
/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
" (63 bytes) */
0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
/* "Content-type: text/html
" (27 bytes) */
0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x0d,0x0a,
/* raw file data (1751 bytes) */
0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x3c,0x74,
0x69,0x74,0x6c,0x65,0x3e,0x6c,0x77,0x49,0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,0x69,
0x67,0x68,0x74,0x77,0x65,0x69,0x67,0x68,0x74,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,
0x20,0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x3c,0x2f,
0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x20,0x62,0x67,0x63,
0x6f,0x6c,0x6f,0x72,0x3d,0x22,0x77,0x68,0x69,0x74,0x65,0x22,0x20,0x74,0x65,0x78,
0x74,0x3d,0x22,0x62,0x6c,0x61,0x63,0x6b,0x22,0x3e,0x0d,0x0a,0x0d,0x0a,0x20,0x20,
0x20,0x20,0x3c,0x74,0x61,0x62,0x6c,0x65,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,
0x31,0x30,0x30,0x25,0x22,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,
0x72,0x20,0x76,0x61,0x6c,0x69,0x67,0x6e,0x3d,0x22,0x74,0x6f,0x70,0x22,0x3e,0x3c,
0x74,0x64,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x38,0x30,0x22,0x3e,0x09,0x20,
0x20,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,
0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x73,0x69,0x63,0x73,0x2e,0x73,
0x65,0x2f,0x22,0x3e,0x3c,0x69,0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x69,
0x6d,0x67,0x2f,0x73,0x69,0x63,0x73,0x2e,0x67,0x69,0x66,0x22,0x0d,0x0a,0x09,0x20,
0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3d,0x22,0x30,0x22,0x20,0x61,0x6c,0x74,0x3d,
0x22,0x53,0x49,0x43,0x53,0x20,0x6c,0x6f,0x67,0x6f,0x22,0x20,0x74,0x69,0x74,0x6c,
0x65,0x3d,0x22,0x53,0x49,0x43,0x53,0x20,0x6c,0x6f,0x67,0x6f,0x22,0x3e,0x3c,0x2f,
0x61,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x74,0x64,0x20,0x77,0x69,
0x64,0x74,0x68,0x3d,0x22,0x35,0x30,0x30,0x22,0x3e,0x09,0x20,0x20,0x0d,0x0a,0x09,
0x20,0x20,0x3c,0x68,0x31,0x3e,0x6c,0x77,0x49,0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,
0x69,0x67,0x68,0x74,0x77,0x65,0x69,0x67,0x68,0x74,0x20,0x54,0x43,0x50,0x2f,0x49,
0x50,0x20,0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x09,0x20,
0x20,0x3c,0x70,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x54,0x68,0x65,0x20,0x77,
0x65,0x62,0x20,0x70,0x61,0x67,0x65,0x20,0x79,0x6f,0x75,0x20,0x61,0x72,0x65,0x20,
0x77,0x61,0x74,0x63,0x68,0x69,0x6e,0x67,0x20,0x77,0x61,0x73,0x20,0x73,0x65,0x72,
0x76,0x65,0x64,0x20,0x62,0x79,0x20,0x61,0x20,0x73,0x69,0x6d,0x70,0x6c,0x65,0x20,
0x77,0x65,0x62,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x73,0x65,0x72,0x76,0x65,0x72,
0x20,0x72,0x75,0x6e,0x6e,0x69,0x6e,0x67,0x20,0x6f,0x6e,0x20,0x74,0x6f,0x70,0x20,
0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x6c,0x69,0x67,0x68,0x74,0x77,0x65,0x69,0x67,
0x68,0x74,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,0x20,0x73,0x74,0x61,0x63,0x6b,0x20,
0x3c,0x61,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,
0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x73,0x69,0x63,0x73,0x2e,0x73,
0x65,0x2f,0x7e,0x61,0x64,0x61,0x6d,0x2f,0x6c,0x77,0x69,0x70,0x2f,0x22,0x3e,0x6c,
0x77,0x49,0x50,0x3c,0x2f,0x61,0x3e,0x2e,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x2f,0x70,
0x3e,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x70,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,
0x6c,0x77,0x49,0x50,0x20,0x69,0x73,0x20,0x61,0x6e,0x20,0x6f,0x70,0x65,0x6e,0x20,
0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
0x61,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x54,0x43,0x50,
0x2f,0x49,0x50,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x70,0x72,0x6f,0x74,0x6f,0x63,
0x6f,0x6c,0x20,0x73,0x75,0x69,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x77,0x61,
0x73,0x20,0x6f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x20,0x77,0x72,0x69,
0x74,0x74,0x65,0x6e,0x20,0x62,0x79,0x20,0x3c,0x61,0x0d,0x0a,0x09,0x20,0x20,0x20,
0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,
0x77,0x2e,0x73,0x69,0x63,0x73,0x2e,0x73,0x65,0x2f,0x7e,0x61,0x64,0x61,0x6d,0x2f,
0x6c,0x77,0x69,0x70,0x2f,0x22,0x3e,0x41,0x64,0x61,0x6d,0x20,0x44,0x75,0x6e,0x6b,
0x65,0x6c,0x73,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,
0x20,0x53,0x77,0x65,0x64,0x69,0x73,0x68,0x20,0x49,0x6e,0x73,0x74,0x69,0x74,0x75,
0x74,0x65,0x20,0x6f,0x66,0x20,0x43,0x6f,0x6d,0x70,0x75,0x74,0x65,0x72,0x20,0x53,
0x63,0x69,0x65,0x6e,0x63,0x65,0x3c,0x2f,0x61,0x3e,0x20,0x62,0x75,0x74,0x20,0x6e,
0x6f,0x77,0x20,0x69,0x73,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x62,0x65,0x69,0x6e,
0x67,0x20,0x61,0x63,0x74,0x69,0x76,0x65,0x6c,0x79,0x20,0x64,0x65,0x76,0x65,0x6c,
0x6f,0x70,0x65,0x64,0x20,0x62,0x79,0x20,0x61,0x20,0x74,0x65,0x61,0x6d,0x20,0x6f,
0x66,0x20,0x64,0x65,0x76,0x65,0x6c,0x6f,0x70,0x65,0x72,0x73,0x0d,0x0a,0x09,0x20,
0x20,0x20,0x20,0x64,0x69,0x73,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x64,0x20,0x77,
0x6f,0x72,0x6c,0x64,0x2d,0x77,0x69,0x64,0x65,0x2e,0x20,0x53,0x69,0x6e,0x63,0x65,
0x20,0x69,0x74,0x27,0x73,0x20,0x72,0x65,0x6c,0x65,0x61,0x73,0x65,0x2c,0x20,0x6c,
0x77,0x49,0x50,0x20,0x68,0x61,0x73,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x73,0x70,
0x75,0x72,0x72,0x65,0x64,0x20,0x61,0x20,0x6c,0x6f,0x74,0x20,0x6f,0x66,0x20,0x69,
0x6e,0x74,0x65,0x72,0x65,0x73,0x74,0x20,0x61,0x6e,0x64,0x20,0x68,0x61,0x73,0x20,
0x62,0x65,0x65,0x6e,0x20,0x70,0x6f,0x72,0x74,0x65,0x64,0x20,0x74,0x6f,0x20,0x73,
0x65,0x76,0x65,0x72,0x61,0x6c,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x70,0x6c,0x61,
0x74,0x66,0x6f,0x72,0x6d,0x73,0x20,0x61,0x6e,0x64,0x20,0x6f,0x70,0x65,0x72,0x61,
0x74,0x69,0x6e,0x67,0x20,0x73,0x79,0x73,0x74,0x65,0x6d,0x73,0x2e,0x20,0x6c,0x77,
0x49,0x50,0x20,0x63,0x61,0x6e,0x20,0x62,0x65,0x20,0x75,0x73,0x65,0x64,0x20,0x65,
0x69,0x74,0x68,0x65,0x72,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x77,0x69,0x74,0x68,
0x20,0x6f,0x72,0x20,0x77,0x69,0x74,0x68,0x6f,0x75,0x74,0x20,0x61,0x6e,0x20,0x75,
0x6e,0x64,0x65,0x72,0x6c,0x79,0x69,0x6e,0x67,0x20,0x4f,0x53,0x2e,0x0d,0x0a,0x09,
0x20,0x20,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x70,0x3e,0x0d,0x0a,
0x09,0x20,0x20,0x20,0x20,0x54,0x68,0x65,0x20,0x66,0x6f,0x63,0x75,0x73,0x20,0x6f,
0x66,0x20,0x74,0x68,0x65,0x20,0x6c,0x77,0x49,0x50,0x20,0x54,0x43,0x50,0x2f,0x49,
0x50,0x20,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,
0x20,0x69,0x73,0x20,0x74,0x6f,0x20,0x72,0x65,0x64,0x75,0x63,0x65,0x0d,0x0a,0x09,
0x20,0x20,0x20,0x20,0x74,0x68,0x65,0x20,0x52,0x41,0x4d,0x20,0x75,0x73,0x61,0x67,
0x65,0x20,0x77,0x68,0x69,0x6c,0x65,0x20,0x73,0x74,0x69,0x6c,0x6c,0x20,0x68,0x61,
0x76,0x69,0x6e,0x67,0x20,0x61,0x20,0x66,0x75,0x6c,0x6c,0x20,0x73,0x63,0x61,0x6c,
0x65,0x20,0x54,0x43,0x50,0x2e,0x20,0x54,0x68,0x69,0x73,0x0d,0x0a,0x09,0x20,0x20,
0x20,0x20,0x6d,0x61,0x6b,0x65,0x73,0x20,0x6c,0x77,0x49,0x50,0x20,0x73,0x75,0x69,
0x74,0x61,0x62,0x6c,0x65,0x20,0x66,0x6f,0x72,0x20,0x75,0x73,0x65,0x20,0x69,0x6e,
0x20,0x65,0x6d,0x62,0x65,0x64,0x64,0x65,0x64,0x20,0x73,0x79,0x73,0x74,0x65,0x6d,
0x73,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x65,0x6e,0x73,0x0d,0x0a,0x09,0x20,0x20,
0x20,0x20,0x6f,0x66,0x20,0x6b,0x69,0x6c,0x6f,0x62,0x79,0x74,0x65,0x73,0x20,0x6f,
0x66,0x20,0x66,0x72,0x65,0x65,0x20,0x52,0x41,0x4d,0x20,0x61,0x6e,0x64,0x20,0x72,
0x6f,0x6f,0x6d,0x20,0x66,0x6f,0x72,0x20,0x61,0x72,0x6f,0x75,0x6e,0x64,0x20,0x34,
0x30,0x20,0x6b,0x69,0x6c,0x6f,0x62,0x79,0x74,0x65,0x73,0x0d,0x0a,0x09,0x20,0x20,
0x20,0x20,0x6f,0x66,0x20,0x63,0x6f,0x64,0x65,0x20,0x52,0x4f,0x4d,0x2e,0x0d,0x0a,
0x09,0x20,0x20,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x70,0x3e,0x0d,
0x0a,0x09,0x20,0x20,0x20,0x20,0x4d,0x6f,0x72,0x65,0x20,0x69,0x6e,0x66,0x6f,0x72,
0x6d,0x61,0x74,0x69,0x6f,0x6e,0x20,0x61,0x62,0x6f,0x75,0x74,0x20,0x6c,0x77,0x49,
0x50,0x20,0x63,0x61,0x6e,0x20,0x62,0x65,0x20,0x66,0x6f,0x75,0x6e,0x64,0x20,0x61,
0x74,0x20,0x74,0x68,0x65,0x20,0x6c,0x77,0x49,0x50,0x0d,0x0a,0x09,0x20,0x20,0x20,
0x20,0x68,0x6f,0x6d,0x65,0x70,0x61,0x67,0x65,0x20,0x61,0x74,0x20,0x3c,0x61,0x0d,
0x0a,0x09,0x20,0x20,0x20,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,
0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,
0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,
0x6c,0x77,0x69,0x70,0x2f,0x22,0x3e,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,
0x76,0x61,0x6e,0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,
0x67,0x2f,0x70,0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x2f,
0x3c,0x2f,0x61,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x6f,0x72,0x20,0x61,0x74,
0x20,0x74,0x68,0x65,0x20,0x6c,0x77,0x49,0x50,0x20,0x77,0x69,0x6b,0x69,0x20,0x61,
0x74,0x20,0x3c,0x61,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x68,0x72,0x65,0x66,0x3d,
0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6c,0x77,0x69,0x70,0x2e,0x77,0x69,0x6b,
0x69,0x61,0x2e,0x63,0x6f,0x6d,0x2f,0x22,0x3e,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,
0x6c,0x77,0x69,0x70,0x2e,0x77,0x69,0x6b,0x69,0x61,0x2e,0x63,0x6f,0x6d,0x2f,0x3c,
0x2f,0x61,0x3e,0x2e,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x09,
0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x74,0x64,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x0d,0x0a,0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x2f,0x74,0x72,
0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,
0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,
0x6d,0x6c,0x3e,0x0d,0x0a,0x0d,0x0a,};
const struct fsdata_file file__img_sics_gif[] = { {
file_NULL,
data__img_sics_gif,
data__img_sics_gif + 16,
sizeof(data__img_sics_gif) - 16,
1,
}};
const struct fsdata_file file__404_html[] = { {
file__img_sics_gif,
data__404_html,
data__404_html + 12,
sizeof(data__404_html) - 12,
1,
}};
const struct fsdata_file file__index_html[] = { {
file__404_html,
data__index_html,
data__index_html + 12,
sizeof(data__index_html) - 12,
1,
}};
#define FS_ROOT file__index_html
#define FS_NUMFILES 3

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* Copyright (c) 2001-2003 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
@@ -26,21 +26,25 @@
*
* This file is part of the lwIP TCP/IP stack.
*
* Author: Jani Monoses <jani@iv.ro>
* Author: Adam Dunkels <adam@sics.se>
*
*/
#ifndef LWIP_FSDATA_H
#define LWIP_FSDATA_H
#ifndef __LWIP_IP_FRAG_H__
#define __LWIP_IP_FRAG_H__
#include "lwip/err.h"
#include "lwip/pbuf.h"
#include "lwip/netif.h"
#include "lwip/ip_addr.h"
struct pbuf * ip_reass(struct pbuf *);
err_t ip_frag(struct pbuf *, struct netif *, struct ip_addr *);
#endif /* __LWIP_IP_FRAG_H__ */
#include "lwip/apps/httpd_opts.h"
#include "lwip/apps/fs.h"
struct fsdata_file {
const struct fsdata_file *next;
const unsigned char *name;
const unsigned char *data;
int len;
u8_t flags;
#if HTTPD_PRECALCULATED_CHECKSUM
u16_t chksum_count;
const struct fsdata_chksum *chksum;
#endif /* HTTPD_PRECALCULATED_CHECKSUM */
};
#endif /* LWIP_FSDATA_H */

2679
src/apps/httpd/httpd.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,114 @@
#ifndef LWIP_HTTPD_STRUCTS_H
#define LWIP_HTTPD_STRUCTS_H
#include "lwip/apps/httpd.h"
#if LWIP_HTTPD_DYNAMIC_HEADERS
/** This struct is used for a list of HTTP header strings for various
* filename extensions. */
typedef struct
{
const char *extension;
const char *content_type;
} tHTTPHeader;
/** A list of strings used in HTTP headers (see RFC 1945 HTTP/1.0 and
* RFC 2616 HTTP/1.1 for header field definitions) */
static const char * const g_psHTTPHeaderStrings[] =
{
"HTTP/1.0 200 OK\r\n",
"HTTP/1.0 404 File not found\r\n",
"HTTP/1.0 400 Bad Request\r\n",
"HTTP/1.0 501 Not Implemented\r\n",
"HTTP/1.1 200 OK\r\n",
"HTTP/1.1 404 File not found\r\n",
"HTTP/1.1 400 Bad Request\r\n",
"HTTP/1.1 501 Not Implemented\r\n",
"Content-Length: ",
"Connection: Close\r\n",
"Connection: keep-alive\r\n",
"Connection: keep-alive\r\nContent-Length: ",
"Server: "HTTPD_SERVER_AGENT"\r\n",
"\r\n<html><body><h2>404: The requested file cannot be found.</h2></body></html>\r\n"
#if LWIP_HTTPD_SUPPORT_11_KEEPALIVE
,"Connection: keep-alive\r\nContent-Length: 77\r\n\r\n<html><body><h2>404: The requested file cannot be found.</h2></body></html>\r\n"
#endif
};
/* Indexes into the g_psHTTPHeaderStrings array */
#define HTTP_HDR_OK 0 /* 200 OK */
#define HTTP_HDR_NOT_FOUND 1 /* 404 File not found */
#define HTTP_HDR_BAD_REQUEST 2 /* 400 Bad request */
#define HTTP_HDR_NOT_IMPL 3 /* 501 Not Implemented */
#define HTTP_HDR_OK_11 4 /* 200 OK */
#define HTTP_HDR_NOT_FOUND_11 5 /* 404 File not found */
#define HTTP_HDR_BAD_REQUEST_11 6 /* 400 Bad request */
#define HTTP_HDR_NOT_IMPL_11 7 /* 501 Not Implemented */
#define HTTP_HDR_CONTENT_LENGTH 8 /* Content-Length: (HTTP 1.0)*/
#define HTTP_HDR_CONN_CLOSE 9 /* Connection: Close (HTTP 1.1) */
#define HTTP_HDR_CONN_KEEPALIVE 10 /* Connection: keep-alive (HTTP 1.1) */
#define HTTP_HDR_KEEPALIVE_LEN 11 /* Connection: keep-alive + Content-Length: (HTTP 1.1)*/
#define HTTP_HDR_SERVER 12 /* Server: HTTPD_SERVER_AGENT */
#define DEFAULT_404_HTML 13 /* default 404 body */
#if LWIP_HTTPD_SUPPORT_11_KEEPALIVE
#define DEFAULT_404_HTML_PERSISTENT 14 /* default 404 body, but including Connection: keep-alive */
#endif
#define HTTP_HDR_HTML "Content-type: text/html\r\n\r\n"
#define HTTP_HDR_SSI "Content-type: text/html\r\nExpires: Fri, 10 Apr 2008 14:00:00 GMT\r\nPragma: no-cache\r\n\r\n"
#define HTTP_HDR_GIF "Content-type: image/gif\r\n\r\n"
#define HTTP_HDR_PNG "Content-type: image/png\r\n\r\n"
#define HTTP_HDR_JPG "Content-type: image/jpeg\r\n\r\n"
#define HTTP_HDR_BMP "Content-type: image/bmp\r\n\r\n"
#define HTTP_HDR_ICO "Content-type: image/x-icon\r\n\r\n"
#define HTTP_HDR_APP "Content-type: application/octet-stream\r\n\r\n"
#define HTTP_HDR_JS "Content-type: application/javascript\r\n\r\n"
#define HTTP_HDR_RA "Content-type: application/javascript\r\n\r\n"
#define HTTP_HDR_CSS "Content-type: text/css\r\n\r\n"
#define HTTP_HDR_SWF "Content-type: application/x-shockwave-flash\r\n\r\n"
#define HTTP_HDR_XML "Content-type: text/xml\r\n\r\n"
#define HTTP_HDR_PDF "Content-type: application/pdf\r\n\r\n"
#define HTTP_HDR_JSON "Content-type: application/json\r\n\r\n"
#define HTTP_HDR_DEFAULT_TYPE "Content-type: text/plain\r\n\r\n"
/** A list of extension-to-HTTP header strings (see outdated RFC 1700 MEDIA TYPES
* and http://www.iana.org/assignments/media-types for registered content types
* and subtypes) */
static const tHTTPHeader g_psHTTPHeaders[] =
{
{ "html", HTTP_HDR_HTML},
{ "htm", HTTP_HDR_HTML},
{ "shtml",HTTP_HDR_SSI},
{ "shtm", HTTP_HDR_SSI},
{ "ssi", HTTP_HDR_SSI},
{ "gif", HTTP_HDR_GIF},
{ "png", HTTP_HDR_PNG},
{ "jpg", HTTP_HDR_JPG},
{ "bmp", HTTP_HDR_BMP},
{ "ico", HTTP_HDR_ICO},
{ "class",HTTP_HDR_APP},
{ "cls", HTTP_HDR_APP},
{ "js", HTTP_HDR_JS},
{ "ram", HTTP_HDR_RA},
{ "css", HTTP_HDR_CSS},
{ "swf", HTTP_HDR_SWF},
{ "xml", HTTP_HDR_XML},
{ "xsl", HTTP_HDR_XML},
{ "pdf", HTTP_HDR_PDF},
{ "json", HTTP_HDR_JSON}
};
#define NUM_HTTP_HEADERS (sizeof(g_psHTTPHeaders) / sizeof(tHTTPHeader))
#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */
#if LWIP_HTTPD_SSI
static const char * const g_pcSSIExtensions[] = {
".shtml", ".shtm", ".ssi", ".xml"
};
#define NUM_SHTML_EXTENSIONS (sizeof(g_pcSSIExtensions) / sizeof(const char *))
#endif /* LWIP_HTTPD_SSI */
#endif /* LWIP_HTTPD_STRUCTS_H */

View File

@@ -0,0 +1,97 @@
#!/usr/bin/perl
open(OUTPUT, "> fsdata.c");
chdir("fs");
open(FILES, "find . -type f |");
while($file = <FILES>) {
# Do not include files in CVS directories nor backup files.
if($file =~ /(CVS|~)/) {
next;
}
chop($file);
open(HEADER, "> /tmp/header") || die $!;
if($file =~ /404/) {
print(HEADER "HTTP/1.0 404 File not found\r\n");
} else {
print(HEADER "HTTP/1.0 200 OK\r\n");
}
print(HEADER "Server: lwIP/pre-0.6 (http://www.sics.se/~adam/lwip/)\r\n");
if($file =~ /\.html$/) {
print(HEADER "Content-type: text/html\r\n");
} elsif($file =~ /\.gif$/) {
print(HEADER "Content-type: image/gif\r\n");
} elsif($file =~ /\.png$/) {
print(HEADER "Content-type: image/png\r\n");
} elsif($file =~ /\.jpg$/) {
print(HEADER "Content-type: image/jpeg\r\n");
} elsif($file =~ /\.class$/) {
print(HEADER "Content-type: application/octet-stream\r\n");
} elsif($file =~ /\.ram$/) {
print(HEADER "Content-type: audio/x-pn-realaudio\r\n");
} else {
print(HEADER "Content-type: text/plain\r\n");
}
print(HEADER "\r\n");
close(HEADER);
unless($file =~ /\.plain$/ || $file =~ /cgi/) {
system("cat /tmp/header $file > /tmp/file");
} else {
system("cp $file /tmp/file");
}
open(FILE, "/tmp/file");
unlink("/tmp/file");
unlink("/tmp/header");
$file =~ s/\.//;
$fvar = $file;
$fvar =~ s-/-_-g;
$fvar =~ s-\.-_-g;
print(OUTPUT "static const unsigned char data".$fvar."[] = {\n");
print(OUTPUT "\t/* $file */\n\t");
for($j = 0; $j < length($file); $j++) {
printf(OUTPUT "%#02x, ", unpack("C", substr($file, $j, 1)));
}
printf(OUTPUT "0,\n");
$i = 0;
while(read(FILE, $data, 1)) {
if($i == 0) {
print(OUTPUT "\t");
}
printf(OUTPUT "%#02x, ", unpack("C", $data));
$i++;
if($i == 10) {
print(OUTPUT "\n");
$i = 0;
}
}
print(OUTPUT "};\n\n");
close(FILE);
push(@fvars, $fvar);
push(@files, $file);
}
for($i = 0; $i < @fvars; $i++) {
$file = $files[$i];
$fvar = $fvars[$i];
if($i == 0) {
$prevfile = "NULL";
} else {
$prevfile = "file" . $fvars[$i - 1];
}
print(OUTPUT "const struct fsdata_file file".$fvar."[] = {{$prevfile, data$fvar, ");
print(OUTPUT "data$fvar + ". (length($file) + 1) .", ");
print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) ."}};\n\n");
}
print(OUTPUT "#define FS_ROOT file$fvars[$i - 1]\n\n");
print(OUTPUT "#define FS_NUMFILES $i\n");

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
This directory contains a script ('makefsdata') to create C code suitable for
httpd for given html pages (or other files) in a directory.
There is also a plain C console application doing the same and extended a bit.
Usage: htmlgen [targetdir] [-s] [-i]s
targetdir: relative or absolute path to files to convert
switch -s: toggle processing of subdirectories (default is on)
switch -e: exclude HTTP header from file (header is created at runtime, default is on)
switch -11: include HTTP 1.1 header (1.0 is default)
if targetdir not specified, makefsdata will attempt to
process files in subdirectory 'fs'.

650
src/apps/lwiperf/lwiperf.c Normal file
View File

@@ -0,0 +1,650 @@
/**
* @file
* LWIP iperf server implementation
*
* This is simple "Iperf" server to check your bandwith using Iperf on a PC as client.
* It is currently a minimal implementation providing an IPv4 TCP server only.
*
* @todo:
* - implement UDP mode
*/
/*
* Copyright (c) 2014 Simon Goldschmidt
* 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
*/
#include "lwip/apps/lwiperf.h"
#include "lwip/tcp.h"
#include "lwip/sys.h"
#include <string.h>
/* Currently, only TCP-over-IPv4 is implemented (does iperf support IPv6 anyway?) */
#if LWIP_IPV4 && LWIP_TCP
/** Specify the idle timeout (in seconds) after that the test fails */
#ifndef LWIPERF_TCP_MAX_IDLE_SEC
#define LWIPERF_TCP_MAX_IDLE_SEC 10U
#endif
#if LWIPERF_TCP_MAX_IDLE_SEC > 255
#error LWIPERF_TCP_MAX_IDLE_SEC must fit into an u8_t
#endif
/* File internal memory allocation (struct lwiperf_*): this defaults to
the heap */
#ifndef LWIPERF_ALLOC
#define LWIPERF_ALLOC(type) mem_malloc(sizeof(type))
#define LWIPERF_FREE(type, item) mem_free(item)
#endif
/** If this is 1, check that received data has the correct format */
#ifndef LWIPERF_CHECK_RX_DATA
#define LWIPERF_CHECK_RX_DATA 0
#endif
/** This is the Iperf settings struct sent from the client */
typedef struct _lwiperf_settings {
#define LWIPERF_FLAGS_ANSWER_TEST 0x80000000
#define LWIPERF_FLAGS_ANSWER_NOW 0x00000001
u32_t flags;
u32_t num_threads; /* unused for now */
u32_t remote_port;
u32_t buffer_len; /* unused for now */
u32_t win_band; /* TCP window / UDP rate: unused for now */
u32_t amount; /* pos. value: bytes?; neg. values: time (unit is 10ms: 1/100 second) */
} lwiperf_settings_t;
/** Basic connection handle */
struct _lwiperf_state_base;
typedef struct _lwiperf_state_base lwiperf_state_base_t;
struct _lwiperf_state_base {
/* 1=tcp, 0=udp */
u8_t tcp;
/* 1=server, 0=client */
u8_t server;
lwiperf_state_base_t* next;
lwiperf_state_base_t* related_server_state;
};
/** Connection handle for a TCP iperf session */
typedef struct _lwiperf_state_tcp {
lwiperf_state_base_t base;
struct tcp_pcb* server_pcb;
struct tcp_pcb* conn_pcb;
u32_t time_started;
lwiperf_report_fn report_fn;
void* report_arg;
u8_t poll_count;
u8_t next_num;
u32_t bytes_transferred;
lwiperf_settings_t settings;
u8_t have_settings_buf;
} lwiperf_state_tcp_t;
/** List of active iperf sessions */
static lwiperf_state_base_t* lwiperf_all_connections;
/** A const buffer to send from: we want to measure sending, not copying! */
static const u8_t lwiperf_txbuf_const[1600] = {
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
};
static err_t lwiperf_tcp_poll(void *arg, struct tcp_pcb *tpcb);
static void lwiperf_tcp_err(void *arg, err_t err);
/** Add an iperf session to the 'active' list */
static void
lwiperf_list_add(lwiperf_state_base_t* item)
{
if (lwiperf_all_connections == NULL) {
lwiperf_all_connections = item;
} else {
item = lwiperf_all_connections;
}
}
/** Remove an iperf session from the 'active' list */
static void
lwiperf_list_remove(lwiperf_state_base_t* item)
{
lwiperf_state_base_t* prev = NULL;
lwiperf_state_base_t* iter;
for (iter = lwiperf_all_connections; iter != NULL; prev = iter, iter = iter->next) {
if (iter == item) {
if (prev == NULL) {
lwiperf_all_connections = iter->next;
} else {
prev->next = item;
}
/* @debug: ensure this item is listed only once */
for (iter = iter->next; iter != NULL; iter = iter->next) {
LWIP_ASSERT("duplicate entry", iter != item);
}
break;
}
}
}
/** Call the report function of an iperf tcp session */
static void
lwip_tcp_conn_report(lwiperf_state_tcp_t* conn, enum lwiperf_report_type report_type)
{
if ((conn != NULL) && (conn->report_fn != NULL)) {
u32_t now, duration_ms, bandwidth_kbitpsec;
now = sys_now();
duration_ms = now - conn->time_started;
if (duration_ms == 0) {
bandwidth_kbitpsec = 0;
} else {
bandwidth_kbitpsec = (conn->bytes_transferred / duration_ms) * 8U;
}
conn->report_fn(conn->report_arg, report_type,
&conn->conn_pcb->local_ip, conn->conn_pcb->local_port,
&conn->conn_pcb->remote_ip, conn->conn_pcb->remote_port,
conn->bytes_transferred, duration_ms, bandwidth_kbitpsec);
}
}
/** Close an iperf tcp session */
static void
lwiperf_tcp_close(lwiperf_state_tcp_t* conn, enum lwiperf_report_type report_type)
{
err_t err;
lwip_tcp_conn_report(conn, report_type);
lwiperf_list_remove(&conn->base);
if (conn->conn_pcb != NULL) {
tcp_arg(conn->conn_pcb, NULL);
tcp_poll(conn->conn_pcb, NULL, 0);
tcp_sent(conn->conn_pcb, NULL);
tcp_recv(conn->conn_pcb, NULL);
tcp_err(conn->conn_pcb, NULL);
err = tcp_close(conn->conn_pcb);
if (err != ERR_OK) {
/* don't want to wait for free memory here... */
tcp_abort(conn->conn_pcb);
}
} else {
/* no conn pcb, this is the server pcb */
err = tcp_close(conn->server_pcb);
LWIP_ASSERT("error", err != ERR_OK);
}
LWIPERF_FREE(lwiperf_state_tcp_t, conn);
}
/** Try to send more data on an iperf tcp session */
static err_t
lwiperf_tcp_client_send_more(lwiperf_state_tcp_t* conn)
{
int send_more;
err_t err;
u16_t txlen;
u16_t txlen_max;
void* txptr;
u8_t apiflags;
LWIP_ASSERT("conn invalid", (conn != NULL) && conn->base.tcp && (conn->base.server == 0));
do {
send_more = 0;
if (conn->settings.amount & PP_HTONL(0x80000000)) {
/* this session is time-limited */
u32_t now = sys_now();
u32_t diff_ms = now - conn->time_started;
u32_t time = (u32_t)-(s32_t)htonl(conn->settings.amount);
u32_t time_ms = time * 10;
if (diff_ms >= time_ms) {
/* time specified by the client is over -> close the connection */
lwiperf_tcp_close(conn, LWIPERF_TCP_DONE_CLIENT);
return ERR_OK;
}
} else {
/* this session is byte-limited */
u32_t amount_bytes = htonl(conn->settings.amount);
/* @todo: this can send up to 1*MSS more than requested... */
if (amount_bytes >= conn->bytes_transferred) {
/* all requested bytes transferred -> close the connection */
lwiperf_tcp_close(conn, LWIPERF_TCP_DONE_CLIENT);
return ERR_OK;
}
}
if (conn->bytes_transferred < 24) {
/* transmit the settings a first time */
txptr = &((u8_t*)&conn->settings)[conn->bytes_transferred];
txlen_max = (u16_t)(24 - conn->bytes_transferred);
apiflags = TCP_WRITE_FLAG_COPY;
} else if (conn->bytes_transferred < 48) {
/* transmit the settings a second time */
txptr = &((u8_t*)&conn->settings)[conn->bytes_transferred - 24];
txlen_max = (u16_t)(48 - conn->bytes_transferred);
apiflags = TCP_WRITE_FLAG_COPY | TCP_WRITE_FLAG_MORE;
send_more = 1;
} else {
/* transmit data */
/* @todo: every x bytes, transmit the settings again */
txptr = (void*)(size_t)&lwiperf_txbuf_const[conn->bytes_transferred % 10];
txlen_max = TCP_MSS;
if (conn->bytes_transferred == 48) { /* @todo: fix this for intermediate settings, too */
txlen_max = TCP_MSS - 24;
}
apiflags = 0; /* no copying needed */
send_more = 1;
}
txlen = txlen_max;
do {
err = tcp_write(conn->conn_pcb, txptr, txlen, apiflags);
if (err == ERR_MEM) {
txlen /= 2;
}
} while ((err == ERR_MEM) && (txlen >= (TCP_MSS/2)));
if (err == ERR_OK) {
conn->bytes_transferred += txlen;
} else {
send_more = 0;
}
} while(send_more);
tcp_output(conn->conn_pcb);
return ERR_OK;
}
/** TCP sent callback, try to send more data */
static err_t
lwiperf_tcp_client_sent(void *arg, struct tcp_pcb *tpcb, u16_t len)
{
lwiperf_state_tcp_t* conn = (lwiperf_state_tcp_t*)arg;
/* @todo: check 'len' (e.g. to time ACK of all data)? for now, we just send more... */
LWIP_ASSERT("invalid conn", conn->conn_pcb == tpcb);
LWIP_UNUSED_ARG(tpcb);
LWIP_UNUSED_ARG(len);
conn->poll_count = 0;
return lwiperf_tcp_client_send_more(conn);
}
/** TCP connected callback (active connection), send data now */
static err_t
lwiperf_tcp_client_connected(void *arg, struct tcp_pcb *tpcb, err_t err)
{
lwiperf_state_tcp_t* conn = (lwiperf_state_tcp_t*)arg;
LWIP_ASSERT("invalid conn", conn->conn_pcb == tpcb);
LWIP_UNUSED_ARG(tpcb);
if (err != ERR_OK) {
lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_REMOTE);
return ERR_OK;
}
conn->poll_count = 0;
conn->time_started = sys_now();
return lwiperf_tcp_client_send_more(conn);
}
/** Start TCP connection back to the client (either parallel or after the
* receive test has finished.
*/
static err_t
lwiperf_tx_start(lwiperf_state_tcp_t* conn)
{
err_t err;
lwiperf_state_tcp_t* client_conn;
struct tcp_pcb* newpcb;
ip_addr_t remote_addr;
u16_t remote_port;
client_conn = (lwiperf_state_tcp_t*)LWIPERF_ALLOC(lwiperf_state_tcp_t);
if (client_conn == NULL) {
return ERR_MEM;
}
newpcb = tcp_new();
if (newpcb == NULL) {
LWIPERF_FREE(lwiperf_state_tcp_t, client_conn);
return ERR_MEM;
}
memcpy(client_conn, conn, sizeof(lwiperf_state_tcp_t));
client_conn->base.server = 0;
client_conn->server_pcb = NULL;
client_conn->conn_pcb = newpcb;
client_conn->time_started = sys_now(); /* TODO: set this again on 'connected' */
client_conn->poll_count = 0;
client_conn->next_num = 4; /* initial nr is '4' since the header has 24 byte */
client_conn->bytes_transferred = 0;
client_conn->settings.flags = 0; /* prevent the remote side starting back as client again */
tcp_arg(newpcb, client_conn);
tcp_sent(newpcb, lwiperf_tcp_client_sent);
tcp_poll(newpcb, lwiperf_tcp_poll, 2U);
tcp_err(newpcb, lwiperf_tcp_err);
ip_addr_copy(remote_addr, conn->conn_pcb->remote_ip);
remote_port = (u16_t)htonl(client_conn->settings.remote_port);
err = tcp_connect(newpcb, &remote_addr, remote_port, lwiperf_tcp_client_connected);
if (err != ERR_OK) {
lwiperf_tcp_close(client_conn, LWIPERF_TCP_ABORTED_LOCAL);
return err;
}
lwiperf_list_add(&client_conn->base);
return ERR_OK;
}
/** Receive data on an iperf tcp session */
static err_t
lwiperf_tcp_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{
u16_t tot_len;
u32_t packet_idx;
struct pbuf* q;
lwiperf_state_tcp_t* conn = (lwiperf_state_tcp_t*)arg;
LWIP_ASSERT("pcb mismatch", conn->conn_pcb == tpcb);
LWIP_UNUSED_ARG(tpcb);
if (err != ERR_OK) {
lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_REMOTE);
return ERR_OK;
}
if (p == NULL) {
/* connection closed -> test done */
if ((conn->settings.flags & PP_HTONL(LWIPERF_FLAGS_ANSWER_TEST|LWIPERF_FLAGS_ANSWER_NOW)) ==
PP_HTONL(LWIPERF_FLAGS_ANSWER_TEST)) {
/* client requested transmission after end of test */
lwiperf_tx_start(conn);
}
lwiperf_tcp_close(conn, LWIPERF_TCP_DONE_SERVER);
return ERR_OK;
}
tot_len = p->tot_len;
conn->poll_count = 0;
if ((!conn->have_settings_buf) || ((conn->bytes_transferred -24) % (1024*128) == 0)) {
/* wait for 24-byte header */
if (p->tot_len < sizeof(lwiperf_settings_t)) {
lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL_DATAERROR);
pbuf_free(p);
return ERR_VAL;
}
if (!conn->have_settings_buf) {
if (pbuf_copy_partial(p, &conn->settings, sizeof(lwiperf_settings_t), 0) != sizeof(lwiperf_settings_t)) {
lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL);
pbuf_free(p);
return ERR_VAL;
}
conn->have_settings_buf = 1;
if ((conn->settings.flags & PP_HTONL(LWIPERF_FLAGS_ANSWER_TEST|LWIPERF_FLAGS_ANSWER_NOW)) ==
PP_HTONL(LWIPERF_FLAGS_ANSWER_TEST|LWIPERF_FLAGS_ANSWER_NOW)) {
/* client requested parallel transmission test */
err_t err2 = lwiperf_tx_start(conn);
if (err2 != ERR_OK) {
lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL_TXERROR);
pbuf_free(p);
return err2;
}
}
} else {
if (pbuf_memcmp(p, 0, &conn->settings, sizeof(lwiperf_settings_t)) != 0) {
lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL_DATAERROR);
pbuf_free(p);
return ERR_VAL;
}
}
conn->bytes_transferred += sizeof(lwiperf_settings_t);
if(conn->bytes_transferred <= 24) {
conn->time_started = sys_now();
tcp_recved(tpcb, p->tot_len);
pbuf_free(p);
return ERR_OK;
}
conn->next_num = 4; /* 24 bytes received... */
err = pbuf_header(p, -24);
LWIP_ASSERT("pbuf_header failed", err == ERR_OK);
}
packet_idx = 0;
for (q = p; q != NULL; q = q->next) {
#if LWIPERF_CHECK_RX_DATA
const u8_t* payload = (const u8_t*)q->payload;
u16_t i;
for (i = 0; i < q->len; i++) {
u8_t val = payload[i];
u8_t num = val - '0';
if (num == conn->next_num) {
conn->next_num++;
if (conn->next_num == 10) {
conn->next_num = 0;
}
} else {
lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL_DATAERROR);
pbuf_free(p);
return ERR_VAL;
}
}
packet_idx += i;
#else
packet_idx += q->len;
#endif
}
LWIP_ASSERT("count mismatch", packet_idx == p->tot_len);
conn->bytes_transferred += packet_idx;
tcp_recved(tpcb, tot_len);
pbuf_free(p);
return ERR_OK;
}
/** Error callback, iperf tcp session aborted */
static void
lwiperf_tcp_err(void *arg, err_t err)
{
lwiperf_state_tcp_t* conn = (lwiperf_state_tcp_t*)arg;
LWIP_UNUSED_ARG(err);
lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_REMOTE);
}
/** TCP poll callback, try to send more data */
static err_t
lwiperf_tcp_poll(void *arg, struct tcp_pcb *tpcb)
{
lwiperf_state_tcp_t* conn = (lwiperf_state_tcp_t*)arg;
LWIP_ASSERT("pcb mismatch", conn->conn_pcb == tpcb);
LWIP_UNUSED_ARG(tpcb);
if (++conn->poll_count >= LWIPERF_TCP_MAX_IDLE_SEC) {
lwiperf_tcp_close(conn, LWIPERF_TCP_ABORTED_LOCAL);
return ERR_OK; /* lwiperf_tcp_close frees conn */
}
if (!conn->base.server) {
lwiperf_tcp_client_send_more(conn);
}
return ERR_OK;
}
/** This is called when a new client connects for an iperf tcp session */
static err_t
lwiperf_tcp_accept(void *arg, struct tcp_pcb *newpcb, err_t err)
{
lwiperf_state_tcp_t *s, *conn;
if ((err != ERR_OK) || (newpcb == NULL) || (arg == NULL)) {
return ERR_VAL;
}
s = (lwiperf_state_tcp_t*)arg;
conn = (lwiperf_state_tcp_t*)LWIPERF_ALLOC(lwiperf_state_tcp_t);
if (conn == NULL) {
return ERR_MEM;
}
memset(conn, 0, sizeof(lwiperf_state_tcp_t));
conn->base.tcp = 1;
conn->base.server = 1;
conn->base.related_server_state = &s->base;
conn->server_pcb = s->server_pcb;
conn->conn_pcb = newpcb;
conn->time_started = sys_now();
conn->report_fn = s->report_fn;
conn->report_arg = s->report_arg;
/* setup the tcp rx connection */
tcp_arg(newpcb, conn);
tcp_recv(newpcb, lwiperf_tcp_recv);
tcp_poll(newpcb, lwiperf_tcp_poll, 2U);
tcp_err(conn->conn_pcb, lwiperf_tcp_err);
lwiperf_list_add(&conn->base);
return ERR_OK;
}
/** Start a TCP iperf server on the default TCP port (5001) and listen for
* incoming connections from iperf clients.
*
* @returns a connection handle that can be used to abort the server
* by calling @ref lwiperf_abort()
*/
void*
lwiperf_start_tcp_server_default(lwiperf_report_fn report_fn, void* report_arg)
{
return lwiperf_start_tcp_server(IP_ADDR_ANY, LWIPERF_TCP_PORT_DEFAULT,
report_fn, report_arg);
}
/** Start a TCP iperf server on a specific IP address and port and listen for
* incoming connections from iperf clients.
*
* @returns a connection handle that can be used to abort the server
* by calling @ref lwiperf_abort()
*/
void*
lwiperf_start_tcp_server(const ip_addr_t* local_addr, u16_t local_port,
lwiperf_report_fn report_fn, void* report_arg)
{
err_t err;
struct tcp_pcb* pcb;
lwiperf_state_tcp_t* s;
if(local_addr == NULL) {
return NULL;
}
s = (lwiperf_state_tcp_t*)LWIPERF_ALLOC(lwiperf_state_tcp_t);
if (s == NULL) {
return NULL;
}
memset(s, 0, sizeof(lwiperf_state_tcp_t));
s->base.tcp = 1;
s->base.server = 1;
s->report_fn = report_fn;
s->report_arg = report_arg;
pcb = tcp_new();
if (pcb != NULL) {
err = tcp_bind(pcb, local_addr, local_port);
if (err == ERR_OK) {
s->server_pcb = tcp_listen_with_backlog(pcb, 1);
}
}
if (s->server_pcb == NULL) {
if (pcb != NULL) {
tcp_close(pcb);
}
LWIPERF_FREE(lwiperf_state_tcp_t, s);
return NULL;
}
pcb = NULL;
tcp_arg(s->server_pcb, s);
tcp_accept(s->server_pcb, lwiperf_tcp_accept);
lwiperf_list_add(&s->base);
return s;
}
/** Abort an iperf session (handle returned by lwiperf_start_tcp_server*()) */
void
lwiperf_abort(void* lwiperf_session)
{
lwiperf_state_base_t* i, *dealloc, *last = NULL;
for (i = lwiperf_all_connections; i != NULL; ) {
if ((i == lwiperf_session) || (i->related_server_state == lwiperf_session)) {
dealloc = i;
i = i->next;
if (last != NULL) {
last->next = i;
}
LWIPERF_FREE(lwiperf_state_tcp_t, dealloc); /* TODO: type? */
} else {
last = i;
i = i->next;
}
}
}
#endif /* LWIP_IPV4 && LWIP_TCP */

View File

@@ -0,0 +1,350 @@
/**
* @file
* NetBIOS name service responder
*
* This is an example implementation of a NetBIOS name server.
* It responds to name queries for a configurable name.
* Name resolving is not supported.
*
* Note that the device doesn't broadcast it's own name so can't
* detect duplicate names!
*/
/*
* 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/apps/netbiosns.h"
#if LWIP_IPV4 && LWIP_UDP /* don't build if not configured for use in lwipopts.h */
#include "lwip/udp.h"
#include "lwip/netif.h"
#include <string.h>
/** default port number for "NetBIOS Name service */
#define NETBIOS_PORT 137
/** size of a NetBIOS name */
#define NETBIOS_NAME_LEN 16
/** The Time-To-Live for NetBIOS name responds (in seconds)
* Default is 300000 seconds (3 days, 11 hours, 20 minutes) */
#define NETBIOS_NAME_TTL 300000u
/** NetBIOS header flags */
#define NETB_HFLAG_RESPONSE 0x8000U
#define NETB_HFLAG_OPCODE 0x7800U
#define NETB_HFLAG_OPCODE_NAME_QUERY 0x0000U
#define NETB_HFLAG_AUTHORATIVE 0x0400U
#define NETB_HFLAG_TRUNCATED 0x0200U
#define NETB_HFLAG_RECURS_DESIRED 0x0100U
#define NETB_HFLAG_RECURS_AVAILABLE 0x0080U
#define NETB_HFLAG_BROADCAST 0x0010U
#define NETB_HFLAG_REPLYCODE 0x0008U
#define NETB_HFLAG_REPLYCODE_NOERROR 0x0000U
/** NetBIOS name flags */
#define NETB_NFLAG_UNIQUE 0x8000U
#define NETB_NFLAG_NODETYPE 0x6000U
#define NETB_NFLAG_NODETYPE_HNODE 0x6000U
#define NETB_NFLAG_NODETYPE_MNODE 0x4000U
#define NETB_NFLAG_NODETYPE_PNODE 0x2000U
#define NETB_NFLAG_NODETYPE_BNODE 0x0000U
/** NetBIOS message header */
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/bpstruct.h"
#endif
PACK_STRUCT_BEGIN
struct netbios_hdr {
PACK_STRUCT_FIELD(u16_t trans_id);
PACK_STRUCT_FIELD(u16_t flags);
PACK_STRUCT_FIELD(u16_t questions);
PACK_STRUCT_FIELD(u16_t answerRRs);
PACK_STRUCT_FIELD(u16_t authorityRRs);
PACK_STRUCT_FIELD(u16_t additionalRRs);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/epstruct.h"
#endif
/** NetBIOS message name part */
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/bpstruct.h"
#endif
PACK_STRUCT_BEGIN
struct netbios_name_hdr {
PACK_STRUCT_FLD_8(u8_t nametype);
PACK_STRUCT_FLD_8(u8_t encname[(NETBIOS_NAME_LEN*2)+1]);
PACK_STRUCT_FIELD(u16_t type);
PACK_STRUCT_FIELD(u16_t cls);
PACK_STRUCT_FIELD(u32_t ttl);
PACK_STRUCT_FIELD(u16_t datalen);
PACK_STRUCT_FIELD(u16_t flags);
PACK_STRUCT_FLD_S(ip4_addr_p_t addr);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/epstruct.h"
#endif
/** NetBIOS message */
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/bpstruct.h"
#endif
PACK_STRUCT_BEGIN
struct netbios_resp
{
struct netbios_hdr resp_hdr;
struct netbios_name_hdr resp_name;
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
#ifdef PACK_STRUCT_USE_INCLUDES
# include "arch/epstruct.h"
#endif
#ifdef NETBIOS_LWIP_NAME
#define NETBIOS_LOCAL_NAME NETBIOS_LWIP_NAME
#else
static char netbiosns_local_name[NETBIOS_NAME_LEN];
#define NETBIOS_LOCAL_NAME netbiosns_local_name
#endif
struct udp_pcb *netbiosns_pcb;
/** Decode a NetBIOS name (from packet to string) */
static int
netbiosns_name_decode(char *name_enc, char *name_dec, int name_dec_len)
{
char *pname;
char cname;
char cnbname;
int idx = 0;
LWIP_UNUSED_ARG(name_dec_len);
/* Start decoding netbios name. */
pname = name_enc;
for (;;) {
/* Every two characters of the first level-encoded name
* turn into one character in the decoded name. */
cname = *pname;
if (cname == '\0')
break; /* no more characters */
if (cname == '.')
break; /* scope ID follows */
if (cname < 'A' || cname > 'Z') {
/* Not legal. */
return -1;
}
cname -= 'A';
cnbname = cname << 4;
pname++;
cname = *pname;
if (cname == '\0' || cname == '.') {
/* No more characters in the name - but we're in
* the middle of a pair. Not legal. */
return -1;
}
if (cname < 'A' || cname > 'Z') {
/* Not legal. */
return -1;
}
cname -= 'A';
cnbname |= cname;
pname++;
/* Do we have room to store the character? */
if (idx < NETBIOS_NAME_LEN) {
/* Yes - store the character. */
name_dec[idx++] = (cnbname!=' '?cnbname:'\0');
}
}
return 0;
}
#if 0 /* function currently unused */
/** Encode a NetBIOS name (from string to packet) - currently unused because
we don't ask for names. */
static int
netbiosns_name_encode(char *name_enc, char *name_dec, int name_dec_len)
{
char *pname;
char cname;
unsigned char ucname;
int idx = 0;
/* Start encoding netbios name. */
pname = name_enc;
for (;;) {
/* Every two characters of the first level-encoded name
* turn into one character in the decoded name. */
cname = *pname;
if (cname == '\0')
break; /* no more characters */
if (cname == '.')
break; /* scope ID follows */
if ((cname < 'A' || cname > 'Z') && (cname < '0' || cname > '9')) {
/* Not legal. */
return -1;
}
/* Do we have room to store the character? */
if (idx >= name_dec_len) {
return -1;
}
/* Yes - store the character. */
ucname = cname;
name_dec[idx++] = ('A'+((ucname>>4) & 0x0F));
name_dec[idx++] = ('A'+( ucname & 0x0F));
pname++;
}
/* Fill with "space" coding */
for (;idx < name_dec_len - 1;) {
name_dec[idx++] = 'C';
name_dec[idx++] = 'A';
}
/* Terminate string */
name_dec[idx] = '\0';
return 0;
}
#endif /* 0 */
/** NetBIOS Name service recv callback */
static void
netbiosns_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
{
LWIP_UNUSED_ARG(arg);
/* if packet is valid */
if (p != NULL) {
char netbios_name[NETBIOS_NAME_LEN+1];
struct netbios_hdr* netbios_hdr = (struct netbios_hdr*)p->payload;
struct netbios_name_hdr* netbios_name_hdr = (struct netbios_name_hdr*)(netbios_hdr+1);
/* we only answer if we got a default interface */
if (netif_default != NULL) {
/* @todo: do we need to check answerRRs/authorityRRs/additionalRRs? */
/* if the packet is a NetBIOS name query question */
if (((netbios_hdr->flags & PP_NTOHS(NETB_HFLAG_OPCODE)) == PP_NTOHS(NETB_HFLAG_OPCODE_NAME_QUERY)) &&
((netbios_hdr->flags & PP_NTOHS(NETB_HFLAG_RESPONSE)) == 0) &&
(netbios_hdr->questions == PP_NTOHS(1))) {
/* decode the NetBIOS name */
netbiosns_name_decode((char*)(netbios_name_hdr->encname), netbios_name, sizeof(netbios_name));
/* if the packet is for us */
if (NETBIOS_STRCMP(netbios_name, NETBIOS_LOCAL_NAME) == 0) {
struct pbuf *q;
struct netbios_resp *resp;
q = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct netbios_resp), PBUF_RAM);
if (q != NULL) {
resp = (struct netbios_resp*)q->payload;
/* prepare NetBIOS header response */
resp->resp_hdr.trans_id = netbios_hdr->trans_id;
resp->resp_hdr.flags = PP_HTONS(NETB_HFLAG_RESPONSE |
NETB_HFLAG_OPCODE_NAME_QUERY |
NETB_HFLAG_AUTHORATIVE |
NETB_HFLAG_RECURS_DESIRED);
resp->resp_hdr.questions = 0;
resp->resp_hdr.answerRRs = PP_HTONS(1);
resp->resp_hdr.authorityRRs = 0;
resp->resp_hdr.additionalRRs = 0;
/* prepare NetBIOS header datas */
MEMCPY( resp->resp_name.encname, netbios_name_hdr->encname, sizeof(netbios_name_hdr->encname));
resp->resp_name.nametype = netbios_name_hdr->nametype;
resp->resp_name.type = netbios_name_hdr->type;
resp->resp_name.cls = netbios_name_hdr->cls;
resp->resp_name.ttl = PP_HTONL(NETBIOS_NAME_TTL);
resp->resp_name.datalen = PP_HTONS(sizeof(resp->resp_name.flags)+sizeof(resp->resp_name.addr));
resp->resp_name.flags = PP_HTONS(NETB_NFLAG_NODETYPE_BNODE);
ip4_addr_copy(resp->resp_name.addr, *netif_ip4_addr(netif_default));
/* send the NetBIOS response */
udp_sendto(upcb, q, addr, port);
/* free the "reference" pbuf */
pbuf_free(q);
}
}
}
}
/* free the pbuf */
pbuf_free(p);
}
}
void
netbiosns_init(void)
{
#ifdef NETBIOS_LWIP_NAME
LWIP_ASSERT("NetBIOS name is too long!", strlen(NETBIOS_LWIP_NAME) < NETBIOS_NAME_LEN);
#endif
netbiosns_pcb = udp_new_ip_type(IPADDR_TYPE_ANY);
if (netbiosns_pcb != NULL) {
/* we have to be allowed to send broadcast packets! */
netbiosns_pcb->so_options |= SOF_BROADCAST;
udp_bind(netbiosns_pcb, IP_ANY_TYPE, NETBIOS_PORT);
udp_recv(netbiosns_pcb, netbiosns_recv, netbiosns_pcb);
}
}
#ifndef NETBIOS_LWIP_NAME
/* ATTENTION: the hostname must be <= 15 characters! */
void
netbiosns_set_name(const char* hostname)
{
size_t copy_len = strlen(hostname);
LWIP_ASSERT("NetBIOS name is too long!", copy_len < NETBIOS_NAME_LEN);
if(copy_len >= NETBIOS_NAME_LEN) {
copy_len = NETBIOS_NAME_LEN - 1;
}
memcpy(netbiosns_local_name, hostname, copy_len + 1);
}
#endif
void
netbiosns_stop(void)
{
if (netbiosns_pcb != NULL) {
udp_remove(netbiosns_pcb);
netbiosns_pcb = NULL;
}
}
#endif /* LWIP_IPV4 && LWIP_UDP */

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CCodeGeneration</RootNamespace>
<AssemblyName>CCodeGeneration</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="CFile.cs" />
<Compile Include="Code.cs" />
<Compile Include="CodeContainerBase.cs" />
<Compile Include="CodeElement.cs" />
<Compile Include="Comment.cs" />
<Compile Include="EmptyLine.cs" />
<Compile Include="Function.cs" />
<Compile Include="CGenerator.cs" />
<Compile Include="IfThenElse.cs" />
<Compile Include="PlainText.cs" />
<Compile Include="Switch.cs" />
<Compile Include="PP_If.cs" />
<Compile Include="PP_Ifdef.cs" />
<Compile Include="PP_Include.cs" />
<Compile Include="FunctionDeclaration.cs" />
<Compile Include="PP_Macro.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="VariableDeclaration.cs" />
<Compile Include="VariablePrototype.cs" />
<Compile Include="VariableType.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,54 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
namespace CCodeGeneration
{
public class CFile: CodeContainerBase
{
public CFile()
{
base.IncreaseLevel = false;
}
public void Save(CGenerator generator)
{
if (generator == null)
{
throw new ArgumentNullException("generator");
}
this.GenerateCode(0, generator);
}
}
}

View File

@@ -0,0 +1,119 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.IO;
namespace CCodeGeneration
{
public class CGenerator
{
public TextWriter OutputStream { get; private set; }
public string File { get; private set; }
public uint IndentCount { get; private set; }
public string IndentChar { get; private set; }
public string NewLine { get; private set; }
public CGenerator(System.IO.TextWriter outputStream, string file, uint indentCount, string indentChar, string newLine)
{
this.OutputStream = outputStream;
this.File = file;
this.IndentCount = indentCount;
this.IndentChar = indentChar;
this.NewLine = newLine;
}
public string FileName
{
get
{
if (!String.IsNullOrWhiteSpace(this.File))
{
return Path.GetFileName(this.File);
}
return null;
}
}
public void WriteSequence(string value, uint repetitions)
{
while (repetitions > 0)
{
this.OutputStream.Write(value);
repetitions--;
}
}
public void IndentLine(int level)
{
while (level > 0)
{
WriteSequence(this.IndentChar, this.IndentCount);
level--;
}
}
public void WriteNewLine()
{
this.OutputStream.Write(this.NewLine);
}
public void WriteMultilineString(string value, int level = 0)
{
if (String.IsNullOrEmpty(value))
{
return;
}
// only \n and \r\n are recognized as linebreaks
string[] lines = value.Split(new char[] { '\n' }, StringSplitOptions.None);
for (int l = 0; l < (lines.Length - 1); l++)
{
if (lines[l].EndsWith("\r"))
{
this.OutputStream.Write(lines[l].Substring(0, lines[l].Length-1));
}
else
{
this.OutputStream.Write(lines[l]);
}
this.WriteNewLine();
this.IndentLine(level);
}
this.OutputStream.Write(lines[lines.Length - 1]);
}
}
}

View File

@@ -0,0 +1,56 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
namespace CCodeGeneration
{
public class Code: CodeElement
{
public string Code_ { get; set; }
public Code()
{
}
public Code(string code)
{
this.Code_ = code;
}
public override void GenerateCode(int level, CGenerator generator)
{
generator.IndentLine(level);
generator.WriteMultilineString(this.Code_, level);
generator.WriteNewLine();
}
}
}

View File

@@ -0,0 +1,139 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System.Collections.Generic;
using System;
namespace CCodeGeneration
{
public class CodeContainerBase: CodeElement
{
private readonly List<CodeElement> declarations = new List<CodeElement>();
private readonly List<CodeElement> innerElements = new List<CodeElement>();
private bool increaseLevel = true;
public List<CodeElement> Declarations
{
get { return this.declarations; }
}
public List<CodeElement> InnerElements
{
get { return this.innerElements; }
}
protected bool IncreaseLevel
{
get { return this.increaseLevel; }
set { this.increaseLevel = value; }
}
public void AddElements(IList<CodeElement> elements, params CodeElement[] spacerElements)
{
if (elements != null)
{
if ((spacerElements == null) || (spacerElements.Length == 0))
{
this.innerElements.AddRange(elements);
}
else
{
bool spacerAdded = false;
foreach (CodeElement element in elements)
{
this.innerElements.Add(element);
this.innerElements.AddRange(spacerElements);
spacerAdded = true;
}
if (spacerAdded)
{
// remove last spacer again
this.innerElements.RemoveRange(this.innerElements.Count - spacerElements.Length, spacerElements.Length);
}
}
}
}
public CodeElement AddElement(CodeElement element)
{
if (element != null)
{
this.innerElements.Add(element);
}
return element;
}
public Code AddCode(string code)
{
return this.AddElement(new Code(code)) as Code;
}
public Code AddCodeFormat(string codeFormat, params object[] args)
{
return this.AddElement(new Code(String.Format(codeFormat, args))) as Code;
}
public CodeElement AddDeclaration(CodeElement declaration)
{
if (declaration != null)
{
this.declarations.Add(declaration);
}
return declaration;
}
public override void GenerateCode(int level, CGenerator generator)
{
if (this.increaseLevel)
level++;
if (this.declarations.Count > 0)
{
foreach (CodeElement element in this.declarations)
{
element.GenerateCode(level, generator);
}
EmptyLine.SingleLine.GenerateCode(level, generator);
}
foreach (CodeElement element in this.innerElements)
{
element.GenerateCode(level, generator);
}
}
}
}

View File

@@ -1,8 +1,8 @@
/*
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* 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,
@@ -11,29 +11,31 @@
* 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.
* 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
* 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>
*
* Author: Martin Hentschel <info@cl-soft.de>
*
*/
#ifndef __NETIF_LOOPIF_H__
#define __NETIF_LOOPIF_H__
#include "lwip/netif.h"
err_t loopif_init(struct netif *netif);
#endif /* __NETIF_LOOPIF_H__ */
namespace CCodeGeneration
{
public class CodeElement
{
public virtual void GenerateCode(int level, CGenerator generator)
{
}
}
}

View File

@@ -0,0 +1,75 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
namespace CCodeGeneration
{
public class Comment: CodeElement
{
public const string CommentStart = "/*";
public const string CommentEnd = "*/";
public string Comment_ { get; set; }
public bool SingleLine { get; set; }
public Comment()
{
}
public Comment(string comment, bool singleLine = false)
{
this.Comment_ = comment;
this.SingleLine = singleLine;
}
public override void GenerateCode(int level, CGenerator generator)
{
generator.IndentLine(level);
generator.OutputStream.Write(CommentStart);
if (!this.SingleLine)
{
generator.WriteNewLine();
generator.IndentLine(level);
generator.WriteMultilineString(this.Comment_, level);
generator.WriteNewLine();
generator.IndentLine(level);
}
else
{
generator.OutputStream.Write(" " + Comment_ + " ");
}
generator.OutputStream.Write(CommentEnd);
generator.WriteNewLine();
}
}
}

View File

@@ -0,0 +1,64 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
namespace CCodeGeneration
{
public class EmptyLine : CodeElement
{
public static readonly EmptyLine SingleLine = new EmptyLine();
public static readonly EmptyLine TwoLines = new EmptyLine(2);
public static readonly EmptyLine ThreeLines = new EmptyLine(3);
public uint Count { get; set; }
public EmptyLine()
{
this.Count = 1;
}
public EmptyLine(uint count)
{
this.Count = count;
}
public override void GenerateCode(int level, CGenerator generator)
{
uint c = this.Count;
while (c > 0)
{
generator.WriteNewLine();
c--;
}
}
}
}

View File

@@ -0,0 +1,129 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Collections.Generic;
namespace CCodeGeneration
{
public class Function: CodeContainerBase
{
public string Name { get; set; }
public bool IsStatic { get; set; }
private readonly List<VariableType> parameter = new List<VariableType>();
private VariableType returnType = VariableType.Void;
public Function()
{
}
public Function(string name, bool isStatic = false)
{
this.Name = name;
this.IsStatic = isStatic;
}
public List<VariableType> Parameter
{
get { return this.parameter; }
}
public VariableType ReturnType
{
get { return this.returnType; }
set
{
if (value == null)
{
throw new ArgumentNullException("ReturnValue");
}
this.returnType = value;
}
}
public static Function FromDeclaration(FunctionDeclaration decl)
{
Function result = new Function(decl.Name, decl.IsStatic);
result.ReturnType = decl.ReturnType.Clone() as VariableType;
foreach (VariableType param in decl.Parameter)
{
result.parameter.Add(param.Clone() as VariableType);
}
return result;
}
public override void GenerateCode(int level, CGenerator generator)
{
generator.IndentLine(level);
if (this.IsStatic)
{
generator.OutputStream.Write("static ");
}
this.returnType.GenerateCode(generator);
generator.OutputStream.Write(" " + this.Name + "(");
if (this.Parameter.Count > 0)
{
for (int i = 0; i < this.parameter.Count; i++)
{
this.parameter[i].GenerateCode(generator);
if (i < (this.parameter.Count - 1))
{
generator.OutputStream.Write(", ");
}
}
}
else
{
generator.OutputStream.Write("void");
}
generator.OutputStream.Write(")");
generator.WriteNewLine();
generator.IndentLine(level);
generator.OutputStream.Write("{");
generator.WriteNewLine();
base.GenerateCode(level, generator);
generator.IndentLine(level);
generator.OutputStream.Write("}");
generator.WriteNewLine();
}
}
}

View File

@@ -0,0 +1,114 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Collections.Generic;
namespace CCodeGeneration
{
public class FunctionDeclaration: CodeElement
{
public string Name { get; set; }
public bool IsStatic { get; set; }
public bool IsExtern { get; set; }
private readonly List<VariableType> parameter = new List<VariableType>();
private VariableType returnType = VariableType.Void;
public FunctionDeclaration()
{
}
public FunctionDeclaration(string name, bool isStatic = false, bool isExtern = false)
{
this.Name = name;
this.IsStatic = isStatic;
this.IsExtern = isExtern;
}
public List<VariableType> Parameter
{
get { return this.parameter; }
}
public VariableType ReturnType
{
get { return this.returnType; }
set
{
if (value == null)
{
throw new ArgumentNullException("ReturnValue");
}
this.returnType = value;
}
}
public override void GenerateCode(int level, CGenerator generator)
{
generator.IndentLine(level);
if (this.IsExtern)
{
generator.OutputStream.Write("extern ");
}
if (this.IsStatic)
{
generator.OutputStream.Write("static ");
}
this.returnType.GenerateCode(generator);
generator.OutputStream.Write(" " + this.Name + "(");
if (this.Parameter.Count > 0)
{
for (int i = 0; i < this.parameter.Count; i++)
{
this.parameter[i].GenerateCode(generator);
if (i < (this.parameter.Count - 1))
{
generator.OutputStream.Write(", ");
}
}
}
else
{
generator.OutputStream.Write("void");
}
generator.OutputStream.Write(");");
generator.WriteNewLine();
}
}
}

View File

@@ -0,0 +1,137 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Collections.Generic;
namespace CCodeGeneration
{
public class ElseIf : CodeContainerBase
{
public string Condition { get; set; }
public ElseIf()
{
}
public ElseIf(string condition)
{
this.Condition = condition;
}
public override void GenerateCode(int level, CGenerator generator)
{
if (!String.IsNullOrWhiteSpace(this.Condition))
{
generator.IndentLine(level);
generator.OutputStream.Write(String.Format("else if ({0})", this.Condition));
generator.WriteNewLine();
generator.IndentLine(level);
generator.OutputStream.Write("{");
generator.WriteNewLine();
base.GenerateCode(level, generator);
generator.IndentLine(level);
generator.OutputStream.Write("}");
generator.WriteNewLine();
}
}
}
public class IfThenElse: CodeContainerBase
{
public string Condition { get; set; }
private List<ElseIf> elseIf = new List<ElseIf>();
private CodeContainerBase else_ = new CodeContainerBase();
public IfThenElse()
{
}
public IfThenElse(string condition)
{
this.Condition = condition;
}
public List<ElseIf> ElseIf
{
get { return this.elseIf; }
}
public CodeContainerBase Else
{
get { return this.else_; }
}
public override void GenerateCode(int level, CGenerator generator)
{
if (!String.IsNullOrWhiteSpace(this.Condition))
{
generator.IndentLine(level);
generator.OutputStream.Write(String.Format("if ({0})", this.Condition));
generator.WriteNewLine();
generator.IndentLine(level);
generator.OutputStream.Write("{");
generator.WriteNewLine();
base.GenerateCode(level, generator);
generator.IndentLine(level);
generator.OutputStream.Write("}");
generator.WriteNewLine();
foreach (ElseIf elif in this.elseIf)
{
elif.GenerateCode(level, generator);
}
if (this.else_.InnerElements.Count > 0)
{
generator.IndentLine(level);
generator.OutputStream.Write("else");
generator.WriteNewLine();
generator.IndentLine(level);
generator.OutputStream.Write("{");
generator.WriteNewLine();
this.else_.GenerateCode(level, generator);
generator.IndentLine(level);
generator.OutputStream.Write("}");
generator.WriteNewLine();
}
}
}
}
}

View File

@@ -0,0 +1,67 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
namespace CCodeGeneration
{
public class PP_If: CodeContainerBase
{
public string Condition { get; set; }
public PP_If()
{
base.IncreaseLevel = false;
}
public PP_If(string condition)
: this()
{
this.Condition = condition;
}
public override void GenerateCode(int level, CGenerator generator)
{
if (!String.IsNullOrWhiteSpace(this.Condition))
{
generator.OutputStream.Write("#if " + this.Condition);
generator.WriteNewLine();
base.GenerateCode(level, generator);
generator.OutputStream.Write("#endif /* " + this.Condition + " */");
generator.WriteNewLine();
}
}
}
}

View File

@@ -0,0 +1,76 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
namespace CCodeGeneration
{
public class PP_Ifdef: CodeContainerBase
{
public string Macro { get; set; }
public bool Inverted { get; set; }
public PP_Ifdef()
{
base.IncreaseLevel = false;
}
public PP_Ifdef(string macro, bool inverted = false)
: this()
{
this.Macro = macro;
this.Inverted = inverted;
}
public override void GenerateCode(int level, CGenerator generator)
{
if (!String.IsNullOrWhiteSpace(this.Macro))
{
if (this.Inverted)
{
generator.OutputStream.Write("#ifndef " + this.Macro);
}
else
{
generator.OutputStream.Write("#ifdef " + this.Macro);
}
generator.WriteNewLine();
base.GenerateCode(level, generator);
generator.OutputStream.Write("#endif /* " + this.Macro + " */");
generator.WriteNewLine();
}
}
}
}

View File

@@ -0,0 +1,71 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
namespace CCodeGeneration
{
public class PP_Include : CodeElement
{
public string File { get; set; }
public bool IsLocal { get; set; }
public PP_Include()
{
this.IsLocal = true;
}
public PP_Include(string file, bool isLocal = true)
{
this.File = file;
this.IsLocal = isLocal;
}
public override void GenerateCode(int level, CGenerator generator)
{
if (!String.IsNullOrWhiteSpace(this.File))
{
// includes are never indented
if (this.IsLocal)
{
generator.OutputStream.Write("#include \"" + this.File + "\"");
}
else
{
generator.OutputStream.Write("#include <" + this.File + ">");
}
generator.WriteNewLine();
}
}
}
}

View File

@@ -0,0 +1,59 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
namespace CCodeGeneration
{
public class PP_Macro: CodeElement
{
public string Name { get; set; }
public string Value { get; set; }
public PP_Macro()
{
}
public PP_Macro(string name, string value)
{
this.Name = name;
this.Value = value;
}
public override void GenerateCode(int level, CGenerator generator)
{
// macros are not indented at all
generator.OutputStream.Write("#define " + this.Name + " ");
generator.WriteMultilineString(this.Value);
generator.WriteNewLine();
}
}
}

View File

@@ -0,0 +1,49 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
namespace CCodeGeneration
{
public class PlainText : CodeElement
{
public string Value { get; set; }
public PlainText(string value)
{
this.Value = value;
}
public override void GenerateCode(int level, CGenerator generator)
{
generator.WriteMultilineString(this.Value);
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die mit einer Assembly verknüpft sind.
[assembly: AssemblyTitle("CCodeGeneration")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CCodeGeneration")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("8f07a0fa-86f4-48a0-97c7-f94fc5c3f103")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
// übernehmen, indem Sie "*" eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,146 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Collections.Generic;
namespace CCodeGeneration
{
public class SwitchCase : CodeContainerBase
{
public string Value { get; set; }
public SwitchCase()
{
}
public SwitchCase(string value)
{
this.Value = value;
}
public bool IsDefault
{
get { return (this.Value.ToLowerInvariant() == "default"); }
}
public static SwitchCase GenerateDefault()
{
return new SwitchCase("default");
}
public override void GenerateCode(int level, CGenerator generator)
{
if (!String.IsNullOrWhiteSpace(this.Value))
{
generator.IndentLine(level);
if (this.IsDefault)
{
generator.OutputStream.Write("default:");
}
else
{
generator.OutputStream.Write(String.Format("case {0}:", this.Value));
}
generator.WriteNewLine();
generator.IndentLine(level + 1);
generator.OutputStream.Write("{");
generator.WriteNewLine();
base.GenerateCode(level + 1, generator);
generator.IndentLine(level + 1);
generator.OutputStream.Write("}");
generator.WriteNewLine();
generator.IndentLine(level + 1);
generator.OutputStream.Write("break;");
generator.WriteNewLine();
}
}
}
public class Switch: CodeElement
{
public string SwitchVar { get; set; }
private List<SwitchCase> switches = new List<SwitchCase>();
public Switch()
{
}
public Switch(string switchVar)
{
this.SwitchVar = switchVar;
}
public List<SwitchCase> Switches
{
get { return this.switches; }
}
public override void GenerateCode(int level, CGenerator generator)
{
if (!String.IsNullOrWhiteSpace(this.SwitchVar))
{
generator.IndentLine(level);
generator.OutputStream.Write(String.Format("switch ({0})", this.SwitchVar));
generator.WriteNewLine();
generator.IndentLine(level);
generator.OutputStream.Write("{");
generator.WriteNewLine();
SwitchCase defaultCase = null; // generate 'default' always as last case
foreach (SwitchCase switchCase in this.switches)
{
if (switchCase.IsDefault)
{
defaultCase = switchCase;
}
else
{
switchCase.GenerateCode(level + 1, generator);
}
}
if (defaultCase != null)
{
defaultCase.GenerateCode(level + 1, generator);
}
generator.IndentLine(level);
generator.OutputStream.Write("}");
generator.WriteNewLine();
}
}
}
}

View File

@@ -0,0 +1,82 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
namespace CCodeGeneration
{
public class VariableDeclaration : CodeElement
{
public VariableType Type { get; set; }
public string InitialValue { get; set; }
public bool IsStatic { get; set; }
public VariableDeclaration()
: base()
{
}
public VariableDeclaration(VariableType type, string initialValue = null, bool isStatic = false) :
base()
{
this.Type = type;
this.InitialValue = initialValue;
this.IsStatic = isStatic;
}
public override void GenerateCode(int level, CGenerator generator)
{
if (this.Type != null)
{
generator.IndentLine(level);
if (this.IsStatic)
{
generator.OutputStream.Write("static ");
}
// declare the variable
this.Type.GenerateCode(generator);
if (!String.IsNullOrWhiteSpace(this.InitialValue))
{
// add initialization value
generator.OutputStream.Write(" = ");
generator.WriteMultilineString(this.InitialValue, level);
}
generator.OutputStream.Write(";");
generator.WriteNewLine();
}
}
}
}

View File

@@ -1,8 +1,8 @@
/*
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* 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,
@@ -11,84 +11,63 @@
* 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.
* 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
* 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>
*
* Author: Martin Hentschel <info@cl-soft.de>
*
*/
#ifndef __LWIP_API_MSG_H__
#define __LWIP_API_MSG_H__
#include "lwip/opt.h"
#include "lwip/pbuf.h"
#include "lwip/sys.h"
namespace CCodeGeneration
{
public class VariablePrototype : CodeElement
{
public VariableType Type { get; set; }
#include "lwip/ip.h"
public VariablePrototype()
: base()
{
}
#include "lwip/udp.h"
#include "lwip/tcp.h"
public VariablePrototype(VariableType type) :
base()
{
Type = type;
}
#include "lwip/api.h"
public static VariablePrototype FromVariableDeclaration(VariableDeclaration declaration)
{
return new VariablePrototype(declaration.Type);
}
enum api_msg_type {
API_MSG_NEWCONN,
API_MSG_DELCONN,
API_MSG_BIND,
API_MSG_CONNECT,
API_MSG_DISCONNECT,
API_MSG_LISTEN,
API_MSG_ACCEPT,
public override void GenerateCode(int level, CGenerator generator)
{
if (this.Type != null)
{
generator.IndentLine(level);
API_MSG_SEND,
API_MSG_RECV,
API_MSG_WRITE,
generator.OutputStream.Write("extern ");
API_MSG_CLOSE,
API_MSG_MAX
};
// declare the variable
this.Type.GenerateCode(generator);
struct api_msg_msg {
struct netconn *conn;
enum netconn_type conntype;
union {
struct pbuf *p;
struct {
struct ip_addr *ipaddr;
u16_t port;
} bc;
struct {
void *dataptr;
u16_t len;
unsigned char copy;
} w;
sys_mbox_t mbox;
u16_t len;
} msg;
};
struct api_msg {
enum api_msg_type type;
struct api_msg_msg msg;
};
void api_msg_input(struct api_msg *msg);
void api_msg_post(struct api_msg *msg);
#endif /* __LWIP_API_MSG_H__ */
generator.OutputStream.Write(";");
generator.WriteNewLine();
}
}
}
}

View File

@@ -0,0 +1,130 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Text;
namespace CCodeGeneration
{
public enum ConstType
{
None,
Value,
Indirection,
Both
}
public class VariableType : ICloneable
{
public const string VoidString = "void";
public static readonly VariableType Void = new VariableType(null, "void");
public string Name { get; set; }
public string Type { get; set; }
public string Indirection { get; set; }
public ConstType Const { get; set; }
public string ArraySpecifier { get; set; }
public VariableType()
{
}
public VariableType(string name, string type, string indirection = null, ConstType const_ = ConstType.None, string arraySpecifier = null)
{
this.Name = name;
this.Type = type;
this.Indirection = indirection;
this.Const = const_;
this.ArraySpecifier = arraySpecifier;
}
public void GenerateCode(CGenerator generator)
{
if (!String.IsNullOrWhiteSpace(this.Type))
{
generator.OutputStream.Write(this.ToString().Trim());
}
}
public override string ToString()
{
if (!String.IsNullOrWhiteSpace(this.Type))
{
StringBuilder vt = new StringBuilder();
if ((this.Const == ConstType.Value) || (this.Const == ConstType.Both))
{
vt.Append("const ");
}
vt.Append(this.Type);
vt.Append(" ");
if (!String.IsNullOrWhiteSpace(this.Indirection))
{
vt.Append(this.Indirection);
}
if ((this.Const == ConstType.Indirection) || (this.Const == ConstType.Both))
{
vt.Append("const ");
}
if (!String.IsNullOrWhiteSpace(this.Name))
{
vt.Append(this.Name);
}
if (this.ArraySpecifier != null)
{
vt.Append("[");
vt.Append(this.ArraySpecifier);
vt.Append("]");
}
return vt.ToString().Trim();
}
return base.ToString();
}
#region ICloneable Member
public object Clone()
{
// we only have value types as members -> simply use .net base function
return this.MemberwiseClone();
}
#endregion
}
}

View File

@@ -0,0 +1,47 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LwipMibCompiler", "LwipMibCompiler\LwipMibCompiler.csproj", "{C25D5640-D999-49BD-82E0-A1975296A91E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LwipSnmpCodeGeneration", "LwipSnmpCodeGeneration\LwipSnmpCodeGeneration.csproj", "{AABCAB90-1540-45D4-A159-14831A54E9A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CCodeGeneration", "CCodeGeneration\CCodeGeneration.csproj", "{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpSnmpLib.Mib", "SharpSnmpLib\SharpSnmpLib.Mib.csproj", "{CBE20411-5DB7-487D-825D-7694267BB6F5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LwipMibViewer", "LwipMibViewer\LwipMibViewer.csproj", "{86CC0B65-7985-4017-A252-0A7A18DCAEF3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}.Release|Any CPU.Build.0 = Release|Any CPU
{86CC0B65-7985-4017-A252-0A7A18DCAEF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{86CC0B65-7985-4017-A252-0A7A18DCAEF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{86CC0B65-7985-4017-A252-0A7A18DCAEF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{86CC0B65-7985-4017-A252-0A7A18DCAEF3}.Release|Any CPU.Build.0 = Release|Any CPU
{AABCAB90-1540-45D4-A159-14831A54E9A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AABCAB90-1540-45D4-A159-14831A54E9A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AABCAB90-1540-45D4-A159-14831A54E9A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AABCAB90-1540-45D4-A159-14831A54E9A3}.Release|Any CPU.Build.0 = Release|Any CPU
{C25D5640-D999-49BD-82E0-A1975296A91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C25D5640-D999-49BD-82E0-A1975296A91E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C25D5640-D999-49BD-82E0-A1975296A91E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C25D5640-D999-49BD-82E0-A1975296A91E}.Release|Any CPU.Build.0 = Release|Any CPU
{CBE20411-5DB7-487D-825D-7694267BB6F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CBE20411-5DB7-487D-825D-7694267BB6F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CBE20411-5DB7-487D-825D-7694267BB6F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CBE20411-5DB7-487D-825D-7694267BB6F5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = LwipMibCompiler\LwipMibCompiler.csproj
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{C25D5640-D999-49BD-82E0-A1975296A91E}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>LwipMibCompiler</RootNamespace>
<AssemblyName>LwipMibCompiler</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
<WarningLevel>4</WarningLevel>
<Optimize>false</Optimize>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CCodeGeneration\CCodeGeneration.csproj">
<Project>{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}</Project>
<Name>CCodeGeneration</Name>
</ProjectReference>
<ProjectReference Include="..\LwipSnmpCodeGeneration\LwipSnmpCodeGeneration.csproj">
<Project>{AABCAB90-1540-45D4-A159-14831A54E9A3}</Project>
<Name>LwipSnmpCodeGeneration</Name>
</ProjectReference>
<ProjectReference Include="..\SharpSnmpLib\SharpSnmpLib.Mib.csproj">
<Project>{CBE20411-5DB7-487D-825D-7694267BB6F5}</Project>
<Name>SharpSnmpLib.Mib</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,480 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text.RegularExpressions;
using CCodeGeneration;
using Lextm.SharpSnmpLib.Mib;
using Lextm.SharpSnmpLib.Mib.Elements.Entities;
using Lextm.SharpSnmpLib.Mib.Elements.Types;
using LwipSnmpCodeGeneration;
namespace LwipMibCompiler
{
class Program
{
private static readonly Regex _alphaNumericRegex = new Regex("[^a-zA-Z0-9]");
static void Main(string[] args)
{
Console.WriteLine("lwIP MIB Compiler");
Console.WriteLine("");
// check args
if ((args.Length < 2) || String.IsNullOrWhiteSpace(args[0]) || String.IsNullOrWhiteSpace(args[1]))
{
PrintUsage();
return;
}
string mibFile = args[0];
if (!File.Exists(mibFile))
{
Console.WriteLine(String.Format("Unable to find file '{0}'!", mibFile));
}
string destFile = args[1];
string destHeaderFile;
if (Directory.Exists(destFile))
{
// only directory passed -> create dest filename from mib filename
string mibFileName = Path.GetFileNameWithoutExtension(mibFile).ToLowerInvariant();
destFile = Path.Combine(destFile, mibFileName + ".c");
}
string destFileExt = Path.GetExtension(destFile);
if (!String.IsNullOrEmpty(destFileExt))
{
destHeaderFile = destFile.Substring(0, destFile.Length - destFileExt.Length);
}
else
{
destHeaderFile = destFile;
}
destHeaderFile += ".h";
for (int i=2; i<args.Length; i++)
{
if (!String.IsNullOrWhiteSpace(args[i]) && Directory.Exists(args[i]))
{
MibTypesResolver.RegisterResolver(new FileSystemMibResolver(args[i], true));
}
}
// read and resolve MIB
Console.WriteLine(" Reading MIB file...");
MibDocument md = new MibDocument(mibFile);
MibTypesResolver.ResolveTypes(md.Modules[0]);
MibTree mt = new MibTree(md.Modules[0] as MibModule);
if (mt.Root.Count == 0)
{
Console.WriteLine("No root element found inside MIB!");
return;
}
MibCFile generatedFile = new MibCFile();
MibHeaderFile generatedHeaderFile = new MibHeaderFile();
foreach (MibTreeNode mibTreeNode in mt.Root)
{
// create LWIP object tree from MIB structure
Console.WriteLine(" Creating lwIP object tree " + mibTreeNode.Entity.Name);
SnmpMib snmpMib = new SnmpMib();
snmpMib.Oid = mibTreeNode.Entity.Value;
snmpMib.BaseOid = MibTypesResolver.ResolveOid(mibTreeNode.Entity).GetOidValues();
snmpMib.Name = mibTreeNode.Entity.Name;
ProcessMibTreeNode(mibTreeNode, snmpMib);
// let the tree transform itself depending on node structure
snmpMib.Analyze();
if (snmpMib.ChildNodes.Count != 0)
{
// generate code from LWIP object tree
Console.WriteLine(" Generating code " + snmpMib.Name);
snmpMib.Generate(generatedFile, generatedHeaderFile);
}
}
string preservedCode = MibCFile.GetPreservedCode(destFile);
if (!string.IsNullOrEmpty(preservedCode))
{
generatedFile.PreservedCode.Add(new PlainText(preservedCode));
}
else
{
generatedFile.PreservedCode.AddRange(generatedFile.Implementation);
}
generatedFile.Implementation.Clear();
using (StreamWriter fileWriter = new StreamWriter(destHeaderFile))
{
CGenerator cGenerator = new CGenerator(fileWriter, destHeaderFile, 3, " ", Environment.NewLine);
generatedHeaderFile.Save(cGenerator);
}
using (StreamWriter fileWriter = new StreamWriter(destFile))
{
CGenerator cGenerator = new CGenerator(fileWriter, destFile, 3, " ", Environment.NewLine);
generatedFile.Save(cGenerator);
}
Console.WriteLine(" Done");
}
private static void PrintUsage()
{
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
string appName = Path.GetFileName(codeBase);
Console.WriteLine("Usage:");
Console.WriteLine(String.Format(" {0} <source MIB file> <dest C file> [<search path 1 for referred MIB's> <search path 2 for referred MIB's> ...]", appName));
Console.WriteLine("");
Console.WriteLine(" <source MIB file>");
Console.WriteLine(" Path and filename of MIB file to convert.");
Console.WriteLine("");
Console.WriteLine(" <dest C file>");
Console.WriteLine(" Destination path and file. If a path is passed only, filename is auto");
Console.WriteLine(" generated from MIB file name.");
Console.WriteLine("");
Console.WriteLine(" <search path X for referred MIB's>");
Console.WriteLine(" It's important to provide all referred MIB's in order to correctly ");
Console.WriteLine(" resolve all used types.");
Console.WriteLine("");
}
#region Generation of LWIP Object Tree
private static void ProcessMibTreeNode(MibTreeNode mibTreeNode, SnmpTreeNode assignedSnmpNode)
{
foreach (MibTreeNode mtn in mibTreeNode.ChildNodes)
{
// in theory container nodes may also be scalars or tables at the same time (for now only process real containers)
if (mtn.NodeType == MibTreeNodeType.Container)
{
SnmpTreeNode snmpTreeNode = GenerateSnmpTreeNode(mtn, assignedSnmpNode);
assignedSnmpNode.ChildNodes.Add(snmpTreeNode);
ProcessMibTreeNode(mtn, snmpTreeNode);
}
else if ((mtn.NodeType & MibTreeNodeType.Scalar) != 0)
{
SnmpScalarNode snmpScalarNode = GenerateSnmpScalarNode(mtn, assignedSnmpNode);
if (snmpScalarNode != null)
{
assignedSnmpNode.ChildNodes.Add(snmpScalarNode);
}
}
else if ((mtn.NodeType & MibTreeNodeType.Table) != 0)
{
SnmpTableNode snmpTableNode = GenerateSnmpTableNode(mtn, assignedSnmpNode);
if (snmpTableNode != null)
{
assignedSnmpNode.ChildNodes.Add(snmpTableNode);
}
}
}
}
private static SnmpTreeNode GenerateSnmpTreeNode(MibTreeNode mibTreeNode, SnmpTreeNode parentNode)
{
SnmpTreeNode result = new SnmpTreeNode(parentNode);
result.Name = _alphaNumericRegex.Replace (mibTreeNode.Entity.Name, "");
result.Oid = mibTreeNode.Entity.Value;
result.FullOid = MibTypesResolver.ResolveOid(mibTreeNode.Entity).GetOidString();
return result;
}
private static SnmpScalarNode GenerateSnmpScalarNode(MibTreeNode mibTreeNode, SnmpTreeNode parentNode, bool ignoreAccessibleFlag = false)
{
ObjectType ote = mibTreeNode.Entity as ObjectType;
if (ote != null)
{
return GenerateSnmpScalarNode(ote, parentNode, ignoreAccessibleFlag);
}
return null;
}
private static SnmpScalarNode GenerateSnmpScalarNode(ObjectType ote, SnmpTreeNode parentNode, bool ignoreAccessibleFlag = false)
{
SnmpScalarNode result;
ITypeAssignment mibType = ote.BaseType;
IntegerType it = (mibType as IntegerType);
if (it != null)
{
if (ote.ReferredType.Name == Symbol.TruthValue.ToString())
{
result = new SnmpScalarNodeTruthValue(parentNode);
}
else if ((it.Type == IntegerType.Types.Integer) || (it.Type == IntegerType.Types.Integer32))
{
result = new SnmpScalarNodeInt(parentNode);
}
else
{
Console.WriteLine(String.Format("Unsupported IntegerType '{0}'!", it.Type));
return null;
}
if (it.IsEnumeration)
{
result.Restrictions.AddRange(CreateRestrictions(it.Enumeration));
}
else
{
result.Restrictions.AddRange(CreateRestrictions(it.Ranges));
}
}
else
{
UnsignedType ut = (mibType as UnsignedType);
if (ut != null)
{
if ((ut.Type == UnsignedType.Types.Unsigned32) ||
(ut.Type == UnsignedType.Types.Gauge32))
{
result = new SnmpScalarNodeUint(SnmpDataType.Gauge, parentNode);
}
else if (ut.Type == UnsignedType.Types.Counter32)
{
result = new SnmpScalarNodeUint(SnmpDataType.Counter, parentNode);
}
else if (ut.Type == UnsignedType.Types.TimeTicks)
{
result = new SnmpScalarNodeUint(SnmpDataType.TimeTicks, parentNode);
}
else if (ut.Type == UnsignedType.Types.Counter64)
{
result = new SnmpScalarNodeCounter64(parentNode);
if ((ut.Ranges != null) && (ut.Ranges.Count > 0))
{
Console.WriteLine(String.Format("Generation of ranges is not supported for Counter64 type!"));
return null;
}
}
else
{
Console.WriteLine(String.Format("Unsupported UnsignedType '{0}'!", ut.Type));
return null;
}
result.Restrictions.AddRange(CreateRestrictions(ut.Ranges));
}
else if (mibType is IpAddressType)
{
result = new SnmpScalarNodeOctetString(SnmpDataType.IpAddress, parentNode);
result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size));
}
else if (mibType is OpaqueType)
{
result = new SnmpScalarNodeOctetString(SnmpDataType.Opaque, parentNode);
result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size));
}
else if (mibType is OctetStringType)
{
result = new SnmpScalarNodeOctetString(SnmpDataType.OctetString, parentNode);
result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size));
}
else if (mibType is ObjectIdentifierType)
{
result = new SnmpScalarNodeObjectIdentifier(parentNode);
}
else if (mibType is BitsType)
{
result = new SnmpScalarNodeBits(parentNode, (uint)((mibType as BitsType).Map.GetHighestValue() + 1));
result.Restrictions.AddRange(CreateRestrictions(mibType as BitsType));
}
else
{
TypeAssignment ta = mibType as TypeAssignment;
if (ta != null)
{
Console.WriteLine(String.Format("Unsupported BaseType: Module='{0}', Name='{1}', Type='{2}'!", ta.Module.Name, ta.Name, ta.Type));
}
else
{
Console.WriteLine(String.Format("Unsupported BaseType: Module='{0}', Name='{1}'!", mibType.Module, mibType.Name));
}
return null;
}
}
result.Name = _alphaNumericRegex.Replace(ote.Name, "");
result.Oid = ote.Value;
if (ote.Access == MaxAccess.readWrite)
{
result.AccessMode = SnmpAccessMode.ReadWrite;
}
else if (ote.Access == MaxAccess.readOnly)
{
result.AccessMode = SnmpAccessMode.ReadOnly;
}
else if (ote.Access == MaxAccess.readCreate)
{
result.AccessMode = SnmpAccessMode.ReadOnly;
}
else if (ignoreAccessibleFlag && (ote.Access == MaxAccess.notAccessible))
{
result.AccessMode = SnmpAccessMode.NotAccessible;
}
else
{
// not accessible or unsupported accress type
return null;
}
return result;
}
private static IEnumerable<IRestriction> CreateRestrictions(ValueRanges ranges)
{
List<IRestriction> result = new List<IRestriction>();
if (ranges != null)
{
foreach (ValueRange range in ranges)
{
if (!range.End.HasValue)
{
result.Add(new IsEqualRestriction(range.Start));
}
else
{
result.Add(new IsInRangeRestriction(range.Start, range.End.Value));
}
}
}
return result;
}
private static IEnumerable<IRestriction> CreateRestrictions(ValueMap map)
{
if ((map != null) && (map.Count > 0))
{
return CreateRestrictions(map.GetContinousRanges());
}
return new List<IRestriction>();
}
private static IEnumerable<IRestriction> CreateRestrictions(BitsType bt)
{
List<IRestriction> result = new List<IRestriction>();
if ((bt != null) && (bt.Map != null))
{
result.Add(new BitMaskRestriction(bt.Map.GetBitMask()));
}
return result;
}
private static SnmpTableNode GenerateSnmpTableNode(MibTreeNode mibTreeNode, SnmpTreeNode parentNode)
{
SnmpTableNode result = new SnmpTableNode(parentNode);
result.Name = mibTreeNode.Entity.Name;
result.Oid = mibTreeNode.Entity.Value;
// expect exactly one row entry
if ((mibTreeNode.ChildNodes.Count != 1) || ((mibTreeNode.ChildNodes[0].NodeType & MibTreeNodeType.TableRow) == 0) || (mibTreeNode.ChildNodes[0].Entity.Value != 1))
{
Console.WriteLine("Found table with unsupported properties! Table needs exactly one (fixed) TableRow with OID=1 ! (" + mibTreeNode.Entity.Name + ")");
return null;
}
MibTreeNode rowNode = mibTreeNode.ChildNodes[0];
ObjectType rot = rowNode.Entity as ObjectType;
if (rot != null)
{
if (!String.IsNullOrWhiteSpace(rot.Augments))
{
result.AugmentedTableRow = rot.Augments;
// the indeces from another table shall be used because this table is only an extension of it
rot = MibTypesResolver.ResolveDeclaration(rot.Module, rot.Augments) as ObjectType;
}
if (rot.Indices != null)
{
foreach (string index in rot.Indices)
{
ObjectType indexEntity = MibTypesResolver.ResolveDeclaration(rot.Module, index) as ObjectType;
if (indexEntity == null)
{
Console.WriteLine(String.Format("Could not resolve index '{0}' for table '{1}'! Table omitted!", index, result.Name));
return null;
}
result.IndexNodes.Add(GenerateSnmpScalarNode(indexEntity, parentNode, ignoreAccessibleFlag: true));
}
}
}
if (result.IndexNodes.Count == 0)
{
// a table cannot be used without index
Console.WriteLine("Found table without any index column ! (" + mibTreeNode.Entity.Name + ")");
return null;
}
// add child nodes
foreach (MibTreeNode cellNode in rowNode.ChildNodes)
{
SnmpScalarNode ssn = GenerateSnmpScalarNode(cellNode, parentNode);
if (ssn != null)
{
result.CellNodes.Add(ssn);
}
}
return result;
}
#endregion
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die mit einer Assembly verknüpft sind.
[assembly: AssemblyTitle("ConsoleApplication28")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ConsoleApplication28")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("0abf7541-6a96-43cd-9e24-462e074b2c96")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
// übernehmen, indem Sie "*" eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

View File

@@ -0,0 +1,166 @@
namespace LwipMibViewer
{
partial class FormMain
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
this.treeMib = new System.Windows.Forms.TreeView();
this.imagelistTreeNodeImages = new System.Windows.Forms.ImageList(this.components);
this.splitContainerMain = new System.Windows.Forms.SplitContainer();
this.listviewNodeDetails = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.toolStripMain = new System.Windows.Forms.ToolStrip();
this.toolbuttonOpenMib = new System.Windows.Forms.ToolStripButton();
this.dialogOpenMib = new System.Windows.Forms.OpenFileDialog();
((System.ComponentModel.ISupportInitialize)(this.splitContainerMain)).BeginInit();
this.splitContainerMain.Panel1.SuspendLayout();
this.splitContainerMain.Panel2.SuspendLayout();
this.splitContainerMain.SuspendLayout();
this.toolStripMain.SuspendLayout();
this.SuspendLayout();
//
// treeMib
//
this.treeMib.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeMib.ImageIndex = 0;
this.treeMib.ImageList = this.imagelistTreeNodeImages;
this.treeMib.Location = new System.Drawing.Point(0, 0);
this.treeMib.Name = "treeMib";
this.treeMib.SelectedImageIndex = 0;
this.treeMib.Size = new System.Drawing.Size(1028, 418);
this.treeMib.TabIndex = 0;
this.treeMib.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeMib_AfterSelect);
//
// imagelistTreeNodeImages
//
this.imagelistTreeNodeImages.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imagelistTreeNodeImages.ImageStream")));
this.imagelistTreeNodeImages.TransparentColor = System.Drawing.Color.Transparent;
this.imagelistTreeNodeImages.Images.SetKeyName(0, "ntimgContainer");
this.imagelistTreeNodeImages.Images.SetKeyName(1, "ntimgTable");
this.imagelistTreeNodeImages.Images.SetKeyName(2, "ntimgRow");
this.imagelistTreeNodeImages.Images.SetKeyName(3, "ntimgColumn");
this.imagelistTreeNodeImages.Images.SetKeyName(4, "ntimgScalar");
this.imagelistTreeNodeImages.Images.SetKeyName(5, "ntimgUnknown");
//
// splitContainerMain
//
this.splitContainerMain.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainerMain.Location = new System.Drawing.Point(0, 25);
this.splitContainerMain.Name = "splitContainerMain";
this.splitContainerMain.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainerMain.Panel1
//
this.splitContainerMain.Panel1.Controls.Add(this.treeMib);
//
// splitContainerMain.Panel2
//
this.splitContainerMain.Panel2.Controls.Add(this.listviewNodeDetails);
this.splitContainerMain.Size = new System.Drawing.Size(1028, 625);
this.splitContainerMain.SplitterDistance = 418;
this.splitContainerMain.TabIndex = 1;
//
// listviewNodeDetails
//
this.listviewNodeDetails.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2});
this.listviewNodeDetails.Dock = System.Windows.Forms.DockStyle.Fill;
this.listviewNodeDetails.FullRowSelect = true;
this.listviewNodeDetails.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.listviewNodeDetails.Location = new System.Drawing.Point(0, 0);
this.listviewNodeDetails.Name = "listviewNodeDetails";
this.listviewNodeDetails.Size = new System.Drawing.Size(1028, 203);
this.listviewNodeDetails.TabIndex = 0;
this.listviewNodeDetails.UseCompatibleStateImageBehavior = false;
this.listviewNodeDetails.View = System.Windows.Forms.View.Details;
//
// columnHeader1
//
this.columnHeader1.Text = "";
this.columnHeader1.Width = 150;
//
// columnHeader2
//
this.columnHeader2.Text = "";
this.columnHeader2.Width = 777;
//
// toolStripMain
//
this.toolStripMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolbuttonOpenMib});
this.toolStripMain.Location = new System.Drawing.Point(0, 0);
this.toolStripMain.Name = "toolStripMain";
this.toolStripMain.Size = new System.Drawing.Size(1028, 25);
this.toolStripMain.TabIndex = 2;
//
// toolbuttonOpenMib
//
this.toolbuttonOpenMib.Image = ((System.Drawing.Image)(resources.GetObject("toolbuttonOpenMib.Image")));
this.toolbuttonOpenMib.Name = "toolbuttonOpenMib";
this.toolbuttonOpenMib.Size = new System.Drawing.Size(65, 22);
this.toolbuttonOpenMib.Text = "Open...";
this.toolbuttonOpenMib.Click += new System.EventHandler(this.toolbuttonOpenMib_Click);
//
// FormMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1028, 650);
this.Controls.Add(this.splitContainerMain);
this.Controls.Add(this.toolStripMain);
this.Name = "FormMain";
this.Text = "MIB Viewer";
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.splitContainerMain.Panel1.ResumeLayout(false);
this.splitContainerMain.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainerMain)).EndInit();
this.splitContainerMain.ResumeLayout(false);
this.toolStripMain.ResumeLayout(false);
this.toolStripMain.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TreeView treeMib;
private System.Windows.Forms.SplitContainer splitContainerMain;
private System.Windows.Forms.ListView listviewNodeDetails;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ImageList imagelistTreeNodeImages;
private System.Windows.Forms.ToolStrip toolStripMain;
private System.Windows.Forms.ToolStripButton toolbuttonOpenMib;
private System.Windows.Forms.OpenFileDialog dialogOpenMib;
}
}

View File

@@ -0,0 +1,217 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System.Windows.Forms;
using Lextm.SharpSnmpLib.Mib;
using Lextm.SharpSnmpLib.Mib.Elements;
using Lextm.SharpSnmpLib.Mib.Elements.Types;
using Lextm.SharpSnmpLib.Mib.Elements.Entities;
using System.IO;
namespace LwipMibViewer
{
public partial class FormMain : Form
{
readonly ListViewGroup listviewgroupAbstract;
readonly ListViewGroup listviewgroupElement;
readonly ListViewGroup listviewgroupBaseType;
readonly ListViewGroup listviewgroupTypeChain;
public FormMain()
{
this.Font = SystemInformation.MenuFont;
InitializeComponent();
this.listviewgroupAbstract = new ListViewGroup("Abstract", System.Windows.Forms.HorizontalAlignment.Left);
this.listviewgroupElement = new ListViewGroup("Element Properties", System.Windows.Forms.HorizontalAlignment.Left);
this.listviewgroupBaseType = new ListViewGroup("Element Base Type", System.Windows.Forms.HorizontalAlignment.Left);
this.listviewgroupTypeChain = new ListViewGroup("Element Type Chain", System.Windows.Forms.HorizontalAlignment.Left);
this.listviewNodeDetails.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
listviewgroupAbstract,
listviewgroupElement,
listviewgroupBaseType,
listviewgroupTypeChain});
try
{
DirectoryInfo dirInfo = new DirectoryInfo(Path.GetDirectoryName(Application.ExecutablePath));
if (dirInfo != null)
{
dirInfo = dirInfo.Parent;
if (dirInfo != null)
{
dirInfo = dirInfo.Parent;
if (dirInfo != null)
{
dirInfo = new DirectoryInfo(Path.Combine(dirInfo.FullName, "Mibs"));
if (dirInfo.Exists)
{
MibTypesResolver.RegisterResolver(new FileSystemMibResolver(dirInfo.FullName, true));
}
}
}
}
}
catch
{ }
}
#region GUI Event Handler
private void toolbuttonOpenMib_Click(object sender, System.EventArgs e)
{
if (this.dialogOpenMib.ShowDialog() == DialogResult.OK)
{
OpenMib(this.dialogOpenMib.FileName);
}
}
private void treeMib_AfterSelect(object sender, TreeViewEventArgs e)
{
listviewNodeDetails.Items.Clear();
if (e.Node != null)
{
MibTreeNode mtn = e.Node.Tag as MibTreeNode;
if (mtn != null)
{
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Abstract", mtn.NodeType.ToString() }, this.listviewgroupAbstract));
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Module", (mtn.Entity.Module != null) ? mtn.Entity.Module.Name : "" }, this.listviewgroupElement));
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Type", mtn.Entity.GetType().Name }, this.listviewgroupElement));
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Name", mtn.Entity.Name }, this.listviewgroupElement));
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Description", mtn.Entity.Description }, this.listviewgroupElement));
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "OID", mtn.Entity.Value.ToString() }, this.listviewgroupElement));
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Full OID", MibTypesResolver.ResolveOid(mtn.Entity).GetOidString() }, this.listviewgroupElement));
if (mtn.Entity is ObjectType)
{
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Access", (mtn.Entity as ObjectType).Access.ToString() }, this.listviewgroupElement));
}
ITypeReferrer tr = mtn.Entity as ITypeReferrer;
if (tr != null)
{
ShowTypeDetails(listviewNodeDetails, this.listviewgroupBaseType, tr.BaseType);
ShowTypeChain(listviewNodeDetails, tr.ReferredType);
}
}
}
}
#endregion
#region Methods
private void OpenMib(string file)
{
try
{
MibDocument md = new MibDocument(file);
MibTypesResolver.ResolveTypes(md.Modules[0]);
this.treeMib.Nodes.Clear();
this.listviewNodeDetails.Items.Clear();
MibTree mt = new MibTree(md.Modules[0] as MibModule);
foreach (MibTreeNode mibTreeNode in mt.Root)
{
AddNode(mibTreeNode, this.treeMib.Nodes);
foreach (TreeNode node in this.treeMib.Nodes)
{
node.Expand();
}
}
}
catch
{
}
}
private void AddNode(MibTreeNode mibNode, TreeNodeCollection parentNodes)
{
int imgIndex = 5; //unknown
if ((mibNode.NodeType & MibTreeNodeType.Table) != 0)
{
imgIndex = 1;
}
else if ((mibNode.NodeType & MibTreeNodeType.TableRow) != 0)
{
imgIndex = 2;
}
else if ((mibNode.NodeType & MibTreeNodeType.TableCell) != 0)
{
imgIndex = 3;
}
else if ((mibNode.NodeType & MibTreeNodeType.Scalar) != 0)
{
imgIndex = 4;
}
else if ((mibNode.NodeType & MibTreeNodeType.Container) != 0)
{
imgIndex = 0;
}
TreeNode newNode = new TreeNode(mibNode.Entity.Name, imgIndex, imgIndex);
newNode.Tag = mibNode;
parentNodes.Add(newNode);
foreach (MibTreeNode child in mibNode.ChildNodes)
{
AddNode(child, newNode.Nodes);
}
}
private void ShowTypeChain(ListView lv, ITypeAssignment type)
{
ShowTypeDetails(lv, this.listviewgroupTypeChain, type);
ITypeReferrer tr = type as ITypeReferrer;
if ((tr != null) && (tr.ReferredType != null))
{
lv.Items.Add(new ListViewItem(new string[] { " >>>", "" }, this.listviewgroupTypeChain));
ShowTypeChain(listviewNodeDetails, tr.ReferredType);
}
}
private void ShowTypeDetails(ListView lv, ListViewGroup lvg, ITypeAssignment type)
{
lv.Items.Add(new ListViewItem(new string[] { "Module", (type.Module != null) ? type.Module.Name : "" }, lvg));
lv.Items.Add(new ListViewItem(new string[] { "Type", type.GetType().Name }, lvg));
lv.Items.Add(new ListViewItem(new string[] { "Name", type.Name }, lvg));
}
#endregion
}
}

View File

@@ -0,0 +1,298 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imagelistTreeNodeImages.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="imagelistTreeNodeImages.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABo
IQAAAk1TRnQBSQFMAgEBBgEAARABAAEQAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIBIAAwQBBQMWAR4DIgEyAzEBTwJGAUQBhwMvAUsDHgErAxsBJgMYASIDFQEd
AxIBGAMNARIDCgENAwcBCQMEAQUDAQECAwQBBQMWAR4DIgEyAzEBTgJGAUQBhwMvAUsDHgErAxsBJgMb
ASYDIQExAyEBMAMdASoDGwEmAxgBIQMLAQ8DAQECgAADAgEDAwwBEAMrAUMCRgFEAYIC/wHwAf8CRgFE
AYIDKgFAAw8BFAMNAREDCwEPAwkBDAMHAQoDBQEHAwQBBQMCAQMDAAEBAwIBAwMLAQ8DKwFDAkYBRAGC
Av8B8AH/AkYBRAGCAyoBQAMOARMDEgEZAT0COwFpAVwBRQFCAawBZwE+AToBxAFaAUUBQwGqATwBOwE6
AWYDEAEWAwABAYQAAx4BKwJEAUIBewL/AfAB/wLpAdoD/wHxAf8CRAFCAXsDHgErJAADHgErAkQBQgF7
Av8B8AH/AukB2gP/AfEB/wJEAUIBewMeASsBLgItAUcBdwFHATwByQG7AVQBPQHxA+4B/wG7AVMBPAHx
AXcBRgE8AckBLgItAUeEAAMdASoCRAFCAXcC/wHwAf8B6wHdAbEB/wH3AcEBNwH/Ae0B3wGzA/8B8gH/
AkQBQgF3Ax0BKhwAAx0BKgJEAUIBdwL/AfAB/wLpAdoB/wLqAdwB/wLrAd4D/wHyAf8CRAFCAXcBZAFJ
AUIBrwG2AVkBQQHxAc0BVAEyAf8BvQF5AWIB/wHFAVABLgH/AbEBUQE1AfEBXAFIAUQBn4QAAkMBQQF2
Av8B8AH/AukB2gH/AecBqwEhAf8B5wGrASEB/wHnAasBIQH/AeoB2wGwA/8B9AH/AkMBQQF2Ax0BKhgA
AkMBQQF2Av8B8AH/AukB2gH/AuoB3AH/AusB3gH/AuwB3wH/Au0B4QP/AfQB/wGAAUQBMQHaAc4BcAFN
AfwBugFMASoB/wPSAf8BvgGLAXgB/wG7AVIBMgH8AW8BSQE/AbqEAAMdASkCQwFBAXQC/wHxAf8B5wHX
AasB/wHXAZYBDAH/AdcBlgEMAf8B1wGWAQwB/wHoAdgBrgP/AfUB/wJDAUEBdAMdASkUAAMdASkCQwFB
AXQC/wHxAf8C6wHeAf8C7AHfAf8C7QHhAf8C7gHjAf8C7wHlAf8BzQF5AV4B/wHOAXcBWAH3AbwBVAEy
Af8BtAFMASoB/wPmAf8BtwFlAUsB8AFdAUkBRAGdiAADHQEpAkIBQQFyAv8B8gH/AeUB1AGpAf8BzQGJ
AQAB/wHNAYkBAAH/Ac0BiQEAAf8B6AHXAa8D/wH3Af8CQgFBAXIDHAEoFAADHQEpAkIBQQFyAv8B8gH/
Au0B4QH/Au4B4wH/Au8B5QH/AvAB5wH/AeABuwGqAf8BzgFpAUgB/wHjAcsBwQH5BP8B3gHHAb0B9QF+
AU8BQgHEAi0BLAFFjAADHAEoAkEBQAFxAv8B9AH/AecB1gGsAf8B0QGOAQQB/wHRAY4BBAH/AdEBjgEE
Af8B7AHbAbMD/wH4Af8CQQFAAXEDHAEoFAADHAEoAkEBQAFxAv8B9AH/Au8B5QH/AvAB5wH/AvEB6QH/
AvMB6gH/AeQBvgGsAf8B1AGBAWIB/wGGAUoBNAHXAWYBTQFEAaoCLQEsAUWUAAMcAScCQQFAAW8C/wH1
Af8B7AHcAbMB/wHfAaEBFwH/Ad8BoQEXAf8B3wGhARcB/wHxAeIBuwP/AfoB/wJBAUABbwMcAScUAAMc
AScCQQFAAW8C/wH1Af8C8QHpAf8C8wHqAf8C9AHsAf8C9QHuAf8C9gHwA/8B+gH/AkEBQAFvAxwBJ5gA
AxwBJwJAAT8BbQL/AfcB/wHyAeMBuwH/AfABuAEuAf8B8AG4AS4B/wHwAbgBLgH/AvgB9AP/AfsB/wJA
AT8BbQMcAScUAAMcAScCQAE/AW0C/wH3Af8C9AHsAf8C9QHuAf8C9gHwAf8C9wHyAf8C+AH0A/8B+wH/
AkABPwFtAxwBJ5gAAxsBJgJAAT8BbAL/AfgB/wH3AeoBwwH/Af0ByQE/Af8B+QHsAccB/wL7AfcB/wL8
AfkD/wH8Af8CQAE/AWwDGwEmFAADGwEmAkABPwFsAv8B+AH/AvYB8AH/AvcB8gH/AvgB9AH/AvsB9wH/
AvwB+QP/AfwB/wJAAT8BbAMbASaYAAMbASYCPwE+AWsC/wH6Af8C+AH0Af8C+wH3Af8C3wHVAf8CyQG5
Af8C4AHWA/8B/gH/Aj8BPgFrGAADGwEmAj8BPgFrAv8B+gH/AvgB9AH/AvsB9wH/At8B1QH/AskBuQH/
AuAB1gP/Af4B/wI/AT4Ba5wAAxoBJQI/AT0BaQL/AfsB/wL8AfkB/wK8AawB/wQAArwBrAP/Af4B/wI/
AT0BaRwAAxoBJQI/AT0BaQL/AfsB/wL8AfkB/wK8AawB/wQAArwBrAP/Af4B/wI/AT0BaaAAAxoBJQI+
AT0BaAL/AfwB/wLLAcEB/wKgAZAB/wLLAcED/wH+Af8CPgE9AWggAAMaASUCPgE9AWgC/wH8Af8CywHB
Af8CoAGQAf8CywHBA/8B/gH/Aj4BPQFopAADGgElAj4BPQFnAv8B/gP/Af4D/wH+Bf8CPgE9AWckAAMa
ASUCPgE9AWcC/wH+A/8B/gP/Af4F/wI+AT0BZ6gAAxoBJAI+AT0BZgI+AT0BZgI+AT0BZgI+AT0BZgMx
AU0oAAMaASQCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYDMQFNlAADIQEwAUABRgFIAXwBQwFOAVIBkgMF
AQccAAMHAQkDEAEWAxMBGgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEa
AxABFgMHAQkDBwEJAxABFgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEa
AxMBGgMQARYDBwEJAwcBCQMQARYDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEa
AxMBGgMTARoDEAEWAwcBCQwAAjIBMwFQAUMBUQFXAZkBRQFkAXQBwAFYAYsBogHgATwBWAFqAcEDEwEa
AwUBBxgAAjwBOwFpAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGH
AkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAjwBOwFpAjkBNAFpAkABNwGHAkABNwGH
AkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGH
AkABNwGHAkABNwGHAjkBNAFpAjwBOwFpAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGH
AkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAjwBOwFpAw0BEQMa
ASQBRAFNAVEBmAE8AYkBrAHyAWcBrwHTAfoBggHLAewB/wGFAc4B7gH/ARUBWwGCAe8BOgFXAWYBxAE6
AVcBZgHEAT4BWgFqAb4BPgFaAWoBvgE+AVoBagG+AUQBTQFRAZgDGgEkAw0BEQJGAUMBgQL5AekB/wLz
AeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLz
AeIB/wLzAeIB/wL5AekB/wJGAUMBgQJDAToBgQL5AekB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLz
AeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wL5AekB/wJDAToBgQJG
AUMBgQL5AekB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLz
AeIB/wLzAeIB/wLzAeIB/wLzAeIB/wL5AekB/wJGAUMBgQMHAQkDDQESAUIBWwFmAbIBiAHQAe8B/wF9
AcoB6QH/AX0BygHpAf8BhwHQAe8B/wEkAXsBqQH/AX0BvAHbAf8BfQG8AdsB/wGNAdEB8wH/AY0B0QHz
Af8BkAHUAfUB/wFCAVsBZgGyATACMQFNAwcBCQJEAUMBegL0AeQC/wHMAUIB/wH+AcsBQQH/AewB0gGG
Af8C2gHJAf8C2AHHAf8C1gHFAf8C1AHDAf8C0wHCAf8C0QHAAf8CzwG+Af8CzgG9Af8CzQG8Af8C9AHk
Af8CRAFDAXoCRgE+AXoC9AHkAv8BzAFDAf8B/gHLAUIB/wHsAdIBhgH/AtoByQH/AtgBxwH/AtYBxQH/
AtQBwwH/AtMBwgH/AtEBwAH/As8BvgH/As4BvQH/As0BvAH/AvQB5AH/AkYBPgF6AkQBQwF6AvQB5AL/
AcwBQgH/Af4BywFBAf8B7AHSAYYB/wLaAckB/wLYAccB/wHnAWEBPwH/AecBYQE/Af8B5wFhAT8B/wHn
AWEBPwH/As8BvgH/As4BvQH/As0BvAH/AvQB5AH/AkQBQwF6CAABQwFXAWABpAGKAdMB8AH/AYIBzQHr
Af8BggHNAesB/wGKAdMB8AH/ASQBfAGrAf8BegG5AdgB/wF6AbkB2AH/AYoBzgHwAf8BigHOAfAB/wGP
AdMB9AH/AfQBtgEsAf8BQwFXAWABpAQAAkQBQgF3AvUB5gL/AcwBQgL/Ae4BiAH/AewB0gGGAf8C9QHu
Af8C9QHuAf8C1gHFAf8C9QHuAf8C9QHuAf8C0QHAAf8C9QHuAf8C9QHuAf8CzQG8Af8C9QHmAf8CRAFC
AXcCRwE/AXcC9QHmAv8BzAFDAv8B7gGIAf8B7AHSAYYB/wL1Ae4B/wL1Ae4B/wLWAcUB/wL1Ae4B/wL1
Ae4B/wLRAcAB/wL1Ae4B/wL1Ae4B/wLNAbwB/wL1AeYB/wJHAT8BdwJEAUIBdwL1AeYC/wHMAUIC/wHu
AYgB/wHsAdIBhgH/AvUB7gH/AvUB7gH/AdkBWAE2Af8B8gHJAbgB/wHyAckBuAH/AdkBWAE2Af8C9QHu
Af8C9QHuAf8CzQG8Af8C9QHmAf8CRAFCAXcIAAFDAVUBXgGeAY4B1gHyAf8BhwHQAe0B/wGHAdAB7QH/
AY4B1gHyAf8BJgGCAa8B/wF7AboB2AH/AXsBugHYAf8BiwHPAfEB/wGLAc8B8QH/AZEB1QH1Af8B/gHJ
AT8B/wFDAVUBXgGeBAACQwFBAXUC9gHpAv8BzAFCAf8B/gHLAUEB/wHsAdIBhgH/AtoByQH/AtgBxwH/
AtwBzAH/AtQBwwH/AtMBwgH/AtgByAH/As8BvgH/As4BvQH/As0BvAH/AvYB6QH/AkMBQQF1AkcBPwF1
AvYB6QL/AcwBQwH/Af4BywFCAf8B7AHSAYYB/wLaAckB/wLYAccB/wLcAcwB/wLUAcMB/wLTAcIB/wLY
AcgB/wLPAb4B/wLOAb0B/wLNAbwB/wL2AekB/wJHAT8BdQJDAUEBdQL2AekC/wHMAUIB/wH+AcsBQQH/
AewB0gGGAf8C2gHJAf8C2AHHAf8ByAFPAS0B/wHeAbYBngH/Ad4BtQGdAf8ByAFPAS0B/wLPAb4B/wLO
Ab0B/wLNAbwB/wL2AekB/wJDAUEBdQgAAUQBVQFdAZsBkgHaAfQB/wGLAdQB8AH/AYsB1AHwAf8BkgHa
AfQB/wEpAYUBswH/AX0BvAHaAf8BfQG8AdoB/wGNAdEB8wH/AY0B0QHzAf8BkwHXAfYB/wLrAd0B/wFE
AVUBXQGbBAACQgFBAXMC9wHrAv8BzAFCAv8B7gGIAf8B7AHSAYYB/wL3AfEB/wL3AfEB/wLWAcUB/wL3
AfEB/wL3AfEB/wLRAcAB/wL3AfEB/wL3AfEB/wLNAbwB/wL3AesB/wJCAUEBcwJHAT8BcwL3AesC/wHM
AUMC/wHuAYgB/wHsAdIBhgH/AvcB8QH/AvcB8QH/AtYBxQH/AvcB8QH/AvcB8QH/AtEBwAH/AvcB8QH/
AvcB8QH/As0BvAH/AvcB6wH/AkcBPwFzAkIBQQFzAvcB6wL/AcwBQgL/Ae4BiAH/AewB0gGGAf8C9wHx
Af8C9wHxAf8BuAFHASUB/wHzAcsBuQH/AfMBywG5Af8BuAFHASUB/wL3AfEB/wL3AfEB/wLNAbwB/wL3
AesB/wJCAUEBcwgAAUQBUwFbApcB3gH2Af8BkAHYAfIB/wGQAdgB8gH/AZcB3gH2Af8BKwGJAbcB/wGA
Ab0B3AH/AYABvQHcAf8BjwHTAfUB/wGPAdMB9QH/AZUB2QH4Af8C9QHuAf8BRAFTAVsBlwQAAkIBQQFy
AvgB7gL/AcwBQgH/Af4BywFBAf8B7AHSAYYB/wLaAckB/wLYAccB/wLdAc4B/wLUAcMB/wLTAcIB/wLZ
AcoB/wLPAb4B/wLOAb0B/wLNAbwB/wL4Ae4B/wJCAUEBcgJIAUABcgL4Ae4B/wHsAYYBYwH/AeIBewFZ
Af8B1AFuAUwB/wHEAWABPgH/AbYBUgEwAf8BrQFHASUB/wGrAUMBIQH/AbEBRAEiAf8BvQFKASgB/wHM
AVIBMAH/AdsBWgE4Af8B6AFiAUAB/wL4Ae4B/wJIAUABcgJCAUEBcgL4Ae4C/wHMAUIB/wH+AcsBQQH/
AewB0gGGAf8C2gHJAf8C2AHHAf8BrQFCASAB/wHeAbYBngH/Ad4BtQGdAf8BrQFCASAB/wLPAb4B/wLO
Ab0B/wLNAbwB/wL4Ae4B/wJCAUEBcggAAUQBUwFaAZQBmwHhAfcB/wGUAdsB9AH/AZQB2wH0Af8BmwHh
AfcB/wEuAY0BvAH/AYEBvgHdAf8BgQG+Ad0B/wGQAdQB9gH/AZAB1AH2Af8BlwHbAfkB/wL+Af0B/wFE
AVMBWgGUBAACQQFAAXAC+QHxAv8BzAFCAv8B7gGIAf8B7AHSAYYB/wL5AfUB/wL5AfUB/wLWAcUB/wL5
AfUB/wL5AfUB/wLRAcAB/wL5AfUB/wL5AfUB/wLNAbwB/wL5AfEB/wJBAUABcAJHAUABcAL5AfEB/wHs
AYYBYwH/AfgBxQF5Af8B7QG1AXgB/wH1AcwBvAH/AfUBzAG8Af8B4AG3AZ8B/wH1AcwBvAH/AfUBzAG8
Af8B3QG0AZwB/wH1AcwBvAH/AfUBzAG8Af8B6AFiAUAB/wL5AfEB/wJHAUABcAJBAUABcAL5AfEC/wHM
AUIC/wHuAYgB/wHsAdIBhgH/AvkB9QH/AvkB9QH/AasBRAEiAf8B9QHMAbwB/wH1AcwBvAH/AasBRAEi
Af8C+QH1Af8C+QH1Af8CzQG8Af8C+QHxAf8CQQFAAXAIAAFEAVEBVwGQAZ4B5QH5Af8BmAHfAfYB/wGY
Ad8B9gH/AZ4B5QH5Af8BMAGQAcAB/wGDAcAB3wH/AYMBwAHfAf8BkgHWAfgB/wGSAdYB+AH/AZkB3QH6
Af8BRAFRAVcBkAMjATMEAAJBAUABbgL7AfQC/wHMAUIB/wH+AcsBQQH/AewB0gGGAf8C2gHJAf8C2AHH
Af8C3gHQAf8C1AHDAf8C0wHCAf8C2gHMAf8CzwG+Af8CzgG9Af8CzQG8Af8C+wH0Af8CQQFAAW4CRwFA
AW4C+wH0Af8B7AGGAWMB/wHiAXsBWQH/AdQBbgFMAf8BxAFgAT4B/wG2AVIBMAH/Aa0BRwElAf8BqwFD
ASEB/wGxAUQBIgH/Ab0BSgEoAf8BzAFSATAB/wHbAVoBOAH/AegBYgFAAf8C+wH0Af8CRwFAAW4CQQFA
AW4C+wH0Av8BzAFCAf8B/gHLAUEB/wHsAdIBhgH/AtoByQH/AtgBxwH/AbIBTAEqAf8B3gG2AZ4B/wHe
AbUBnQH/AbIBTAEqAf8CzwG+Af8CzgG9Af8CzQG8Af8C+wH0Af8CQQFAAW4IAAFDAU8BVQGNAaMB6AH7
Af8BnQHjAfkB/wGdAeMB+QH/AaMB6AH7Af8BMwGUAcUB/wGFAcIB4QH/AYUBwgHhAf8BlAHYAfoB/wGU
AdgB+gH/AZsB3wH8Af8BQwFPAVUBjQgAAkABPwFtAvwB9wL/AcwBQgL/Ae4BiAH/AewB0gGGAf8C/AH6
Af8C/AH6Af8C1gHFAf8C/AH6Af8C/AH6Af8C0QHAAf8C/AH6Af8C/AH6Af8CzQG8Af8C/AH3Af8CQAE/
AW0CRwFAAW0C/AH3Av8BzAFDAv8B7gGIAf8B7AHSAYYB/wL8AfoB/wL8AfoB/wLWAcUB/wL8AfoB/wL8
AfoB/wLRAcAB/wL8AfoB/wL8AfoB/wLNAbwB/wL8AfcB/wJHAUABbQJAAT8BbQL8AfcC/wHMAUIC/wHu
AYgB/wHsAdIBhgH/AvwB+gH/AvwB+gH/AcABWgE4Af8B9gHOAb8B/wH2Ac4BvwH/AcABWgE4Af8C/AH6
Af8C/AH6Af8CzQG8Af8C/AH3Af8CQAE/AW0IAAFDAU8BVAGKAaYB6wH8Af8BoQHmAfsB/wGhAeYB+wH/
AaYB6wH8Af8BOgGdAc8B/wGHAcQB4gH/AYcBxAHiAf8BlgHaAfwB/wGWAdoB/AH/AZ4B4gH9Af8BQwFP
AVQBiggAAj8BPgFrAv0B+QL/AcwBQgH/Af4BywFBAf8B9QHOAWIB/wHrAdIBhQH/AekB0AGDAf8B5wHO
AYEB/wHlAcwBgAH/AeQBywF8Af8B4gHJAXoB/wHgAccBeAH/Ad8BxgF3Af8B3gHFAXYB/wL9AfkB/wI/
AT4BawJHAUABawL9AfkC/wHMAUMB/wH+AcsBQgH/AfUBzgFjAf8B6wHSAYUB/wHpAdABgwH/AecBzgGB
Af8B5QHMAYAB/wHkAcsBfQH/AeIByQF7Af8B4AHHAXkB/wHfAcYBeAH/Ad4BxQF3Af8C/QH5Af8CRwFA
AWsCPwE+AWsC/QH5Av8BzAFCAf8B/gHLAUEB/wH1Ac4BYgH/AesB0gGFAf8B6QHQAYMB/wHRAWoBSAH/
AekBsQF0Af8B6AGwAXMB/wHRAWoBSAH/AeABxwF4Af8B3wHGAXcB/wHeAcUBdgH/Av0B+QH/Aj8BPgFr
CAABQgFNAVIBhwGpAe4B/QH/AaQB6QH8Af8BpAHpAfwB/wGqAe8B/QH/AUABoQHRAf8BkAHRAfEB/wGW
AdoB+wH/AZcB2wH9Af8BlwHbAf0B/wGfAeMB/gH/AUIBTQFSAYcIAAI/AT4BagL+AfwC/wHMAUIC/wHu
AYgB/wH9AcoBQAH/AfwB6wGFAf8B+wHqAYQB/wH4AcUBOwH/AfYB5QF9Af8B9AHjAXsB/wHzAcABNgH/
AfEB4AF4Af8B7wHeAXYB/wHvAbwBMgH/Av4B/AH/Aj8BPgFqAkcBQAFqAv4B/AL/AcwBQwL/Ae4BiAH/
Af0BygFBAf8B/AHrAYUB/wH7AeoBhAH/AfgBxQE8Af8B9gHlAX4B/wH0AeMBfAH/AfMBwAE3Af8B8QHg
AXkB/wHvAd4BdwH/Ae8BvAEzAf8C/gH8Af8CRwFAAWoCPwE+AWoC/gH8Av8BzAFCAv8B7gGIAf8B/QHK
AUAB/wH8AesBhQH/AfsB6gGEAf8B4QF5AVcB/wHzAcABcwH/AfIBvwFyAf8B4QF5AVcB/wHxAeABeAH/
Ae8B3gF2Af8B7wG8ATIB/wL+AfwB/wI/AT4BaggAAUMBTAFSAYUBrQHxAv8BqwHvAf4B/wGVAeIB+AH/
AWwByQHtAf8BRgGpAdkB/wGYAdwB/gH/AZgB3AH+Af8BmAHcAf4B/wGYAdwB/gH/AaEB5QL/AUMBTAFS
AYUIAAI+AT0BaAL/Af4C/wHMAUIB/wH+AcsBQQH/Af0BygFAAf8B/AHJAT8B/wH6AccBPQH/AfgBxQE7
Af8B9gHDAToB/wH1AcIBOAH/AfMBwAE2Af8B8QG+ATQB/wHwAb0BMwH/Ae8BvAEyA/8B/gH/Aj4BPQFo
AkcBQAFoAv8B/gL/AcwBQwH/Af4BywFCAf8B/QHKAUEB/wH8AckBQAH/AfoBxwE+Af8B+AHFATwB/wH2
AcMBOwH/AfUBwgE5Af8B8wHAATcB/wHxAb4BNQH/AfABvQE0Af8B7wG8ATMD/wH+Af8CRwFAAWgCPgE9
AWgC/wH+Av8BzAFCAf8B/gHLAUEB/wH9AcoBQAH/AfwByQE/Af8B+gHHAT0B/wHsAYYBYgH/AewBhgFi
Af8B7AGGAWIB/wHsAYYBYgH/AfEBvgE0Af8B8AG9ATMB/wHvAbwBMgP/Af4B/wI+AT0BaAgAAUMBTAFQ
AYMBiAHcAfQB/wFeAcAB6QH/AV0BvwHqAf8BgAHTAfQB/wGcAeMB/QH/AaIB5gL/AaIB5gL/AaIB5gL/
AaIB5gL/AaYB6gL/AUMBTAFQAYMIAAI+AT0BZzj/Aj4BPQFnAkcBQAFnOP8CRwFAAWcCPgE9AWc4/wI+
AT0BZwgAATkBOwE9AWEBQgFLAU8BgQFCAUsBTwGBAUIBSwFPAYEBQgFLAU8BgQFCAUsBTwGBAUIBSwFP
AYEBQgFLAU8BgQFCAUsBTwGBAUIBSwFPAYEBQgFLAU8BgQE5ATsBPQFhCAADMQFNAj4BPQFmAj4BPQFm
Aj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFm
Aj4BPQFmAj4BPQFmAzEBTQI3ATQBTQJHAUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgJH
AUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgI3ATQBTQMxAU0CPgE9
AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9
AWYCPgE9AWYCPgE9AWYCPgE9AWYDMQFNAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYA
A/8RAAGAAf8BgAEBBQABfwEAAQEFAAE/AQABAQUAAR8BAAEBBAABgAEPAYABAQQAAcABBwHAAQMEAAHg
AQMB4AEDBAAB8AEBAfABAQQAAfgBAAH4BQAB/AEAAfwFAAH+AQgB/gEIBAAB/wEAAf8FAAH/AYAB/wGA
BAAB/wHAAf8BwAQAAfgBfwYAAeABPxYAAcABAQYAAcABAQYAAcABAQYAAcABAQYAAcABAQYAAcABAQYA
AcABAwYAAcABAwYAAcABAwYAAcABAwYAAcABAwYAAcABAwYACw==
</value>
</data>
<metadata name="toolStripMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>211, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="toolbuttonOpenMib.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAK6SURBVDhPjZNbSNNRHMfPU9DtwR71oZf5IgkF0YMEEYb2
EGgG5YNgGQmGSUoYimbel5KKmlM0u3jJSpv3ad7WnGkzb2yO4bByF3WuuTnnnLv47Zw/9YclQQc+/L//
P+d8/r/f+Z8/Ib/HjJDcmhaS3P+Bzf2zjr8qiki+QyuE6dNNbIzFw6F8DJ++AVh97c9GK9jcA4LJAlKI
rQ7sW9/DpauGZSoFg6JwfJSU+TE0XIXOgqCaAwJ5ASn2bb6F19TM4bO+w4z4HgwWC9YcDugpK3Y7umQy
FOZEDMRkZQX7SWS5pMRrboVn9RUHy1/aEqDSajGn0WDZbIZ6bQ0t/f1gIzojI8lPMvaIPPWsN2FP/5yD
ZdmLWLwUi/FhZASSqSlOUtXczBMcGZnFVzGUTSr2jI1wfq/lYHms4Tqkc3MYnZ2F0mDAqs3GV8LaiUhN
TeYFA5mkenelHg5tNQfLw3UxaOrpQZdUiu7xca5/Mc0do6PQb28jPDk5hRf0PiQi5zcR7JoKDpYHaqIg
VyohW1jg+lcZjVwlCzod1p1OXEhMvM8LOtNJvWOpEjZVKQfL/ZVX0NrXh165HP2Tk5hQqzGuUmFQocCm
y4XzCQlpvKA9jTTa1WWwzBdzsNxdfhmfFxcxQRct0Q3UmEzY2t2FdWcHdrcb5+LiHvCC1hTSbFOWwDyT
x8GyuDQCbRIJ3tBPp6CfU0pbcdA3M4mDCs7ExqYzwWHKibo7pNs6T4+yIofDSqtof3IJBtqzTq+Hx+uF
y+OBky5kkh2aT0VFZTNBAEWQFEFqhyvO2pclSe6f03nYnC1EW9FFGOnGGSi+/X14KW6fD3tUtkdzYFiY
0O801iWSaNFtUteWGST92nL1R/q1Q7ojAkHV0ZCQkuOhocV/c0wguHvgn2APyuPJ6dI4kpV/gzyjtycp
gf8g4Begs1B6Kbj3cQAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="dialogOpenMib.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>337, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{86CC0B65-7985-4017-A252-0A7A18DCAEF3}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>LwipMibViewer</RootNamespace>
<AssemblyName>LwipMibViewer</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
<WarningLevel>4</WarningLevel>
<Optimize>false</Optimize>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="FormMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormMain.Designer.cs">
<DependentUpon>FormMain.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="FormMain.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SharpSnmpLib\SharpSnmpLib.Mib.csproj">
<Project>{CBE20411-5DB7-487D-825D-7694267BB6F5}</Project>
<Name>SharpSnmpLib.Mib</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,51 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Windows.Forms;
namespace LwipMibViewer
{
static class Program
{
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die mit einer Assembly verknüpft sind.
[assembly: AssemblyTitle("LwipMibViewer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LwipMibViewer")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("7ffbd1c1-1c64-45bb-b243-2400446c649d")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
// übernehmen, indem Sie "*" eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.225
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace LwipMibViewer.Properties {
using System;
/// <summary>
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
/// </summary>
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LwipMibViewer.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.225
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace LwipMibViewer.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

View File

@@ -0,0 +1,120 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
namespace LwipSnmpCodeGeneration
{
public interface IRestriction
{
string GetCheckCodeValid(string varNameToCheck);
string GetCheckCodeInvalid(string varNameToCheck);
}
public class BitMaskRestriction : IRestriction
{
UInt32 mask;
public BitMaskRestriction(UInt32 mask)
{
this.mask = mask;
}
public string GetCheckCodeValid(string varNameToCheck)
{
return String.Format("(({0} & {1}) == {0})", varNameToCheck, this.mask);
}
public string GetCheckCodeInvalid(string varNameToCheck)
{
return String.Format("(({0} & {1}) != {0})", varNameToCheck, this.mask);
}
}
public class IsEqualRestriction : IRestriction
{
private Int64 value;
public IsEqualRestriction(Int64 value)
{
this.value = value;
}
public long Value
{
get { return value; }
}
public string GetCheckCodeValid(string varNameToCheck)
{
return String.Format("({0} == {1})", varNameToCheck, this.value);
}
public string GetCheckCodeInvalid(string varNameToCheck)
{
return String.Format("({0} != {1})", varNameToCheck, this.value);
}
}
public class IsInRangeRestriction : IRestriction
{
private Int64 rangeStart;
private Int64 rangeEnd;
public IsInRangeRestriction(Int64 rangeStart, Int64 rangeEnd)
{
this.rangeStart = rangeStart;
this.rangeEnd = rangeEnd;
}
public long RangeStart
{
get { return this.rangeStart; }
}
public long RangeEnd
{
get { return this.rangeEnd; }
}
public string GetCheckCodeValid(string varNameToCheck)
{
return String.Format("(({0} >= {1}) && ({0} <= {2}))", varNameToCheck, this.rangeStart, this.rangeEnd);
}
public string GetCheckCodeInvalid(string varNameToCheck)
{
return String.Format("(({0} < {1}) || ({0} > {2}))", varNameToCheck, this.rangeStart, this.rangeEnd);
}
}
}

View File

@@ -0,0 +1,199 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
namespace LwipSnmpCodeGeneration
{
public static class LwipOpts
{
public static bool GenerateEmptyFolders = false;
/// <summary>
/// If a tree node only has scalar nodes as child nodes, it is replaced by
/// a single scalar array node in order to save memory and have only one single get/test/set method for all scalars.
/// </summary>
public static bool GenerateScalarArrays = true;
/// <summary>
/// If a tree node has multiple scalars as subnodes as well as other treenodes it
/// defines a single get/test/set method for all scalar child node.
/// (without other treenodes as child it would have been converted to scalar array node).
/// </summary>
public static bool GenerateSingleAccessMethodsForTreeNodeScalars = GenerateScalarArrays;
}
public static class LwipDefs
{
public const string Null = "NULL";
public const string Vt_U8 = "u8_t";
public const string Vt_U16 = "u16_t";
public const string Vt_U32 = "u32_t";
public const string Vt_S8 = "s8_t";
public const string Vt_S16 = "s16_t";
public const string Vt_S32 = "s32_t";
public const string Vt_Snmp_err = "snmp_err_t";
public const string Incl_SnmpOpts = "lwip/apps/snmp_opts.h";
public const string Opt_SnmpEnabled = "LWIP_SNMP";
public const string Vt_StMib = "struct snmp_mib";
public const string Vt_StObjectId = "struct snmp_obj_id";
public const string Vt_StNode = "struct snmp_node";
public const string Vt_StNodeInstance = "struct snmp_node_instance";
public const string Vt_StTreeNode = "struct snmp_tree_node";
public const string Vt_StScalarNode = "struct snmp_scalar_node";
public const string Vt_StScalarArrayNode = "struct snmp_scalar_array_node";
public const string Vt_StScalarArrayNodeDef = "struct snmp_scalar_array_node_def";
public const string Vt_StTableNode = "struct snmp_table_node";
public const string Vt_StTableColumnDef = "struct snmp_table_col_def";
public const string Vt_StNextOidState = "struct snmp_next_oid_state";
public const string Def_NodeAccessReadOnly = "SNMP_NODE_INSTANCE_READ_ONLY";
public const string Def_NodeAccessReadWrite = "SNMP_NODE_INSTANCE_READ_WRITE";
public const string Def_NodeAccessWriteOnly = "SNMP_NODE_INSTANCE_WRITE_ONLY";
public const string Def_NodeAccessNotAccessible = "SNMP_NODE_INSTANCE_NOT_ACCESSIBLE";
public const string Def_ErrorCode_Ok = "SNMP_ERR_NOERROR";
public const string Def_ErrorCode_WrongValue = "SNMP_ERR_WRONGVALUE";
public const string Def_ErrorCode_NoSuchInstance = "SNMP_ERR_NOSUCHINSTANCE";
public const string FnctSuffix_GetValue = "_get_value";
public const string FnctSuffix_SetTest = "_set_test";
public const string FnctSuffix_SetValue = "_set_value";
public const string FnctSuffix_GetInstance = "_get_instance";
public const string FnctSuffix_GetNextInstance = "_get_next_instance";
public const string FnctName_SetTest_Ok = "snmp_set_test_ok";
public static string GetLwipDefForSnmpAccessMode(SnmpAccessMode am)
{
switch (am)
{
case SnmpAccessMode.ReadOnly: return Def_NodeAccessReadOnly;
case SnmpAccessMode.ReadWrite: return Def_NodeAccessReadWrite;
case SnmpAccessMode.NotAccessible: return Def_NodeAccessNotAccessible;
case SnmpAccessMode.WriteOnly: return Def_NodeAccessWriteOnly;
default: throw new NotSupportedException("Unknown SnmpAccessMode!");
}
}
public static string GetAsn1DefForSnmpDataType(SnmpDataType dt)
{
switch (dt)
{
// primitive
case SnmpDataType.Null:
return "SNMP_ASN1_TYPE_NULL";
case SnmpDataType.Bits:
case SnmpDataType.OctetString:
return "SNMP_ASN1_TYPE_OCTET_STRING";
case SnmpDataType.ObjectIdentifier:
return "SNMP_ASN1_TYPE_OBJECT_ID";
case SnmpDataType.Integer:
return "SNMP_ASN1_TYPE_INTEGER";
// application
case SnmpDataType.IpAddress:
return "SNMP_ASN1_TYPE_IPADDR";
case SnmpDataType.Counter:
return "SNMP_ASN1_TYPE_COUNTER";
case SnmpDataType.Gauge:
return "SNMP_ASN1_TYPE_GAUGE";
case SnmpDataType.TimeTicks:
return "SNMP_ASN1_TYPE_TIMETICKS";
case SnmpDataType.Opaque:
return "SNMP_ASN1_TYPE_OPAQUE";
case SnmpDataType.Counter64:
return "SNMP_ASN1_TYPE_COUNTER64";
default:
throw new NotSupportedException("Unknown SnmpDataType!");
}
}
public static string GetLengthForSnmpDataType(SnmpDataType dt)
{
switch (dt)
{
case SnmpDataType.Null:
return "0";
case SnmpDataType.Integer:
case SnmpDataType.Counter:
case SnmpDataType.IpAddress:
case SnmpDataType.Gauge:
case SnmpDataType.TimeTicks:
return "4";
case SnmpDataType.Counter64:
return "8";
case SnmpDataType.OctetString:
case SnmpDataType.ObjectIdentifier:
case SnmpDataType.Bits:
case SnmpDataType.Opaque:
return null;
default:
throw new NotSupportedException("Unknown SnmpDataType!");
}
}
}
public enum SnmpDataType
{
Null,
Integer, // INTEGER, Integer32
Counter, // Counter, Counter32
Gauge, // Gauge, Gauge32, Unsigned32
TimeTicks,
Counter64,
OctetString,
Opaque,
Bits,
ObjectIdentifier,
IpAddress,
}
public enum SnmpAccessMode
{
ReadOnly,
ReadWrite,
WriteOnly,
NotAccessible
}
}

View File

@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{AABCAB90-1540-45D4-A159-14831A54E9A3}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>LwipSnmpCodeGeneration</RootNamespace>
<AssemblyName>LwipSnmpCodeGeneration</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="IRestriction.cs" />
<Compile Include="SnmpScalarNodeCounter64.cs" />
<Compile Include="SnmpScalarNodeTruthValue.cs" />
<Compile Include="SnmpScalarAggregationNode.cs" />
<Compile Include="SnmpTableNode.cs" />
<Compile Include="SnmpScalarArrayNode.cs" />
<Compile Include="MibHeaderFile.cs" />
<Compile Include="SnmpScalarNodeBits.cs" />
<Compile Include="SnmpMib.cs" />
<Compile Include="SnmpScalarNodeInt.cs" />
<Compile Include="SnmpScalarNodeObjectIdentifier.cs" />
<Compile Include="SnmpScalarNodeOctetString.cs" />
<Compile Include="SnmpScalarNodeUint.cs" />
<Compile Include="SnmpTreeNode.cs" />
<Compile Include="LwipSnmp.cs" />
<Compile Include="MibCFile.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SnmpNode.cs" />
<Compile Include="SnmpScalarNode.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CCodeGeneration\CCodeGeneration.csproj">
<Project>{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}</Project>
<Name>CCodeGeneration</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,196 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System.Collections.Generic;
using CCodeGeneration;
using System;
using System.IO;
namespace LwipSnmpCodeGeneration
{
public class MibCFile
{
#region Fields
private const string PreservedSectionMarker = "LWIP MIB generator - preserved section begin";
private const string PreservedSectionHeader =
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n" +
PreservedSectionMarker + "\n" +
"Code below is preserved on regeneration. Remove these comment lines to regenerate code.\n" +
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";
private readonly List<CodeElement> includes = new List<CodeElement>();
private readonly List<CodeElement> defines = new List<CodeElement>();
private readonly List<CodeElement> declarations = new List<CodeElement>();
private readonly List<CodeElement> implementation = new List<CodeElement>();
private readonly List<CodeElement> preservedCode = new List<CodeElement>();
#endregion
public MibCFile()
{
}
#region Accessors
public List<CodeElement> Includes
{
get { return this.includes; }
}
public List<CodeElement> Defines
{
get { return this.defines; }
}
public List<CodeElement> Declarations
{
get { return this.declarations; }
}
public List<CodeElement> Implementation
{
get { return this.implementation; }
}
public List<CodeElement> PreservedCode
{
get { return this.preservedCode; }
}
#endregion
#region Methods
public void Save(CGenerator cGenerator)
{
CFile cFile = new CFile();
cFile.AddElement(new Comment("Generated by LwipMibCompiler"));
cFile.AddElement(EmptyLine.SingleLine);
cFile.AddElement(new PP_Include(LwipDefs.Incl_SnmpOpts));
CodeContainerBase e = cFile.AddElement(new PP_If(LwipDefs.Opt_SnmpEnabled)) as CodeContainerBase;
e.AddElement(EmptyLine.SingleLine);
// include header file
string file = cGenerator.FileName;
if (!String.IsNullOrWhiteSpace(file))
{
string ext = System.IO.Path.GetExtension(file);
string headerFile = !String.IsNullOrEmpty(ext) ? file.Substring(0, file.Length - ext.Length) : file;
headerFile += ".h";
e.AddElement(new PP_Include(headerFile));
}
// include common snmp files
e.AddElement(new PP_Include("lwip/apps/snmp.h"));
e.AddElement(new PP_Include("lwip/apps/snmp_core.h"));
e.AddElement(new PP_Include("lwip/apps/snmp_scalar.h"));
e.AddElement(new PP_Include("lwip/apps/snmp_table.h"));
if (this.includes.Count > 0)
{
e.AddElement(EmptyLine.SingleLine);
e.AddElements(this.includes);
}
if (this.defines.Count > 0)
{
e.AddElement(EmptyLine.SingleLine);
e.AddElements(this.defines);
}
if (this.declarations.Count > 0)
{
e.AddElement(EmptyLine.TwoLines);
e.AddElements(this.declarations);
}
if (this.implementation.Count > 0)
{
e.AddElement(EmptyLine.TwoLines);
e.AddElements(this.implementation);
}
if (this.preservedCode.Count > 0)
{
e.AddElement(EmptyLine.TwoLines);
e.AddElement(new Comment(PreservedSectionHeader));
e.AddElement(EmptyLine.SingleLine);
e.AddElements(this.preservedCode);
}
cFile.Save(cGenerator);
}
public static string GetPreservedCode(string file)
{
if (File.Exists(file))
{
using (StreamReader fileStream = new StreamReader(file))
{
while (!fileStream.EndOfStream)
{
string line = fileStream.ReadLine();
if (line == PreservedSectionMarker)
{
break;
}
}
if (!fileStream.EndOfStream)
{
// skip the rest of the comment + spacer line
fileStream.ReadLine(); // "Code below is preserved...
fileStream.ReadLine(); // "+++++++++++++++++++++++...
fileStream.ReadLine(); // */
fileStream.ReadLine(); //
string preservedCode = fileStream.ReadToEnd();
int lastEndif = preservedCode.LastIndexOf("#endif", StringComparison.Ordinal);
preservedCode = preservedCode.Remove(lastEndif);
return preservedCode;
}
}
}
return null;
}
#endregion
}
}

View File

@@ -0,0 +1,129 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System.Collections.Generic;
using System.Text.RegularExpressions;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class MibHeaderFile
{
#region Fields
private readonly List<CodeElement> defines = new List<CodeElement>();
private readonly List<CodeElement> includes = new List<CodeElement>();
private readonly List<CodeElement> functionDeclarations = new List<CodeElement>();
private readonly List<CodeElement> variableDeclarations = new List<CodeElement>();
#endregion
public MibHeaderFile()
{
}
#region Accessors
public List<CodeElement> Defines
{
get { return this.defines; }
}
public List<CodeElement> Includes
{
get { return this.includes; }
}
public List<CodeElement> FunctionDeclarations
{
get { return this.functionDeclarations; }
}
public List<CodeElement> VariableDeclarations
{
get { return this.variableDeclarations; }
}
#endregion
#region Methods
public void Save(CGenerator cGenerator)
{
CFile cFile = new CFile();
cFile.AddElement(new Comment("Generated by LwipMibCompiler"));
cFile.AddElement(EmptyLine.SingleLine);
string headerDefine = cGenerator.FileName;
headerDefine = new Regex("[^a-zA-Z0-9]").Replace(headerDefine, "_");
headerDefine = headerDefine.ToUpperInvariant();
CodeContainerBase e = cFile.AddElement(new PP_Ifdef(headerDefine, inverted: true)) as CodeContainerBase;
e.AddElement(new PP_Macro(headerDefine, headerDefine));
e.AddElement(EmptyLine.SingleLine);
e.AddElement(new PP_Include(LwipDefs.Incl_SnmpOpts));
e = e.AddElement(new PP_If(LwipDefs.Opt_SnmpEnabled)) as CodeContainerBase;
e.AddElement(EmptyLine.SingleLine);
CodeContainerBase cplusplusopen = e.AddElement(new PP_Ifdef("__cplusplus")) as CodeContainerBase;
cplusplusopen.AddElement(new Code("extern \"C\" {"));
e.AddElement(EmptyLine.SingleLine);
if (this.includes.Count > 0)
{
e.AddElements(this.includes);
e.AddElement(EmptyLine.SingleLine);
}
if (this.defines.Count > 0)
{
e.AddElements(this.defines);
e.AddElement(EmptyLine.SingleLine);
}
e.AddElements(this.functionDeclarations, EmptyLine.SingleLine);
e.AddElements(this.variableDeclarations, EmptyLine.SingleLine);
e.AddElement(EmptyLine.SingleLine);
CodeContainerBase cplusplusclose = e.AddElement(new PP_Ifdef("__cplusplus")) as CodeContainerBase;
cplusplusclose.AddElement(new Code("}"));
e.AddElement(EmptyLine.SingleLine);
cFile.Save(cGenerator);
}
#endregion
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die mit einer Assembly verknüpft sind.
[assembly: AssemblyTitle("LwipSnmpCodeGeneration")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LwipSnmpCodeGeneration")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("8cfbbb8b-dfbb-4dd5-80c9-e07845dd58c9")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
// übernehmen, indem Sie "*" eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,97 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Text;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpMib : SnmpTreeNode
{
public uint[] BaseOid { get; set; }
public SnmpMib()
: base(null)
{
}
public SnmpMib(uint[] baseOid)
: base(null)
{
this.BaseOid = baseOid;
}
public override string FullNodeName
{
get { return this.Name.ToLowerInvariant() + "_root"; }
}
public override void GenerateCode(MibCFile mibFile)
{
base.GenerateCode(mibFile);
System.Diagnostics.Debug.Assert((this.BaseOid != null) && (this.BaseOid.Length > 0));
// create and add BaseOID declarations
StringBuilder boidInitialization = new StringBuilder("{");
foreach (uint t in this.BaseOid)
{
boidInitialization.Append(t);
boidInitialization.Append(",");
}
boidInitialization.Length -= 1;
boidInitialization.Append("}");
VariableDeclaration boidDecl = new VariableDeclaration(
new VariableType(this.Name.ToLowerInvariant() + "_base_oid", LwipDefs.Vt_U32, null, ConstType.Value, String.Empty),
boidInitialization.ToString(), true);
mibFile.Declarations.Add(boidDecl);
mibFile.Declarations.Add(GetExportDeclaration());
}
public override void GenerateHeaderCode(MibHeaderFile mibHeaderFile)
{
mibHeaderFile.Includes.Add(new PP_Include("lwip/apps/snmp_core.h"));
mibHeaderFile.VariableDeclarations.Add(VariablePrototype.FromVariableDeclaration(GetExportDeclaration()));
}
VariableDeclaration GetExportDeclaration()
{
return new VariableDeclaration(
new VariableType(this.Name.ToLowerInvariant(), LwipDefs.Vt_StMib, null, ConstType.Value),
String.Format("{{{0}_base_oid, LWIP_ARRAYSIZE({0}_base_oid), &{1}.node}}", this.Name.ToLowerInvariant(), this.FullNodeName));
}
}
}

View File

@@ -0,0 +1,119 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Text.RegularExpressions;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public abstract class SnmpNode
{
public static readonly Regex NameValidationRegex = new Regex(@"^\w+$");
private string name;
private readonly SnmpTreeNode parentNode;
protected SnmpNode(SnmpTreeNode parentNode)
{
this.parentNode = parentNode;
}
public SnmpTreeNode ParentNode
{
get { return this.parentNode; }
}
public virtual uint Oid { get; set; }
public abstract string FullNodeName
{
get;
}
public virtual string Name
{
get { return this.name; }
set
{
if (value != this.name)
{
// check for valid name
if (!NameValidationRegex.IsMatch(value))
{
throw new ArgumentOutOfRangeException("Name");
}
this.name = value;
}
}
}
public virtual void Generate(MibCFile generatedFile, MibHeaderFile generatedHeaderFile)
{
int declCount = generatedFile.Declarations.Count;
int implCount = generatedFile.Implementation.Count;
this.GenerateHeaderCode(generatedHeaderFile);
this.GenerateCode(generatedFile);
if (generatedFile.Declarations.Count != declCount)
{
generatedFile.Declarations.Add(EmptyLine.SingleLine);
}
if (generatedFile.Implementation.Count != implCount)
{
generatedFile.Implementation.Add(EmptyLine.SingleLine);
}
}
public abstract void GenerateCode(MibCFile mibFile);
public virtual void GenerateHeaderCode(MibHeaderFile mibHeaderFile)
{
}
/// <summary>
/// Called after node structure creation is completed and before code is created.
/// Offers the possibility to perform operations depending on properties/subnodes.
/// If the node shall be transformed to another node(-type) than the own instance
/// may be replaced on parent node by the transformed instance.
/// Calling sequence is always from leafs up to root. So a tree node can assume
/// that the analyze method was already called on all child nodes.
/// E.g. a tree node only has scalar sub nodes -> it transforms itself to a scalar array node
/// </summary>
/// <returns>The transformed node or null if nothing shall be changed in parent structure.</returns>
public virtual void Analyze()
{
}
}
}

View File

@@ -0,0 +1,293 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System.Collections.Generic;
using System.Globalization;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public abstract class SnmpScalarAggregationNode: SnmpNode
{
private bool getMethodRequired = false;
private bool testMethodRequired = false;
private bool setMethodRequired = false;
protected SnmpScalarAggregationNode(SnmpTreeNode parentNode)
: base(parentNode)
{
}
protected virtual string GetMethodName
{
get { return this.FullNodeName + LwipDefs.FnctSuffix_GetValue; }
}
protected bool GetMethodRequired
{
get { return this.getMethodRequired; }
}
protected virtual string TestMethodName
{
get { return this.FullNodeName + LwipDefs.FnctSuffix_SetTest; }
}
protected bool TestMethodRequired
{
get { return this.testMethodRequired; }
}
protected virtual string SetMethodName
{
get { return this.FullNodeName + LwipDefs.FnctSuffix_SetValue; }
}
protected bool SetMethodRequired
{
get { return this.setMethodRequired; }
}
protected abstract IEnumerable<SnmpScalarNode> AggregatedScalarNodes
{
get;
}
public override void Analyze()
{
base.Analyze();
this.getMethodRequired = false;
this.testMethodRequired = false;
this.setMethodRequired = false;
foreach (SnmpScalarNode scalarNode in this.AggregatedScalarNodes)
{
if ((scalarNode.AccessMode == SnmpAccessMode.ReadOnly) || (scalarNode.AccessMode == SnmpAccessMode.ReadWrite))
{
this.getMethodRequired = true;
}
if ((scalarNode.AccessMode == SnmpAccessMode.WriteOnly) || (scalarNode.AccessMode == SnmpAccessMode.ReadWrite))
{
this.testMethodRequired = true;
this.setMethodRequired = true;
}
if (this.getMethodRequired && this.setMethodRequired)
{
break;
}
}
}
protected void GenerateAggregatedCode(MibCFile mibFile, VariableType instanceType, string switchSelector, bool generateDeclarations = true, bool generateImplementations = true)
{
if (this.getMethodRequired)
{
FunctionDeclaration getMethodDecl = new FunctionDeclaration(this.GetMethodName, isStatic: true);
getMethodDecl.Parameter.Add(instanceType);
getMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
getMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_U16);
if (generateDeclarations)
{
mibFile.Declarations.Add(getMethodDecl);
}
if (generateImplementations)
{
Function getMethod = Function.FromDeclaration(getMethodDecl);
GenerateGetMethodCode(getMethod, switchSelector);
mibFile.Implementation.Add(getMethod);
}
}
if (this.testMethodRequired)
{
FunctionDeclaration testMethodDecl = new FunctionDeclaration(this.TestMethodName, isStatic: true);
testMethodDecl.Parameter.Add(instanceType);
testMethodDecl.Parameter.Add(new VariableType("len", LwipDefs.Vt_U16));
testMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
testMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
if (generateDeclarations)
{
mibFile.Declarations.Add(testMethodDecl);
}
if (generateImplementations)
{
Function testMethod = Function.FromDeclaration(testMethodDecl);
GenerateTestMethodCode(testMethod, switchSelector);
mibFile.Implementation.Add(testMethod);
}
}
if (this.setMethodRequired)
{
FunctionDeclaration setMethodDecl = new FunctionDeclaration(this.SetMethodName, isStatic: true);
setMethodDecl.Parameter.Add(instanceType);
setMethodDecl.Parameter.Add(new VariableType("len", LwipDefs.Vt_U16));
setMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
setMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
if (generateDeclarations)
{
mibFile.Declarations.Add(setMethodDecl);
}
if (generateImplementations)
{
Function setMethod = Function.FromDeclaration(setMethodDecl);
GenerateSetMethodCode(setMethod, switchSelector);
mibFile.Implementation.Add(setMethod);
}
}
}
protected virtual void GenerateGetMethodCode(Function getMethod, string switchSelector)
{
VariableDeclaration returnValue = new VariableDeclaration((VariableType)getMethod.ReturnType.Clone());
returnValue.Type.Name = "value_len";
getMethod.Declarations.Add(returnValue);
Switch sw = new Switch(switchSelector);
bool valueVarUsed = false;
foreach (SnmpScalarNode scalarNode in this.AggregatedScalarNodes)
{
if ((scalarNode.AccessMode == SnmpAccessMode.ReadOnly) || (scalarNode.AccessMode == SnmpAccessMode.ReadWrite))
{
SwitchCase sc = new SwitchCase(scalarNode.Oid.ToString(CultureInfo.InvariantCulture));
sc.Declarations.Add(new Comment(scalarNode.Name, singleLine: true));
scalarNode.GenerateGetMethodCode(sc, getMethod.Parameter[1].Name, ref valueVarUsed, returnValue.Type.Name);
sw.Switches.Add(sc);
}
}
SwitchCase scd = SwitchCase.GenerateDefault();
scd.AddCodeFormat("LWIP_DEBUGF(SNMP_MIB_DEBUG,(\"{0}(): unknown id: %\"S32_F\"\\n\", {1}));", getMethod.Name, switchSelector);
scd.AddCodeFormat("{0} = 0;", returnValue.Type.Name);
sw.Switches.Add(scd);
if (!valueVarUsed)
{
getMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getMethod.Parameter[1].Name);
}
getMethod.AddElement(sw);
getMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
}
protected virtual void GenerateTestMethodCode(Function testMethod, string switchSelector)
{
VariableDeclaration returnValue = new VariableDeclaration((VariableType)testMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_WrongValue);
returnValue.Type.Name = "err";
testMethod.Declarations.Add(returnValue);
Switch sw = new Switch(switchSelector);
bool valueVarUsed = false;
bool lenVarUsed = false;
foreach (SnmpScalarNode scalarNode in this.AggregatedScalarNodes)
{
if ((scalarNode.AccessMode == SnmpAccessMode.WriteOnly) || (scalarNode.AccessMode == SnmpAccessMode.ReadWrite))
{
SwitchCase sc = new SwitchCase(scalarNode.Oid.ToString(CultureInfo.InvariantCulture));
sc.Declarations.Add(new Comment(scalarNode.Name, singleLine: true));
scalarNode.GenerateTestMethodCode(sc, testMethod.Parameter[2].Name, ref valueVarUsed, testMethod.Parameter[1].Name, ref lenVarUsed, returnValue.Type.Name);
sw.Switches.Add(sc);
}
}
SwitchCase scd = SwitchCase.GenerateDefault();
scd.AddCodeFormat("LWIP_DEBUGF(SNMP_MIB_DEBUG,(\"{0}(): unknown id: %\"S32_F\"\\n\", {1}));", testMethod.Name, switchSelector);
sw.Switches.Add(scd);
if (!valueVarUsed)
{
testMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", testMethod.Parameter[2].Name);
}
if (!lenVarUsed)
{
testMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", testMethod.Parameter[1].Name);
}
testMethod.AddElement(sw);
testMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
}
protected virtual void GenerateSetMethodCode(Function setMethod, string switchSelector)
{
VariableDeclaration returnValue = new VariableDeclaration((VariableType)setMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_Ok);
returnValue.Type.Name = "err";
setMethod.Declarations.Add(returnValue);
Switch sw = new Switch(switchSelector);
bool valueVarUsed = false;
bool lenVarUsed = false;
foreach (SnmpScalarNode scalarNode in this.AggregatedScalarNodes)
{
if ((scalarNode.AccessMode == SnmpAccessMode.WriteOnly) || (scalarNode.AccessMode == SnmpAccessMode.ReadWrite))
{
SwitchCase sc = new SwitchCase(scalarNode.Oid.ToString(CultureInfo.InvariantCulture));
sc.Declarations.Add(new Comment(scalarNode.Name, singleLine: true));
scalarNode.GenerateSetMethodCode(sc, setMethod.Parameter[2].Name, ref valueVarUsed, setMethod.Parameter[1].Name, ref lenVarUsed, returnValue.Type.Name);
sw.Switches.Add(sc);
}
}
SwitchCase scd = SwitchCase.GenerateDefault();
scd.AddCodeFormat("LWIP_DEBUGF(SNMP_MIB_DEBUG,(\"{0}(): unknown id: %\"S32_F\"\\n\", {1}));", setMethod.Name, switchSelector);
sw.Switches.Add(scd);
if (!valueVarUsed)
{
setMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", setMethod.Parameter[2].Name);
}
if (!lenVarUsed)
{
setMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", setMethod.Parameter[1].Name);
}
setMethod.AddElement(sw);
setMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
}
}
}

View File

@@ -0,0 +1,105 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Collections.Generic;
using System.Text;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpScalarArrayNode : SnmpScalarAggregationNode
{
private readonly List<SnmpScalarNode> scalarNodes;
public SnmpScalarArrayNode(List<SnmpScalarNode> scalarNodes, SnmpTreeNode parentNode)
: base(parentNode)
{
this.scalarNodes = scalarNodes;
}
public override string FullNodeName
{
get { return this.Name.ToLowerInvariant() + "_scalars"; }
}
protected override IEnumerable<SnmpScalarNode> AggregatedScalarNodes
{
get { return this.scalarNodes; }
}
public override void GenerateCode(MibCFile mibFile)
{
VariableType instanceType = new VariableType("node", LwipDefs.Vt_StScalarArrayNodeDef, "*", ConstType.Value);
GenerateAggregatedCode(
mibFile,
instanceType,
instanceType.Name + "->oid");
// create and add node definitions
StringBuilder nodeDefs = new StringBuilder();
foreach (SnmpScalarNode scalarNode in this.scalarNodes)
{
nodeDefs.AppendFormat(" {{{0}, {1}, {2}}}, /* {3} */ \n",
scalarNode.Oid,
LwipDefs.GetAsn1DefForSnmpDataType(scalarNode.DataType),
LwipDefs.GetLwipDefForSnmpAccessMode(scalarNode.AccessMode),
scalarNode.Name);
}
if (nodeDefs.Length > 0)
nodeDefs.Length--;
VariableDeclaration nodeDefsDecl = new VariableDeclaration(
new VariableType(this.FullNodeName + "_nodes", LwipDefs.Vt_StScalarArrayNodeDef, null, ConstType.Value, String.Empty),
"{\n" + nodeDefs + "\n}" ,
isStatic: true);
mibFile.Declarations.Add(nodeDefsDecl);
// create and add node declaration
string nodeInitialization = String.Format("SNMP_SCALAR_CREATE_ARRAY_NODE({0}, {1}, {2}, {3}, {4})",
this.Oid,
nodeDefsDecl.Type.Name,
(this.GetMethodRequired) ? this.GetMethodName : LwipDefs.Null,
(this.TestMethodRequired) ? this.TestMethodName : LwipDefs.Null,
(this.SetMethodRequired) ? this.SetMethodName : LwipDefs.Null
);
mibFile.Declarations.Add(new VariableDeclaration(
new VariableType(this.FullNodeName, LwipDefs.Vt_StScalarArrayNode, null, ConstType.Value),
nodeInitialization,
isStatic: true));
}
}
}

View File

@@ -0,0 +1,395 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Collections.Generic;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpScalarNode: SnmpNode
{
protected const string LocalValueName = "v"; // name of (casted) local value variable
private SnmpDataType dataType;
private SnmpAccessMode accessMode;
private readonly List<IRestriction> restrictions = new List<IRestriction>();
private bool useExternalMethods = false;
private string externalGetMethod;
private string externalTestMethod;
private string externalSetMethod;
public SnmpScalarNode(SnmpTreeNode parentNode)
: base(parentNode)
{
}
public override string FullNodeName
{
get { return this.Name.ToLowerInvariant() + "_scalar"; }
}
public SnmpDataType DataType
{
get { return this.dataType; }
set { this.dataType = value; }
}
public List<IRestriction> Restrictions
{
get { return this.restrictions; }
}
public SnmpAccessMode AccessMode
{
get { return this.accessMode; }
set { this.accessMode = value; }
}
public virtual string FixedValueLength
{
get { return null; }
}
/// <summary>
/// If scalar is used as a table index its value becomes part of the OID. This value returns how many OID parts are required to represent this value.
/// </summary>
public virtual int OidRepresentationLen
{
get { return -1; }
}
public bool UseExternalMethods
{
get { return this.useExternalMethods; }
set { this.useExternalMethods = value; }
}
public string ExternalGetMethod
{
get { return this.externalGetMethod; }
set { this.externalGetMethod = value; }
}
public string ExternalTestMethod
{
get { return this.externalTestMethod; }
set { this.externalTestMethod = value; }
}
public string ExternalSetMethod
{
get { return this.externalSetMethod; }
set { this.externalSetMethod = value; }
}
public override void GenerateCode(MibCFile mibFile)
{
string getMethodName;
string testMethodName;
string setMethodName;
if (this.useExternalMethods)
{
getMethodName = this.externalGetMethod;
testMethodName = this.externalTestMethod;
setMethodName = this.externalSetMethod;
}
else
{
getMethodName = LwipDefs.Null;
testMethodName = LwipDefs.Null;
setMethodName = LwipDefs.Null;
if ((this.accessMode == SnmpAccessMode.ReadWrite) || (this.accessMode == SnmpAccessMode.ReadOnly))
{
FunctionDeclaration getMethodDecl = new FunctionDeclaration(this.Name + LwipDefs.FnctSuffix_GetValue, isStatic: true);
getMethodDecl.Parameter.Add(new VariableType("instance", LwipDefs.Vt_StNodeInstance, "*"));
getMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
getMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_U16);
mibFile.Declarations.Add(getMethodDecl);
Function getMethod = Function.FromDeclaration(getMethodDecl);
getMethodName = getMethod.Name;
VariableDeclaration returnValue = new VariableDeclaration((VariableType)getMethod.ReturnType.Clone());
returnValue.Type.Name = "value_len";
getMethod.Declarations.Add(returnValue);
getMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getMethod.Parameter[0].Name);
bool valueVarUsed = false;
GenerateGetMethodCode(getMethod, getMethod.Parameter[1].Name, ref valueVarUsed, returnValue.Type.Name);
if (!valueVarUsed)
{
getMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getMethod.Parameter[1].Name);
}
getMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
mibFile.Implementation.Add(getMethod);
}
if ((this.accessMode == SnmpAccessMode.ReadWrite) || (this.accessMode == SnmpAccessMode.WriteOnly))
{
bool valueVarUsed;
bool lenVarUsed;
VariableDeclaration returnValue;
if (this.restrictions.Count > 0)
{
FunctionDeclaration testMethodDecl = new FunctionDeclaration(this.Name + LwipDefs.FnctSuffix_SetTest, isStatic: true);
testMethodDecl.Parameter.Add(new VariableType("instance", LwipDefs.Vt_StNodeInstance, "*"));
testMethodDecl.Parameter.Add(new VariableType("len", LwipDefs.Vt_U16));
testMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
testMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
mibFile.Declarations.Add(testMethodDecl);
Function testMethod = Function.FromDeclaration(testMethodDecl);
testMethodName = testMethod.Name;
returnValue = new VariableDeclaration((VariableType)testMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_WrongValue);
returnValue.Type.Name = "err";
testMethod.Declarations.Add(returnValue);
testMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", testMethod.Parameter[0].Name);
valueVarUsed = false;
lenVarUsed = false;
GenerateTestMethodCode(testMethod, testMethod.Parameter[2].Name, ref valueVarUsed, testMethod.Parameter[1].Name, ref lenVarUsed, returnValue.Type.Name);
if (!valueVarUsed)
{
testMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", testMethod.Parameter[2].Name);
}
if (!lenVarUsed)
{
testMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", testMethod.Parameter[1].Name);
}
testMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
mibFile.Implementation.Add(testMethod);
}
else
{
testMethodName = LwipDefs.FnctName_SetTest_Ok;
}
FunctionDeclaration setMethodDecl = null;
setMethodDecl = new FunctionDeclaration(this.Name + LwipDefs.FnctSuffix_SetValue, isStatic: true);
setMethodDecl.Parameter.Add(new VariableType("instance", LwipDefs.Vt_StNodeInstance, "*"));
setMethodDecl.Parameter.Add(new VariableType("len", LwipDefs.Vt_U16));
setMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
setMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
mibFile.Declarations.Add(setMethodDecl);
Function setMethod = Function.FromDeclaration(setMethodDecl);
setMethodName = setMethod.Name;
returnValue = new VariableDeclaration((VariableType)setMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_Ok);
returnValue.Type.Name = "err";
setMethod.Declarations.Add(returnValue);
setMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", setMethod.Parameter[0].Name);
valueVarUsed = false;
lenVarUsed = false;
GenerateSetMethodCode(setMethod, setMethod.Parameter[2].Name, ref valueVarUsed, setMethod.Parameter[1].Name, ref lenVarUsed, returnValue.Type.Name);
if (!valueVarUsed)
{
setMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", setMethod.Parameter[2].Name);
}
if (!lenVarUsed)
{
setMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", setMethod.Parameter[1].Name);
}
setMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
mibFile.Implementation.Add(setMethod);
}
}
// create and add node declaration
string nodeInitialization;
if (this.accessMode == SnmpAccessMode.ReadOnly)
{
nodeInitialization = String.Format("SNMP_SCALAR_CREATE_NODE_READONLY({0}, {1}, {2})",
this.Oid,
LwipDefs.GetAsn1DefForSnmpDataType(this.dataType),
getMethodName);
}
else
{
nodeInitialization = String.Format("SNMP_SCALAR_CREATE_NODE({0}, {1}, {2}, {3}, {4}, {5})",
this.Oid,
LwipDefs.GetLwipDefForSnmpAccessMode(this.accessMode),
LwipDefs.GetAsn1DefForSnmpDataType(this.dataType),
getMethodName,
testMethodName,
setMethodName);
}
mibFile.Declarations.Add(new VariableDeclaration(
new VariableType(this.FullNodeName, LwipDefs.Vt_StScalarNode, null, ConstType.Value),
nodeInitialization, isStatic: true));
}
public virtual void GenerateGetMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string retLenVarName)
{
bool localValueVarUsed;
if (GenerateValueDeclaration(container, LocalValueName, valueVarName))
{
valueVarUsed = true;
localValueVarUsed = false;
}
else
{
localValueVarUsed = true; // do not generate UNUSED_ARG code
}
if (this.FixedValueLength == null)
{
// check that value with variable length fits into buffer
container.AddElement(new Comment(String.Format("TODO: take care that value with variable length fits into buffer: ({0} <= SNMP_MAX_VALUE_SIZE)", retLenVarName), singleLine: true));
}
GenerateGetMethodCodeCore(container, LocalValueName, ref localValueVarUsed, retLenVarName);
if (!localValueVarUsed)
{
container.AddCode(String.Format("LWIP_UNUSED_ARG({0});", LocalValueName));
}
}
protected virtual void GenerateGetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string retLenVarName)
{
container.AddElement(new Comment(String.Format("TODO: put requested value to '*{0}' here", localValueVarName), singleLine: true));
container.AddCodeFormat("{0} = {1};",
retLenVarName,
(!String.IsNullOrWhiteSpace(this.FixedValueLength)) ? this.FixedValueLength : "0");
}
public virtual void GenerateTestMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
if (this.Restrictions.Count > 0)
{
bool localVarUsed;
if (GenerateValueDeclaration(container, LocalValueName, valueVarName))
{
valueVarUsed = true;
localVarUsed = false;
}
else
{
localVarUsed = true; // do not generate UNUSED_ARG code
}
if (!String.IsNullOrWhiteSpace(this.FixedValueLength))
{
// check for fixed value
container.AddCodeFormat("LWIP_ASSERT(\"Invalid length for datatype\", ({0} == {1}));", lenVarName, this.FixedValueLength);
lenVarUsed = true;
}
GenerateTestMethodCodeCore(container, LocalValueName, ref localVarUsed, lenVarName, ref lenVarUsed, retErrVarName);
if (!localVarUsed)
{
container.AddCode(String.Format("LWIP_UNUSED_ARG({0});", LocalValueName));
}
}
else
{
container.AddCodeFormat("{0} == {1};", retErrVarName, LwipDefs.Def_ErrorCode_Ok);
}
}
protected virtual void GenerateTestMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
container.AddElement(new Comment(String.Format("TODO: test new value here:\nif (*{0} == ) {1} = {2};", localValueVarName, retErrVarName, LwipDefs.Def_ErrorCode_Ok)));
}
public virtual void GenerateSetMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
bool localVarUsed;
if (GenerateValueDeclaration(container, LocalValueName, valueVarName))
{
valueVarUsed = true;
localVarUsed = false;
}
else
{
localVarUsed = true; // do not generate UNUSED_ARG code
}
GenerateSetMethodCodeCore(container, LocalValueName, ref localVarUsed, lenVarName, ref lenVarUsed, retErrVarName);
if (!localVarUsed)
{
container.AddCode(String.Format("LWIP_UNUSED_ARG({0});", LocalValueName));
}
}
protected virtual void GenerateSetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
container.AddElement(new Comment(String.Format("TODO: store new value contained in '*{0}' here", localValueVarName), singleLine: true));
}
protected virtual bool GenerateValueDeclaration(CodeContainerBase container, string variableName, string sourceName)
{
container.AddDeclaration(new VariableDeclaration(
new VariableType(variableName, LwipDefs.Vt_U8, "*"),
"(" + new VariableType(null, LwipDefs.Vt_U8, "*") + ")" + sourceName));
return true;
}
public static SnmpScalarNode CreateFromDatatype(SnmpDataType dataType, SnmpTreeNode parentNode)
{
switch (dataType)
{
case SnmpDataType.Integer:
return new SnmpScalarNodeInt(parentNode);
case SnmpDataType.Gauge:
case SnmpDataType.Counter:
case SnmpDataType.TimeTicks:
return new SnmpScalarNodeUint(dataType, parentNode);
}
return new SnmpScalarNode(parentNode);
}
}
}

View File

@@ -0,0 +1,121 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Text;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpScalarNodeBits : SnmpScalarNode
{
private readonly uint bitCount;
public SnmpScalarNodeBits(SnmpTreeNode parentNode, uint bitCount)
: base(parentNode)
{
this.DataType = SnmpDataType.Bits;
this.bitCount = bitCount;
}
public override void GenerateGetMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string retLenVarName)
{
container.AddCode(String.Format(
"{0} = snmp_encode_bits(({1} *){2}, SNMP_MAX_VALUE_SIZE, 0 /* TODO: pass real value here */, {3});",
retLenVarName,
LwipDefs.Vt_U8,
valueVarName,
this.bitCount));
valueVarUsed = true;
}
public override void GenerateTestMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
if (this.Restrictions.Count > 0)
{
const string bitVarName = "bits";
container.Declarations.Add(new VariableDeclaration(new VariableType(bitVarName, LwipDefs.Vt_U32)));
IfThenElse ite = new IfThenElse(String.Format(
"snmp_decode_bits(({0} *){1}, {2}, &{3}) == ERR_OK",
LwipDefs.Vt_U8,
valueVarName,
lenVarName,
bitVarName));
valueVarUsed = true;
lenVarUsed = true;
StringBuilder innerIfCond = new StringBuilder();
foreach (IRestriction restriction in this.Restrictions)
{
innerIfCond.Append(restriction.GetCheckCodeValid(bitVarName));
innerIfCond.Append(" || ");
}
innerIfCond.Length -= 4;
IfThenElse innerIte = new IfThenElse(innerIfCond.ToString());
innerIte.AddCode(String.Format("{0} = {1};", retErrVarName, LwipDefs.Def_ErrorCode_Ok));
ite.AddElement(innerIte);
container.AddElement(ite);
}
else
{
base.GenerateTestMethodCode(container, valueVarName, ref valueVarUsed, lenVarName, ref lenVarUsed, retErrVarName);
}
}
public override void GenerateSetMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
const string bitVarName = "bits";
container.Declarations.Add(new VariableDeclaration(new VariableType(bitVarName, LwipDefs.Vt_U32)));
IfThenElse ite = new IfThenElse(String.Format(
"snmp_decode_bits(({0} *){1}, {2}, &{3}) == ERR_OK",
LwipDefs.Vt_U8,
valueVarName,
lenVarName,
bitVarName));
valueVarUsed = true;
lenVarUsed = true;
ite.AddElement(new Comment(String.Format("TODO: store new value contained in '{0}' here", bitVarName), singleLine: true));
container.AddElement(ite);
}
}
}

View File

@@ -0,0 +1,72 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Text;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpScalarNodeCounter64 : SnmpScalarNode
{
public SnmpScalarNodeCounter64(SnmpTreeNode parentNode)
: base(parentNode)
{
this.DataType = SnmpDataType.Counter64;
}
protected override bool GenerateValueDeclaration(CodeContainerBase container, string variableName, string sourceName)
{
container.AddDeclaration(new VariableDeclaration(
new VariableType(variableName + "_high", LwipDefs.Vt_U32, "*"),
"(" + new VariableType(null, LwipDefs.Vt_U32, "*").ToString() + ")" + sourceName));
container.AddDeclaration(new VariableDeclaration(
new VariableType(variableName + "_low", LwipDefs.Vt_U32, "*"),
variableName + "_high + 1"));
container.AddCode(String.Format("LWIP_UNUSED_ARG({0}_high);", variableName));
container.AddCode(String.Format("LWIP_UNUSED_ARG({0}_low);", variableName));
return false;
}
public override string FixedValueLength
{
get { return String.Format("(2 * sizeof({0}))", LwipDefs.Vt_U32); }
}
public override int OidRepresentationLen
{
get { return 1; }
}
}
}

View File

@@ -0,0 +1,86 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Text;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpScalarNodeInt : SnmpScalarNode
{
public SnmpScalarNodeInt(SnmpTreeNode parentNode)
: base(parentNode)
{
this.DataType = SnmpDataType.Integer;
}
protected override void GenerateTestMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
System.Diagnostics.Trace.Assert(this.Restrictions.Count > 0);
StringBuilder ifCond = new StringBuilder();
foreach (IRestriction restriction in this.Restrictions)
{
ifCond.Append(restriction.GetCheckCodeValid("*" + localValueVarName));
ifCond.Append(" || ");
localValueVarUsed = true;
}
ifCond.Length -= 4;
IfThenElse ite = new IfThenElse(ifCond.ToString());
ite.AddCode(String.Format("{0} = {1};", retErrVarName, LwipDefs.Def_ErrorCode_Ok));
container.AddElement(ite);
}
protected override bool GenerateValueDeclaration(CodeContainerBase container, string variableName, string sourceName)
{
container.AddDeclaration(new VariableDeclaration(
new VariableType(variableName, LwipDefs.Vt_S32, "*"),
"(" + new VariableType(null, LwipDefs.Vt_S32, "*") + ")" + sourceName));
return true;
}
public override string FixedValueLength
{
get { return String.Format("sizeof({0})", LwipDefs.Vt_S32); }
}
public override int OidRepresentationLen
{
get { return 1; }
}
}
}

View File

@@ -0,0 +1,90 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpScalarNodeObjectIdentifier: SnmpScalarNode
{
public SnmpScalarNodeObjectIdentifier(SnmpTreeNode parentNode)
: base(parentNode)
{
this.DataType = SnmpDataType.ObjectIdentifier;
}
protected override bool GenerateValueDeclaration(CodeContainerBase container, string variableName, string sourceName)
{
container.AddDeclaration(new VariableDeclaration(
new VariableType(variableName, LwipDefs.Vt_U32, "*"),
"(" + new VariableType(null, LwipDefs.Vt_U32, "*") + ")" + sourceName));
return true;
}
protected override void GenerateGetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string retLenVarName)
{
container.AddElement(new Comment(String.Format("TODO: put requested value to '*{0}' here. '{0}' has to be interpreted as {1}[]", localValueVarName, LwipDefs.Vt_U32), singleLine: true));
container.AddElement(EmptyLine.SingleLine);
container.AddCode(String.Format("{0} = 0; // TODO: return real value length here (should be 'numOfElements * sizeof({1})')", retLenVarName, LwipDefs.Vt_U32));
}
protected override void GenerateTestMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
VariableDeclaration objIdLenVar = new VariableDeclaration(
new VariableType(localValueVarName + "_len", LwipDefs.Vt_U8),
String.Format("{0} / sizeof({1})", lenVarName, LwipDefs.Vt_U32));
lenVarUsed = true;
container.Declarations.Add(objIdLenVar);
base.GenerateTestMethodCodeCore(container, localValueVarName, ref localValueVarUsed, lenVarName, ref lenVarUsed, retErrVarName);
container.AddCode(String.Format("LWIP_UNUSED_ARG({0});", objIdLenVar.Type.Name));
}
protected override void GenerateSetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
VariableDeclaration objIdLenVar = new VariableDeclaration(
new VariableType(localValueVarName + "_len", LwipDefs.Vt_U8),
String.Format("{0} / sizeof({1})", lenVarName, LwipDefs.Vt_U32));
lenVarUsed = true;
container.Declarations.Add(objIdLenVar);
base.GenerateSetMethodCodeCore(container, localValueVarName, ref localValueVarUsed, lenVarName, ref lenVarUsed, retErrVarName);
container.AddCode(String.Format("LWIP_UNUSED_ARG({0});", objIdLenVar.Type.Name));
}
}
}

View File

@@ -0,0 +1,118 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Text;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpScalarNodeOctetString : SnmpScalarNode
{
public SnmpScalarNodeOctetString(SnmpDataType dataType, SnmpTreeNode parentNode)
: base(parentNode)
{
System.Diagnostics.Debug.Assert(
(dataType == SnmpDataType.OctetString) ||
(dataType == SnmpDataType.Opaque) ||
(dataType == SnmpDataType.IpAddress));
this.DataType = dataType;
}
protected override void GenerateGetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string retLenVarName)
{
if (this.Restrictions.Count > 0)
{
StringBuilder ifCond = new StringBuilder();
foreach (IRestriction restriction in this.Restrictions)
{
ifCond.Append(restriction.GetCheckCodeValid(retLenVarName));
ifCond.Append(" || ");
}
ifCond.Length -= 4;
container.AddElement(new Comment("TODO: take care of len restrictions defined in MIB: " + ifCond, singleLine: true));
}
base.GenerateGetMethodCodeCore(container, localValueVarName, ref localValueVarUsed, retLenVarName);
}
protected override void GenerateTestMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
System.Diagnostics.Trace.Assert(this.Restrictions.Count > 0);
// checks refer to length of octet string
StringBuilder ifCond = new StringBuilder();
foreach (IRestriction restriction in this.Restrictions)
{
ifCond.Append(restriction.GetCheckCodeValid(lenVarName));
ifCond.Append(" || ");
lenVarUsed = true;
}
ifCond.Length -= 4;
IfThenElse ite = new IfThenElse(ifCond.ToString());
ite.AddCode(String.Format("{0} = {1};", retErrVarName, LwipDefs.Def_ErrorCode_Ok));
container.AddElement(ite);
}
public override int OidRepresentationLen
{
get
{
// check restrictions if we are set to one fixed length
if ((this.Restrictions != null) && (this.Restrictions.Count > 0))
{
foreach (IRestriction restriction in this.Restrictions)
{
if (restriction is IsInRangeRestriction)
{
if ((restriction as IsInRangeRestriction).RangeStart == (restriction as IsInRangeRestriction).RangeEnd)
{
return (int)(restriction as IsInRangeRestriction).RangeStart;
}
}
else if (restriction is IsEqualRestriction)
{
return (int)(restriction as IsEqualRestriction).Value;
}
}
}
return -1; // variable length
}
}
}
}

View File

@@ -0,0 +1,66 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpScalarNodeTruthValue : SnmpScalarNodeInt
{
public SnmpScalarNodeTruthValue(SnmpTreeNode parentNode)
: base(parentNode)
{
}
protected override void GenerateGetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string retLenVarName)
{
container.AddCodeFormat("snmp_encode_truthvalue({0}, /* TODO: put requested bool value here */ 0);", localValueVarName);
localValueVarUsed = true;
container.AddCode(String.Format("{0} = {1};",
retLenVarName,
(!String.IsNullOrWhiteSpace(this.FixedValueLength)) ? this.FixedValueLength : "0"));
}
protected override void GenerateSetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
VariableType truthVar = new VariableType("bool_value", LwipDefs.Vt_U8);
container.Declarations.Add(new VariableDeclaration(truthVar));
container.AddCodeFormat("snmp_decode_truthvalue({0}, &{1});", localValueVarName, truthVar.Name);
localValueVarUsed = true;
container.AddElement(new Comment(String.Format("TODO: store new value contained in '{0}' here", truthVar.Name), singleLine: true));
}
}
}

View File

@@ -0,0 +1,91 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Text;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpScalarNodeUint : SnmpScalarNode
{
public SnmpScalarNodeUint(SnmpDataType dataType, SnmpTreeNode parentNode)
: base(parentNode)
{
System.Diagnostics.Debug.Assert(
(dataType == SnmpDataType.Counter) ||
(dataType == SnmpDataType.Gauge) ||
(dataType == SnmpDataType.TimeTicks));
this.DataType = dataType;
}
protected override void GenerateTestMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
{
System.Diagnostics.Trace.Assert(this.Restrictions.Count > 0);
StringBuilder ifCond = new StringBuilder();
foreach (IRestriction restriction in this.Restrictions)
{
ifCond.Append(restriction.GetCheckCodeValid("*" + localValueVarName));
ifCond.Append(" || ");
localValueVarUsed = true;
}
ifCond.Length -= 4;
IfThenElse ite = new IfThenElse(ifCond.ToString());
ite.AddCode(String.Format("{0} = {1};", retErrVarName, LwipDefs.Def_ErrorCode_Ok));
container.AddElement(ite);
}
protected override bool GenerateValueDeclaration(CodeContainerBase container, string variableName, string sourceName)
{
container.AddDeclaration(new VariableDeclaration(
new VariableType(variableName, LwipDefs.Vt_U32, "*"),
"(" + new VariableType(null, LwipDefs.Vt_U32, "*") + ")" + sourceName));
return true;
}
public override string FixedValueLength
{
get { return String.Format("sizeof({0})", LwipDefs.Vt_U32); }
}
public override int OidRepresentationLen
{
get { return 1; }
}
}
}

View File

@@ -0,0 +1,332 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Collections.Generic;
using System.Text;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpTableNode: SnmpScalarAggregationNode
{
private readonly List<SnmpScalarNode> cellNodes = new List<SnmpScalarNode>();
private readonly List<SnmpScalarNode> indexNodes = new List<SnmpScalarNode>();
private string augmentedTableRow = null;
public SnmpTableNode(SnmpTreeNode parentNode)
: base(parentNode)
{
}
public List<SnmpScalarNode> CellNodes
{
get { return cellNodes; }
}
public List<SnmpScalarNode> IndexNodes
{
get { return indexNodes; }
}
public string AugmentedTableRow
{
get { return this.augmentedTableRow; }
set { this.augmentedTableRow = value; }
}
public override string FullNodeName
{
get
{
string result = this.Name.ToLowerInvariant();
if (!result.Contains("table"))
{
result += "_table";
}
return result;
}
}
protected override IEnumerable<SnmpScalarNode> AggregatedScalarNodes
{
get { return this.cellNodes; }
}
public override void GenerateCode(MibCFile mibFile)
{
FunctionDeclaration getInstanceMethodDecl = new FunctionDeclaration(this.FullNodeName + LwipDefs.FnctSuffix_GetInstance, isStatic: true);
getInstanceMethodDecl.Parameter.Add(new VariableType("column", LwipDefs.Vt_U32, "*", ConstType.Value));
getInstanceMethodDecl.Parameter.Add(new VariableType("row_oid", LwipDefs.Vt_U32, "*", ConstType.Value));
getInstanceMethodDecl.Parameter.Add(new VariableType("row_oid_len", LwipDefs.Vt_U8, ""));
getInstanceMethodDecl.Parameter.Add(new VariableType("cell_instance", LwipDefs.Vt_StNodeInstance, "*"));
getInstanceMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
mibFile.Declarations.Add(getInstanceMethodDecl);
Function getInstanceMethod = Function.FromDeclaration(getInstanceMethodDecl);
GenerateGetInstanceMethodCode(getInstanceMethod);
mibFile.Implementation.Add(getInstanceMethod);
FunctionDeclaration getNextInstanceMethodDecl = new FunctionDeclaration(this.FullNodeName + LwipDefs.FnctSuffix_GetNextInstance, isStatic: true);
getNextInstanceMethodDecl.Parameter.Add(new VariableType("column", LwipDefs.Vt_U32, "*", ConstType.Value));
getNextInstanceMethodDecl.Parameter.Add(new VariableType("row_oid", LwipDefs.Vt_StObjectId, "*"));
getNextInstanceMethodDecl.Parameter.Add(new VariableType("cell_instance", LwipDefs.Vt_StNodeInstance, "*"));
getNextInstanceMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
mibFile.Declarations.Add(getNextInstanceMethodDecl);
Function getNextInstanceMethod = Function.FromDeclaration(getNextInstanceMethodDecl);
GenerateGetNextInstanceMethodCode(getNextInstanceMethod);
mibFile.Implementation.Add(getNextInstanceMethod);
VariableType instanceType = new VariableType("cell_instance", LwipDefs.Vt_StNodeInstance, "*");
GenerateAggregatedCode(
mibFile,
instanceType,
String.Format("SNMP_TABLE_GET_COLUMN_FROM_OID({0}->instance_oid.id)", instanceType.Name));
#region create and add column/table definitions
StringBuilder colDefs = new StringBuilder();
foreach (SnmpScalarNode colNode in this.cellNodes)
{
colDefs.AppendFormat(" {{{0}, {1}, {2}}}, /* {3} */ \n",
colNode.Oid,
LwipDefs.GetAsn1DefForSnmpDataType(colNode.DataType),
LwipDefs.GetLwipDefForSnmpAccessMode(colNode.AccessMode),
colNode.Name);
}
if (colDefs.Length > 0)
{
colDefs.Length--;
}
VariableDeclaration colDefsDecl = new VariableDeclaration(
new VariableType(this.FullNodeName + "_columns", LwipDefs.Vt_StTableColumnDef, null, ConstType.Value, String.Empty),
"{\n" + colDefs + "\n}",
isStatic: true);
mibFile.Declarations.Add(colDefsDecl);
string nodeInitialization = String.Format("SNMP_TABLE_CREATE({0}, {1}, {2}, {3}, {4}, {5}, {6})",
this.Oid,
colDefsDecl.Type.Name,
getInstanceMethodDecl.Name, getNextInstanceMethodDecl.Name,
(this.GetMethodRequired) ? this.GetMethodName : LwipDefs.Null,
(this.TestMethodRequired) ? this.TestMethodName : LwipDefs.Null,
(this.SetMethodRequired) ? this.SetMethodName : LwipDefs.Null
);
mibFile.Declarations.Add(new VariableDeclaration(
new VariableType(this.FullNodeName, LwipDefs.Vt_StTableNode, null, ConstType.Value),
nodeInitialization,
isStatic: true));
#endregion
}
protected virtual void GenerateGetInstanceMethodCode(Function getInstanceMethod)
{
VariableDeclaration returnValue = new VariableDeclaration((VariableType)getInstanceMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_NoSuchInstance);
returnValue.Type.Name = "err";
getInstanceMethod.Declarations.Add(returnValue);
int instanceOidLength = 0;
StringBuilder indexColumns = new StringBuilder();
foreach (SnmpScalarNode indexNode in this.indexNodes)
{
if (instanceOidLength >= 0)
{
if (indexNode.OidRepresentationLen >= 0)
{
instanceOidLength += indexNode.OidRepresentationLen;
}
else
{
// at least one index column has a variable length -> we cannot perform a static check
instanceOidLength = -1;
}
}
indexColumns.AppendFormat(
" {0} ({1}, OID length = {2})\n",
indexNode.Name,
indexNode.DataType,
(indexNode.OidRepresentationLen >= 0) ? indexNode.OidRepresentationLen.ToString() : "variable");
}
if (indexColumns.Length > 0)
{
indexColumns.Length--;
getInstanceMethod.Declarations.Insert(0, new Comment(String.Format(
"The instance OID of this table consists of following (index) column(s):\n{0}",
indexColumns)));
}
string augmentsHint = "";
if (!String.IsNullOrWhiteSpace(this.augmentedTableRow))
{
augmentsHint = String.Format(
"This table augments table '{0}'! Index columns therefore belong to table '{0}'!\n" +
"You may simply call the '*{1}' method of this table.\n\n",
(this.augmentedTableRow.ToLowerInvariant().EndsWith("entry")) ? this.augmentedTableRow.Substring(0, this.augmentedTableRow.Length-5) : this.augmentedTableRow,
LwipDefs.FnctSuffix_GetInstance);
}
CodeContainerBase ccb = getInstanceMethod;
if (instanceOidLength > 0)
{
IfThenElse ite = new IfThenElse(String.Format("{0} == {1}", getInstanceMethod.Parameter[2].Name, instanceOidLength));
getInstanceMethod.AddElement(ite);
ccb = ite;
}
ccb.AddCodeFormat("LWIP_UNUSED_ARG({0});", getInstanceMethod.Parameter[0].Name);
ccb.AddCodeFormat("LWIP_UNUSED_ARG({0});", getInstanceMethod.Parameter[1].Name);
if (instanceOidLength <= 0)
{
ccb.AddCodeFormat("LWIP_UNUSED_ARG({0});", getInstanceMethod.Parameter[2].Name);
}
ccb.AddCodeFormat("LWIP_UNUSED_ARG({0});", getInstanceMethod.Parameter[3].Name);
ccb.AddElement(new Comment(String.Format(
"TODO: check if '{0}'/'{1}' params contain a valid instance oid for a row\n" +
"If so, set '{2} = {3};'\n\n" +
"snmp_oid_* methods may be used for easier processing of oid\n\n" +
"{4}" +
"In order to avoid decoding OID a second time in subsequent get_value/set_test/set_value methods,\n" +
"you may store an arbitrary value (like a pointer to target value object) in '{5}->reference'/'{5}->reference_len'.\n" +
"But be aware that not always a subsequent method is called -> Do NOT allocate memory here and try to release it in subsequent methods!\n\n" +
"You also may replace function pointers in '{5}' param for get/test/set methods which contain the default values from table definition,\n" +
"in order to provide special methods, for the currently processed cell. Changed pointers are only valid for current request.",
getInstanceMethod.Parameter[1].Name,
getInstanceMethod.Parameter[2].Name,
returnValue.Type.Name,
LwipDefs.Def_ErrorCode_Ok,
augmentsHint,
getInstanceMethod.Parameter[3].Name
)));
getInstanceMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
}
protected virtual void GenerateGetNextInstanceMethodCode(Function getNextInstanceMethod)
{
getNextInstanceMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getNextInstanceMethod.Parameter[0].Name);
getNextInstanceMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getNextInstanceMethod.Parameter[1].Name);
getNextInstanceMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getNextInstanceMethod.Parameter[2].Name);
VariableDeclaration returnValue = new VariableDeclaration((VariableType)getNextInstanceMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_NoSuchInstance);
returnValue.Type.Name = "err";
getNextInstanceMethod.Declarations.Add(returnValue);
StringBuilder indexColumns = new StringBuilder();
foreach (SnmpScalarNode indexNode in this.indexNodes)
{
indexColumns.AppendFormat(
" {0} ({1}, OID length = {2})\n",
indexNode.Name,
indexNode.DataType,
(indexNode.OidRepresentationLen >= 0) ? indexNode.OidRepresentationLen.ToString() : "variable");
}
if (indexColumns.Length > 0)
{
indexColumns.Length--;
getNextInstanceMethod.Declarations.Insert(0, new Comment(String.Format(
"The instance OID of this table consists of following (index) column(s):\n{0}",
indexColumns)));
}
string augmentsHint = "";
if (!String.IsNullOrWhiteSpace(this.augmentedTableRow))
{
augmentsHint = String.Format(
"This table augments table '{0}'! Index columns therefore belong to table '{0}'!\n" +
"You may simply call the '*{1}' method of this table.\n\n",
(this.augmentedTableRow.ToLowerInvariant().EndsWith("entry")) ? this.augmentedTableRow.Substring(0, this.augmentedTableRow.Length-5) : this.augmentedTableRow,
LwipDefs.FnctSuffix_GetNextInstance);
}
getNextInstanceMethod.AddElement(new Comment(String.Format(
"TODO: analyze '{0}->id'/'{0}->len' and return the subsequent row instance\n" +
"Be aware that '{0}->id'/'{0}->len' must not point to a valid instance or have correct instance length.\n" +
"If '{0}->len' is 0, return the first instance. If '{0}->len' is longer than expected, cut superfluous OID parts.\n" +
"If a valid next instance is found, store it in '{0}->id'/'{0}->len' and set '{1} = {2};'\n\n" +
"snmp_oid_* methods may be used for easier processing of oid\n\n" +
"{3}" +
"In order to avoid decoding OID a second time in subsequent get_value/set_test/set_value methods,\n" +
"you may store an arbitrary value (like a pointer to target value object) in '{4}->reference'/'{4}->reference_len'.\n" +
"But be aware that not always a subsequent method is called -> Do NOT allocate memory here and try to release it in subsequent methods!\n\n" +
"You also may replace function pointers in '{4}' param for get/test/set methods which contain the default values from table definition,\n" +
"in order to provide special methods, for the currently processed cell. Changed pointers are only valid for current request.",
getNextInstanceMethod.Parameter[1].Name,
returnValue.Type.Name,
LwipDefs.Def_ErrorCode_Ok,
augmentsHint,
getNextInstanceMethod.Parameter[2].Name
)));
getNextInstanceMethod.AddElement(new Comment(String.Format(
"For easier processing and getting the next instance, you may use the 'snmp_next_oid_*' enumerator.\n" +
"Simply pass all known instance OID's to it and it returns the next valid one:\n\n" +
"{0} state;\n" +
"{1} result_buf;\n" +
"snmp_next_oid_init(&state, {2}->id, {2}->len, result_buf, LWIP_SNMP_OBJ_ID_LEN);\n" +
"while ({{not all instances passed}}) {{\n" +
" {1} test_oid;\n" +
" {{fill test_oid to create instance oid for next instance}}\n" +
" snmp_next_oid_check(&state, test_oid->id, test_oid->len, {{target_data_ptr}});\n" +
"}}\n" +
"if(state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {{\n" +
" snmp_oid_assign(row_oid, result_buf->oid, result_buf->len);\n" +
" {3}->reference.ptr = state.reference; //==target_data_ptr, for usage in subsequent get/test/set\n" +
" {4} = {5};\n" +
"}}"
,
LwipDefs.Vt_StNextOidState,
LwipDefs.Vt_StObjectId,
getNextInstanceMethod.Parameter[1].Name,
getNextInstanceMethod.Parameter[2].Name,
returnValue.Type.Name,
LwipDefs.Def_ErrorCode_Ok
)));
getNextInstanceMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
}
}
}

View File

@@ -0,0 +1,242 @@
/*
* 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: Martin Hentschel <info@cl-soft.de>
*
*/
using System;
using System.Collections.Generic;
using System.Text;
using CCodeGeneration;
namespace LwipSnmpCodeGeneration
{
public class SnmpTreeNode: SnmpScalarAggregationNode
{
private readonly List<SnmpNode> childNodes = new List<SnmpNode>();
private readonly List<SnmpScalarNode> childScalarNodes = new List<SnmpScalarNode>();
private string fullOid = "";
public SnmpTreeNode(SnmpTreeNode parentNode)
: base(parentNode)
{
}
public override string FullNodeName
{
get { return this.Name.ToLowerInvariant() + "_treenode"; }
}
public string FullOid
{
get { return this.fullOid; }
set { this.fullOid = value; }
}
public List<SnmpNode> ChildNodes
{
get { return this.childNodes; }
}
protected override IEnumerable<SnmpScalarNode> AggregatedScalarNodes
{
get { return this.childScalarNodes; }
}
private void GenerateAggregatedCode(MibCFile mibFile, bool generateDeclarations, bool generateImplementations)
{
VariableType instanceType = new VariableType("instance", LwipDefs.Vt_StNodeInstance, "*");
base.GenerateAggregatedCode(
mibFile,
instanceType,
String.Format("{0}->node->oid", instanceType.Name),
generateDeclarations,
generateImplementations);
}
private void GenerateAggregateMethodDeclarations(MibCFile mibFile)
{
if (LwipOpts.GenerateSingleAccessMethodsForTreeNodeScalars && (this.childScalarNodes.Count > 1))
{
GenerateAggregatedCode(mibFile, true, false);
}
}
public override void GenerateCode(MibCFile mibFile)
{
string nodeInitialization;
if (LwipOpts.GenerateSingleAccessMethodsForTreeNodeScalars && (this.childScalarNodes.Count > 1))
{
GenerateAggregatedCode(mibFile, false, true);
}
// create and add node declaration
if (this.childNodes.Count > 0)
{
StringBuilder subnodeArrayInitialization = new StringBuilder();
for (int i=0; i<this.childNodes.Count; i++)
{
subnodeArrayInitialization.Append(" &");
subnodeArrayInitialization.Append(this.childNodes[i].FullNodeName);
subnodeArrayInitialization.Append(".node");
if (!(this.childNodes[i] is SnmpTreeNode))
{
subnodeArrayInitialization.Append(".node");
}
if (i < (this.childNodes.Count - 1))
{
subnodeArrayInitialization.Append(",\n");
}
}
VariableDeclaration subnodeArray = new VariableDeclaration(
new VariableType(this.Name.ToLowerInvariant() + "_subnodes", LwipDefs.Vt_StNode, "*", ConstType.Both, String.Empty),
"{\n" + subnodeArrayInitialization + "\n}",
isStatic: true);
mibFile.Declarations.Add(subnodeArray);
nodeInitialization = String.Format("SNMP_CREATE_TREE_NODE({0}, {1})", this.Oid, subnodeArray.Type.Name);
}
else
{
nodeInitialization = String.Format("SNMP_CREATE_EMPTY_TREE_NODE({0})", this.Oid);
}
mibFile.Declarations.Add(new VariableDeclaration(
new VariableType(this.FullNodeName, LwipDefs.Vt_StTreeNode, null, ConstType.Value),
nodeInitialization,
isStatic: true));
}
public override void Analyze()
{
this.childScalarNodes.Clear();
// delegate analyze (don't use enumerator because the child node may change our child collection by e.g. removing or replacing itself)
for (int i=this.ChildNodes.Count-1; i>=0; i--)
{
this.ChildNodes[i].Analyze();
}
// collect scalar nodes
foreach (SnmpNode childNode in this.childNodes)
{
SnmpScalarNode scalarNode = childNode as SnmpScalarNode;
if (scalarNode != null)
{
this.childScalarNodes.Add(scalarNode);
}
}
base.Analyze();
// check if we can merge this node to a scalar array node (all childs need to be scalars)
if (this.childNodes.Count > 0)
{
if (LwipOpts.GenerateScalarArrays && (this.childScalarNodes.Count == this.childNodes.Count) && (this.ParentNode != null))
{
SnmpScalarArrayNode scalarArrayNode = new SnmpScalarArrayNode(this.childScalarNodes, this.ParentNode);
scalarArrayNode.Oid = this.Oid;
scalarArrayNode.Name = this.Name;
scalarArrayNode.Analyze();
for (int i=0; i<this.ParentNode.ChildNodes.Count; i++)
{
if (this.ParentNode.ChildNodes[i] == this)
{
this.ParentNode.ChildNodes.RemoveAt(i);
this.ParentNode.ChildNodes.Insert(i, scalarArrayNode);
break;
}
}
}
else if (LwipOpts.GenerateSingleAccessMethodsForTreeNodeScalars && (this.childScalarNodes.Count > 1))
{
foreach (SnmpScalarNode scalarNode in this.childScalarNodes)
{
scalarNode.UseExternalMethods = true;
scalarNode.ExternalGetMethod = this.GetMethodName;
scalarNode.ExternalTestMethod = this.TestMethodName;
scalarNode.ExternalSetMethod = this.SetMethodName;
}
}
}
else // if (this.childNodes.Count == 0)
{
if (!LwipOpts.GenerateEmptyFolders && (this.ParentNode != null))
{
// do not generate this empty folder because it only waste (static) memory
for (int i=0; i<this.ParentNode.ChildNodes.Count; i++)
{
if (this.ParentNode.ChildNodes[i] == this)
{
this.ParentNode.ChildNodes.RemoveAt(i);
break;
}
}
}
}
}
public override void Generate(MibCFile generatedFile, MibHeaderFile generatedHeaderFile)
{
// generate code of child nodes
foreach (SnmpNode childNode in this.childNodes)
{
if (childNode is SnmpTreeNode)
{
childNode.Generate(generatedFile, generatedHeaderFile);
}
}
Comment dividerComment = new Comment(
String.Format("--- {0} {1} -----------------------------------------------------", this.Name, this.fullOid),
singleLine: true);
generatedFile.Declarations.Add(dividerComment);
generatedFile.Implementation.Add(dividerComment);
this.GenerateAggregateMethodDeclarations(generatedFile);
foreach (SnmpNode childNode in this.childNodes)
{
if (!(childNode is SnmpTreeNode))
{
childNode.Generate(generatedFile, generatedHeaderFile);
}
}
base.Generate(generatedFile, generatedHeaderFile);
}
}
}

View File

@@ -0,0 +1,131 @@
IANA-ADDRESS-FAMILY-NUMBERS-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY,
mib-2 FROM SNMPv2-SMI
TEXTUAL-CONVENTION FROM SNMPv2-TC;
ianaAddressFamilyNumbers MODULE-IDENTITY
LAST-UPDATED "200203140000Z" -- March 14, 2002
ORGANIZATION "IANA"
CONTACT-INFO
"Postal: Internet Assigned Numbers Authority
Internet Corporation for Assigned Names
and Numbers
4676 Admiralty Way, Suite 330
Marina del Rey, CA 90292-6601
USA
Tel: +1 310-823-9358
E-Mail: iana&iana.org"
DESCRIPTION
"The MIB module defines the AddressFamilyNumbers
textual convention."
-- revision history
REVISION "200203140000Z" -- March 14, 2002
DESCRIPTION "AddressFamilyNumbers assignment 22 to
fibreChannelWWPN. AddressFamilyNumbers
assignment 23 to fibreChannelWWNN.
AddressFamilyNumers assignment 24 to gwid."
REVISION "200009080000Z" -- September 8, 2000
DESCRIPTION "AddressFamilyNumbers assignment 19 to xtpOverIpv4.
AddressFamilyNumbers assignment 20 to xtpOverIpv6.
AddressFamilyNumbers assignment 21 to xtpNativeModeXTP."
REVISION "200003010000Z" -- March 1, 2000
DESCRIPTION "AddressFamilyNumbers assignment 17 to distinguishedName.
AddressFamilyNumbers assignment 18 to asNumber."
REVISION "200002040000Z" -- February 4, 2000
DESCRIPTION "AddressFamilyNumbers assignment 16 to dns."
REVISION "9908260000Z" -- August 26, 1999
DESCRIPTION "Initial version, published as RFC 2677."
::= { mib-2 72 }
AddressFamilyNumbers ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"The definition of this textual convention with the
addition of newly assigned values is published
periodically by the IANA, in either the Assigned
Numbers RFC, or some derivative of it specific to
Internet Network Management number assignments.
(The latest arrangements can be obtained by
contacting the IANA.)
The enumerations are described as:
other(0), -- none of the following
ipV4(1), -- IP Version 4
ipV6(2), -- IP Version 6
nsap(3), -- NSAP
hdlc(4), -- (8-bit multidrop)
bbn1822(5),
all802(6), -- (includes all 802 media
-- plus Ethernet 'canonical format')
e163(7),
e164(8), -- (SMDS, Frame Relay, ATM)
f69(9), -- (Telex)
x121(10), -- (X.25, Frame Relay)
ipx(11), -- IPX (Internet Protocol Exchange)
appleTalk(12), -- Apple Talk
decnetIV(13), -- DEC Net Phase IV
banyanVines(14), -- Banyan Vines
e164withNsap(15),
-- (E.164 with NSAP format subaddress)
dns(16), -- (Domain Name System)
distinguishedName(17), -- (Distinguished Name, per X.500)
asNumber(18), -- (16-bit quantity, per the AS number space)
xtpOverIpv4(19), -- XTP over IP version 4
xtpOverIpv6(20), -- XTP over IP version 6
xtpNativeModeXTP(21), -- XTP native mode XTP
fibreChannelWWPN(22), -- Fibre Channel World-Wide Port Name
fibreChannelWWNN(23), -- Fibre Channel World-Wide Node Name
gwid(24), -- Gateway Identifier
afi(25), -- AFI for L2VPN information
reserved(65535)
Requests for new values should be made to IANA via
email (iana&iana.org)."
SYNTAX INTEGER {
other(0),
ipV4(1),
ipV6(2),
nsap(3),
hdlc(4),
bbn1822(5),
all802(6),
e163(7),
e164(8),
f69(9),
x121(10),
ipx(11),
appleTalk(12),
decnetIV(13),
banyanVines(14),
e164withNsap(15),
dns(16),
distinguishedName(17), -- (Distinguished Name, per X.500)
asNumber(18), -- (16-bit quantity, per the AS number space)
xtpOverIpv4(19),
xtpOverIpv6(20),
xtpNativeModeXTP(21),
fibreChannelWWPN(22),
fibreChannelWWNN(23),
gwid(24),
afi(25),
reserved(65535)
}
END

View File

@@ -0,0 +1,345 @@
IANA-CHARSET-MIB DEFINITIONS ::= BEGIN
-- http://www.iana.org/assignments/ianacharset-mib
IMPORTS
MODULE-IDENTITY,
mib-2
FROM SNMPv2-SMI -- [RFC2578]
TEXTUAL-CONVENTION
FROM SNMPv2-TC; -- [RFC2579]
ianaCharsetMIB MODULE-IDENTITY
LAST-UPDATED "200705140000Z"
ORGANIZATION "IANA"
CONTACT-INFO " Internet Assigned Numbers Authority
Postal: ICANN
4676 Admiralty Way, Suite 330
Marina del Rey, CA 90292
Tel: +1 310 823 9358
E-Mail: iana&iana.org"
DESCRIPTION "This MIB module defines the IANACharset
TEXTUAL-CONVENTION. The IANACharset TC is used to
specify the encoding of string objects defined in
a MIB.
Each version of this MIB will be released based on
the IANA Charset Registry file (see RFC 2978) at
http://www.iana.org/assignments/character-sets.
Note: The IANACharset TC, originally defined in
RFC 1759, was inaccurately named CodedCharSet.
Note: Best practice is to define new MIB string
objects with invariant UTF-8 (RFC 3629) syntax
using the SnmpAdminString TC (defined in RFC 3411)
in accordance with IETF Policy on Character Sets and
Languages (RFC 2277).
Copyright (C) The Internet Society (2004). The
initial version of this MIB module was published
in RFC 3808; for full legal notices see the RFC
itself. Supplementary information may be
available on
http://www.ietf.org/copyrights/ianamib.html."
-- revision history
REVISION "200705140000Z"
DESCRIPTION "Registration of new charset 2107."
REVISION "200612070000Z"
DESCRIPTION "Registration of new charsets numbered 118, 119,
and 2106."
REVISION "200406080000Z"
DESCRIPTION "Original version transferred from Printer MIB,
generated from the IANA maintained assignments
http://www.iana.org/assignments/character-sets."
::= { mib-2 106 }
IANACharset ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"Specifies an IANA registered 'charset' - coded character set
(CCS) plus optional character encoding scheme (CES) - terms
defined in 'IANA Charset Registration Procedures' (RFC 2978).
Objects of this syntax are used to specify the encoding for
string objects defined in one or more MIBs. For example, the
prtLocalizationCharacterSet, prtInterpreterDefaultCharSetIn, and
prtInterpreterDefaultCharSetOut objects defined in Printer MIB.
The current list of 'charset' names and enumerated values
is contained in the IANA Character Set Registry at:
http://www.iana.org/assignments/character-sets
Enum names are derived from the IANA Charset Registry 'Alias'
fields that begin with 'cs' (for character set).
Enum values are derived from the parallel 'MIBenum' fields."
SYNTAX INTEGER {
other(1), -- used if the designated
-- character set is not currently
-- registered by IANA
unknown(2), -- used as a default value
csASCII(3),
csISOLatin1(4),
csISOLatin2(5),
csISOLatin3(6),
csISOLatin4(7),
csISOLatinCyrillic(8),
csISOLatinArabic(9),
csISOLatinGreek(10),
csISOLatinHebrew(11),
csISOLatin5(12),
csISOLatin6(13),
csISOTextComm(14),
csHalfWidthKatakana(15),
csJISEncoding(16),
csShiftJIS(17),
csEUCPkdFmtJapanese(18),
csEUCFixWidJapanese(19),
csISO4UnitedKingdom(20),
csISO11SwedishForNames(21),
csISO15Italian(22),
csISO17Spanish(23),
csISO21German(24),
csISO60DanishNorwegian(25),
csISO69French(26),
csISO10646UTF1(27),
csISO646basic1983(28),
csINVARIANT(29),
csISO2IntlRefVersion(30),
csNATSSEFI(31),
csNATSSEFIADD(32),
csNATSDANO(33),
csNATSDANOADD(34),
csISO10Swedish(35),
csKSC56011987(36),
csISO2022KR(37),
csEUCKR(38),
csISO2022JP(39),
csISO2022JP2(40),
csISO13JISC6220jp(41),
csISO14JISC6220ro(42),
csISO16Portuguese(43),
csISO18Greek7Old(44),
csISO19LatinGreek(45),
csISO25French(46),
csISO27LatinGreek1(47),
csISO5427Cyrillic(48),
csISO42JISC62261978(49),
csISO47BSViewdata(50),
csISO49INIS(51),
csISO50INIS8(52),
csISO51INISCyrillic(53),
csISO54271981(54),
csISO5428Greek(55),
csISO57GB1988(56),
csISO58GB231280(57),
csISO61Norwegian2(58),
csISO70VideotexSupp1(59),
csISO84Portuguese2(60),
csISO85Spanish2(61),
csISO86Hungarian(62),
csISO87JISX0208(63),
csISO88Greek7(64),
csISO89ASMO449(65),
csISO90(66),
csISO91JISC62291984a(67),
csISO92JISC62991984b(68),
csISO93JIS62291984badd(69),
csISO94JIS62291984hand(70),
csISO95JIS62291984handadd(71),
csISO96JISC62291984kana(72),
csISO2033(73),
csISO99NAPLPS(74),
csISO102T617bit(75),
csISO103T618bit(76),
csISO111ECMACyrillic(77),
csa71(78),
csa72(79),
csISO123CSAZ24341985gr(80),
csISO88596E(81),
csISO88596I(82),
csISO128T101G2(83),
csISO88598E(84),
csISO88598I(85),
csISO139CSN369103(86),
csISO141JUSIB1002(87),
csISO143IECP271(88),
csISO146Serbian(89),
csISO147Macedonian(90),
csISO150(91),
csISO151Cuba(92),
csISO6937Add(93),
csISO153GOST1976874(94),
csISO8859Supp(95),
csISO10367Box(96),
csISO158Lap(97),
csISO159JISX02121990(98),
csISO646Danish(99),
csUSDK(100),
csDKUS(101),
csKSC5636(102),
csUnicode11UTF7(103),
csISO2022CN(104),
csISO2022CNEXT(105),
csUTF8(106),
csISO885913(109),
csISO885914(110),
csISO885915(111),
csISO885916(112),
csGBK(113),
csGB18030(114),
csOSDEBCDICDF0415(115),
csOSDEBCDICDF03IRV(116),
csOSDEBCDICDF041(117),
csISO115481(118),
csKZ1048(119),
csUnicode(1000),
csUCS4(1001),
csUnicodeASCII(1002),
csUnicodeLatin1(1003),
csUnicodeIBM1261(1005),
csUnicodeIBM1268(1006),
csUnicodeIBM1276(1007),
csUnicodeIBM1264(1008),
csUnicodeIBM1265(1009),
csUnicode11(1010),
csSCSU(1011),
csUTF7(1012),
csUTF16BE(1013),
csUTF16LE(1014),
csUTF16(1015),
csCESU8(1016),
csUTF32(1017),
csUTF32BE(1018),
csUTF32LE(1019),
csBOCU1(1020),
csWindows30Latin1(2000),
csWindows31Latin1(2001),
csWindows31Latin2(2002),
csWindows31Latin5(2003),
csHPRoman8(2004),
csAdobeStandardEncoding(2005),
csVenturaUS(2006),
csVenturaInternational(2007),
csDECMCS(2008),
csPC850Multilingual(2009),
csPCp852(2010),
csPC8CodePage437(2011),
csPC8DanishNorwegian(2012),
csPC862LatinHebrew(2013),
csPC8Turkish(2014),
csIBMSymbols(2015),
csIBMThai(2016),
csHPLegal(2017),
csHPPiFont(2018),
csHPMath8(2019),
csHPPSMath(2020),
csHPDesktop(2021),
csVenturaMath(2022),
csMicrosoftPublishing(2023),
csWindows31J(2024),
csGB2312(2025),
csBig5(2026),
csMacintosh(2027),
csIBM037(2028),
csIBM038(2029),
csIBM273(2030),
csIBM274(2031),
csIBM275(2032),
csIBM277(2033),
csIBM278(2034),
csIBM280(2035),
csIBM281(2036),
csIBM284(2037),
csIBM285(2038),
csIBM290(2039),
csIBM297(2040),
csIBM420(2041),
csIBM423(2042),
csIBM424(2043),
csIBM500(2044),
csIBM851(2045),
csIBM855(2046),
csIBM857(2047),
csIBM860(2048),
csIBM861(2049),
csIBM863(2050),
csIBM864(2051),
csIBM865(2052),
csIBM868(2053),
csIBM869(2054),
csIBM870(2055),
csIBM871(2056),
csIBM880(2057),
csIBM891(2058),
csIBM903(2059),
csIBBM904(2060),
csIBM905(2061),
csIBM918(2062),
csIBM1026(2063),
csIBMEBCDICATDE(2064),
csEBCDICATDEA(2065),
csEBCDICCAFR(2066),
csEBCDICDKNO(2067),
csEBCDICDKNOA(2068),
csEBCDICFISE(2069),
csEBCDICFISEA(2070),
csEBCDICFR(2071),
csEBCDICIT(2072),
csEBCDICPT(2073),
csEBCDICES(2074),
csEBCDICESA(2075),
csEBCDICESS(2076),
csEBCDICUK(2077),
csEBCDICUS(2078),
csUnknown8BiT(2079),
csMnemonic(2080),
csMnem(2081),
csVISCII(2082),
csVIQR(2083),
csKOI8R(2084),
csHZGB2312(2085),
csIBM866(2086),
csPC775Baltic(2087),
csKOI8U(2088),
csIBM00858(2089),
csIBM00924(2090),
csIBM01140(2091),
csIBM01141(2092),
csIBM01142(2093),
csIBM01143(2094),
csIBM01144(2095),
csIBM01145(2096),
csIBM01146(2097),
csIBM01147(2098),
csIBM01148(2099),
csIBM01149(2100),
csBig5HKSCS(2101),
csIBM1047(2102),
csPTCP154(2103),
csAmiga1251(2104),
csKOI7switched(2105),
csBRF(2106),
csTSCII(2107),
cswindows1250(2250),
cswindows1251(2251),
cswindows1252(2252),
cswindows1253(2253),
cswindows1254(2254),
cswindows1255(2255),
cswindows1256(2256),
cswindows1257(2257),
cswindows1258(2258),
csTIS620(2259),
reserved(3000)
}
END

View File

@@ -0,0 +1,333 @@
IANA-ITU-ALARM-TC-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, mib-2 FROM SNMPv2-SMI
TEXTUAL-CONVENTION FROM SNMPv2-TC;
ianaItuAlarmNumbers MODULE-IDENTITY
LAST-UPDATED "200409090000Z" -- September 09, 2004
ORGANIZATION "IANA"
CONTACT-INFO
"Postal: Internet Assigned Numbers Authority
Internet Corporation for Assigned Names
and Numbers
4676 Admiralty Way, Suite 330
Marina del Rey, CA 90292-6601
USA
Tel: +1 310-823-9358
E-Mail: iana&iana.org"
DESCRIPTION
"The MIB module defines the ITU Alarm
textual convention for objects expected to require
regular extension.
Copyright (C) The Internet Society (2004). The
initial version of this MIB module was published
in RFC 3877. For full legal notices see the RFC
itself. Supplementary information may be available on:
http://www.ietf.org/copyrights/ianamib.html"
REVISION "200409090000Z"
DESCRIPTION
"Initial version, published as RFC 3877."
::= { mib-2 119 }
IANAItuProbableCause ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"ITU-T probable cause values. Duplicate values defined in
X.733 are appended with X733 to ensure syntactic uniqueness.
Probable cause value 0 is reserved for special purposes.
The Internet Assigned Number Authority (IANA) is responsible
for the assignment of the enumerations in this TC.
IANAItuProbableCause value of 0 is reserved for special
purposes and MUST NOT be assigned.
Values of IANAItuProbableCause in the range 1 to 1023 are
reserved for causes that correspond to ITU-T probable cause.
All other requests for new causes will be handled on a
first-come, first served basis and will be assigned
enumeration values starting with 1025.
Request should come in the form of well-formed
SMI [RFC2578] for enumeration names that are unique and
sufficiently descriptive.
While some effort will be taken to ensure that new probable
causes do not conceptually duplicate existing probable
causes it is acknowledged that the existence of conceptual
duplicates in the starting probable cause list is an known
industry reality.
To aid IANA in the administration of probable cause names
and values, the OPS Area Director will appoint one or more
experts to help review requests.
See http://www.iana.org"
REFERENCE
"ITU Recommendation M.3100, 'Generic Network Information
Model', 1995
ITU Recommendation X.733, 'Information Technology - Open
Systems Interconnection - System Management: Alarm
Reporting Function', 1992
ITU Recommendation X.736, 'Information Technology - Open
Systems Interconnection - System Management: Security
Alarm Reporting Function', 1992"
SYNTAX INTEGER
{
-- The following probable causes were defined in M.3100
aIS (1),
callSetUpFailure (2),
degradedSignal (3),
farEndReceiverFailure (4),
framingError (5),
lossOfFrame (6),
lossOfPointer (7),
lossOfSignal (8),
payloadTypeMismatch (9),
transmissionError (10),
remoteAlarmInterface (11),
excessiveBER (12),
pathTraceMismatch (13),
unavailable (14),
signalLabelMismatch (15),
lossOfMultiFrame (16),
receiveFailure (17),
transmitFailure (18),
modulationFailure (19),
demodulationFailure (20),
broadcastChannelFailure (21),
connectionEstablishmentError (22),
invalidMessageReceived (23),
localNodeTransmissionError (24),
remoteNodeTransmissionError (25),
routingFailure (26),
--Values 27-50 are reserved for communications alarm related
--probable causes
-- The following are used with equipment alarm.
backplaneFailure (51),
dataSetProblem (52),
equipmentIdentifierDuplication (53),
externalIFDeviceProblem (54),
lineCardProblem (55),
multiplexerProblem (56),
nEIdentifierDuplication (57),
powerProblem (58),
processorProblem (59),
protectionPathFailure (60),
receiverFailure (61),
replaceableUnitMissing (62),
replaceableUnitTypeMismatch (63),
synchronizationSourceMismatch (64),
terminalProblem (65),
timingProblem (66),
transmitterFailure (67),
trunkCardProblem (68),
replaceableUnitProblem (69),
realTimeClockFailure (70),
--An equipment alarm to be issued if the system detects that the
--real time clock has failed
antennaFailure (71),
batteryChargingFailure (72),
diskFailure (73),
frequencyHoppingFailure (74),
iODeviceError (75),
lossOfSynchronisation (76),
lossOfRedundancy (77),
powerSupplyFailure (78),
signalQualityEvaluationFailure (79),
tranceiverFailure (80),
protectionMechanismFailure (81),
protectingResourceFailure (82),
-- Values 83-100 are reserved for equipment alarm related probable
-- causes
-- The following are used with environmental alarm.
airCompressorFailure (101),
airConditioningFailure (102),
airDryerFailure (103),
batteryDischarging (104),
batteryFailure (105),
commercialPowerFailure (106),
coolingFanFailure (107),
engineFailure (108),
fireDetectorFailure (109),
fuseFailure (110),
generatorFailure (111),
lowBatteryThreshold (112),
pumpFailure (113),
rectifierFailure (114),
rectifierHighVoltage (115),
rectifierLowFVoltage (116),
ventilationsSystemFailure (117),
enclosureDoorOpen (118),
explosiveGas (119),
fire (120),
flood (121),
highHumidity (122),
highTemperature (123),
highWind (124),
iceBuildUp (125),
intrusionDetection (126),
lowFuel (127),
lowHumidity (128),
lowCablePressure (129),
lowTemperatue (130),
lowWater (131),
smoke (132),
toxicGas (133),
coolingSystemFailure (134),
externalEquipmentFailure (135),
externalPointFailure (136),
-- Values 137-150 are reserved for environmental alarm related
-- probable causes
-- The following are used with Processing error alarm.
storageCapacityProblem (151),
memoryMismatch (152),
corruptData (153),
outOfCPUCycles (154),
sfwrEnvironmentProblem (155),
sfwrDownloadFailure (156),
lossOfRealTimel (157),
--A processing error alarm to be issued after the system has
--reinitialised. This will indicate
--to the management systems that the view they have of the managed
--system may no longer
--be valid. Usage example: The managed
--system issues this alarm after a reinitialization with severity
--warning to inform the
--management system about the event. No clearing notification will
--be sent.
applicationSubsystemFailure (158),
configurationOrCustomisationError (159),
databaseInconsistency (160),
fileError (161),
outOfMemory (162),
softwareError (163),
timeoutExpired (164),
underlayingResourceUnavailable (165),
versionMismatch (166),
--Values 168-200 are reserved for processing error alarm related
-- probable causes.
bandwidthReduced (201),
congestion (202),
excessiveErrorRate (203),
excessiveResponseTime (204),
excessiveRetransmissionRate (205),
reducedLoggingCapability (206),
systemResourcesOverload (207 ),
-- The following were defined X.733
adapterError (500),
applicationSubsystemFailture (501),
bandwidthReducedX733 (502),
callEstablishmentError (503),
communicationsProtocolError (504),
communicationsSubsystemFailure (505),
configurationOrCustomizationError (506),
congestionX733 (507),
coruptData (508),
cpuCyclesLimitExceeded (509),
dataSetOrModemError (510),
degradedSignalX733 (511),
dteDceInterfaceError (512),
enclosureDoorOpenX733 (513),
equipmentMalfunction (514),
excessiveVibration (515),
fileErrorX733 (516),
fireDetected (517),
framingErrorX733 (518),
heatingVentCoolingSystemProblem (519),
humidityUnacceptable (520),
inputOutputDeviceError (521),
inputDeviceError (522),
lanError (523),
leakDetected (524),
localNodeTransmissionErrorX733 (525),
lossOfFrameX733 (526),
lossOfSignalX733 (527),
materialSupplyExhausted (528),
multiplexerProblemX733 (529),
outOfMemoryX733 (530),
ouputDeviceError (531),
performanceDegraded (532),
powerProblems (533),
pressureUnacceptable (534),
processorProblems (535),
pumpFailureX733 (536),
queueSizeExceeded (537),
receiveFailureX733 (538),
receiverFailureX733 (539),
remoteNodeTransmissionErrorX733 (540),
resourceAtOrNearingCapacity (541),
responseTimeExecessive (542),
retransmissionRateExcessive (543),
softwareErrorX733 (544),
softwareProgramAbnormallyTerminated (545),
softwareProgramError (546),
storageCapacityProblemX733 (547),
temperatureUnacceptable (548),
thresholdCrossed (549),
timingProblemX733 (550),
toxicLeakDetected (551),
transmitFailureX733 (552),
transmiterFailure (553),
underlyingResourceUnavailable (554),
versionMismatchX733 (555),
-- The following are defined in X.736
authenticationFailure (600),
breachOfConfidentiality (601),
cableTamper (602),
delayedInformation (603),
denialOfService (604),
duplicateInformation (605),
informationMissing (606),
informationModificationDetected (607),
informationOutOfSequence (608),
keyExpired (609),
nonRepudiationFailure (610),
outOfHoursActivity (611),
outOfService (612),
proceduralError (613),
unauthorizedAccessAttempt (614),
unexpectedInformation (615),
other (1024)
}
IANAItuEventType ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"The ITU event Type values.
The Internet Assigned Number Authority (IANA) is
responsible for the assignment of the enumerations
in this TC.
Request should come in the form of well-formed
SMI [RFC2578] for enumeration names that are unique
and sufficiently descriptive.
See http://www.iana.org "
REFERENCE
"ITU Recommendation X.736, 'Information Technology - Open
Systems Interconnection - System Management: Security
Alarm Reporting Function', 1992"
SYNTAX INTEGER
{
other (1),
communicationsAlarm (2),
qualityOfServiceAlarm (3),
processingErrorAlarm (4),
equipmentAlarm (5),
environmentalAlarm (6),
integrityViolation (7),
operationalViolation (8),
physicalViolation (9),
securityServiceOrMechanismViolation (10),
timeDomainViolation (11)
}
END

View File

@@ -0,0 +1,127 @@
IANA-LANGUAGE-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-IDENTITY, mib-2
FROM SNMPv2-SMI;
ianaLanguages MODULE-IDENTITY
LAST-UPDATED "200005100000Z" -- May 10, 2000
ORGANIZATION "IANA"
CONTACT-INFO
"Internet Assigned Numbers Authority (IANA)
Postal: ICANN
4676 Admiralty Way, Suite 330
Marina del Rey, CA 90292
Tel: +1 310 823 9358 x20
E-Mail: iana&iana.org"
DESCRIPTION
"The MIB module registers object identifier values for
well-known programming and scripting languages. Every
language registration MUST describe the format used
when transferring scripts written in this language.
Any additions or changes to the contents of this MIB
module require Designated Expert Review as defined in
the Guidelines for Writing IANA Considerations Section
document. The Designated Expert will be selected by
the IESG Area Director of the OPS Area.
Note, this module does not have to register all possible
languages since languages are identified by object
identifier values. It is therefore possible to registered
languages in private OID trees. The references given below are not
normative with regard to the language version. Other
references might be better suited to describe some newer
versions of this language. The references are only
provided as `a pointer into the right direction'."
-- Revision log, in reverse chronological order
REVISION "200005100000Z" -- May 10, 2000
DESCRIPTION "Import mib-2 instead of experimental, so that
this module compiles"
REVISION "199909090900Z" -- September 9, 1999
DESCRIPTION "Initial version as published at time of
publication of RFC 2591."
::= { mib-2 73 }
ianaLangJavaByteCode OBJECT-IDENTITY
STATUS current
DESCRIPTION
"Java byte code to be processed by a Java virtual machine.
A script written in Java byte code is transferred by using
the Java archive file format (JAR)."
REFERENCE
"The Java Virtual Machine Specification.
ISBN 0-201-63452-X"
::= { ianaLanguages 1 }
ianaLangTcl OBJECT-IDENTITY
STATUS current
DESCRIPTION
"The Tool Command Language (Tcl). A script written in the
Tcl language is transferred in Tcl source code format."
REFERENCE
"Tcl and the Tk Toolkit.
ISBN 0-201-63337-X"
::= { ianaLanguages 2 }
ianaLangPerl OBJECT-IDENTITY
STATUS current
DESCRIPTION
"The Perl language. A script written in the Perl language
is transferred in Perl source code format."
REFERENCE
"Programming Perl.
ISBN 1-56592-149-6"
::= { ianaLanguages 3 }
ianaLangScheme OBJECT-IDENTITY
STATUS current
DESCRIPTION
"The Scheme language. A script written in the Scheme
language is transferred in Scheme source code format."
REFERENCE
"The Revised^4 Report on the Algorithmic Language Scheme.
MIT Press"
::= { ianaLanguages 4 }
ianaLangSRSL OBJECT-IDENTITY
STATUS current
DESCRIPTION
"The SNMP Script Language defined by SNMP Research. A
script written in the SNMP Script Language is transferred
in the SNMP Script Language source code format."
::= { ianaLanguages 5 }
ianaLangPSL OBJECT-IDENTITY
STATUS current
DESCRIPTION
"The Patrol Script Language defined by BMC Software. A script
written in the Patrol Script Language is transferred in the
Patrol Script Language source code format."
REFERENCE
"PATROL Script Language Reference Manual, Version 3.0,
November 30, 1995. BMC Software, Inc. 2101 City West Blvd.,
Houston, Texas 77042."
::= { ianaLanguages 6 }
ianaLangSMSL OBJECT-IDENTITY
STATUS current
DESCRIPTION
"The Systems Management Scripting Language. A script written
in the SMSL language is transferred in the SMSL source code
format."
REFERENCE
"ISO/ITU Command Sequencer.
ISO 10164-21 or ITU X.753"
::= { ianaLanguages 7 }
END

View File

@@ -0,0 +1,67 @@
IANA-MALLOC-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, mib-2 FROM SNMPv2-SMI
TEXTUAL-CONVENTION FROM SNMPv2-TC;
ianaMallocMIB MODULE-IDENTITY
LAST-UPDATED "200301271200Z" -- January 27, 2003
ORGANIZATION "IANA"
CONTACT-INFO
" Internet Assigned Numbers Authority
Internet Corporation for Assigned Names and Numbers
4676 Admiralty Way, Suite 330
Marina del Rey, CA 90292-6601
Phone: +1 310 823 9358
EMail: iana&iana.org"
DESCRIPTION
"This MIB module defines the IANAscopeSource and
IANAmallocRangeSource textual conventions for use in MIBs
which need to identify ways of learning multicast scope and
range information.
Any additions or changes to the contents of this MIB module
require either publication of an RFC, or Designated Expert
Review as defined in the Guidelines for Writing IANA
Considerations Section document. The Designated Expert will
be selected by the IESG Area Director(s) of the Transport
Area."
-- revision log
REVISION "200301271200Z" -- January 27, 2003
DESCRIPTION
"Initial version."
::= { mib-2 102 }
IANAscopeSource ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"The source of multicast scope information."
SYNTAX INTEGER {
other(1), -- none of the following
manual(2), -- statically configured
local(3), -- automatically added by the system,
-- such as a Source-Specific Multicast
-- scope
mzap(4), -- MZAP
madcap(5) -- MADCAP
}
IANAmallocRangeSource ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"The source of multicast address allocation range
information."
SYNTAX INTEGER {
other(1), -- none of the following
manual(2), -- statically configured
local(3) -- automatically added by the system,
-- such as a Source-Specific Multicast
-- range
}
END

View File

@@ -0,0 +1,770 @@
IANA-MAU-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-IDENTITY, mib-2
FROM SNMPv2-SMI
TEXTUAL-CONVENTION
FROM SNMPv2-TC
;
ianaMauMIB MODULE-IDENTITY
LAST-UPDATED "200704210000Z" -- April 21, 2007
ORGANIZATION "IANA"
CONTACT-INFO " Internet Assigned Numbers Authority
Postal: ICANN
4676 Admiralty Way, Suite 330
Marina del Rey, CA 90292
Tel: +1-310-823-9358
EMail: iana&iana.org"
DESCRIPTION
"This MIB module defines dot3MauType OBJECT-IDENTITIES and
IANAifMauListBits, IANAifMauMediaAvailable,
IANAifMauAutoNegCapBits, and IANAifJackType
TEXTUAL-CONVENTIONs, specifying enumerated values of the
ifMauTypeListBits, ifMauMediaAvailable / rpMauMediaAvailable,
ifMauAutoNegCapabilityBits / ifMauAutoNegCapAdvertisedBits /
ifMauAutoNegCapReceivedBits and ifJackType / rpJackType objects
respectively, defined in the MAU-MIB.
It is intended that each new MAU type, Media Availability
state, Auto Negotiation capability and/or Jack type defined by
the IEEE 802.3 working group and approved for publication in a
revision of IEEE Std 802.3 will be added to this MIB module,
provided that it is suitable for being managed by the base
objects in the MAU-MIB. An Expert Review, as defined in
RFC 2434 [RFC2434], is REQUIRED for such additions.
The following reference is used throughout this MIB module:
[IEEE802.3] refers to:
IEEE Std 802.3, 2005 Edition: 'IEEE Standard for
Information technology - Telecommunications and information
exchange between systems - Local and metropolitan area
networks - Specific requirements -
Part 3: Carrier sense multiple access with collision
detection (CSMA/CD) access method and physical layer
specifications'.
This reference should be updated as appropriate when new
MAU types, Media Availability states, Auto Negotiation
capabilities, and/or Jack types are added to this MIB module.
Copyright (C) The IETF Trust (2007).
The initial version of this MIB module was published in
RFC 4836; for full legal notices see the RFC itself.
Supplementary information may be available at:
http://www.ietf.org/copyrights/ianamib.html"
REVISION "200704210000Z" -- April 21, 2007
DESCRIPTION "Initial version of this MIB as published in
RFC 4836."
::= { mib-2 154 }
-- Textual Conventions
IANAifMauTypeListBits ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"This data type is used as the syntax of the ifMauTypeListBits
object in the (updated) definition of MAU-MIB's ifMauTable.
The most recent version of this textual convention is available
in the online version of this MIB module on the IANA web site.
Requests for new values should be made to IANA via email
(iana&iana.org).
Note that changes in this textual convention SHALL be
synchronized with relevant changes in the dot3MauType
OBJECT-IDENTITIES."
REFERENCE
"[IEEE802.3], Section 30.5.1.1.2"
SYNTAX BITS {
bOther(0), -- other or unknown
bAUI(1), -- AUI
b10base5(2), -- 10BASE-5
bFoirl(3), -- FOIRL
b10base2(4), -- 10BASE-2
b10baseT(5), -- 10BASE-T duplex mode unknown
b10baseFP(6), -- 10BASE-FP
b10baseFB(7), -- 10BASE-FB
b10baseFL(8), -- 10BASE-FL duplex mode unknown
b10broad36(9), -- 10BROAD36
b10baseTHD(10), -- 10BASE-T half duplex mode
b10baseTFD(11), -- 10BASE-T full duplex mode
b10baseFLHD(12), -- 10BASE-FL half duplex mode
b10baseFLFD(13), -- 10BASE-FL full duplex mode
b100baseT4(14), -- 100BASE-T4
b100baseTXHD(15), -- 100BASE-TX half duplex mode
b100baseTXFD(16), -- 100BASE-TX full duplex mode
b100baseFXHD(17), -- 100BASE-FX half duplex mode
b100baseFXFD(18), -- 100BASE-FX full duplex mode
b100baseT2HD(19), -- 100BASE-T2 half duplex mode
b100baseT2FD(20), -- 100BASE-T2 full duplex mode
b1000baseXHD(21), -- 1000BASE-X half duplex mode
b1000baseXFD(22), -- 1000BASE-X full duplex mode
b1000baseLXHD(23), -- 1000BASE-LX half duplex mode
b1000baseLXFD(24), -- 1000BASE-LX full duplex mode
b1000baseSXHD(25), -- 1000BASE-SX half duplex mode
b1000baseSXFD(26), -- 1000BASE-SX full duplex mode
b1000baseCXHD(27), -- 1000BASE-CX half duplex mode
b1000baseCXFD(28), -- 1000BASE-CX full duplex mode
b1000baseTHD(29), -- 1000BASE-T half duplex mode
b1000baseTFD(30), -- 1000BASE-T full duplex mode
b10GbaseX(31), -- 10GBASE-X
b10GbaseLX4(32), -- 10GBASE-LX4
b10GbaseR(33), -- 10GBASE-R
b10GbaseER(34), -- 10GBASE-ER
b10GbaseLR(35), -- 10GBASE-LR
b10GbaseSR(36), -- 10GBASE-SR
b10GbaseW(37), -- 10GBASE-W
b10GbaseEW(38), -- 10GBASE-EW
b10GbaseLW(39), -- 10GBASE-LW
b10GbaseSW(40), -- 10GBASE-SW
-- new since RFC 3636
b10GbaseCX4(41), -- 10GBASE-CX4
b2BaseTL(42), -- 2BASE-TL
b10PassTS(43), -- 10PASS-TS
b100BaseBX10D(44), -- 100BASE-BX10D
b100BaseBX10U(45), -- 100BASE-BX10U
b100BaseLX10(46), -- 100BASE-LX10
b1000BaseBX10D(47), -- 1000BASE-BX10D
b1000BaseBX10U(48), -- 1000BASE-BX10U
b1000BaseLX10(49), -- 1000BASE-LX10
b1000BasePX10D(50), -- 1000BASE-PX10D
b1000BasePX10U(51), -- 1000BASE-PX10U
b1000BasePX20D(52), -- 1000BASE-PX20D
b1000BasePX20U(53) -- 1000BASE-PX20U
}
IANAifMauMediaAvailable ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"This data type is used as the syntax of the
ifMauMediaAvailable and rpMauMediaAvailable objects in the
(updated) definition of MAU-MIB's ifMauTable and rpMauTable
respectively.
Possible values are:
other(1) - undefined (not listed below)
unknown(2) - MAU's true state is unknown; e.g.,
during initialization
available(3) - link, light, or loopback is normal
notAvailable(4) - link loss, low light, or no loopback
remoteFault(5) - a fault has been detected at the
remote end of the link. This value
applies to 10BASE-FB, 100BASE-T4 Far
End Fault Indication and non-specified
remote faults from a system running
auto-negotiation
invalidSignal(6) - invalid signal has been received from
the other end of the link, 10BASE-FB
only
remoteJabber(7) - remote fault, due to jabber
remoteLinkLoss(8) - remote fault, due to link loss
remoteTest(9) - remote fault, due to test
offline(10) - offline, Clause 37 Auto-Negotiation
only
autoNegError(11) - Auto-Negotiation Error, Clause 37
Auto-Negotiation only
pmdLinkFault(12) - PMA/PMD receive link fault. In case
of PAF (2BASE-TL / 10PASS-TS PHYs),
all PMEs in the aggregation group have
detected a link fault
wisFrameLoss(13) - WIS loss of frame, 10GBASE-W only
wisSignalLoss(14) - WIS loss of signal, 10GBASE-W only
pcsLinkFault(15) - PCS receive link fault
excessiveBER(16) - PCS Bit Error Ratio monitor
reporting excessive error ratio
dxsLinkFault(17) - DTE XGXS receive link fault, XAUI only
pxsLinkFault(18) - PHY XGXS receive link fault, XAUI only
availableReduced(19) - link normal, reduced bandwidth,
2BASE-TL / 10PASS-TS only
ready(20) - at least one PME in the aggregation
group is detecting handshake tones,
2BASE-TL / 10PASS-TS only
If the MAU is a 10M b/s link or fiber type (FOIRL, 10BASE-T,
10BASE-F), then this is equivalent to the link test fail
state/low light function. For an AUI, 10BASE2, 10BASE5, or
10BROAD36 MAU, this indicates whether loopback is detected on
the DI circuit. The value of this attribute persists between
packets for MAU types AUI, 10BASE5, 10BASE2, 10BROAD36, and
10BASEFP.
At power-up or following a reset, the Media Available state
will be unknown(2) for AUI, 10BASE5, 10BASE2, 10BROAD36, and
10BASE-FP MAUs. For these MAUs loopback will be tested on each
transmission during which no collision is detected.
If DI is receiving input when DO returns to IDL after a
transmission and there has been no collision during the
transmission, then loopback will be detected. The Media
Available state will only change during noncollided
transmissions for AUI, 10BASE2, 10BASE5, 10BROAD36, and
10BASE-FP MAUs.
For 100BASE-T2, 100BASE-T4, 100BASE-TX, 100BASE-FX,
100BASE-LX10, and 100BASE-BX10 PHYs the enumerations match the
states within the link integrity state diagram.
Any MAU that implements management of [IEEE802.3] Clause
28 Auto-Negotiation, will map remote fault indication to
remoteFault(5).
Any MAU that implements management of Clause 37
Auto-Negotiation, will map the received RF1 and RF2 bits as
follows: Offline maps to offline(10), Link_Failure maps to
remoteFault(5), and Auto-Negotiation Error maps to
autoNegError(11).
The value remoteFault(5) applies to 10BASE-FB remote
fault indication, the 100BASE-X far-end fault indication, and
nonspecified remote faults from a system running Clause 28
Auto-Negotiation.
The value remoteJabber(7), remoteLink loss(8), or remoteTest(9)
SHOULD be used instead of remoteFault(5) where the reason for
remote fault is identified in the remote signaling protocol.
Where a Clause 22 MII or Clause 35 GMII is present, a logic
one in the remote fault bit maps to the value remoteFault(5),
a logic zero in the link status bit maps to the enumeration
notAvailable(4). The value notAvailable(4) takes precedence
over remoteFault(5).
For 2BASE-TL and 10PASS-TS PHYs, the value unknown(2) maps to
the condition where the PHY (PCS with connected PMEs) is
initializing, the value ready(20) maps to the condition where
the interface is down and at least one PME in the aggregation
group is ready for handshake, the value available(3) maps to
the condition where all the PMEs in the aggregation group are
up, the value notAvailable(4) maps to the condition where all
the PMEs in the aggregation group are down and no handshake
tones are detected, the value availableReduced(19) maps to the
condition where the interface is up, a link fault is detected
at the receive direction by one or more PMEs in the
aggregation group, but at least one PME is up and the
enumeration pmdLinkFault(12) maps to the condition where a link
fault is detected at the receive direction by all of the PMEs
in the aggregation group.
For 10 Gb/s the enumerations map to value of the link_fault
variable within the Link Fault Signaling state diagram
as follows: the value OK maps to the value available(3),
the value Local Fault maps to the value notAvailable(4),
and the value Remote Fault maps to the value remoteFault(5).
The value pmdLinkFault(12), wisFrameLoss(13),
wisSignalLoss(14), pcsLinkFault(15), excessiveBER(16), or
dxsLinkFault(17) SHOULD be used instead of the value
notAvailable(4), where the reason for the Local Fault state can
be identified through the use of the Clause 45 MDIO Interface.
Where multiple reasons for the Local Fault state can be
identified, only the highest precedence error SHOULD be
reported. This precedence in descending order is as follows:
pxsLinkFault
pmdLinkFault
wisFrameLoss
wisSignalLoss
pcsLinkFault
excessiveBER
dxsLinkFault.
Where a Clause 45 MDIO interface is present a logic zero in
the PMA/PMD Receive link status bit ([IEEE802.3]
Section 45.2.1.2.2) maps to the value pmdLinkFault(12),
logic one in the LOF status bit (Section 45.2.2.10.4) maps
to the value wisFrameLoss(13), a logic one in the LOS
status bit (Section 45.2.2.10.5) maps to the value
wisSignalLoss, a logic zero in the PCS Receive
link status bit (Section 45.2.3.2.2) maps to the value
pcsLinkFault(15), a logic one in the 10GBASE-R PCS Latched
high BER status bit (Section 45.2.3.12.2) maps to the value
excessiveBER, a logic zero in the DTE XS receive link status
bit (Section 45.2.5.2.2) maps to the value dxsLinkFault(17)
and a logic zero in the PHY XS transmit link status bit
(Section 45.2.4.2.2) maps to the value pxsLinkFault(18).
The most recent version of this textual convention is available
in the online version of this MIB module on the IANA web site.
Requests for new values should be made to IANA via email
(iana&iana.org)."
REFERENCE
"[IEEE802.3], Section 30.5.1.1.4"
SYNTAX INTEGER {
other(1),
unknown(2),
available(3),
notAvailable(4),
remoteFault(5),
invalidSignal(6),
remoteJabber(7),
remoteLinkLoss(8),
remoteTest(9),
offline(10),
autoNegError(11),
pmdLinkFault(12),
wisFrameLoss(13),
wisSignalLoss(14),
pcsLinkFault(15),
excessiveBER(16),
dxsLinkFault(17),
pxsLinkFault(18),
availableReduced(19),
ready(20)
}
IANAifMauAutoNegCapBits ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"This data type is used as the syntax of the
ifMauAutoNegCapabilityBits, ifMauAutoNegCapAdvertisedBits, and
ifMauAutoNegCapReceivedBits objects in the (updated) definition
of MAU-MIB's ifMauAutoNegTable.
The most recent version of this textual convention is available
in the online version of this MIB module on the IANA web site.
Requests for new values should be made to IANA via email
(iana&iana.org)."
REFERENCE
"[IEEE802.3], Section 30.6.1.1.5"
SYNTAX BITS {
bOther(0), -- other or unknown
b10baseT(1), -- 10BASE-T half duplex mode
b10baseTFD(2), -- 10BASE-T full duplex mode
b100baseT4(3), -- 100BASE-T4
b100baseTX(4), -- 100BASE-TX half duplex mode
b100baseTXFD(5), -- 100BASE-TX full duplex mode
b100baseT2(6), -- 100BASE-T2 half duplex mode
b100baseT2FD(7), -- 100BASE-T2 full duplex mode
bFdxPause(8), -- PAUSE for full-duplex links
bFdxAPause(9), -- Asymmetric PAUSE for full-duplex
-- links
bFdxSPause(10), -- Symmetric PAUSE for full-duplex
-- links
bFdxBPause(11), -- Asymmetric and Symmetric PAUSE for
-- full-duplex links
b1000baseX(12), -- 1000BASE-X, -LX, -SX, -CX half
-- duplex mode
b1000baseXFD(13), -- 1000BASE-X, -LX, -SX, -CX full
-- duplex mode
b1000baseT(14), -- 1000BASE-T half duplex mode
b1000baseTFD(15) -- 1000BASE-T full duplex mode
}
IANAifJackType ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"Common enumeration values for repeater and interface MAU
jack types. This data type is used as the syntax of the
ifJackType and rpJackType objects in the (updated) definition
of MAU-MIB's ifJackTable and rpJackTable respectively.
Possible values are:
other(1) - undefined or unknown
rj45(2) - RJ45
rj45S(3) - RJ45 shielded
db9(4) - DB9
bnc(5) - BNC
fAUI(6) - AUI female
mAUI(7) - AUI male
fiberSC(8) - SC fiber
fiberMIC(9) - MIC fiber
fiberST(10) - ST fiber
telco(11) - Telco
mtrj(12) - MT-RJ fiber
hssdc(13) - fiber channel style-2
fiberLC(14) - LC fiber
cx4(15) - IB4X for 10GBASE-CX4
The most recent version of this textual convention is available
in the online version of this MIB module on the IANA web site.
Requests for new values should be made to IANA via email
(iana&iana.org)."
SYNTAX INTEGER {
other(1),
rj45(2),
rj45S(3),
db9(4),
bnc(5),
fAUI(6),
mAUI(7),
fiberSC(8),
fiberMIC(9),
fiberST(10),
telco(11),
mtrj(12),
hssdc(13),
fiberLC(14),
-- new since RFC 3636
cx4(15)
}
-- OBJECT IDENTITIES for MAU types
-- (see rpMauType and ifMauType of MAU-MIB for usage)
-- The following definitions has been moved from RFC 3636 and
-- no longer appear in its revision.
dot3MauType OBJECT IDENTIFIER ::= { mib-2 snmpDot3MauMgt(26) 4 }
dot3MauTypeAUI OBJECT-IDENTITY
STATUS current
DESCRIPTION "no internal MAU, view from AUI"
REFERENCE "[IEEE802.3], Section 7"
::= { dot3MauType 1 }
dot3MauType10Base5 OBJECT-IDENTITY
STATUS current
DESCRIPTION "thick coax MAU"
REFERENCE "[IEEE802.3], Section 7"
::= { dot3MauType 2 }
dot3MauTypeFoirl OBJECT-IDENTITY
STATUS current
DESCRIPTION "FOIRL MAU"
REFERENCE "[IEEE802.3], Section 9.9"
::= { dot3MauType 3 }
dot3MauType10Base2 OBJECT-IDENTITY
STATUS current
DESCRIPTION "thin coax MAU"
REFERENCE "[IEEE802.3], Section 10"
::= { dot3MauType 4 }
dot3MauType10BaseT OBJECT-IDENTITY
STATUS current
DESCRIPTION "UTP MAU.
Note that it is strongly recommended that
agents return either dot3MauType10BaseTHD or
dot3MauType10BaseTFD if the duplex mode is
known. However, management applications should
be prepared to receive this MAU type value from
older agent implementations."
REFERENCE "[IEEE802.3], Section 14"
::= { dot3MauType 5 }
dot3MauType10BaseFP OBJECT-IDENTITY
STATUS current
DESCRIPTION "passive fiber MAU"
REFERENCE "[IEEE802.3], Section 16"
::= { dot3MauType 6 }
dot3MauType10BaseFB OBJECT-IDENTITY
STATUS current
DESCRIPTION "sync fiber MAU"
REFERENCE "[IEEE802.3], Section 17"
::= { dot3MauType 7 }
dot3MauType10BaseFL OBJECT-IDENTITY
STATUS current
DESCRIPTION "async fiber MAU.
Note that it is strongly recommended that
agents return either dot3MauType10BaseFLHD or
dot3MauType10BaseFLFD if the duplex mode is
known. However, management applications should
be prepared to receive this MAU type value from
older agent implementations."
REFERENCE "[IEEE802.3], Section 18"
::= { dot3MauType 8 }
dot3MauType10Broad36 OBJECT-IDENTITY
STATUS current
DESCRIPTION "broadband DTE MAU.
Note that 10BROAD36 MAUs can be attached to
interfaces but not to repeaters."
REFERENCE "[IEEE802.3], Section 11"
::= { dot3MauType 9 }
------ new since RFC 1515:
dot3MauType10BaseTHD OBJECT-IDENTITY
STATUS current
DESCRIPTION "UTP MAU, half duplex mode"
REFERENCE "[IEEE802.3], Section 14"
::= { dot3MauType 10 }
dot3MauType10BaseTFD OBJECT-IDENTITY
STATUS current
DESCRIPTION "UTP MAU, full duplex mode"
REFERENCE "[IEEE802.3], Section 14"
::= { dot3MauType 11 }
dot3MauType10BaseFLHD OBJECT-IDENTITY
STATUS current
DESCRIPTION "async fiber MAU, half duplex mode"
REFERENCE "[IEEE802.3], Section 18"
::= { dot3MauType 12 }
dot3MauType10BaseFLFD OBJECT-IDENTITY
STATUS current
DESCRIPTION "async fiber MAU, full duplex mode"
REFERENCE "[IEEE802.3], Section 18"
::= { dot3MauType 13 }
dot3MauType100BaseT4 OBJECT-IDENTITY
STATUS current
DESCRIPTION "4 pair category 3 UTP"
REFERENCE "[IEEE802.3], Section 23"
::= { dot3MauType 14 }
dot3MauType100BaseTXHD OBJECT-IDENTITY
STATUS current
DESCRIPTION "2 pair category 5 UTP, half duplex mode"
REFERENCE "[IEEE802.3], Section 25"
::= { dot3MauType 15 }
dot3MauType100BaseTXFD OBJECT-IDENTITY
STATUS current
DESCRIPTION "2 pair category 5 UTP, full duplex mode"
REFERENCE "[IEEE802.3], Section 25"
::= { dot3MauType 16 }
dot3MauType100BaseFXHD OBJECT-IDENTITY
STATUS current
DESCRIPTION "X fiber over PMT, half duplex mode"
REFERENCE "[IEEE802.3], Section 26"
::= { dot3MauType 17 }
dot3MauType100BaseFXFD OBJECT-IDENTITY
STATUS current
DESCRIPTION "X fiber over PMT, full duplex mode"
REFERENCE "[IEEE802.3], Section 26"
::= { dot3MauType 18 }
dot3MauType100BaseT2HD OBJECT-IDENTITY
STATUS current
DESCRIPTION "2 pair category 3 UTP, half duplex mode"
REFERENCE "[IEEE802.3], Section 32"
::= { dot3MauType 19 }
dot3MauType100BaseT2FD OBJECT-IDENTITY
STATUS current
DESCRIPTION "2 pair category 3 UTP, full duplex mode"
REFERENCE "[IEEE802.3], Section 32"
::= { dot3MauType 20 }
------ new since RFC 2239:
dot3MauType1000BaseXHD OBJECT-IDENTITY
STATUS current
DESCRIPTION "PCS/PMA, unknown PMD, half duplex mode"
REFERENCE "[IEEE802.3], Section 36"
::= { dot3MauType 21 }
dot3MauType1000BaseXFD OBJECT-IDENTITY
STATUS current
DESCRIPTION "PCS/PMA, unknown PMD, full duplex mode"
REFERENCE "[IEEE802.3], Section 36"
::= { dot3MauType 22 }
dot3MauType1000BaseLXHD OBJECT-IDENTITY
STATUS current
DESCRIPTION "Fiber over long-wavelength laser, half duplex
mode"
REFERENCE "[IEEE802.3], Section 38"
::= { dot3MauType 23 }
dot3MauType1000BaseLXFD OBJECT-IDENTITY
STATUS current
DESCRIPTION "Fiber over long-wavelength laser, full duplex
mode"
REFERENCE "[IEEE802.3], Section 38"
::= { dot3MauType 24 }
dot3MauType1000BaseSXHD OBJECT-IDENTITY
STATUS current
DESCRIPTION "Fiber over short-wavelength laser, half
duplex mode"
REFERENCE "[IEEE802.3], Section 38"
::= { dot3MauType 25 }
dot3MauType1000BaseSXFD OBJECT-IDENTITY
STATUS current
DESCRIPTION "Fiber over short-wavelength laser, full
duplex mode"
REFERENCE "[IEEE802.3], Section 38"
::= { dot3MauType 26 }
dot3MauType1000BaseCXHD OBJECT-IDENTITY
STATUS current
DESCRIPTION "Copper over 150-Ohm balanced cable, half
duplex mode"
REFERENCE "[IEEE802.3], Section 39"
::= { dot3MauType 27 }
dot3MauType1000BaseCXFD OBJECT-IDENTITY
STATUS current
DESCRIPTION "Copper over 150-Ohm balanced cable, full
duplex mode"
REFERENCE "[IEEE802.3], Section 39"
::= { dot3MauType 28 }
dot3MauType1000BaseTHD OBJECT-IDENTITY
STATUS current
DESCRIPTION "Four-pair Category 5 UTP, half duplex mode"
REFERENCE "[IEEE802.3], Section 40"
::= { dot3MauType 29 }
dot3MauType1000BaseTFD OBJECT-IDENTITY
STATUS current
DESCRIPTION "Four-pair Category 5 UTP, full duplex mode"
REFERENCE "[IEEE802.3], Section 40"
::= { dot3MauType 30 }
------ new since RFC 2668:
dot3MauType10GigBaseX OBJECT-IDENTITY
STATUS current
DESCRIPTION "X PCS/PMA, unknown PMD."
REFERENCE "[IEEE802.3], Section 48"
::= { dot3MauType 31 }
dot3MauType10GigBaseLX4 OBJECT-IDENTITY
STATUS current
DESCRIPTION "X fiber over WWDM optics"
REFERENCE "[IEEE802.3], Section 53"
::= { dot3MauType 32 }
dot3MauType10GigBaseR OBJECT-IDENTITY
STATUS current
DESCRIPTION "R PCS/PMA, unknown PMD."
REFERENCE "[IEEE802.3], Section 49"
::= { dot3MauType 33 }
dot3MauType10GigBaseER OBJECT-IDENTITY
STATUS current
DESCRIPTION "R fiber over 1550 nm optics"
REFERENCE "[IEEE802.3], Section 52"
::= { dot3MauType 34 }
dot3MauType10GigBaseLR OBJECT-IDENTITY
STATUS current
DESCRIPTION "R fiber over 1310 nm optics"
REFERENCE "[IEEE802.3], Section 52"
::= { dot3MauType 35 }
dot3MauType10GigBaseSR OBJECT-IDENTITY
STATUS current
DESCRIPTION "R fiber over 850 nm optics"
REFERENCE "[IEEE802.3], Section 52"
::= { dot3MauType 36 }
dot3MauType10GigBaseW OBJECT-IDENTITY
STATUS current
DESCRIPTION "W PCS/PMA, unknown PMD."
REFERENCE "[IEEE802.3], Section 49 and 50"
::= { dot3MauType 37 }
dot3MauType10GigBaseEW OBJECT-IDENTITY
STATUS current
DESCRIPTION "W fiber over 1550 nm optics"
REFERENCE "[IEEE802.3], Section 52"
::= { dot3MauType 38 }
dot3MauType10GigBaseLW OBJECT-IDENTITY
STATUS current
DESCRIPTION "W fiber over 1310 nm optics"
REFERENCE "[IEEE802.3], Section 52"
::= { dot3MauType 39 }
dot3MauType10GigBaseSW OBJECT-IDENTITY
STATUS current
DESCRIPTION "W fiber over 850 nm optics"
REFERENCE "[IEEE802.3], Section 52"
::= { dot3MauType 40 }
------ new since RFC 3636:
dot3MauType10GigBaseCX4 OBJECT-IDENTITY
STATUS current
DESCRIPTION "X copper over 8 pair 100-Ohm balanced cable"
REFERENCE "[IEEE802.3], Section 54"
::= { dot3MauType 41 }
dot3MauType2BaseTL OBJECT-IDENTITY
STATUS current
DESCRIPTION "Voice grade UTP copper, up to 2700m, optional PAF"
REFERENCE "[IEEE802.3], Sections 61 and 63"
::= { dot3MauType 42 }
dot3MauType10PassTS OBJECT-IDENTITY
STATUS current
DESCRIPTION "Voice grade UTP copper, up to 750m, optional PAF"
REFERENCE "[IEEE802.3], Sections 61 and 62"
::= { dot3MauType 43 }
dot3MauType100BaseBX10D OBJECT-IDENTITY
STATUS current
DESCRIPTION "One single-mode fiber OLT, long wavelength, 10km"
REFERENCE "[IEEE802.3], Section 58"
::= { dot3MauType 44 }
dot3MauType100BaseBX10U OBJECT-IDENTITY
STATUS current
DESCRIPTION "One single-mode fiber ONU, long wavelength, 10km"
REFERENCE "[IEEE802.3], Section 58"
::= { dot3MauType 45 }
dot3MauType100BaseLX10 OBJECT-IDENTITY
STATUS current
DESCRIPTION "Two single-mode fibers, long wavelength, 10km"
REFERENCE "[IEEE802.3], Section 58"
::= { dot3MauType 46 }
dot3MauType1000BaseBX10D OBJECT-IDENTITY
STATUS current
DESCRIPTION "One single-mode fiber OLT, long wavelength, 10km"
REFERENCE "[IEEE802.3], Section 59"
::= { dot3MauType 47 }
dot3MauType1000BaseBX10U OBJECT-IDENTITY
STATUS current
DESCRIPTION "One single-mode fiber ONU, long wavelength, 10km"
REFERENCE "[IEEE802.3], Section 59"
::= { dot3MauType 48 }
dot3MauType1000BaseLX10 OBJECT-IDENTITY
STATUS current
DESCRIPTION "Two sigle-mode fiber, long wavelength, 10km"
REFERENCE "[IEEE802.3], Section 59"
::= { dot3MauType 49 }
dot3MauType1000BasePX10D OBJECT-IDENTITY
STATUS current
DESCRIPTION "One single-mode fiber EPON OLT, 10km"
REFERENCE "[IEEE802.3], Section 60"
::= { dot3MauType 50 }
dot3MauType1000BasePX10U OBJECT-IDENTITY
STATUS current
DESCRIPTION "One single-mode fiber EPON ONU, 10km"
REFERENCE "[IEEE802.3], Section 60"
::= { dot3MauType 51 }
dot3MauType1000BasePX20D OBJECT-IDENTITY
STATUS current
DESCRIPTION "One single-mode fiber EPON OLT, 20km"
REFERENCE "[IEEE802.3], Section 60"
::= { dot3MauType 52 }
dot3MauType1000BasePX20U OBJECT-IDENTITY
STATUS current
DESCRIPTION "One single-mode fiber EPON ONU, 20km"
REFERENCE "[IEEE802.3], Section 60"
::= { dot3MauType 53 }
END

Some files were not shown because too many files have changed in this diff Show More