Improved objective function API so DAG metric containers can be generated cleanly. The packet generation now asks the OF to provide a fresh logical presentation of the metric container, which is then translated to raw packet format.

This commit is contained in:
nvt 2011-02-15 01:13:30 +01:00
parent 20bf23cf06
commit a093c262ee
6 changed files with 164 additions and 73 deletions

View file

@ -189,6 +189,8 @@ rpl_set_root(uip_ipaddr_t *dag_id)
dag->default_lifetime = DEFAULT_RPL_DEF_LIFETIME;
dag->lifetime_unit = DEFAULT_RPL_LIFETIME_UNIT;
dag->of->update_metric_container(dag);
PRINTF("RPL: Node set to be a DAG root with DAG ID ");
PRINT6ADDR(&dag->dag_id);
PRINTF("\n");
@ -300,6 +302,8 @@ rpl_add_parent(rpl_dag_t *dag, rpl_dio_t *dio, uip_ipaddr_t *addr)
p->etx = INITIAL_ETX;
p->dtsn = 0;
memcpy(&p->mc, &dio->mc, sizeof(p->mc));
list_add(dag->parents, p);
return p;
@ -337,6 +341,7 @@ rpl_select_parent(rpl_dag_t *dag)
if(dag->preferred_parent != best) {
dag->preferred_parent = best; /* Cache the value. */
dag->of->update_metric_container(dag);
rpl_set_default_route(dag, &best->addr);
/* The DAO parent set changed - schedule a DAO transmission. */
rpl_schedule_dao(dag);
@ -482,6 +487,7 @@ join_dag(uip_ipaddr_t *from, rpl_dio_t *dio)
dag->version = dio->version;
dag->preferred_parent = p;
dag->of->update_metric_container(dag);
dag->dio_intdoubl = dio->dag_intdoubl;
dag->dio_intmin = dio->dag_intmin;