* A new API: protosockets that are similar to BSD sockets but does not
  require any underlying multithreading system.

* Very rudimentary IPv6 support

* New application: DHCP client. Web server rewritten with protosockets.

* Removed uIP zero-copy functionality in order to simplify uIP device
  driver coding: outbound packets are now *always* stored in full in
  the uip_buf buffer.

* Checksum computation is now part of uip.c, but it still is possible
  to implement them in assembly code by specifying a configuration
  option. Checksum code now runs on architectures with 2-byte alignment.

* Added TCP persistent timer.

* Made all IP address representations use the new uip_ipaddr_ip
  datatype for clarity.

* Updated window behavior so that sending to a host with a small open
  window works better now.

* UDP API change: uip_udp_new() now takes port numbers in network byte
  order like TCP functions.

* Allow reception of packets when no IP address is configured to make
  DHCP work.

* Moved Ethernet address into main uIP module from ARP module.

* Made constants explicit #defines and moved them out of the code
  (header sizes, TCP options, TCP header length field).

* If uip_len is less than that reported by the IP header, the packet
  is discarded. If uip_len is greater than the length reported by the
  IP header, uip_len is adjusted.

* Moved header size definitions into header file.

* Added uIP call for polling an application without triggering any
  timer events. Removed redundant assignments of uip_len and uip_slen.

* Removed compiler warning about icmp_input label being defined when
  UIP_PINGADDRCONF was not used.

* Added UIP_APPDATA_SIZE macro that holds the available buffer size
  for user data.

* Added uip_udp_bind() call.

* Moved checksum code into main uIP module.

* Switched the TCP, UDP and IP header structures to be structs rather
  than typedefs.

* Prefixed TCP state names with UIP_ to avoid name space
  contamination.

* Changed declarations of uip_appdatap and friends to void * to avoid
  explicit typecasts.

* Bugfixes

  o TCP: Fixed bug with high byte of peer window size.

  o TCP: Fixed bug that in some cases prevented concurrent reception and
    transmission of TCP data.

  o TCP: uip_connect() didn't correctly calculate age of TIME_WAIT
    connections.

  o TCP: Array index for uip_conns[] array was out of bounds in
    comparison. Comparison changed to make index within bounds.

  o TCP: if the remote host crashes and tries to reestablish an old
    connection, uIP should respond with an ACK with the correct
    sequence and acknowledgment numbers, to which the remote host
    should respond with an ACK. uIP did not respond with the correct
    ACK.

  o TCP: Fixed check for SYNACK segment: now checks only relevant TCP
    control flags and discards flags reserved for future expansion.

  o TCP: Fixed bug where uIP did not inform application that a connection
    had been aborted during an active open.

  o TCP: FIN segment was accepted even though application had stopped
    incoming data with uip_stop().

  o TCP: A FINACK segment would not always correctly acknowledge data.

  o UDP: checksums are now calculated after all fields have been
    filled in.

  o UDP: network byte order on lastport in uip_udp_new().

  o IP: memset() bugs in IP fragment reassembly code fixed.
