41 #include "net/routing/rpl-classic/rpl-conf.h" 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 101 union metric_object {
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;
144 rpl_parent_t *preferred_parent;
147 rpl_prefix_t prefix_info;
150 typedef struct rpl_dag rpl_dag_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;
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;
257 struct ctimer dio_timer;
258 struct ctimer dao_timer;
259 struct ctimer dao_lifetime_timer;
260 struct ctimer unicast_dio_timer;
261 rpl_parent_t *unicast_dio_target;
263 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);
276 rpl_instance_t *rpl_get_instance(uint8_t instance_id);
279 void rpl_insert_header(
void);
281 const struct link_stats *rpl_get_parent_link_stats(rpl_parent_t *p);
282 int rpl_parent_is_fresh(rpl_parent_t *p);
283 int rpl_parent_is_reachable(rpl_parent_t *p);
284 uint16_t rpl_get_parent_link_metric(rpl_parent_t *p);
285 rpl_rank_t rpl_rank_via_parent(rpl_parent_t *p);
286 const linkaddr_t *rpl_get_parent_lladdr(rpl_parent_t *p);
287 uip_ipaddr_t *rpl_parent_get_ipaddr(rpl_parent_t *
nbr);
288 rpl_parent_t *rpl_get_parent(
const uip_lladdr_t *
addr);
289 rpl_rank_t rpl_get_parent_rank(uip_lladdr_t *
addr);
292 void rpl_print_neighbor_list(
void);
297 NBR_TABLE_DECLARE(rpl_parents);
311 RPL_MODE_FEATHER = 1,
static uip_ipaddr_t ipaddr
Pointer to prefix information option in uip_buf.
An entry in the default router list.
void rpl_link_callback(const linkaddr_t *addr, int status, int numtx)
Called by lower layers after every packet transmission.
static uip_ds6_nbr_t * nbr
Pointer to llao option in uip_buf.
static uip_ds6_addr_t * addr
Pointer to a nbr cache entry.
Structure for RPL energy metric.
enum rpl_mode rpl_get_mode(void)
Get the RPL mode.
int rpl_ext_header_srh_get_next_hop(uip_ipaddr_t *ipaddr)
Look for next hop from SRH of current uIP packet.
uint8_t rpl_is_in_leaf_mode(void)
Tells whether the protocol is in leaf mode.
int rpl_ext_header_update(void)
Adds/updates all RPL extension headers to current uIP packet.
int rpl_ext_header_hbh_update(uint8_t *, int)
Process and update the RPL hop-by-hop extension headers of the current uIP packet.
Header file for IPv6-related data structures.
API for RPL objective functions (OF)
int rpl_set_prefix(rpl_prefix_t *prefix)
Set prefix from an prefix data structure (from DIO)
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
Linked list manipulation routines.
rpl_dag_t * rpl_get_any_dag(void)
Returns pointer to any DAG (for compatibility with legagy RPL code)
Logical representation of a DAG Metric Container.
bool rpl_ext_header_remove(void)
Removes all RPL extension headers.
Header file for the uIP TCP/IP stack.
int rpl_has_joined(void)
Tells whether the node has joined a network or not.
enum rpl_mode rpl_set_mode(enum rpl_mode mode)
Set the RPL mode.
void rpl_dag_init(void)
Initializes rpl-dag module.
int rpl_ext_header_srh_update(void)
Process and update SRH in-place, i.e.
The default nbr_table entry (when UIP_DS6_NBR_MULTI_IPV6_ADDRS is disabled), that implements nbr cach...