Contiki-NG
|
The low-power IPv6 stack. More...
Modules | |
A simple UDP API | |
The default Contiki UDP API is difficult to use. | |
Architecture specific uIP functions | |
The functions in the architecture specific module implement the IP check sum and 32-bit additions. | |
Configuration options for uIP | |
uIP is configured using the per-project configuration file "uipopt.h". | |
IPv6 Multicast Forwarding | |
We currently support 2 engines: | |
Protosockets library | |
The protosocket library provides an interface to the uIP stack that is similar to the traditional BSD socket interface. | |
Sicslowpan | |
The Contiki/uIP interface | |
TCP/IP support in Contiki is implemented using the uIP TCP/IP stack. | |
Variables used in uIP device drivers | |
uIP has a few global variables that are used in device drivers for uIP. | |
uIP address manipulation library | |
A library with various IP address manipulation functions. | |
uIP application functions | |
Functions used by an application running on top of uIP. | |
uIP configuration functions | |
The uIP configuration functions are used for setting run-time parameters in uIP such as IP addresses. | |
uIP conversion functions | |
These functions can be used for converting between different data formats used by uIP. | |
uIP device driver functions | |
These functions are used by a network device driver for interacting with uIP. | |
uIP hostname resolver functions | |
The uIP DNS resolver functions are used to lookup a hostname and map it to a numerical IP address. | |
uIP initialization functions | |
The uIP initialization functions are used for booting uIP. | |
Files | |
file | uip-ds6-nbr.c |
IPv6 Neighbor cache (link-layer/IPv6 address mapping) | |
file | uip-ds6-nbr.h |
IPv6 Neighbor cache (link-layer/IPv6 address mapping) | |
file | uip-ds6-route.c |
Routing table manipulation. | |
file | uip-ds6-route.h |
Header file for routing table manipulation. | |
file | uip-ds6.c |
IPv6 data structure manipulation. | |
file | uip-ds6.h |
Header file for IPv6-related data structures. | |
file | uip-icmp6.c |
ICMPv6 (RFC 4443) implementation, with message and error handling. | |
file | uip-icmp6.h |
Header file for ICMPv6 message and error handing (RFC 4443) | |
file | uip-nameserver.c |
uIP Name Server interface | |
file | uip-nameserver.h |
uIP Name Server interface | |
file | uip-nd6.c |
Neighbor discovery (RFC 4861) | |
file | uip-nd6.h |
Header file for IPv6 Neighbor discovery (RFC 4861) | |
file | uip-sr.c |
Source routing support. | |
file | uip-sr.h |
Source routing support. | |
file | uip.h |
Header file for the uIP TCP/IP stack. | |
file | uip6.c |
The uIP TCP/IPv6 stack code. | |
file | rpl-nbr-policy.c |
Default RPL NBR policy decides when to add a new discovered node to the nbr table from RPL. | |
Data Structures | |
struct | uip_ds6_nbr |
The default nbr_table entry (when UIP_DS6_NBR_MULTI_IPV6_ADDRS is disabled), that implements nbr cache. More... | |
struct | uip_ds6_route_neighbor_routes |
The neighbor routes hold a list of routing table entries that are attached to a specific neihbor. More... | |
struct | uip_ds6_route |
An entry in the routing table. More... | |
struct | uip_ds6_route_neighbor_route |
A neighbor route list entry, used on the uip_ds6_route->neighbor_routes->route_list list. More... | |
struct | uip_ds6_defrt |
An entry in the default router list. More... | |
struct | uip_ds6_prefix |
A prefix list entry. More... | |
struct | uip_ds6_addr |
Unicast address structure. More... | |
struct | uip_ds6_aaddr |
Anycast address. More... | |
struct | uip_ds6_maddr |
A multicast address. More... | |
struct | uip_ds6_netif |
Interface structure (contains all the interface variables) More... | |
struct | uip_ds6_element |
Generic type for a DS6, to use a common loop though all DS. More... | |
struct | uip_icmp6_error |
ICMPv6 Error message constant part. More... | |
struct | uip_nd6_ns |
A neighbor solicitation constant part. More... | |
struct | uip_nd6_na |
A neighbor advertisement constant part. More... | |
struct | uip_nd6_rs |
A router solicitation constant part. More... | |
struct | uip_nd6_ra |
A router advertisement constant part. More... | |
struct | uip_nd6_redirect |
A redirect message constant part. More... | |
struct | uip_nd6_opt_hdr |
ND option header. More... | |
struct | uip_nd6_opt_prefix_info |
ND option prefix information. More... | |
struct | uip_nd6_opt_mtu |
ND option MTU. More... | |
struct | uip_nd6_opt_dns |
ND option RDNSS. More... | |
struct | uip_sr_node |
A node in a source routing graph, stored at the root and representing all child-parent relationship. More... | |
union | uip_ip4addr_t |
Representation of an IP address. More... | |
struct | uip_802154_shortaddr |
16 bit 802.15.4 address More... | |
struct | uip_802154_longaddr |
64 bit 802.15.4 address More... | |
struct | uip_80211_addr |
802.11 address More... | |
struct | uip_eth_addr |
802.3 address More... | |
struct | uip_conn |
Representation of a uIP TCP connection. More... | |
struct | uip_udp_conn |
Representation of a uIP UDP connection. More... | |
struct | uip_stats |
The structure holding the TCP/IP statistics that are gathered if UIP_STATISTICS is set to 1. More... | |
struct | uip_eth_hdr |
The Ethernet header. More... | |
Macros | |
#define | NBR_INCOMPLETE 0 |
Possible states for the nbr cache entries. | |
#define | UIP_DS6_NBR_MULTI_IPV6_ADDRS 0 |
Set non-zero (1) to enable multiple IPv6 addresses to be associated with a link-layer address. | |
#define | UIP_DS6_NBR_MAX_6ADDRS_PER_NBR 2 |
Set the maximum number of IPv6 addresses per link-layer address. | |
#define | UIP_DS6_NBR_MAX_NEIGHBOR_CACHES (NBR_TABLE_MAX_NEIGHBORS * UIP_DS6_NBR_MAX_6ADDRS_PER_NBR) |
Set the maximum number of neighbor cache entries. | |
#define | UIP_DS6_ROUTE_STATE_TYPE rpl_route_entry_t |
define some additional RPL related route state and neighbor callback for RPL - if not a DS6_ROUTE_STATE is already set | |
#define | UIP_DS6_DEFRT_NBS 0 |
Configuration. More... | |
#define | ADDR_TENTATIVE 0 |
Possible states for the an address (RFC 4862) | |
#define | ADDR_ANYTYPE 0 |
How the address was acquired: Autoconf, DHCP or manually. | |
#define | UIP_DS6_PERIOD (60 * CLOCK_SECOND) |
General DS6 definitions. More... | |
#define | UIP_ICMP6_ECHO_REQUEST_LEN 4 |
Echo Request constant part length. | |
#define | UIP_ICMP6_ERROR_LEN 4 |
ICMPv6 Error message constant part length. | |
#define | DNS_EXPIRATION(r) |
Expiration time in seconds. | |
#define | ND6_OPT(opt) ((unsigned char *)(UIP_ICMP_PAYLOAD + (opt))) |
Pointer to ND option. | |
#define | UIP_ND6_DEF_MAXDADNS UIP_ND6_SEND_NS |
Do not try DAD when using EUI-64 as allowed by draft-ietf-6lowpan-nd-15 section 8.2. | |
#define | UIP_IP_BUF ((struct uip_ip_hdr *)uip_buf) |
Direct access to IPv6 header. | |
#define | UIP_ICMP_BUF ((struct uip_icmp_hdr *)UIP_IP_PAYLOAD(uip_ext_len)) |
Direct access to ICMP, UDP, and TCP headers and payload, with implicit ext header offset (global uip_ext_len) | |
#define | UIP_LLADDR_LEN LINKADDR_SIZE |
802.15.4 address More... | |
#define | UIP_STAT(s) |
The uIP TCP/IP statistics. More... | |
#define | UIP_APPDATA_SIZE |
The buffer size available for user data in the uip_buf buffer. More... | |
#define | UIP_LLPREF_LEN 10 |
Length of the link local prefix. | |
#define | uip_is_addr_loopback(a) |
Is IPv6 address a the unspecified address a is of type uip_ipaddr_t. | |
#define | uip_is_addr_unspecified(a) |
Is IPv6 address a the unspecified address a is of type uip_ipaddr_t. | |
#define | uip_is_addr_linklocal_allnodes_mcast(a) |
Is IPv6 address a the link local all-nodes multicast address. | |
#define | uip_is_addr_linklocal_allrouters_mcast(a) |
Is IPv6 address a the link local all-routers multicast address. | |
#define | uip_is_addr_linklocal(a) |
is addr (a) a link local unicast address, see RFC 4291 i.e. More... | |
#define | uip_create_unspecified(a) uip_ip6addr(a, 0, 0, 0, 0, 0, 0, 0, 0) |
set IP address a to unspecified | |
#define | uip_create_linklocal_allnodes_mcast(a) uip_ip6addr(a, 0xff02, 0, 0, 0, 0, 0, 0, 0x0001) |
set IP address a to the link local all-nodes multicast address | |
#define | uip_create_linklocal_allrouters_mcast(a) uip_ip6addr(a, 0xff02, 0, 0, 0, 0, 0, 0, 0x0002) |
set IP address a to the link local all-routers multicast address | |
#define | uip_is_addr_solicited_node(a) |
is addr (a) a solicited node multicast address, see RFC 4291 a is of type uip_ipaddr_t* | |
#define | uip_create_solicited_node(a, b) |
put in b the solicited node address corresponding to address a both a and b are of type uip_ipaddr_t* | |
#define | uip_is_addr_mac_addr_based(a, m) |
was addr (a) forged based on the mac address m a type is uip_ipaddr_t m type is uiplladdr_t | |
#define | uip_is_addr_mcast(a) (((a)->u8[0]) == 0xFF) |
is address a multicast address, see RFC 4291 a is of type uip_ipaddr_t* | |
#define | uip_is_addr_mcast_global(a) |
is address a global multicast address (FFxE::/16), a is of type uip_ip6addr_t* | |
#define | uip_is_addr_mcast_non_routable(a) |
is address a non-routable multicast address. More... | |
#define | uip_is_addr_mcast_routable(a) |
is address a routable multicast address. More... | |
#define | uip_is_mcast_group_id_all_nodes(a) |
is group-id of multicast address a the all nodes group-id | |
#define | uip_is_mcast_group_id_all_routers(a) |
is group-id of multicast address a the all routers group-id | |
#define | uip_are_solicited_bytes_equal(a, b) |
are last three bytes of both addresses equal? This is used to compare solicited node multicast addresses | |
#define | UIP_FW_LOCAL |
A non-error message that indicates that a packet should be processed locally. | |
#define | UIP_FW_OK |
A non-error message that indicates that something went OK. | |
#define | UIP_FW_FORWARDED |
A non-error message that indicates that a packet was forwarded. | |
#define | UIP_FW_ZEROLEN |
A non-error message that indicates that a zero-length packet transmission was attempted, and that no packet was sent. | |
#define | UIP_FW_TOOLARGE |
An error message that indicates that a packet that was too large for the outbound network interface was detected. | |
#define | UIP_FW_NOROUTE |
An error message that indicates that no suitable interface could be found for an outbound packet. | |
#define | UIP_FW_DROPPED |
An error message that indicates that a packet that should be forwarded or output was dropped. | |
Typedefs | |
typedef struct uip_ds6_nbr | uip_ds6_nbr_t |
The default nbr_table entry (when UIP_DS6_NBR_MULTI_IPV6_ADDRS is disabled), that implements nbr cache. | |
typedef struct uip_ds6_route | uip_ds6_route_t |
An entry in the routing table. | |
typedef struct uip_ds6_defrt | uip_ds6_defrt_t |
An entry in the default router list. | |
typedef struct uip_ds6_prefix | uip_ds6_prefix_t |
A prefix list entry. | |
typedef struct uip_ds6_addr | uip_ds6_addr_t |
Unicast address structure. More... | |
typedef struct uip_ds6_aaddr | uip_ds6_aaddr_t |
Anycast address. | |
typedef struct uip_ds6_maddr | uip_ds6_maddr_t |
A multicast address. | |
typedef struct uip_ds6_netif | uip_ds6_netif_t |
Interface structure (contains all the interface variables) | |
typedef struct uip_ds6_element | uip_ds6_element_t |
Generic type for a DS6, to use a common loop though all DS. | |
typedef struct uip_icmp6_error | uip_icmp6_error |
ICMPv6 Error message constant part. | |
typedef struct uip_nameserver_record | uip_nameserver_record |
Nameserver record. | |
typedef struct uip_sr_node | uip_sr_node_t |
A node in a source routing graph, stored at the root and representing all child-parent relationship. More... | |
typedef union uip_ip4addr_t | uip_ip4addr_t |
Representation of an IP address. | |
typedef struct uip_802154_shortaddr | uip_802154_shortaddr |
16 bit 802.15.4 address | |
typedef struct uip_802154_longaddr | uip_802154_longaddr |
64 bit 802.15.4 address | |
typedef struct uip_80211_addr | uip_80211_addr |
802.11 address | |
typedef struct uip_eth_addr | uip_eth_addr |
802.3 address | |
Functions | |
uip_ds6_nbr_t * | uip_ds6_nbr_add (const uip_ipaddr_t *ipaddr, const uip_lladdr_t *lladdr, uint8_t isrouter, uint8_t state, nbr_table_reason_t reason, void *data) |
Add a neighbor cache for a specified IPv6 address, which is associated with a specified link-layer address. More... | |
int | uip_ds6_nbr_rm (uip_ds6_nbr_t *nbr) |
Remove a neighbor cache. More... | |
int | uip_ds6_nbr_update_ll (uip_ds6_nbr_t **nbr, const uip_lladdr_t *new_ll_addr) |
Update the link-layer address associated with an IPv6 address. More... | |
const uip_ipaddr_t * | uip_ds6_nbr_get_ipaddr (const uip_ds6_nbr_t *nbr) |
Get an IPv6 address of a neighbor cache. More... | |
const uip_lladdr_t * | uip_ds6_nbr_get_ll (const uip_ds6_nbr_t *nbr) |
Get the link-layer address associated with a specified nbr cache. More... | |
int | uip_ds6_nbr_num (void) |
Return the number of neighbor caches. More... | |
uip_ds6_nbr_t * | uip_ds6_nbr_head (void) |
Get the first neighbor cache in nbr_table. More... | |
uip_ds6_nbr_t * | uip_ds6_nbr_next (uip_ds6_nbr_t *nbr) |
Get the next neighbor cache of a specified one. More... | |
uip_ds6_nbr_t * | uip_ds6_nbr_lookup (const uip_ipaddr_t *ipaddr) |
Get the neighbor cache associated with a specified IPv6 address. More... | |
uip_ds6_nbr_t * | uip_ds6_nbr_ll_lookup (const uip_lladdr_t *lladdr) |
Get the neighbor cache associated with a specified link-layer address. More... | |
uip_ipaddr_t * | uip_ds6_nbr_ipaddr_from_lladdr (const uip_lladdr_t *lladdr) |
Get an IPv6 address associated with a specified link-layer address. More... | |
const uip_lladdr_t * | uip_ds6_nbr_lladdr_from_ipaddr (const uip_ipaddr_t *ipaddr) |
Get the link-layer address associated with a specified IPv6 address. More... | |
void | uip_ds6_link_callback (int status, int numtx) |
The callback function to update link-layer stats in a neighbor cache. More... | |
void | uip_ds6_neighbor_periodic (void) |
The housekeeping function called periodically. | |
uip_ds6_nbr_t * | uip_ds6_get_least_lifetime_neighbor (void) |
This searches inside the neighbor table for the neighbor that is about to expire the next. More... | |
const uip_ip6addr_t * | uip_ds6_default_prefix () |
Retrieve the Default IPv6 prefix. More... | |
void | uip_ds6_set_default_prefix (const uip_ip6addr_t *prefix) |
Set the Default IPv6 prefix. More... | |
void | uip_ds6_init (void) |
Initialize data structures. | |
void | uip_ds6_periodic (void) |
Periodic processing of data structures. | |
uint8_t | uip_ds6_list_loop (uip_ds6_element_t *list, uint8_t size, uint16_t elementsize, uip_ipaddr_t *ipaddr, uint8_t ipaddrlen, uip_ds6_element_t **out_element) |
Generic loop routine on an abstract data structure, which generalizes all data structures used in DS6. | |
uip_ds6_addr_t * | uip_ds6_addr_add (uip_ipaddr_t *ipaddr, unsigned long vlifetime, uint8_t type) |
Add a unicast address to the interface. | |
void | uip_ds6_select_src (uip_ipaddr_t *src, uip_ipaddr_t *dst) |
Source address selection, see RFC 3484. | |
void | uip_ds6_set_addr_iid (uip_ipaddr_t *ipaddr, uip_lladdr_t *lladdr) |
set the last 64 bits of an IP address based on the MAC address | |
void | uip_ds6_set_lladdr_from_iid (uip_lladdr_t *lladdr, const uip_ipaddr_t *ipaddr) |
Build a link-layer address from an IPv6 address based on its UUID64. | |
uint8_t | get_match_length (uip_ipaddr_t *src, uip_ipaddr_t *dst) |
Get the number of matching bits of two addresses. | |
void | uip_ds6_dad (uip_ds6_addr_t *addr) |
Perform Duplicate Address Selection on one address. | |
int | uip_ds6_dad_failed (uip_ds6_addr_t *addr) |
Callback when DAD failed. | |
void | uip_ds6_send_rs (void) |
Send periodic RS to find router. | |
uint32_t | uip_ds6_compute_reachable_time (void) |
Compute the reachable time based on base reachable time, see RFC 4861. | |
int | uip_sr_num_nodes (void) |
Tells how many nodes are currently stored in the graph. More... | |
uip_sr_node_t * | uip_sr_get_node (void *graph, const uip_ipaddr_t *addr) |
Looks up for a source routing node from its IPv6 global address. More... | |
int | uip_sr_is_addr_reachable (void *graph, const uip_ipaddr_t *addr) |
Telle whether an address is reachable, i.e. More... | |
void | uip_sr_expire_parent (void *graph, const uip_ipaddr_t *child, const uip_ipaddr_t *parent) |
Expires a given child-parent link. More... | |
uip_sr_node_t * | uip_sr_update_node (void *graph, const uip_ipaddr_t *child, const uip_ipaddr_t *parent, uint32_t lifetime) |
Updates a child-parent link. More... | |
void | uip_sr_init (void) |
Initialize this module. | |
uip_sr_node_t * | uip_sr_node_head (void) |
Returns the head of the non-storing node list. More... | |
uip_sr_node_t * | uip_sr_node_next (uip_sr_node_t *item) |
Returns the next element of the non-storing node list. More... | |
void | uip_sr_periodic (unsigned seconds) |
A function called periodically. More... | |
void | uip_sr_free_all (void) |
Deallocate all neighbors. | |
int | uip_sr_link_snprint (char *buf, int buflen, uip_sr_node_t *link) |
Print a textual description of a source routing link. More... | |
void | uip_process (uint8_t flag) |
process the options within a hop by hop or destination option header More... | |
uint16_t | uip_chksum (uint16_t *data, uint16_t len) |
Calculate the Internet checksum over a buffer. More... | |
uint16_t | uip_ipchksum (void) |
Calculate the IP header checksum of the packet header in uip_buf. More... | |
uint16_t | uip_tcpchksum (void) |
Calculate the TCP checksum of the packet in uip_buf and uip_appdata. More... | |
uint16_t | uip_udpchksum (void) |
Calculate the UDP checksum of the packet in uip_buf and uip_appdata. More... | |
uint16_t | uip_icmp6chksum (void) |
Calculate the ICMP checksum of the packet in uip_buf. More... | |
bool | uip_remove_ext_hdr (void) |
Removes all IPv6 extension headers from uip_buf, updates length fields (uip_len and uip_ext_len) More... | |
void | uip_add32 (uint8_t *op32, uint16_t op16) |
Carry out a 32-bit addition. More... | |
void | uip_init (void) |
uIP initialization function. More... | |
struct uip_udp_conn * | uip_udp_new (const uip_ipaddr_t *ripaddr, uint16_t rport) |
Set up a new UDP connection. More... | |
void | uip_unlisten (uint16_t port) |
Stop listening to the specified port. More... | |
void | uip_listen (uint16_t port) |
Start listening to the specified port. More... | |
void | uip_reass_over (void) |
Abandon the reassembly of the current packet. More... | |
static uint8_t | ext_hdr_options_process (uint8_t *ext_buf) |
Process the options in Destination and Hop By Hop extension headers. | |
uint16_t | uip_htons (uint16_t val) |
Convert a 16-bit quantity from host byte order to network byte order. More... | |
void | uip_send (const void *data, int len) |
Send data on the current connection. More... | |
void | uiplib_ipaddr_print (const uip_ipaddr_t *addr) |
Print an IP address using printf(). More... | |
int | uiplib_ipaddr_snprint (char *buffer, size_t size, const uip_ipaddr_t *addr) |
Write at most size - 1 characters of the IP address to the output string. More... | |
void | rpl_dag_init (void) |
Initializes rpl-dag module. | |
int | rpl_has_joined (void) |
Tells whether the node has joined a network or not. More... | |
int | rpl_has_downward_route (void) |
Get the RPL's best guess on if we have downward route or not. More... | |
enum rpl_mode | rpl_get_mode (void) |
Get the RPL mode. More... | |
enum rpl_mode | rpl_set_mode (enum rpl_mode m) |
Set the RPL mode. More... | |
void | rpl_link_callback (const linkaddr_t *addr, int status, int numtx) |
Called by lower layers after every packet transmission. More... | |
uint8_t | rpl_is_in_leaf_mode (void) |
Tells whether the protocol is in leaf mode. More... | |
Variables | |
struct etimer | uip_ds6_timer_periodic |
Timer for maintenance of data structures. | |
struct etimer | uip_ds6_timer_rs |
RS timer, to schedule RS sending. | |
static uint8_t | rscount |
number of rs already sent | |
uip_ds6_netif_t | uip_ds6_if |
The single interface. | |
struct etimer | uip_ds6_timer_periodic |
Timer for maintenance of data structures. | |
struct etimer | uip_ds6_timer_rs |
RS timer, to schedule RS sending. | |
static uip_ipaddr_t | tmp_ipaddr |
temporary IP address | |
void * | uip_appdata |
Pointer to the application data in the packet buffer. More... | |
struct uip_conn * | uip_conn |
Pointer to the current TCP connection. More... | |
struct uip_udp_conn * | uip_udp_conn |
The current UDP connection. | |
struct uip_icmp6_conn | uip_icmp6_conns |
single possible icmpv6 "connection" | |
uip_lladdr_t | uip_lladdr |
Host L2 address. | |
struct etimer | uip_reass_timer |
Timer for reassembly. | |
Default router list basic routines | |
uip_ds6_defrt_t * | uip_ds6_defrt_head (void) |
uip_ds6_defrt_t * | uip_ds6_defrt_add (const uip_ipaddr_t *ipaddr, unsigned long interval) |
void | uip_ds6_defrt_rm (uip_ds6_defrt_t *defrt) |
uip_ds6_defrt_t * | uip_ds6_defrt_lookup (const uip_ipaddr_t *ipaddr) |
const uip_ipaddr_t * | uip_ds6_defrt_choose (void) |
void | uip_ds6_defrt_periodic (void) |
Routing Table basic routines | |
const uip_ipaddr_t * | uip_ds6_route_nexthop (uip_ds6_route_t *route) |
uip_ds6_route_t * | uip_ds6_route_head (void) |
uip_ds6_route_t * | uip_ds6_route_next (uip_ds6_route_t *r) |
int | uip_ds6_route_is_nexthop (const uip_ipaddr_t *ipaddr) |
int | uip_ds6_route_num_routes (void) |
uip_ds6_route_t * | uip_ds6_route_lookup (const uip_ipaddr_t *addr) |
uip_ds6_route_t * | uip_ds6_route_add (const uip_ipaddr_t *ipaddr, uint8_t length, const uip_ipaddr_t *nexthop) |
void | uip_ds6_route_rm (uip_ds6_route_t *route) |
void | uip_ds6_route_rm_by_nexthop (const uip_ipaddr_t *nexthop) |
"DS6" Data structures | |
uip_ds6_netif_t | uip_ds6_if |
The single interface. | |
uip_ds6_prefix_t | uip_ds6_prefix_list [UIP_DS6_PREFIX_NB] |
Prefix list. | |
uint8_t | uip_ds6_addr_size |
uint8_t | uip_ds6_netif_addr_list_offset |
ICMPv6 message types | |
#define | ICMP6_DST_UNREACH 1 |
dest unreachable | |
#define | ICMP6_PACKET_TOO_BIG 2 |
packet too big | |
#define | ICMP6_TIME_EXCEEDED 3 |
time exceeded | |
#define | ICMP6_PARAM_PROB 4 |
ip6 header bad | |
#define | ICMP6_ECHO_REQUEST 128 |
Echo request. | |
#define | ICMP6_ECHO_REPLY 129 |
Echo reply. | |
#define | ICMP6_RS 133 |
Router Solicitation. | |
#define | ICMP6_RA 134 |
Router Advertisement. | |
#define | ICMP6_NS 135 |
Neighbor Solicitation. | |
#define | ICMP6_NA 136 |
Neighbor advertisement. | |
#define | ICMP6_REDIRECT 137 |
Redirect. | |
#define | ICMP6_RPL 155 |
RPL. | |
#define | ICMP6_MPL 159 |
MPL. | |
#define | ICMP6_PRIV_EXP_100 100 |
Private Experimentation. | |
#define | ICMP6_PRIV_EXP_101 101 |
Private Experimentation. | |
#define | ICMP6_PRIV_EXP_200 200 |
Private Experimentation. | |
#define | ICMP6_PRIV_EXP_201 201 |
Private Experimentation. | |
#define | ICMP6_ROLL_TM ICMP6_PRIV_EXP_200 |
ROLL Trickle Multicast. | |
#define | ICMP6_ESMRF ICMP6_PRIV_EXP_201 |
ESMRF Multicast. | |
ICMPv6 Destination Unreachable message codes | |
#define | ICMP6_DST_UNREACH_NOROUTE 0 |
no route to destination | |
#define | ICMP6_DST_UNREACH_ADMIN 1 |
administratively prohibited | |
#define | ICMP6_DST_UNREACH_NOTNEIGHBOR 2 |
not a neighbor(obsolete) | |
#define | ICMP6_DST_UNREACH_BEYONDSCOPE 2 |
beyond scope of source address | |
#define | ICMP6_DST_UNREACH_ADDR 3 |
address unreachable | |
#define | ICMP6_DST_UNREACH_NOPORT 4 |
port unreachable | |
ICMPv6 Time Exceeded message codes | |
#define | ICMP6_TIME_EXCEED_TRANSIT 0 |
ttl==0 in transit | |
#define | ICMP6_TIME_EXCEED_REASSEMBLY 1 |
ttl==0 in reass | |
ICMPv6 Parameter Problem message codes | |
#define | ICMP6_PARAMPROB_HEADER 0 |
erroneous header field | |
#define | ICMP6_PARAMPROB_NEXTHEADER 1 |
unrecognized next header | |
#define | ICMP6_PARAMPROB_OPTION 2 |
unrecognized option | |
ICMPv6 RFC4443 Message processing and sending | |
typedef void(* | uip_icmp6_echo_reply_callback_t) (uip_ipaddr_t *source, uint8_t ttl, uint8_t *data, uint16_t datalen) |
typedef struct uip_icmp6_input_handler | uip_icmp6_input_handler_t |
uint8_t | uip_icmp6_input (uint8_t type, uint8_t icode) |
Handle an incoming ICMPv6 message. More... | |
void | uip_icmp6_register_input_handler (uip_icmp6_input_handler_t *handler) |
Register a handler which can handle a specific ICMPv6 message type. More... | |
void | uip_icmp6_error_output (uint8_t type, uint8_t code, uint32_t param) |
Send an icmpv6 error message. More... | |
void | uip_icmp6_send (const uip_ipaddr_t *dest, int type, int code, int payload_len) |
Send an icmpv6 message. More... | |
void | uip_icmp6_echo_reply_callback_add (struct uip_icmp6_echo_reply_notification *n, uip_icmp6_echo_reply_callback_t c) |
Add a callback function for ping replies. More... | |
void | uip_icmp6_echo_reply_callback_rm (struct uip_icmp6_echo_reply_notification *n) |
Remove a callback function for ping replies. More... | |
void | uip_icmp6_init (void) |
Initialise the uIP ICMPv6 core. | |
#define | UIP_ICMP6_INPUT_SUCCESS 0 |
#define | UIP_ICMP6_INPUT_ERROR 1 |
#define | UIP_ICMP6_HANDLER_CODE_ANY 0xFF /* Handle all codes for this type */ |
#define | UIP_ICMP6_HANDLER(name, type, code, func) static uip_icmp6_input_handler_t name = { NULL, type, code, func } |
List and memory block | |
static uip_ipaddr_t | serveraddr |
static uint32_t | serverlifetime |
General | |
#define | UIP_NAMESERVER_POOL_SIZE 1 |
Number of Nameservers to keep. | |
#define | UIP_NAMESERVER_INFINITE_LIFETIME 0xFFFFFFFF |
Infinite Lifetime indicator. | |
Nameserver maintenance | |
void | uip_nameserver_update (const uip_ipaddr_t *nameserver, uint32_t lifetime) |
Initialize the module variables. More... | |
uip_ipaddr_t * | uip_nameserver_get (uint8_t num) |
Get a Nameserver ip address given in RA. More... | |
uint32_t | uip_nameserver_next_expiration (void) |
Get next expiration time. More... | |
uint16_t | uip_nameserver_count (void) |
Get the number of recorded name servers. | |
Pointers to the header structures. | |
#define | UIP_ND6_RS_BUF ((uip_nd6_rs *)UIP_ICMP_PAYLOAD) |
#define | UIP_ND6_RA_BUF ((uip_nd6_ra *)UIP_ICMP_PAYLOAD) |
#define | UIP_ND6_NS_BUF ((uip_nd6_ns *)UIP_ICMP_PAYLOAD) |
#define | UIP_ND6_NA_BUF ((uip_nd6_na *)UIP_ICMP_PAYLOAD) |
General | |
#define | UIP_ND6_HOP_LIMIT 255 |
HOP LIMIT to be used when sending ND messages (255) | |
#define | UIP_ND6_INFINITE_LIFETIME 0xFFFFFFFF |
INFINITE lifetime. | |
RFC 4861 Host constant | |
#define | UIP_ND6_MAX_RTR_SOLICITATION_DELAY 1 |
Maximum router solicitation delay. | |
#define | UIP_ND6_RTR_SOLICITATION_INTERVAL 4 |
Router solicitation interval. | |
#define | UIP_ND6_MAX_RTR_SOLICITATIONS 3 |
Maximum router solicitations. | |
RFC 6106 RA DNS Options Constants | |
#define | UIP_ND6_RA_RDNSS 0 |
#define | UIP_ND6_RA_DNSSL 0 |
ND6 message length (excluding options) | |
#define | UIP_ND6_NA_LEN 20 |
#define | UIP_ND6_NS_LEN 20 |
#define | UIP_ND6_RA_LEN 12 |
#define | UIP_ND6_RS_LEN 4 |
ND6 option length in bytes | |
#define | UIP_ND6_OPT_HDR_LEN 2 |
#define | UIP_ND6_OPT_PREFIX_INFO_LEN 32 |
#define | UIP_ND6_OPT_MTU_LEN 8 |
#define | UIP_ND6_OPT_RDNSS_LEN 1 |
#define | UIP_ND6_OPT_DNSSL_LEN 1 |
#define | UIP_ND6_OPT_LLAO_LEN 8 |
length of a ND6 LLAO option for default L2 type (e.g. More... | |
ND message structures | |
typedef struct uip_nd6_ns | uip_nd6_ns |
A neighbor solicitation constant part. More... | |
typedef struct uip_nd6_na | uip_nd6_na |
A neighbor advertisement constant part. More... | |
typedef struct uip_nd6_rs | uip_nd6_rs |
A router solicitation constant part. More... | |
typedef struct uip_nd6_ra | uip_nd6_ra |
A router advertisement constant part. More... | |
typedef struct uip_nd6_redirect | uip_nd6_redirect |
A redirect message constant part. More... | |
ND Option structures | |
typedef struct uip_nd6_opt_hdr | uip_nd6_opt_hdr |
ND option header. | |
typedef struct uip_nd6_opt_prefix_info | uip_nd6_opt_prefix_info |
ND option prefix information. | |
typedef struct uip_nd6_opt_mtu | uip_nd6_opt_mtu |
ND option MTU. | |
typedef struct uip_nd6_opt_dns | uip_nd6_opt_dns |
ND option RDNSS. | |
typedef struct uip_nd6_opt_redirected_hdr | uip_nd6_opt_redirected_hdr |
ND Messages Processing and Generation | |
void | uip_nd6_ns_output (uip_ipaddr_t *src, uip_ipaddr_t *dest, uip_ipaddr_t *tgt) |
Send a neighbor solicitation, send a Neighbor Advertisement. More... | |
void | uip_nd6_rs_output (void) |
Send a Router Solicitation. More... | |
void | uip_nd6_init (void) |
Initialise the uIP ND core. | |
#define | UIP_PROTO_HBHO 0 |
extension headers types | |
#define | UIP_EXT_HDR_OPT_PAD1 0 |
Destination and Hop By Hop extension headers option types. | |
#define | UIP_EXT_HDR_BITMAP_HBHO 0x01 |
Bitmaps for extension header processing. More... | |
Layer 2 variables | |
uip_lladdr_t | uip_lladdr = {{0x00,0x06,0x98,0x00,0x02,0x32}} |
Host L2 address. | |
Layer 3 variables | |
uint8_t | uip_ext_bitmap = 0 |
bitmap we use to record which IPv6 headers we have already seen | |
uint16_t | uip_ext_len = 0 |
Total length of all IPv6 extension headers. More... | |
uint8_t | uip_last_proto = 0 |
The final protocol after IPv6 extension headers: UIP_PROTO_TCP, UIP_PROTO_UDP or UIP_PROTO_ICMP6. | |
Reassembly buffer definition | |
#define | FBUF ((struct uip_ip_hdr *)&uip_reassbuf[0]) |
Buffer variables | |
uip_buf_t | uip_aligned_buf |
Packet buffer for incoming and outgoing packets. | |
void * | uip_appdata |
Pointer to the application data in the packet buffer. More... | |
void * | uip_sappdata |
uint16_t | uip_len |
The length of the packet in the uip_buf buffer. More... | |
uint16_t | uip_slen |
General variables | |
uint8_t | uip_flags |
struct uip_conn * | uip_conn |
Pointer to the current TCP connection. More... | |
static uint16_t | lastport |
TCP variables | |
struct uip_conn | uip_conns [UIP_TCP_CONNS] |
uint16_t | uip_listenports [UIP_LISTENPORTS] |
static uint8_t | iss [4] |
uint8_t | uip_acc32 [4] |
4-byte array used for the 32-bit sequence number calculations. | |
UDP variables | |
struct uip_udp_conn * | uip_udp_conn |
The current UDP connection. | |
struct uip_udp_conn | uip_udp_conns [UIP_UDP_CONNS] |
ICMPv6 variables | |
struct uip_icmp6_conn | uip_icmp6_conns |
single possible icmpv6 "connection" | |
The low-power IPv6 stack.
{@
#define UIP_APPDATA_SIZE |
#define UIP_DS6_DEFRT_NBS 0 |
Configuration.
For all tables (Neighbor cache, Prefix List, Routing Table, Default Router List, Unicast address list, multicast address list, anycast address list), we define:
#define UIP_DS6_PERIOD (60 * CLOCK_SECOND) |
#define UIP_EXT_HDR_BITMAP_HBHO 0x01 |
Bitmaps for extension header processing.
When processing extension headers, we should record somehow which one we see, because you cannot have twice the same header, except for destination We store all this in one uint8_t bitmap one bit for each header expected. The order in the bitmap is the order recommended in RFC2460
#define uip_is_addr_linklocal | ( | a | ) |
is addr (a) a link local unicast address, see RFC 4291 i.e.
is (a) on prefix FE80::/10 a is of type uip_ipaddr_t*
Definition at line 1877 of file uip.h.
Referenced by coap_endpoint_is_connected(), and uip_ds6_dad_failed().
#define uip_is_addr_mcast_non_routable | ( | a | ) |
#define uip_is_addr_mcast_routable | ( | a | ) |
is address a routable multicast address.
Scope 3 (Realm-Local) or higher are routable Realm-Local scope is defined in draft-ietf-6man-multicast-scopes See RFC4291 and draft-ietf-6man-multicast-scopes a is of type uip_ip6addr_t*
#define UIP_LLADDR_LEN LINKADDR_SIZE |
802.15.4 address
Link layer address length
Definition at line 145 of file uip.h.
Referenced by uip_ds6_set_addr_iid(), and uip_ds6_set_lladdr_from_iid().
#define UIP_ND6_OPT_LLAO_LEN 8 |
#define UIP_ND6_RS_BUF ((uip_nd6_rs *)UIP_ICMP_PAYLOAD) |
#define UIP_STAT | ( | s | ) |
typedef struct uip_ds6_addr uip_ds6_addr_t |
Unicast address structure.
typedef struct uip_nd6_na uip_nd6_na |
A neighbor advertisement constant part.
Possible option is: TLLAO
typedef struct uip_nd6_ns uip_nd6_ns |
A neighbor solicitation constant part.
Possible option is: SLLAO
typedef struct uip_nd6_ra uip_nd6_ra |
A router advertisement constant part.
Possible options are: SLLAO, MTU, Prefix Information
typedef struct uip_nd6_redirect uip_nd6_redirect |
A redirect message constant part.
Possible options are: TLLAO, redirected header
typedef struct uip_nd6_rs uip_nd6_rs |
A router solicitation constant part.
Possible option is: SLLAO
typedef struct uip_sr_node uip_sr_node_t |
A node in a source routing graph, stored at the root and representing all child-parent relationship.
Used to build source routes
enum rpl_mode rpl_get_mode | ( | void | ) |
int rpl_has_downward_route | ( | void | ) |
int rpl_has_joined | ( | void | ) |
uint8_t rpl_is_in_leaf_mode | ( | void | ) |
void rpl_link_callback | ( | const linkaddr_t * | addr, |
int | status, | ||
int | numtx | ||
) |
Called by lower layers after every packet transmission.
addr | The link-layer addrress of the packet destination |
status | The transmission status (see os/net/mac/mac.h) |
numtx | The total number of transmission attempts |
enum rpl_mode rpl_set_mode | ( | enum rpl_mode | mode | ) |
void uip_add32 | ( | uint8_t * | op32, |
uint16_t | op16 | ||
) |
Carry out a 32-bit addition.
Because not all architectures for which uIP is intended has native 32-bit arithmetic, uIP uses an external C function for doing the required 32-bit additions in the TCP protocol processing. This function should add the two arguments and place the result in the global variable uip_acc32.
op32 | A pointer to a 4-byte array representing a 32-bit integer in network byte order (big endian). |
op16 | A 16-bit integer in host byte order. |
Definition at line 252 of file uip6.c.
References uip_acc32.
uint16_t uip_chksum | ( | uint16_t * | data, |
uint16_t | len | ||
) |
Calculate the Internet checksum over a buffer.
The Internet checksum is the one's complement of the one's complement sum of all 16-bit words in the buffer.
See RFC1071.
data | A pointer to the buffer over which the checksum is to be computed. |
len | The length of the buffer over which the checksum is to be computed. |
const uip_ip6addr_t* uip_ds6_default_prefix | ( | void | ) |
uip_ds6_nbr_t* uip_ds6_get_least_lifetime_neighbor | ( | void | ) |
This searches inside the neighbor table for the neighbor that is about to expire the next.
void uip_ds6_link_callback | ( | int | status, |
int | numtx | ||
) |
The callback function to update link-layer stats in a neighbor cache.
status | MAC return value defined in mac.h |
numtx | the number of transmissions happened for a packet |
Definition at line 534 of file uip-ds6-nbr.c.
uip_ds6_nbr_t * uip_ds6_nbr_add | ( | const uip_ipaddr_t * | ipaddr, |
const uip_lladdr_t * | lladdr, | ||
uint8_t | isrouter, | ||
uint8_t | state, | ||
nbr_table_reason_t | reason, | ||
void * | data | ||
) |
Add a neighbor cache for a specified IPv6 address, which is associated with a specified link-layer address.
ipaddr | IPv6 address of a neighbor to add |
lladdr | Link-layer address to associate with ipaddr |
isrouter | Set 1 if the neighbor is a router |
state | Set the initial neighbor cache state (e.g., NBR_INCOMPLETE) |
reason | Set a reason of the addition (e.g., NBR_TABLE_REASON_RPL_DIO) |
data | Set data associated with the nbr cache |
Definition at line 122 of file uip-ds6-nbr.c.
const uip_ipaddr_t * uip_ds6_nbr_get_ipaddr | ( | const uip_ds6_nbr_t * | nbr | ) |
Get an IPv6 address of a neighbor cache.
nbr | the pointer to a neighbor cache |
Definition at line 385 of file uip-ds6-nbr.c.
const uip_lladdr_t * uip_ds6_nbr_get_ll | ( | const uip_ds6_nbr_t * | nbr | ) |
Get the link-layer address associated with a specified nbr cache.
nbr | the address of a neighbor cache |
Definition at line 392 of file uip-ds6-nbr.c.
Referenced by rpl_neighbor_get_from_ipaddr(), and uip_ds6_nbr_lladdr_from_ipaddr().
uip_ds6_nbr_t * uip_ds6_nbr_head | ( | void | ) |
Get the first neighbor cache in nbr_table.
Definition at line 429 of file uip-ds6-nbr.c.
uip_ipaddr_t * uip_ds6_nbr_ipaddr_from_lladdr | ( | const uip_lladdr_t * | lladdr | ) |
Get an IPv6 address associated with a specified link-layer address.
lladdr | a link-layer address used as a search key |
Definition at line 505 of file uip-ds6-nbr.c.
References uip_ds6_nbr_ll_lookup().
Referenced by rpl_neighbor_get_ipaddr().
uip_ds6_nbr_t * uip_ds6_nbr_ll_lookup | ( | const uip_lladdr_t * | lladdr | ) |
Get the neighbor cache associated with a specified link-layer address.
lladdr | a link-layer address used as a search key |
Definition at line 482 of file uip-ds6-nbr.c.
Referenced by uip_ds6_nbr_ipaddr_from_lladdr().
const uip_lladdr_t * uip_ds6_nbr_lladdr_from_ipaddr | ( | const uip_ipaddr_t * | ipaddr | ) |
Get the link-layer address associated with a specified IPv6 address.
ipaddr | an IPv6 address used as a search key |
Definition at line 513 of file uip-ds6-nbr.c.
References uip_ds6_nbr_get_ll(), and uip_ds6_nbr_lookup().
uip_ds6_nbr_t * uip_ds6_nbr_lookup | ( | const uip_ipaddr_t * | ipaddr | ) |
Get the neighbor cache associated with a specified IPv6 address.
ipaddr | an IPv6 address used as a search key |
Definition at line 467 of file uip-ds6-nbr.c.
References nbr.
Referenced by rpl_neighbor_get_from_ipaddr(), and uip_ds6_nbr_lladdr_from_ipaddr().
uip_ds6_nbr_t * uip_ds6_nbr_next | ( | uip_ds6_nbr_t * | nbr | ) |
Get the next neighbor cache of a specified one.
nbr | the pointer to a neighbor cache |
Definition at line 444 of file uip-ds6-nbr.c.
int uip_ds6_nbr_num | ( | void | ) |
Return the number of neighbor caches.
Definition at line 406 of file uip-ds6-nbr.c.
int uip_ds6_nbr_rm | ( | uip_ds6_nbr_t * | nbr | ) |
Remove a neighbor cache.
nbr | the address of a neighbor cache to remove |
Definition at line 294 of file uip-ds6-nbr.c.
int uip_ds6_nbr_update_ll | ( | uip_ds6_nbr_t ** | nbr, |
const uip_lladdr_t * | new_ll_addr | ||
) |
Update the link-layer address associated with an IPv6 address.
nbr | the double pointer to a neighbor cache which has the target IPv6 address |
new_ll_addr | the new link-layer address of the IPv6 address return 0 on success, -1 on failure |
Definition at line 317 of file uip-ds6-nbr.c.
References nbr.
void uip_ds6_set_default_prefix | ( | const uip_ip6addr_t * | prefix | ) |
Set the Default IPv6 prefix.
prefix | A pointer to the new default prefix |
uip_ds6_init() will set the default prefix to UIP_DS6_DEFAULT_PREFIX unless this function here has been called beforehand to set a new default prefix.
uint16_t uip_htons | ( | uint16_t | val | ) |
Convert a 16-bit quantity from host byte order to network byte order.
This function is primarily used for converting variables from host byte order to network byte order. For converting constants to network byte order, use the UIP_HTONS() macro instead.
void uip_icmp6_echo_reply_callback_add | ( | struct uip_icmp6_echo_reply_notification * | n, |
uip_icmp6_echo_reply_callback_t | c | ||
) |
Add a callback function for ping replies.
n | A struct uip_icmp6_echo_reply_notification that must have been allocated by the caller |
c | A pointer to the callback function to be called This function adds a callback function to the list of callback functions that are called when an ICMP echo reply (ping reply) is received. This is used when implementing a ping protocol: attach a callback function to the ping reply, then send out a ping packet with uip_icmp6_send(). The caller must have statically allocated a struct uip_icmp6_echo_reply_notification to hold the internal state of the callback function. When a ping reply packet is received, all registered callback functions are called. The callback functions must not modify the contents of the uIP buffer. |
Definition at line 297 of file uip-icmp6.c.
void uip_icmp6_echo_reply_callback_rm | ( | struct uip_icmp6_echo_reply_notification * | n | ) |
Remove a callback function for ping replies.
n | A struct uip_icmp6_echo_reply_notification that must have been previously added with uip_icmp6_echo_reply_callback_add() This function removes a callback function from the list of callback functions that are called when an ICMP echo reply (ping reply) is received. |
Definition at line 307 of file uip-icmp6.c.
References list_remove().
void uip_icmp6_error_output | ( | uint8_t | type, |
uint8_t | code, | ||
uint32_t | param | ||
) |
Send an icmpv6 error message.
type | type of the error message |
code | of the error message |
param | 32 bit parameter of the error message, semantic depends on error |
Definition at line 155 of file uip-icmp6.c.
References uip_last_proto.
uint8_t uip_icmp6_input | ( | uint8_t | type, |
uint8_t | icode | ||
) |
Handle an incoming ICMPv6 message.
type | The ICMPv6 message type |
icode | The ICMPv6 message code |
Generic handler for unknown ICMPv6 types. It will lookup for a registered function capable of handing this message type. The function must have first been registered with uip_icmp6_register_input_handler. The function is in charge of setting uip_len to 0, otherwise the uIPv6 core will attempt to send whatever remains in the UIP_IP_BUF.
A return value of UIP_ICMP6_INPUT_ERROR means that a handler could not be invoked. This is most likely because the ICMPv6 type does not have a valid handler associated with it.
UIP_ICMP6_INPUT_SUCCESS signifies that a handler was found for this ICMPv6 type and that it was invoked. It does NOT provide any indication whatsoever regarding whether the handler itself succeeded.
Definition at line 85 of file uip-icmp6.c.
void uip_icmp6_register_input_handler | ( | uip_icmp6_input_handler_t * | handler | ) |
Register a handler which can handle a specific ICMPv6 message type.
handler | A pointer to the handler |
Definition at line 102 of file uip-icmp6.c.
References list_add().
Referenced by rpl_icmp6_init(), uip_icmp6_init(), and uip_nd6_init().
void uip_icmp6_send | ( | const uip_ipaddr_t * | dest, |
int | type, | ||
int | code, | ||
int | payload_len | ||
) |
Send an icmpv6 message.
dest | destination address of the message |
type | type of the message |
code | of the message |
payload_len | length of the payload |
Definition at line 230 of file uip-icmp6.c.
References UIP_IP_BUF.
uint16_t uip_icmp6chksum | ( | void | ) |
void uip_init | ( | void | ) |
uint16_t uip_ipchksum | ( | void | ) |
void uip_listen | ( | uint16_t | port | ) |
Start listening to the specified port.
port | A 16-bit port number in network byte order. |
uip_ipaddr_t * uip_nameserver_get | ( | uint8_t | num | ) |
Get a Nameserver ip address given in RA.
num | The number of the nameserver to obtain, starting at 0 and going up to the pool size. |
Definition at line 173 of file uip-nameserver.c.
uint32_t uip_nameserver_next_expiration | ( | void | ) |
Get next expiration time.
The least expiration time is returned
Definition at line 200 of file uip-nameserver.c.
void uip_nameserver_update | ( | const uip_ipaddr_t * | nameserver, |
uint32_t | lifetime | ||
) |
Initialize the module variables.
Insert or update a nameserver into/from the pool.
The list is kept according to the RFC6106, which indicates that new entries will replace old ones (with lower lifetime) and existing entries will update their lifetimes.
nameserver | Pointer to the nameserver ip address |
lifetime | Life time of the given address. Minimum is 0, which is considered to remove an entry. Maximum is 0xFFFFFFFF which is considered infinite. |
Definition at line 99 of file uip-nameserver.c.
void uip_nd6_ns_output | ( | uip_ipaddr_t * | src, |
uip_ipaddr_t * | dest, | ||
uip_ipaddr_t * | tgt | ||
) |
Send a neighbor solicitation, send a Neighbor Advertisement.
src | pointer to the src of the NS if known |
dest | pointer to ip address to send the NS, for DAD or ADDR Resol, MUST be NULL, for NUD, must be correct unicast dest |
tgt | pointer to ip address to fill the target address field, must not be NULL |
Referenced by uip_ds6_dad().
void uip_nd6_rs_output | ( | void | ) |
Send a Router Solicitation.
src is chosen through the uip_netif_select_src function. If src is unspecified (i.e. we do not have a preferred address yet), then we do not put a SLLAO option (MUST NOT in RFC 4861). Otherwise we do.
RS message format, possible option is SLLAO, MUST NOT be included if source = unspecified SHOULD be included otherwise
Send a Router Solicitation.
The NS can be received in 3 cases (procedures):
We do:
If we need to send a NA in response (i.e. the NS was done for NUD, or address resolution, or DAD and there is a conflict), we do it in this function: set src, dst, tgt address in the three cases, then for all cases set the rest, including SLLAO
Definition at line 807 of file uip-nd6.c.
References UIP_IP_BUF.
void uip_process | ( | uint8_t | flag | ) |
void uip_reass_over | ( | void | ) |
bool uip_remove_ext_hdr | ( | void | ) |
Removes all IPv6 extension headers from uip_buf, updates length fields (uip_len and uip_ext_len)
Definition at line 493 of file uip6.c.
References uip_ext_len.
void uip_send | ( | const void * | data, |
int | len | ||
) |
Send data on the current connection.
This function is used to send out a single segment of TCP data. Only applications that have been invoked by uIP for event processing can send data.
The amount of data that actually is sent out after a call to this function is determined by the maximum amount of data TCP allows. uIP will automatically crop the data so that only the appropriate amount of data is sent. The function uip_mss() can be used to query uIP for the amount of data that actually will be sent.
data | A pointer to the data which is to be sent. |
len | The maximum amount of data bytes to be sent. |
void uip_sr_expire_parent | ( | void * | graph, |
const uip_ipaddr_t * | child, | ||
const uip_ipaddr_t * | parent | ||
) |
Expires a given child-parent link.
graph | The graph the link belongs to |
child | The IPv6 address of the child |
parent | The IPv6 address of the parent |
Definition at line 113 of file uip-sr.c.
References uip_sr_get_node().
Referenced by rpl_process_dao().
uip_sr_node_t * uip_sr_get_node | ( | void * | graph, |
const uip_ipaddr_t * | addr | ||
) |
Looks up for a source routing node from its IPv6 global address.
graph | The graph where to look up for the node |
addr | The target address |
Definition at line 81 of file uip-sr.c.
References list_head().
Referenced by uip_sr_expire_parent(), and uip_sr_update_node().
int uip_sr_is_addr_reachable | ( | void * | graph, |
const uip_ipaddr_t * | addr | ||
) |
Telle whether an address is reachable, i.e.
if there exists a path from the root to the node in the current source routing graph
graph | The graph where to look up for the node |
addr | The target IPv6 global address |
int uip_sr_link_snprint | ( | char * | buf, |
int | buflen, | ||
uip_sr_node_t * | link | ||
) |
Print a textual description of a source routing link.
buf | The buffer where to write content |
buflen | The buffer len |
link | A pointer to the source routing link |
uip_sr_node_t * uip_sr_node_head | ( | void | ) |
Returns the head of the non-storing node list.
Definition at line 194 of file uip-sr.c.
References list_head().
uip_sr_node_t * uip_sr_node_next | ( | uip_sr_node_t * | item | ) |
Returns the next element of the non-storing node list.
item | The current element in the list |
Definition at line 200 of file uip-sr.c.
References list_item_next().
int uip_sr_num_nodes | ( | void | ) |
Tells how many nodes are currently stored in the graph.
Definition at line 63 of file uip-sr.c.
Referenced by rpl_dag_root_print_links().
void uip_sr_periodic | ( | unsigned | seconds | ) |
A function called periodically.
Used to age the links (decrease lifetime and expire links accordingly)
seconds | The number of seconds elapsted since last call |
Definition at line 206 of file uip-sr.c.
References list_head().
uip_sr_node_t * uip_sr_update_node | ( | void * | graph, |
const uip_ipaddr_t * | child, | ||
const uip_ipaddr_t * | parent, | ||
uint32_t | lifetime | ||
) |
Updates a child-parent link.
graph | The graph the link belongs to |
child | The IPv6 address of the child |
parent | The IPv6 address of the parent |
lifetime | The link lifetime in seconds |
Definition at line 123 of file uip-sr.c.
References uip_sr_get_node().
uint16_t uip_tcpchksum | ( | void | ) |
Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
The TCP checksum is the Internet checksum of data contents of the TCP segment, and a pseudo-header as defined in RFC793.
struct uip_udp_conn* uip_udp_new | ( | const uip_ipaddr_t * | ripaddr, |
uint16_t | rport | ||
) |
Set up a new UDP connection.
This function sets up a new UDP connection. The function will automatically allocate an unused local port for the new connection. However, another port can be chosen by using the uip_udp_bind() call, after the uip_udp_new() function has been called.
Example:
ripaddr | The IP address of the remote host. |
rport | The remote port number in network byte order. |
uint16_t uip_udpchksum | ( | void | ) |
Calculate the UDP checksum of the packet in uip_buf and uip_appdata.
The UDP checksum is the Internet checksum of data contents of the UDP segment, and a pseudo-header as defined in RFC768.
void uip_unlisten | ( | uint16_t | port | ) |
Stop listening to the specified port.
port | A 16-bit port number in network byte order. |
void uiplib_ipaddr_print | ( | const uip_ipaddr_t * | addr | ) |
int uiplib_ipaddr_snprint | ( | char * | buffer, |
size_t | size, | ||
const uip_ipaddr_t * | addr | ||
) |
Write at most size - 1 characters of the IP address to the output string.
The output is always null-terminated, unless size is 0.
buffer | A pointer to an output string with at least size bytes. |
size | The max number of characters to write to the output string. |
addr | A pointer to a uip_ipaddr_t that will be printed with printf(). |
void* uip_appdata |
Pointer to the application data in the packet buffer.
This pointer points to the application data when the application is called. If the application wishes to send data, the application may use this space to write the data into before calling uip_send().
Definition at line 148 of file uip6.c.
Referenced by coap_databuf().
void* uip_appdata |
Pointer to the application data in the packet buffer.
This pointer points to the application data when the application is called. If the application wishes to send data, the application may use this space to write the data into before calling uip_send().
Definition at line 148 of file uip6.c.
Referenced by coap_databuf().
uint16_t uip_ext_len = 0 |
Total length of all IPv6 extension headers.
The length of the extension headers.
Definition at line 122 of file uip6.c.
Referenced by uip_remove_ext_hdr().
uint16_t uip_len |
The length of the packet in the uip_buf buffer.
The global variable uip_len holds the length of the packet in the uip_buf buffer.
When the network device driver calls the uIP input function, uip_len should be set to the length of the packet in the uip_buf buffer.
When sending packets, the device driver should use the contents of the uip_len variable to determine the length of the outgoing packet.