u16_t u16[8];
 } uip_ip6addr_t;
 
 typedef uip_ip6addr_t uip_ipaddr_t;
 #else /* UIP_CONF_IPV6 */
 typedef union uip_ip4addr_t {
   u16_t u16[8];
 } uip_ip6addr_t;
 
 typedef uip_ip6addr_t uip_ipaddr_t;
 #else /* UIP_CONF_IPV6 */
 typedef union uip_ip4addr_t {
 
  uip_ipaddr(&addr, 192,168,1,2);
  uip_sethostaddr(&addr);
 
  uip_ipaddr(&addr, 192,168,1,2);
  uip_sethostaddr(&addr);
  * Periodic processing for a connection identified by its number.
  *
  * This function does the necessary periodic processing (timers,
  * Periodic processing for a connection identified by its number.
  *
  * This function does the necessary periodic processing (timers,
  * periodic uIP timer goes off. It should be called for every
  * connection, regardless of whether they are open of closed.
  *
  * periodic uIP timer goes off. It should be called for every
  * connection, regardless of whether they are open of closed.
  *
  uip_ipaddr(&addr, 192,168,2,1);
  c = uip_udp_new(&addr, HTONS(12345));
  if(c != NULL) {
  uip_ipaddr(&addr, 192,168,2,1);
  c = uip_udp_new(&addr, HTONS(12345));
  if(c != NULL) {
  uip_ipaddr(&ipaddr, 192,168,1,2);
  c = uip_connect(&ipaddr, HTONS(80));
  \endcode
  uip_ipaddr(&ipaddr, 192,168,1,2);
  c = uip_connect(&ipaddr, HTONS(80));
  \endcode
   u16_t lport;        /**< The local TCP port, in network byte order. */
   u16_t rport;        /**< The local remote TCP port, in network byte
                         order. */
   u16_t lport;        /**< The local TCP port, in network byte order. */
   u16_t rport;        /**< The local remote TCP port, in network byte
                         order. */
   u8_t rcv_nxt[4];    /**< The sequence number that we expect to
                         receive next. */
   u8_t snd_nxt[4];    /**< The sequence number that was last sent by
   u8_t rcv_nxt[4];    /**< The sequence number that we expect to
                         receive next. */
   u8_t snd_nxt[4];    /**< The sequence number that was last sent by
     uip_stats_t sent;     /**< Number of sent TCP segments. */
     uip_stats_t drop;     /**< Number of dropped TCP segments. */
     uip_stats_t chkerr;   /**< Number of TCP segments with a bad
                             checksum. */
     uip_stats_t ackerr;   /**< Number of TCP segments with a bad ACK
                             number. */
     uip_stats_t sent;     /**< Number of sent TCP segments. */
     uip_stats_t drop;     /**< Number of dropped TCP segments. */
     uip_stats_t chkerr;   /**< Number of TCP segments with a bad
                             checksum. */
     uip_stats_t ackerr;   /**< Number of TCP segments with a bad ACK
                             number. */
     uip_stats_t rexmit;   /**< Number of retransmitted TCP segments. */
     uip_stats_t syndrop;  /**< Number of dropped SYNs due to too few
     uip_stats_t rexmit;   /**< Number of retransmitted TCP segments. */
     uip_stats_t syndrop;  /**< Number of dropped SYNs due to too few
     uip_stats_t synrst;   /**< Number of SYNs for closed ports,
                             triggering a RST. */
   } tcp;                  /**< TCP statistics. */
     uip_stats_t synrst;   /**< Number of SYNs for closed ports,
                             triggering a RST. */
   } tcp;                  /**< TCP statistics. */
     uip_stats_t sent;     /**< Number of sent UDP segments. */
     uip_stats_t chkerr;   /**< Number of UDP segments with a bad
                             checksum. */
     uip_stats_t sent;     /**< Number of sent UDP segments. */
     uip_stats_t chkerr;   /**< Number of UDP segments with a bad
                             checksum. */
   /* The following flags are passed as an argument to the uip_process()
    function. They are used to distinguish between the two cases where
    uip_process() is called. It can be called either because we have
    incoming data that should be processed, or because the periodic
    timer has fired. These values are never used directly, but only in
    the macros defined in this file. */
   /* The following flags are passed as an argument to the uip_process()
    function. They are used to distinguish between the two cases where
    uip_process() is called. It can be called either because we have
    incoming data that should be processed, or because the periodic
    timer has fired. These values are never used directly, but only in
    the macros defined in this file. */
 #define UIP_DATA          1     /* Tells uIP that there is incoming
                                   data in the uip_buf buffer. The
                                   length of the data is stored in the
 #define UIP_DATA          1     /* Tells uIP that there is incoming
                                   data in the uip_buf buffer. The
                                   length of the data is stored in the
   u16_t ipchksum;
   uip_ipaddr_t srcipaddr, destipaddr;
 #endif /* UIP_CONF_IPV6 */
   u16_t ipchksum;
   uip_ipaddr_t srcipaddr, destipaddr;
 #endif /* UIP_CONF_IPV6 */
   u16_t ipchksum;
   uip_ipaddr_t srcipaddr, destipaddr;
 #endif /* UIP_CONF_IPV6 */
   u16_t ipchksum;
   uip_ipaddr_t srcipaddr, destipaddr;
 #endif /* UIP_CONF_IPV6 */
   u16_t ipchksum;
   uip_ipaddr_t srcipaddr, destipaddr;
 #endif /* UIP_CONF_IPV6 */
   u16_t ipchksum;
   uip_ipaddr_t srcipaddr, destipaddr;
 #endif /* UIP_CONF_IPV6 */
    (((a)->u8[13]) == (m)->addr[3]) &&            \
    (((a)->u8[14]) == (m)->addr[4]) &&            \
    (((a)->u8[15]) == (m)->addr[5]))
    (((a)->u8[13]) == (m)->addr[3]) &&            \
    (((a)->u8[14]) == (m)->addr[4]) &&            \
    (((a)->u8[15]) == (m)->addr[5]))