Merge pull request #875 from joakimeriksson/rtablefix
Changed sorting order of routing list (optimization).
This commit is contained in:
commit
713d60435a
1 changed files with 15 additions and 8 deletions
|
@ -216,6 +216,10 @@ uip_ds6_route_lookup(uip_ipaddr_t *addr)
|
||||||
uip_ipaddr_prefixcmp(addr, &r->ipaddr, r->length)) {
|
uip_ipaddr_prefixcmp(addr, &r->ipaddr, r->length)) {
|
||||||
longestmatch = r->length;
|
longestmatch = r->length;
|
||||||
found_route = r;
|
found_route = r;
|
||||||
|
/* check if total match - e.g. all 128 bits do match */
|
||||||
|
if(longestmatch == 128) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,13 +233,14 @@ uip_ds6_route_lookup(uip_ipaddr_t *addr)
|
||||||
PRINTF("uip-ds6-route: No route found\n");
|
PRINTF("uip-ds6-route: No route found\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(found_route != NULL) {
|
if(found_route != NULL && found_route != list_head(routelist)) {
|
||||||
/* If we found a route, we put it at the end of the routeslist
|
/* If we found a route, we put it at the start of the routeslist
|
||||||
list. The list is ordered by how recently we looked them up:
|
list. The list is ordered by how recently we looked them up:
|
||||||
the least recently used route will be at the start of the
|
the least recently used route will be at the end of the
|
||||||
list. */
|
list - for fast lookups (assuming multiple packets to the same node). */
|
||||||
|
|
||||||
list_remove(routelist, found_route);
|
list_remove(routelist, found_route);
|
||||||
list_add(routelist, found_route);
|
list_push(routelist, found_route);
|
||||||
}
|
}
|
||||||
|
|
||||||
return found_route;
|
return found_route;
|
||||||
|
@ -282,7 +287,7 @@ uip_ds6_route_add(uip_ipaddr_t *ipaddr, uint8_t length,
|
||||||
least recently used route is the first route on the list. */
|
least recently used route is the first route on the list. */
|
||||||
uip_ds6_route_t *oldest;
|
uip_ds6_route_t *oldest;
|
||||||
|
|
||||||
oldest = uip_ds6_route_head();
|
oldest = list_tail(routelist); /* uip_ds6_route_head(); */
|
||||||
PRINTF("uip_ds6_route_add: dropping route to ");
|
PRINTF("uip_ds6_route_add: dropping route to ");
|
||||||
PRINT6ADDR(&oldest->ipaddr);
|
PRINT6ADDR(&oldest->ipaddr);
|
||||||
PRINTF("\n");
|
PRINTF("\n");
|
||||||
|
@ -328,7 +333,9 @@ uip_ds6_route_add(uip_ipaddr_t *ipaddr, uint8_t length,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
list_add(routelist, r);
|
/* add new routes first - assuming that there is a reason to add this
|
||||||
|
and that there is a packet coming soon. */
|
||||||
|
list_push(routelist, r);
|
||||||
|
|
||||||
nbrr = memb_alloc(&neighborroutememb);
|
nbrr = memb_alloc(&neighborroutememb);
|
||||||
if(nbrr == NULL) {
|
if(nbrr == NULL) {
|
||||||
|
@ -386,7 +393,7 @@ uip_ds6_route_rm(uip_ds6_route_t *route)
|
||||||
PRINT6ADDR(&route->ipaddr);
|
PRINT6ADDR(&route->ipaddr);
|
||||||
PRINTF("\n");
|
PRINTF("\n");
|
||||||
|
|
||||||
/* Remove the neighbor from the route list */
|
/* Remove the route from the route list */
|
||||||
list_remove(routelist, route);
|
list_remove(routelist, route);
|
||||||
|
|
||||||
/* Find the corresponding neighbor_route and remove it. */
|
/* Find the corresponding neighbor_route and remove it. */
|
||||||
|
|
Loading…
Reference in a new issue