58 #define UIP_IPH_LEN 40 59 #define UIP_FRAGH_LEN 8 61 #define UIP_IPH_LEN 20 64 #define UIP_UDPH_LEN 8 65 #define UIP_TCPH_LEN 20 66 #define UIP_ICMPH_LEN 4 68 #define UIP_IPUDPH_LEN (UIP_UDPH_LEN + UIP_IPH_LEN) 71 #define UIP_IPTCPH_LEN (UIP_TCPH_LEN + UIP_IPH_LEN) 74 #define UIP_TCPIP_HLEN UIP_IPTCPH_LEN 75 #define UIP_IPICMPH_LEN (UIP_IPH_LEN + UIP_ICMPH_LEN) 77 #define UIP_LLIPH_LEN (UIP_LLH_LEN + UIP_IPH_LEN) 86 #define uip_l2_l3_hdr_len (UIP_LLH_LEN + UIP_IPH_LEN + uip_ext_len) 87 #define uip_l2_l3_icmp_hdr_len (UIP_LLH_LEN + UIP_IPH_LEN + uip_ext_len + UIP_ICMPH_LEN) 88 #define uip_l3_hdr_len (UIP_IPH_LEN + uip_ext_len) 89 #define uip_l3_icmp_hdr_len (UIP_IPH_LEN + uip_ext_len + UIP_ICMPH_LEN) 105 typedef union uip_ip6addr_t {
139 #if UIP_CONF_LL_802154 142 #define UIP_802154_SHORTADDR_LEN 2 143 #define UIP_802154_LONGADDR_LEN 8 144 #define UIP_LLADDR_LEN UIP_802154_LONGADDR_LEN 146 #if UIP_CONF_LL_80211 149 #define UIP_LLADDR_LEN 6 153 #define UIP_LLADDR_LEN 6 194 #define uip_sethostaddr(addr) uip_ipaddr_copy(&uip_hostaddr, (addr)) 214 #define uip_gethostaddr(addr) uip_ipaddr_copy((addr), &uip_hostaddr) 226 #define uip_setdraddr(addr) uip_ipaddr_copy(&uip_draddr, (addr)) 238 #define uip_setnetmask(addr) uip_ipaddr_copy(&uip_netmask, (addr)) 249 #define uip_getdraddr(addr) uip_ipaddr_copy((addr), &uip_draddr) 259 #define uip_getnetmask(addr) uip_ipaddr_copy((addr), &uip_netmask) 345 #define uip_input() uip_process(UIP_DATA) 391 #define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \ 392 uip_process(UIP_TIMER); } while (0) 398 #define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED) 413 #define uip_periodic_conn(conn) do { uip_conn = conn; \ 414 uip_process(UIP_TIMER); } while (0) 427 #define uip_poll_conn(conn) do { uip_conn = conn; \ 428 uip_process(UIP_POLL_REQUEST); } while (0) 464 #define uip_udp_periodic(conn) do { uip_udp_conn = &uip_udp_conns[conn]; \ 465 uip_process(UIP_UDP_TIMER); } while(0) 481 #define uip_udp_periodic_conn(conn) do { uip_udp_conn = conn; \ 482 uip_process(UIP_UDP_TIMER); } while(0) 521 #define uip_buf (uip_aligned_buf.u8) 641 unsigned uip_quote();
653 #define uip_datalen() uip_len 664 #define uip_urgdatalen() uip_urglen 673 #define uip_close() (uip_flags = UIP_CLOSE) 684 #define uip_abort() (uip_flags = UIP_ABORT) 694 #define uip_stop_rx() (uip_conn->tcpstateflags |= UIP_RX_STOPPED) 702 #define uip_rx_stopped(conn) ((conn)->tcpstateflags & UIP_RX_STOPPED) 713 #define uip_restart_rx() do { uip_flags |= UIP_NEWDATA; \ 714 uip_conn->tcpstateflags &= ~UIP_RX_STOPPED; \ 718 #define uip_stop_tx(conn) ((conn)->tcpstateflags |= UIP_TX_STOPPED) 719 #define uip_tx_stopped(conn) ((conn)->tcpstateflags & UIP_TX_STOPPED) 720 #define uip_restart_tx(conn) ((conn)->tcpstateflags &= ~UIP_TX_STOPPED) 722 #define uip_has_arp(conn) ((conn)->arpid != UIP_ARP_NONE) 723 #define uip_clear_arp(conn) ((conn)->arpid = UIP_ARP_NONE) 724 #define uip_set_arp(conn, p) ((conn)->arpid = p) 734 #define uip_udpconnection() (uip_conn == NULL) 745 #define uip_newdata() (uip_flags & UIP_NEWDATA) 756 #define uip_acked() (uip_flags & UIP_ACKDATA) 768 #define uip_connected() (uip_flags & UIP_CONNECTED) 778 #define uip_closed() (uip_flags & UIP_CLOSE) 788 #define uip_aborted() (uip_flags & UIP_ABORT) 798 #define uip_timedout() (uip_flags & UIP_TIMEDOUT) 810 #define uip_rexmit() (0) 824 #define uip_poll() (uip_flags & UIP_POLL) 832 #define uip_initialmss() (uip_conn->initialmss) 845 #define uip_mss() (uip_conn->mss) 883 #define uip_udp_remove(conn) (conn)->lport = 0 895 #define uip_udp_bind(conn, port) (conn)->lport = port 908 #define uip_udp_send(len) uip_send((char *)uip_appdata, len) 911 bool uip_udp_quote();
937 #define uip_ipaddr_to_quad(a) (a)->u8[0],(a)->u8[1],(a)->u8[2],(a)->u8[3] 965 #define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \ 966 (addr)->u8[0] = addr0; \ 967 (addr)->u8[1] = addr1; \ 968 (addr)->u8[2] = addr2; \ 969 (addr)->u8[3] = addr3; \ 979 #define uip_ip6addr(addr, addr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7) do { \ 980 (addr)->u16[0] = UIP_HTONS(addr0); \ 981 (addr)->u16[1] = UIP_HTONS(addr1); \ 982 (addr)->u16[2] = UIP_HTONS(addr2); \ 983 (addr)->u16[3] = UIP_HTONS(addr3); \ 984 (addr)->u16[4] = UIP_HTONS(addr4); \ 985 (addr)->u16[5] = UIP_HTONS(addr5); \ 986 (addr)->u16[6] = UIP_HTONS(addr6); \ 987 (addr)->u16[7] = UIP_HTONS(addr7); \ 997 #define uip_ip6addr_u8(addr, addr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7,addr8,addr9,addr10,addr11,addr12,addr13,addr14,addr15) do { \ 998 (addr)->u8[0] = addr0; \ 999 (addr)->u8[1] = addr1; \ 1000 (addr)->u8[2] = addr2; \ 1001 (addr)->u8[3] = addr3; \ 1002 (addr)->u8[4] = addr4; \ 1003 (addr)->u8[5] = addr5; \ 1004 (addr)->u8[6] = addr6; \ 1005 (addr)->u8[7] = addr7; \ 1006 (addr)->u8[8] = addr8; \ 1007 (addr)->u8[9] = addr9; \ 1008 (addr)->u8[10] = addr10; \ 1009 (addr)->u8[11] = addr11; \ 1010 (addr)->u8[12] = addr12; \ 1011 (addr)->u8[13] = addr13; \ 1012 (addr)->u8[14] = addr14; \ 1013 (addr)->u8[15] = addr15; \ 1035 #ifndef uip_ipaddr_copy 1036 #define uip_ipaddr_copy(dest, src) (*(dest) = *(src)) 1038 #ifndef uip_ip4addr_copy 1039 #define uip_ip4addr_copy(dest, src) (*(dest) = *(src)) 1041 #ifndef uip_ip6addr_copy 1042 #define uip_ip6addr_copy(dest, src) (*(dest) = *(src)) 1065 #define uip_ip4addr_cmp(addr1, addr2) ((addr1)->u16[0] == (addr2)->u16[0] && \ 1066 (addr1)->u16[1] == (addr2)->u16[1]) 1067 #define uip_ip6addr_cmp(addr1, addr2) (memcmp(addr1, addr2, sizeof(uip_ip6addr_t)) == 0) 1070 #define uip_ipaddr_cmp(addr1, addr2) uip_ip6addr_cmp(addr1, addr2) 1072 #define uip_ipaddr_cmp(addr1, addr2) uip_ip4addr_cmp(addr1, addr2) 1100 #define uip_ipaddr_maskcmp(addr1, addr2, mask) \ 1101 (((((uint16_t *)addr1)[0] & ((uint16_t *)mask)[0]) == \ 1102 (((uint16_t *)addr2)[0] & ((uint16_t *)mask)[0])) && \ 1103 ((((uint16_t *)addr1)[1] & ((uint16_t *)mask)[1]) == \ 1104 (((uint16_t *)addr2)[1] & ((uint16_t *)mask)[1]))) 1106 #define uip_ipaddr_prefixcmp(addr1, addr2, length) (memcmp(addr1, addr2, length>>3) == 0) 1152 #define uip_ipaddr_mask(dest, src, mask) do { \ 1153 ((uint16_t *)dest)[0] = ((uint16_t *)src)[0] & ((uint16_t *)mask)[0]; \ 1154 ((uint16_t *)dest)[1] = ((uint16_t *)src)[1] & ((uint16_t *)mask)[1]; \ 1175 #define uip_ipaddr1(addr) ((addr)->u8[0]) 1195 #define uip_ipaddr2(addr) ((addr)->u8[1]) 1215 #define uip_ipaddr3(addr) ((addr)->u8[2]) 1235 #define uip_ipaddr4(addr) ((addr)->u8[3]) 1247 # if UIP_BYTE_ORDER == UIP_BIG_ENDIAN 1248 # define UIP_HTONS(n) (n) 1249 # define UIP_HTONL(n) (n) 1251 # define UIP_HTONS(n) (uint16_t)((((uint16_t) (n)) << 8) | (((uint16_t) (n)) >> 8)) 1252 # define UIP_HTONL(n) (((uint32_t)UIP_HTONS(n) << 16) | UIP_HTONS((uint32_t)(n) >> 16)) 1255 #error "UIP_HTONS already defined!" 1269 #define uip_ntohs uip_htons 1273 CCIF uint32_t uip_htonl(uint32_t val);
1276 #define uip_ntohl uip_htonl 1296 extern void *uip_urgdata;
1332 extern uint16_t uip_urglen, uip_surglen;
1391 CCIF
extern struct uip_conn uip_conns[
UIP_CONNS];
1395 extern struct dlist_t *uip_backlog;
1396 extern uint32_t uip_seq;
1429 struct uip_fallback_interface {
1431 void (*output)(void);
1435 struct uip_icmp6_conn {
1436 uip_icmp6_appstate_t appstate;
1438 extern struct uip_icmp6_conn uip_icmp6_conns;
1446 #if UIP_STATISTICS == 1 1448 #define UIP_STAT(s) s 1501 uip_stats_t syndrop;
1540 CCIF
extern uint8_t uip_flags;
1549 #define UIP_ACKDATA 1 1553 #define UIP_NEWDATA 2 1556 #define UIP_REXMIT 4 1559 #define UIP_FLOW_OFF 4 1563 #define UIP_CLOSE 16 1568 #define UIP_ABORT 32 1573 #define UIP_CONNECTED 64 1578 #define UIP_TIMEDOUT 128 1610 #define UIP_POLL_REQUEST 3 1612 #define UIP_UDP_SEND_CONN 4 1616 #define UIP_UDP_TIMER 5 1620 #define UIP_CLOSED 0 1621 #define UIP_SYN_RCVD 1 1622 #define UIP_SYN_SENT 2 1623 #define UIP_ESTABLISHED 3 1624 #define UIP_FIN_WAIT_1 4 1625 #define UIP_FIN_WAIT_2 5 1626 #define UIP_CLOSING 6 1627 #define UIP_TIME_WAIT 7 1628 #define UIP_LAST_ACK 8 1629 #define UIP_TS_MASK 15 1631 #define UIP_RX_STOPPED 0x10 1632 #define UIP_TX_STOPPED 0x20 1635 struct uip_tcpip_hdr {
1643 uip_ip6addr_t srcipaddr, destipaddr;
1671 struct uip_icmpip_hdr {
1679 uip_ip6addr_t srcipaddr, destipaddr;
1694 uint8_t type, icode;
1695 uint16_t icmpchksum;
1704 struct uip_udpip_hdr {
1712 uip_ip6addr_t srcipaddr, destipaddr;
1747 uip_ip6addr_t srcipaddr, destipaddr;
1784 typedef struct uip_ext_hdr {
1790 typedef struct uip_hbho_hdr {
1796 typedef struct uip_desto_hdr {
1811 typedef struct uip_routing_hdr {
1814 uint8_t routing_type;
1819 typedef struct uip_frag_hdr {
1822 uint16_t offsetresmore;
1830 typedef struct uip_ext_hdr_opt {
1836 typedef struct uip_ext_hdr_opt_padn {
1839 } uip_ext_hdr_opt_padn;
1842 typedef struct uip_ext_hdr_opt_rpl {
1847 uint16_t senderrank;
1848 } uip_ext_hdr_opt_rpl;
1851 struct uip_tcp_hdr {
1865 struct uip_icmp_hdr {
1866 uint8_t type, icode;
1867 uint16_t icmpchksum;
1875 struct uip_udp_hdr {
1897 #define UIP_APPDATA_SIZE (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) 1898 #define UIP_APPDATA_PTR (void *)&uip_buf[UIP_LLH_LEN + UIP_TCPIP_HLEN] 1900 #define UIP_PROTO_ICMP 1 1901 #define UIP_PROTO_TCP 6 1902 #define UIP_PROTO_UDP 17 1903 #define UIP_PROTO_ICMP6 58 1909 #define UIP_PROTO_HBHO 0 1910 #define UIP_PROTO_DESTO 60 1911 #define UIP_PROTO_ROUTING 43 1912 #define UIP_PROTO_FRAG 44 1913 #define UIP_PROTO_NONE 59 1918 #define UIP_EXT_HDR_OPT_PAD1 0 1919 #define UIP_EXT_HDR_OPT_PADN 1 1920 #define UIP_EXT_HDR_OPT_RPL 0x63 1933 #define UIP_EXT_HDR_BITMAP_HBHO 0x01 1934 #define UIP_EXT_HDR_BITMAP_DESTO1 0x02 1935 #define UIP_EXT_HDR_BITMAP_ROUTING 0x04 1936 #define UIP_EXT_HDR_BITMAP_FRAG 0x08 1937 #define UIP_EXT_HDR_BITMAP_AH 0x10 1938 #define UIP_EXT_HDR_BITMAP_ESP 0x20 1939 #define UIP_EXT_HDR_BITMAP_DESTO2 0x40 1947 CCIF
extern const uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr;
1949 CCIF
extern uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr;
1954 #if UIP_FIXEDETHADDR 1965 #define UIP_LLPREF_LEN 10 1971 #define uip_is_addr_loopback(a) \ 1972 ((((a)->u16[0]) == 0) && \ 1973 (((a)->u16[1]) == 0) && \ 1974 (((a)->u16[2]) == 0) && \ 1975 (((a)->u16[3]) == 0) && \ 1976 (((a)->u16[4]) == 0) && \ 1977 (((a)->u16[5]) == 0) && \ 1978 (((a)->u16[6]) == 0) && \ 1979 (((a)->u8[14]) == 0) && \ 1980 (((a)->u8[15]) == 0x01)) 1985 #define uip_is_addr_unspecified(a) \ 1986 ((((a)->u16[0]) == 0) && \ 1987 (((a)->u16[1]) == 0) && \ 1988 (((a)->u16[2]) == 0) && \ 1989 (((a)->u16[3]) == 0) && \ 1990 (((a)->u16[4]) == 0) && \ 1991 (((a)->u16[5]) == 0) && \ 1992 (((a)->u16[6]) == 0) && \ 1993 (((a)->u16[7]) == 0)) 1996 #define uip_is_addr_linklocal_allnodes_mcast(a) \ 1997 ((((a)->u8[0]) == 0xff) && \ 1998 (((a)->u8[1]) == 0x02) && \ 1999 (((a)->u16[1]) == 0) && \ 2000 (((a)->u16[2]) == 0) && \ 2001 (((a)->u16[3]) == 0) && \ 2002 (((a)->u16[4]) == 0) && \ 2003 (((a)->u16[5]) == 0) && \ 2004 (((a)->u16[6]) == 0) && \ 2005 (((a)->u8[14]) == 0) && \ 2006 (((a)->u8[15]) == 0x01)) 2009 #define uip_is_addr_linklocal_allrouters_mcast(a) \ 2010 ((((a)->u8[0]) == 0xff) && \ 2011 (((a)->u8[1]) == 0x02) && \ 2012 (((a)->u16[1]) == 0) && \ 2013 (((a)->u16[2]) == 0) && \ 2014 (((a)->u16[3]) == 0) && \ 2015 (((a)->u16[4]) == 0) && \ 2016 (((a)->u16[5]) == 0) && \ 2017 (((a)->u16[6]) == 0) && \ 2018 (((a)->u8[14]) == 0) && \ 2019 (((a)->u8[15]) == 0x02)) 2025 #define uip_is_addr_linklocal(a) \ 2026 ((a)->u8[0] == 0xfe && \ 2030 #define uip_create_unspecified(a) uip_ip6addr(a, 0, 0, 0, 0, 0, 0, 0, 0) 2033 #define uip_create_linklocal_allnodes_mcast(a) uip_ip6addr(a, 0xff02, 0, 0, 0, 0, 0, 0, 0x0001) 2036 #define uip_create_linklocal_allrouters_mcast(a) uip_ip6addr(a, 0xff02, 0, 0, 0, 0, 0, 0, 0x0002) 2037 #define uip_create_linklocal_prefix(addr) do { \ 2038 (addr)->u16[0] = UIP_HTONS(0xfe80); \ 2039 (addr)->u16[1] = 0; \ 2040 (addr)->u16[2] = 0; \ 2041 (addr)->u16[3] = 0; \ 2048 #define uip_is_addr_solicited_node(a) \ 2049 ((((a)->u8[0]) == 0xFF) && \ 2050 (((a)->u8[1]) == 0x02) && \ 2051 (((a)->u16[1]) == 0x00) && \ 2052 (((a)->u16[2]) == 0x00) && \ 2053 (((a)->u16[3]) == 0x00) && \ 2054 (((a)->u16[4]) == 0x00) && \ 2055 (((a)->u8[10]) == 0x00) && \ 2056 (((a)->u8[11]) == 0x01) && \ 2057 (((a)->u8[12]) == 0xFF)) 2063 #define uip_create_solicited_node(a, b) \ 2064 (((b)->u8[0]) = 0xFF); \ 2065 (((b)->u8[1]) = 0x02); \ 2066 (((b)->u16[1]) = 0); \ 2067 (((b)->u16[2]) = 0); \ 2068 (((b)->u16[3]) = 0); \ 2069 (((b)->u16[4]) = 0); \ 2070 (((b)->u8[10]) = 0); \ 2071 (((b)->u8[11]) = 0x01); \ 2072 (((b)->u8[12]) = 0xFF); \ 2073 (((b)->u8[13]) = ((a)->u8[13])); \ 2074 (((b)->u16[7]) = ((a)->u16[7])) 2081 #define uip_is_addr_link_local(a) \ 2082 ((((a)->u8[0]) == 0xFE) && \ 2083 (((a)->u8[1]) == 0x80)) 2090 #if UIP_CONF_LL_802154 2091 #define uip_is_addr_mac_addr_based(a, m) \ 2092 ((((a)->u8[8]) == (((m)->addr[0]) ^ 0x02)) && \ 2093 (((a)->u8[9]) == (m)->addr[1]) && \ 2094 (((a)->u8[10]) == (m)->addr[2]) && \ 2095 (((a)->u8[11]) == (m)->addr[3]) && \ 2096 (((a)->u8[12]) == (m)->addr[4]) && \ 2097 (((a)->u8[13]) == (m)->addr[5]) && \ 2098 (((a)->u8[14]) == (m)->addr[6]) && \ 2099 (((a)->u8[15]) == (m)->addr[7])) 2102 #define uip_is_addr_mac_addr_based(a, m) \ 2103 ((((a)->u8[8]) == (((m)->addr[0]) | 0x02)) && \ 2104 (((a)->u8[9]) == (m)->addr[1]) && \ 2105 (((a)->u8[10]) == (m)->addr[2]) && \ 2106 (((a)->u8[11]) == 0xff) && \ 2107 (((a)->u8[12]) == 0xfe) && \ 2108 (((a)->u8[13]) == (m)->addr[3]) && \ 2109 (((a)->u8[14]) == (m)->addr[4]) && \ 2110 (((a)->u8[15]) == (m)->addr[5])) 2118 #define uip_is_addr_mcast(a) \ 2119 (((a)->u8[0]) == 0xFF) 2125 #define uip_is_mcast_group_id_all_nodes(a) \ 2126 ((((a)->u16[1]) == 0) && \ 2127 (((a)->u16[2]) == 0) && \ 2128 (((a)->u16[3]) == 0) && \ 2129 (((a)->u16[4]) == 0) && \ 2130 (((a)->u16[5]) == 0) && \ 2131 (((a)->u16[6]) == 0) && \ 2132 (((a)->u8[14]) == 0) && \ 2133 (((a)->u8[15]) == 1)) 2139 #define uip_is_mcast_group_id_all_routers(a) \ 2140 ((((a)->u16[1]) == 0) && \ 2141 (((a)->u16[2]) == 0) && \ 2142 (((a)->u16[3]) == 0) && \ 2143 (((a)->u16[4]) == 0) && \ 2144 (((a)->u16[5]) == 0) && \ 2145 (((a)->u16[6]) == 0) && \ 2146 (((a)->u8[14]) == 0) && \ 2147 (((a)->u8[15]) == 2)) 2154 #define uip_are_solicited_bytes_equal(a, b) \ 2155 ((((a)->u8[13]) == ((b)->u8[13])) && \ 2156 (((a)->u8[14]) == ((b)->u8[14])) && \ 2157 (((a)->u8[15]) == ((b)->u8[15]))) 2177 uint16_t
uip_chksum(uint16_t *buf, uint16_t len);
struct uip_udp_conn * uip_udp_new(const uip_ipaddr_t *ripaddr, uint16_t rport)
void uip_reass_over(void)
Abandon the reassembly of the current packet.
void uip_process(uint8_t flag)
process the options within a hop by hop or destination option header
ssize_t recv(int sockfd, void *buf, size_t len, int flags)
uint16_t uip_chksum(uint16_t *data, uint16_t len)
void uip_unlisten(uint16_t port)
CCIF struct uip_conn * uip_conn
The code implements Dummy Headed Doubly Linked Circularlist (DHDLC) primitive.
void uip_setipid(uint16_t id)
struct uip_conn * uip_connect(uip_ipaddr_t *ripaddr, uint16_t port)
uint16_t uip_ipchksum(void)
struct tcpip_uipstate uip_udp_appstate_t
uip_eth_addr uip_lladdr_t
Ethernet address.
void uip_listen(uint16_t port)
struct uip_eth_addr uip_eth_addr
802.3 address
CCIF void uip_send(const void *data, int len)
union uip_ip4addr_t uip_ip4addr_t
struct uip_802154_shortaddr uip_802154_shortaddr
16 bit 802.15.4 address
uint8_t data[USBNET_RX_BUF_SIZE]
uint16_t uip_icmp6chksum(void)
struct uip_802154_longaddr uip_802154_longaddr
64 bit 802.15.4 address
uint16_t uip_tcpchksum(void)
CCIF uint16_t uip_htons(uint16_t val)
struct uip_80211_addr uip_80211_addr
802.11 address
uip_tcp_appstate_t appstate
uint16_t uip_udpchksum(void)
struct tcpip_uipstate uip_tcp_appstate_t
struct uip_udp_conn * uip_udp_conn
uip_udp_appstate_t appstate