55 #include "net/ipv6/uip-ds6.h"
59 typedef uint16_t rpl_rank_t;
60 typedef uint16_t rpl_ocp_t;
64 #define RPL_DAG_MC_NONE 0
65 #define RPL_DAG_MC_NSA 1
66 #define RPL_DAG_MC_ENERGY 2
67 #define RPL_DAG_MC_HOPCOUNT 3
68 #define RPL_DAG_MC_THROUGHPUT 4
69 #define RPL_DAG_MC_LATENCY 5
70 #define RPL_DAG_MC_LQL 6
71 #define RPL_DAG_MC_ETX 7
72 #define RPL_DAG_MC_LC 8
77 #define RPL_DAG_MC_FLAG_P 0x8
78 #define RPL_DAG_MC_FLAG_C 0x4
79 #define RPL_DAG_MC_FLAG_O 0x2
80 #define RPL_DAG_MC_FLAG_R 0x1
85 #define RPL_DAG_MC_AGGR_ADDITIVE 0
86 #define RPL_DAG_MC_AGGR_MAXIMUM 1
87 #define RPL_DAG_MC_AGGR_MINIMUM 2
88 #define RPL_DAG_MC_AGGR_MULTIPLICATIVE 3
93 #define RPL_DAG_MC_ENERGY_INCLUDED 3
94 #define RPL_DAG_MC_ENERGY_TYPE 1
95 #define RPL_DAG_MC_ENERGY_ESTIMATION 0
97 #define RPL_DAG_MC_ENERGY_TYPE_MAINS 0
98 #define RPL_DAG_MC_ENERGY_TYPE_BATTERY 1
99 #define RPL_DAG_MC_ENERGY_TYPE_SCAVENGING 2
101 struct rpl_metric_object_energy {
113 union metric_object {
114 struct rpl_metric_object_energy energy;
124 struct rpl_parent *next;
126 #if RPL_DAG_MC != RPL_DAG_MC_NONE
130 uint16_t link_metric;
134 typedef struct rpl_parent rpl_parent_t;
155 rpl_parent_t *preferred_parent;
181 rpl_parent_t *(*best_parent)(rpl_parent_t *, rpl_parent_t *);
212 rpl_dag_t dag_table[RPL_MAX_DAG_PER_INSTANCE];
219 uint8_t dio_intdoubl;
221 uint8_t dio_redundancy;
222 uint8_t default_lifetime;
223 uint8_t dio_intcurrent;
226 rpl_rank_t max_rankinc;
227 rpl_rank_t min_hoprankinc;
228 uint16_t lifetime_unit;
231 uint16_t dio_totsend;
232 uint16_t dio_totrecv;
234 clock_time_t dio_next_delay;
235 struct ctimer dio_timer;
236 struct ctimer dao_timer;
237 struct ctimer dao_lifetime_timer;
247 void uip_rpl_input(
void);
249 rpl_dag_t *rpl_set_root(uint8_t instance_id, uip_ipaddr_t * dag_id);
251 int rpl_set_prefix(
rpl_dag_t *dag, uip_ipaddr_t *prefix,
unsigned len);
253 int rpl_repair_root(uint8_t instance_id);
255 int rpl_set_default_route(
rpl_instance_t *instance, uip_ipaddr_t *from);
261 void rpl_update_header_empty(
void);
263 int rpl_update_header_final(uip_ipaddr_t *addr);
265 int rpl_verify_header(
int);
267 void rpl_insert_header(
void);
269 void rpl_remove_header(
void);
271 uint8_t rpl_invert_header(
void);
273 uip_ipaddr_t *rpl_get_parent_ipaddr(rpl_parent_t *nbr);
277 uint16_t rpl_get_parent_link_metric(
const uip_lladdr_t *addr);
279 void rpl_dag_init(
void);
295 RPL_MODE_FEATHER = 1,