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 0x8
65 #define RPL_DAG_MC_FLAG_C 0x4
66 #define RPL_DAG_MC_FLAG_O 0x2
67 #define RPL_DAG_MC_FLAG_R 0x1
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
77 #define RPL_DAG_MC_ENERGY_INCLUDED 3
78 #define RPL_DAG_MC_ENERGY_TYPE 1
79 #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
85 struct rpl_metric_object_energy {
91 struct rpl_metric_container {
98 struct rpl_metric_object_energy energy;
102 typedef struct rpl_metric_container rpl_metric_container_t;
107 #define RPL_PARENT_FLAG_UPDATED 0x1
108 #define RPL_PARENT_FLAG_LINK_METRIC_VALID 0x2
111 struct rpl_parent *next;
113 #if RPL_DAG_MC != RPL_DAG_MC_NONE
114 rpl_metric_container_t mc;
117 uint16_t link_metric;
121 typedef struct rpl_parent rpl_parent_t;
130 typedef struct rpl_prefix rpl_prefix_t;
142 rpl_parent_t *preferred_parent;
144 struct rpl_instance *instance;
145 rpl_prefix_t prefix_info;
147 typedef struct rpl_dag rpl_dag_t;
148 typedef struct rpl_instance rpl_instance_t;
186 void (*reset)(
struct rpl_dag *);
187 void (*neighbor_link_callback)(rpl_parent_t *, int, int);
188 rpl_parent_t *(*best_parent)(rpl_parent_t *, rpl_parent_t *);
189 rpl_dag_t *(*best_dag)(rpl_dag_t *, rpl_dag_t *);
190 rpl_rank_t (*calculate_rank)(rpl_parent_t *, rpl_rank_t);
191 void (*update_metric_container)( rpl_instance_t *);
194 typedef struct rpl_of rpl_of_t;
197 extern rpl_of_t RPL_OF;
200 struct rpl_instance {
202 rpl_metric_container_t mc;
204 rpl_dag_t *current_dag;
205 rpl_dag_t dag_table[RPL_MAX_DAG_PER_INSTANCE];
212 uint8_t dio_intdoubl;
214 uint8_t dio_redundancy;
215 uint8_t default_lifetime;
216 uint8_t dio_intcurrent;
219 rpl_rank_t max_rankinc;
220 rpl_rank_t min_hoprankinc;
221 uint16_t lifetime_unit;
224 uint16_t dio_totsend;
225 uint16_t dio_totrecv;
227 clock_time_t dio_next_delay;
228 struct ctimer dio_timer;
229 struct ctimer dao_timer;
230 struct ctimer dao_lifetime_timer;
236 void uip_rpl_input(
void);
237 rpl_dag_t *rpl_set_root(uint8_t instance_id, uip_ipaddr_t *dag_id);
238 int rpl_set_prefix(rpl_dag_t *dag, uip_ipaddr_t *prefix,
unsigned len);
239 int rpl_repair_root(uint8_t instance_id);
240 int rpl_set_default_route(rpl_instance_t *instance, uip_ipaddr_t *from);
241 rpl_dag_t *rpl_get_any_dag(
void);
242 rpl_instance_t *rpl_get_instance(uint8_t instance_id);
243 void rpl_update_header_empty(
void);
244 int rpl_update_header_final(uip_ipaddr_t *addr);
245 int rpl_verify_header(
int);
246 void rpl_insert_header(
void);
247 void rpl_remove_header(
void);
248 uint8_t rpl_invert_header(
void);
249 uip_ipaddr_t *rpl_get_parent_ipaddr(rpl_parent_t *nbr);
251 uint16_t rpl_get_parent_link_metric(
const uip_lladdr_t *addr);
252 void rpl_dag_init(
void);
267 RPL_MODE_FEATHER = 1,
Linked list manipulation routines.
Header file for the uIP TCP/IP stack.
Network interface and stateless autoconfiguration (RFC 4862)
enum rpl_mode rpl_get_mode(void)
Get the RPL mode.
Header file for the callback timer
enum rpl_mode rpl_set_mode(enum rpl_mode m)
Set the RPL mode.
An entry in the default router list.