40 #ifndef UIP_DS6_ROUTE_H
41 #define UIP_DS6_ROUTE_H
44 #include "net/nbr-table.h"
48 NBR_TABLE_DECLARE(nbr_routes);
50 void uip_ds6_route_init(
void);
52 #ifndef UIP_CONF_UIP_DS6_NOTIFICATIONS
53 #define UIP_DS6_NOTIFICATIONS (UIP_CONF_MAX_ROUTES != 0)
55 #define UIP_DS6_NOTIFICATIONS UIP_CONF_UIP_DS6_NOTIFICATIONS
58 #if UIP_DS6_NOTIFICATIONS
63 #define UIP_DS6_NOTIFICATION_DEFRT_ADD 0
64 #define UIP_DS6_NOTIFICATION_DEFRT_RM 1
65 #define UIP_DS6_NOTIFICATION_ROUTE_ADD 2
66 #define UIP_DS6_NOTIFICATION_ROUTE_RM 3
68 typedef void (* uip_ds6_notification_callback)(
int event,
70 uip_ipaddr_t *nexthop,
72 struct uip_ds6_notification {
73 struct uip_ds6_notification *next;
74 uip_ds6_notification_callback callback;
77 void uip_ds6_notification_add(
struct uip_ds6_notification *n,
78 uip_ds6_notification_callback c);
80 void uip_ds6_notification_rm(
struct uip_ds6_notification *n);
85 #ifndef UIP_CONF_MAX_ROUTES
86 #ifdef UIP_CONF_DS6_ROUTE_NBU
87 #define UIP_DS6_ROUTE_NB UIP_CONF_DS6_ROUTE_NBU
89 #define UIP_DS6_ROUTE_NB 4
92 #define UIP_DS6_ROUTE_NB UIP_CONF_MAX_ROUTES
97 #ifndef UIP_DS6_ROUTE_STATE_TYPE
98 #define UIP_DS6_ROUTE_STATE_TYPE rpl_route_entry_t
100 #define RPL_ROUTE_ENTRY_NOPATH_RECEIVED 0x01
101 #define RPL_ROUTE_ENTRY_DAO_PENDING 0x02
102 #define RPL_ROUTE_ENTRY_DAO_NACK 0x04
104 #define RPL_ROUTE_IS_NOPATH_RECEIVED(route) \
105 (((route)->state.state_flags & RPL_ROUTE_ENTRY_NOPATH_RECEIVED) != 0)
106 #define RPL_ROUTE_SET_NOPATH_RECEIVED(route) do { \
107 (route)->state.state_flags |= RPL_ROUTE_ENTRY_NOPATH_RECEIVED; \
109 #define RPL_ROUTE_CLEAR_NOPATH_RECEIVED(route) do { \
110 (route)->state.state_flags &= ~RPL_ROUTE_ENTRY_NOPATH_RECEIVED; \
113 #define RPL_ROUTE_IS_DAO_PENDING(route) \
114 ((route->state.state_flags & RPL_ROUTE_ENTRY_DAO_PENDING) != 0)
115 #define RPL_ROUTE_SET_DAO_PENDING(route) do { \
116 (route)->state.state_flags |= RPL_ROUTE_ENTRY_DAO_PENDING; \
118 #define RPL_ROUTE_CLEAR_DAO_PENDING(route) do { \
119 (route)->state.state_flags &= ~RPL_ROUTE_ENTRY_DAO_PENDING; \
122 #define RPL_ROUTE_IS_DAO_NACKED(route) \
123 ((route->state.state_flags & RPL_ROUTE_ENTRY_DAO_NACK) != 0)
124 #define RPL_ROUTE_SET_DAO_NACKED(route) do { \
125 (route)->state.state_flags |= RPL_ROUTE_ENTRY_DAO_NACK; \
127 #define RPL_ROUTE_CLEAR_DAO_NACKED(route) do { \
128 (route)->state.state_flags &= ~RPL_ROUTE_ENTRY_DAO_NACK; \
131 #define RPL_ROUTE_CLEAR_DAO(route) do { \
132 (route)->state.state_flags &= ~(RPL_ROUTE_ENTRY_DAO_NACK|RPL_ROUTE_ENTRY_DAO_PENDING); \
136 typedef struct rpl_route_entry {
139 uint8_t dao_seqno_out;
140 uint8_t dao_seqno_in;
148 LIST_STRUCT(route_list);
161 #ifdef UIP_DS6_ROUTE_STATE_TYPE
185 unsigned long interval);
188 uip_ipaddr_t *uip_ds6_defrt_choose(
void);
190 void uip_ds6_defrt_periodic(
void);
198 uip_ipaddr_t *next_hop);
200 void uip_ds6_route_rm_by_nexthop(uip_ipaddr_t *nexthop);
203 int uip_ds6_route_num_routes(
void);
206 int uip_ds6_route_is_nexthop(
const uip_ipaddr_t *
ipaddr);
static uip_ipaddr_t ipaddr
Pointer to prefix information option in uip_buf.
A neighbor route list entry, used on the uip_ds6_route->neighbor_routes->route_list list...
#define UIP_DS6_ROUTE_STATE_TYPE
define some additional RPL related route state and neighbor callback for RPL - if not a DS6_ROUTE_STA...
An entry in the default router list.
static uip_ds6_defrt_t * defrt
Pointer to a nbr cache entry.
static uip_ds6_route_t * route
The next route to use.
Second timer library header file.
struct uip_ds6_route uip_ds6_route_t
An entry in the routing table.
Linked list manipulation routines.
Header file for the uIP TCP/IP stack.
struct uip_ds6_defrt uip_ds6_defrt_t
An entry in the default router list.
The neighbor routes hold a list of routing table entries that are attached to a specific neihbor...
An entry in the routing table.