lwIP  2.1.2
Lightweight IP stack
Todo List
Global DNS_RAND_TXID
: one-shot mDNS: dual-stack fallback to another IP version
File lowpan6_common.c
: RFC 6775.
Module rfc7668if
:
  • further testing
  • support compression contexts
  • support multiple addresses
  • support multicast
  • support neighbor discovery
File lowpan6.c
: RFC 6775.
Module bridgeif
:
  • compact static FDB entries (instead of walking the whole array)
  • add FDB query/read access
  • add FDB change callback (when learning or dropping auto-learned entries)
  • prefill FDB with MAC classes that should never be forwarded
  • multicast snooping? (and only forward group addresses to interested ports)
  • support removing ports
  • check SNMP integration
  • VLAN handling / trunk ports
  • priority handling? (although that largely depends on TX queue limitations and lwIP doesn't provide tx-done handling)
Global tcp_connected_fn )(void *arg, struct tcp_pcb *tpcb, err_t err)
! Only return ERR_ABRT if you have called tcp_abort from within the callback function!
Global SNTP_CHECK_RESPONSE

: discard reply if any of the VN, Stratum, or Transmit Timestamp fields is 0 or the Mode field is not 4 (unicast) or 5 (broadcast).

  • >= 4

: to check that the Root Delay and Root Dispersion fields are each greater than or equal to 0 and less than infinity, where infinity is currently a cozy number like one second. This check avoids using a server whose synchronization source has expired for a very long time.

Global netconn_is_nonblocking (conn)
: write/send is missing)
Global netconn_set_nonblocking (conn, val)
: write/send is missing)
Global ethip6_output (struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr)
anycast addresses
Global dhcp6_enable_stateful (struct netif *netif)
: stateful DHCPv6 not supported, yet
Global IP_REASS_CHECK_OVERLAP
: work with IP header options
Global igmp_joingroup (const ip4_addr_t *ifaddr, const ip4_addr_t *groupaddr)
undo any other netif already joined
Global dhcp_rx_options_given [DHCP_OPTION_IDX_MAX]
: move this into struct dhcp?
Global dhcp_rx_options_val [DHCP_OPTION_IDX_MAX]
: move this into struct dhcp?
Module dhcp4
:
  • Support for interfaces other than Ethernet (SLIP, PPP, ...)
Global lwip_netconn_do_listen (void *m)
: should we drain the recvmbox here?
Global DNS_RAND_TXID

: check RFC1035 - 7.3. Processing responses

: improve answer parsing, more checkings...

: define good default values (rfc compliance)

Module sntp
:
  • complete SNTP_CHECK_RESPONSE checks 3 and 4
File snmp_asn1.c
not optimised (yet), favor correctness over speed, favor speed over size
"
: no line consisting of a single dot only)
Module smtp
:
  • attachments (the main difficulty here is streaming base64-encoding to prevent having to allocate a buffer for the whole encoded file at once)
  • test with more mail servers...
Module iperf
:
  • implement UDP mode
  • protect combined sessions handling (via 'related_master_state') against reallocation (this is a pointer address, currently, so if the same memory is allocated again, session pairs (tx/rx) can be confused on reallocation)
"

:

  • take TCP_MSS, LWIP_TCP_TIMESTAMPS and PAYLOAD_ALIGN_TYPE/PAYLOAD_ALIGNMENT as arguments

: return tag_insert_len - maybe it can be removed from struct http_state?

: better explanation! Pointers to the parameters are stored in hs->param_vals.

Module httpc
:
  • persistent connections
  • select outgoing http version
  • optionally follow redirect
  • check request uri for invalid characters? (e.g. encode spaces)
  • IPv6 support
"
: retry sending?
Global lwip_getaddrinfo (const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res)
: implement AI_V4MAPPED, AI_ADDRCONFIG