Added support for end-to-end DAO ACK for Contiki RPL.
This is a fix for Contiki RPL so that it fully supports DAO ACK in an end-to-end fashion. When DAO is sent it will be forwarded upwards as before. DAO ACK will be forwarded downwards until it reach the node that initiated the DAO ACK and unlike before it is not a single-hop DAO ACK but it is fully reaching the RPL ROOT before any DAO ACK is sent back. DAO ACK also now fully support different status messages (success / fail).
This commit is contained in:
parent
3b9fa19a66
commit
946be77248
9 changed files with 316 additions and 27 deletions
|
@ -97,11 +97,42 @@ void uip_ds6_notification_rm(struct uip_ds6_notification *n);
|
|||
#ifndef UIP_DS6_ROUTE_STATE_TYPE
|
||||
#define UIP_DS6_ROUTE_STATE_TYPE rpl_route_entry_t
|
||||
/* Needed for the extended route entry state when using ContikiRPL */
|
||||
#define RPL_ROUTE_ENTRY_NOPATH_RECEIVED 0x01
|
||||
#define RPL_ROUTE_ENTRY_DAO_PENDING 0x02
|
||||
#define RPL_ROUTE_ENTRY_DAO_NACK 0x04
|
||||
|
||||
#define RPL_ROUTE_IS_NOPATH_RECEIVED(route) \
|
||||
(((route)->state.state_flags & RPL_ROUTE_ENTRY_NOPATH_RECEIVED) != 0)
|
||||
#define RPL_ROUTE_SET_NOPATH_RECEIVED(route) do { \
|
||||
(route)->state.state_flags |= RPL_ROUTE_ENTRY_NOPATH_RECEIVED; \
|
||||
} while(0)
|
||||
|
||||
#define RPL_ROUTE_IS_DAO_PENDING(route) \
|
||||
((route->state.state_flags & RPL_ROUTE_ENTRY_DAO_PENDING) != 0)
|
||||
#define RPL_ROUTE_SET_DAO_PENDING(route) do { \
|
||||
(route)->state.state_flags |= RPL_ROUTE_ENTRY_DAO_PENDING; \
|
||||
} while(0)
|
||||
#define RPL_ROUTE_CLEAR_DAO_PENDING(route) do { \
|
||||
(route)->state.state_flags &= ~RPL_ROUTE_ENTRY_DAO_PENDING; \
|
||||
} while(0)
|
||||
|
||||
#define RPL_ROUTE_IS_DAO_NACKED(route) \
|
||||
((route->state.state_flags & RPL_ROUTE_ENTRY_DAO_NACK) != 0)
|
||||
#define RPL_ROUTE_SET_DAO_NACKED(route) do { \
|
||||
(route)->state.state_flags |= RPL_ROUTE_ENTRY_DAO_NACK; \
|
||||
} while(0)
|
||||
|
||||
#define RPL_ROUTE_CLEAR_DAO(route) do { \
|
||||
(route)->state.state_flags &= ~(RPL_ROUTE_ENTRY_DAO_NACK|RPL_ROUTE_ENTRY_DAO_PENDING); \
|
||||
} while(0)
|
||||
|
||||
struct rpl_dag;
|
||||
typedef struct rpl_route_entry {
|
||||
uint32_t lifetime;
|
||||
void *dag;
|
||||
uint8_t learned_from;
|
||||
uint8_t nopath_received;
|
||||
struct rpl_dag *dag;
|
||||
uint8_t dao_seqno_out;
|
||||
uint8_t dao_seqno_in;
|
||||
uint8_t state_flags;
|
||||
} rpl_route_entry_t;
|
||||
#endif /* UIP_DS6_ROUTE_STATE_TYPE */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue