49 typedef uint16_t rpl_rank_t;
50 typedef uint16_t rpl_ocp_t;
53 #define RPL_DAG_MC_NONE 0
54 #define RPL_DAG_MC_NSA 1
55 #define RPL_DAG_MC_ENERGY 2
56 #define RPL_DAG_MC_HOPCOUNT 3
57 #define RPL_DAG_MC_THROUGHPUT 4
58 #define RPL_DAG_MC_LATENCY 5
59 #define RPL_DAG_MC_LQL 6
60 #define RPL_DAG_MC_ETX 7
61 #define RPL_DAG_MC_LC 8
64 #define RPL_DAG_MC_FLAG_P 5
65 #define RPL_DAG_MC_FLAG_C 6
66 #define RPL_DAG_MC_FLAG_O 7
67 #define RPL_DAG_MC_FLAG_R 8
70 #define RPL_DAG_MC_AGGR_ADDITIVE 0
71 #define RPL_DAG_MC_AGGR_MAXIMUM 1
72 #define RPL_DAG_MC_AGGR_MINIMUM 2
73 #define RPL_DAG_MC_AGGR_MULTIPLICATIVE 3
76 #define RPL_DAG_MC_ENERGY_INCLUDED 3
77 #define RPL_DAG_MC_ENERGY_TYPE 1
78 #define RPL_DAG_MC_ENERGY_ESTIMATION 0
81 #define RPL_DAG_MC_ENERGY_TYPE_MAINS 0
82 #define RPL_DAG_MC_ENERGY_TYPE_BATTERY 1
83 #define RPL_DAG_MC_ENERGY_TYPE_SCAVENGING 2
87 #define RPL_OCP_MRHOF 1
89 struct rpl_metric_object_energy {
95 struct rpl_metric_container {
101 union metric_object {
102 struct rpl_metric_object_energy energy;
106 typedef struct rpl_metric_container rpl_metric_container_t;
111 #define RPL_PARENT_FLAG_UPDATED 0x1
112 #define RPL_PARENT_FLAG_LINK_METRIC_VALID 0x2
117 rpl_metric_container_t mc;
123 typedef struct rpl_parent rpl_parent_t;
132 typedef struct rpl_prefix rpl_prefix_t;
144 rpl_parent_t *preferred_parent;
146 struct rpl_instance *instance;
147 rpl_prefix_t prefix_info;
150 typedef struct rpl_dag rpl_dag_t;
151 typedef struct rpl_instance rpl_instance_t;
202 void (*reset)(
struct rpl_dag *);
204 void (*dao_ack_callback)(rpl_parent_t *,
int status);
206 uint16_t (*parent_link_metric)(rpl_parent_t *);
207 int (*parent_has_usable_link)(rpl_parent_t *);
208 uint16_t (*parent_path_cost)(rpl_parent_t *);
209 rpl_rank_t (*rank_via_parent)(rpl_parent_t *);
210 rpl_parent_t *(*best_parent)(rpl_parent_t *, rpl_parent_t *);
211 rpl_dag_t *(*best_dag)(rpl_dag_t *, rpl_dag_t *);
212 void (*update_metric_container)( rpl_instance_t *);
215 typedef struct rpl_of rpl_of_t;
219 struct rpl_instance {
221 rpl_metric_container_t mc;
223 rpl_dag_t *current_dag;
224 rpl_dag_t dag_table[RPL_MAX_DAG_PER_INSTANCE];
231 uint8_t dio_intdoubl;
233 uint8_t dio_redundancy;
234 uint8_t default_lifetime;
235 uint8_t dio_intcurrent;
239 uint8_t my_dao_seqno;
240 uint8_t my_dao_transmissions;
242 uint8_t has_downward_route;
243 rpl_rank_t max_rankinc;
244 rpl_rank_t min_hoprankinc;
245 uint16_t lifetime_unit;
248 uint16_t dio_totsend;
249 uint16_t dio_totrecv;
251 clock_time_t dio_next_delay;
253 struct ctimer probing_timer;
254 rpl_parent_t *urgent_probing_target;
256 struct ctimer dio_timer;
257 struct ctimer dao_timer;
258 struct ctimer dao_lifetime_timer;
259 struct ctimer unicast_dio_timer;
260 rpl_parent_t *unicast_dio_target;
262 struct ctimer dao_retransmit_timer;
269 void uip_rpl_input(
void);
270 rpl_dag_t *rpl_set_root(uint8_t instance_id, uip_ipaddr_t *dag_id);
271 int rpl_set_prefix(rpl_dag_t *dag, uip_ipaddr_t *prefix,
unsigned len);
272 int rpl_repair_root(uint8_t instance_id);
273 int rpl_set_default_route(rpl_instance_t *instance, uip_ipaddr_t *from);
274 rpl_dag_t *rpl_get_dag(
const uip_ipaddr_t *
addr);
275 rpl_dag_t *rpl_get_any_dag(
void);
276 rpl_instance_t *rpl_get_instance(uint8_t instance_id);
277 int rpl_update_header(
void);
278 int rpl_finalize_header(uip_ipaddr_t *
addr);
279 int rpl_verify_hbh_header(
int);
280 void rpl_insert_header(
void);
281 void rpl_remove_header(
void);
282 const struct link_stats *rpl_get_parent_link_stats(rpl_parent_t *p);
283 int rpl_parent_is_fresh(rpl_parent_t *p);
284 int rpl_parent_is_reachable(rpl_parent_t *p);
285 uint16_t rpl_get_parent_link_metric(rpl_parent_t *p);
286 rpl_rank_t rpl_rank_via_parent(rpl_parent_t *p);
287 const linkaddr_t *rpl_get_parent_lladdr(rpl_parent_t *p);
288 uip_ipaddr_t *rpl_get_parent_ipaddr(rpl_parent_t *
nbr);
291 void rpl_dag_init(
void);
293 void rpl_print_neighbor_list(
void);
294 int rpl_process_srh_header(
void);
295 int rpl_srh_get_next_hop(uip_ipaddr_t *
ipaddr);
298 NBR_TABLE_DECLARE(rpl_parents);
312 RPL_MODE_FEATHER = 1,
static uip_ipaddr_t ipaddr
Pointer to prefix information option in uip_buf.
static uip_ds6_addr_t * addr
Pointer to a router list entry.
Header file for IPv6-related data structures.
An entry in the default router list.
An entry in the nbr cache.
int rpl_has_downward_route(void)
Get the RPL's best guess on if we have downward route or not.
Header file for the callback timer
static uip_ds6_nbr_t * nbr
Pointer to llao option in uip_buf.
enum rpl_mode rpl_set_mode(enum rpl_mode mode)
Set the RPL mode.
Linked list manipulation routines.
Header file for the uIP TCP/IP stack.
enum rpl_mode rpl_get_mode(void)
Get the RPL mode.