From 4a6c6b05346f88b605c6ffcb825d960ec0db82cd Mon Sep 17 00:00:00 2001 From: joxe Date: Tue, 23 Mar 2010 14:21:04 +0000 Subject: [PATCH] added route_rm_by_nexthop and small code cleanup --- core/net/uip-ds6.c | 50 ++++++++++++++++++++++------------------- core/net/uip-ds6.h | 55 +++++++++++++++++++++++----------------------- 2 files changed, 56 insertions(+), 49 deletions(-) diff --git a/core/net/uip-ds6.c b/core/net/uip-ds6.c index e96f4f5fa..85416fbc2 100755 --- a/core/net/uip-ds6.c +++ b/core/net/uip-ds6.c @@ -334,7 +334,7 @@ uip_ds6_nbr_add(uip_ipaddr_t * ipaddr, uip_lladdr_t * lladdr, /*---------------------------------------------------------------------------*/ void -uip_ds6_nbr_rm(uip_ds6_nbr_t * nbr) +uip_ds6_nbr_rm(uip_ds6_nbr_t *nbr) { if(nbr != NULL) { nbr->isused = 0; @@ -344,7 +344,7 @@ uip_ds6_nbr_rm(uip_ds6_nbr_t * nbr) /*---------------------------------------------------------------------------*/ uip_ds6_nbr_t * -uip_ds6_nbr_lookup(uip_ipaddr_t * ipaddr) +uip_ds6_nbr_lookup(uip_ipaddr_t *ipaddr) { if(uip_ds6_list_loop ((uip_ds6_element_t *) uip_ds6_nbr_cache, UIP_DS6_NBR_NB, @@ -357,7 +357,7 @@ uip_ds6_nbr_lookup(uip_ipaddr_t * ipaddr) /*---------------------------------------------------------------------------*/ uip_ds6_defrt_t * -uip_ds6_defrt_add(uip_ipaddr_t * ipaddr, unsigned long interval) +uip_ds6_defrt_add(uip_ipaddr_t *ipaddr, unsigned long interval) { if(uip_ds6_list_loop ((uip_ds6_element_t *) uip_ds6_defrt_list, UIP_DS6_DEFRT_NB, @@ -389,10 +389,9 @@ uip_ds6_defrt_rm(uip_ds6_defrt_t * defrt) uip_ds6_defrt_t * uip_ds6_defrt_lookup(uip_ipaddr_t * ipaddr) { - if(uip_ds6_list_loop - ((uip_ds6_element_t *) uip_ds6_defrt_list, UIP_DS6_DEFRT_NB, - sizeof(uip_ds6_defrt_t), ipaddr, 128, - (uip_ds6_element_t **) & locdefrt) == FOUND) { + if(uip_ds6_list_loop((uip_ds6_element_t *) uip_ds6_defrt_list, + UIP_DS6_DEFRT_NB, sizeof(uip_ds6_defrt_t), ipaddr, 128, + (uip_ds6_element_t **) & locdefrt) == FOUND) { return locdefrt; } return NULL; @@ -500,10 +499,10 @@ uip_ds6_prefix_rm(uip_ds6_prefix_t * prefix) uip_ds6_prefix_t * uip_ds6_prefix_lookup(uip_ipaddr_t * ipaddr, uint8_t ipaddrlen) { - if(uip_ds6_list_loop - ((uip_ds6_element_t *) uip_ds6_prefix_list, UIP_DS6_PREFIX_NB, - sizeof(uip_ds6_prefix_t), ipaddr, ipaddrlen, - (uip_ds6_element_t **) & locprefix) == FOUND) { + if(uip_ds6_list_loop((uip_ds6_element_t *)uip_ds6_prefix_list, + UIP_DS6_PREFIX_NB, sizeof(uip_ds6_prefix_t), + ipaddr, ipaddrlen, + (uip_ds6_element_t **)&locprefix) == FOUND) { return locprefix; } return NULL; @@ -515,10 +514,8 @@ uip_ds6_is_addr_onlink(uip_ipaddr_t * ipaddr) { for(locprefix = uip_ds6_prefix_list; locprefix < uip_ds6_prefix_list + UIP_DS6_PREFIX_NB; locprefix++) { - if((locprefix->isused) - && - (uip_ipaddr_prefixcmp(&locprefix->ipaddr, ipaddr, locprefix->length))) - { + if(locprefix->isused && + uip_ipaddr_prefixcmp(&locprefix->ipaddr, ipaddr, locprefix->length)) { return 1; } } @@ -649,10 +646,9 @@ uip_ds6_aaddr_rm(uip_ds6_aaddr_t * aaddr) uip_ds6_aaddr_t * uip_ds6_aaddr_lookup(uip_ipaddr_t * ipaddr) { - if(uip_ds6_list_loop - ((uip_ds6_element_t *) uip_ds6_if.aaddr_list, UIP_DS6_AADDR_NB, - sizeof(uip_ds6_aaddr_t), ipaddr, 128, - (uip_ds6_element_t **) & locaaddr) == FOUND) { + if(uip_ds6_list_loop((uip_ds6_element_t *) uip_ds6_if.aaddr_list, + UIP_DS6_AADDR_NB, sizeof(uip_ds6_aaddr_t), ipaddr, 128, + (uip_ds6_element_t **)&locaaddr) == FOUND) { return locaaddr; } return NULL; @@ -722,15 +718,25 @@ uip_ds6_route_add(uip_ipaddr_t * ipaddr, u8_t length, uip_ipaddr_t * nexthop, /*---------------------------------------------------------------------------*/ void -uip_ds6_route_rm(uip_ds6_route_t * route) +uip_ds6_route_rm(uip_ds6_route_t *route) { route->isused = 0; - return; +} +/*---------------------------------------------------------------------------*/ +void +uip_ds6_route_rm_by_nexthop(uip_ipaddr_t *nexthop) +{ + for(locroute = uip_ds6_routing_table; + locroute < uip_ds6_routing_table + UIP_DS6_ROUTE_NB; locroute++) { + if((locroute->isused) && uip_ipaddr_cmp(&locroute->nexthop, nexthop)) { + locroute->isused = 0; + } + } } /*---------------------------------------------------------------------------*/ void -uip_ds6_select_src(uip_ipaddr_t * src, uip_ipaddr_t * dst) +uip_ds6_select_src(uip_ipaddr_t *src, uip_ipaddr_t *dst) { uint8_t best = 0; /* number of bit in common with best match */ uint8_t n = 0; diff --git a/core/net/uip-ds6.h b/core/net/uip-ds6.h index 50475b35d..268e7d1b8 100755 --- a/core/net/uip-ds6.h +++ b/core/net/uip-ds6.h @@ -272,26 +272,26 @@ void uip_ds6_periodic(void); /** \brief Generic loop routine on an abstract data structure, which generalizes * all data structures used in DS6 */ -uint8_t uip_ds6_list_loop(uip_ds6_element_t * list, uint8_t size, - uint16_t elementsize, uip_ipaddr_t * ipaddr, +uint8_t uip_ds6_list_loop(uip_ds6_element_t *list, uint8_t size, + uint16_t elementsize, uip_ipaddr_t *ipaddr, uint8_t ipaddrlen, - uip_ds6_element_t ** out_element); + uip_ds6_element_t **out_element); /** \name Neighbor Cache basic routines */ /** @{ */ -uip_ds6_nbr_t *uip_ds6_nbr_add(uip_ipaddr_t * ipaddr, uip_lladdr_t * lladdr, +uip_ds6_nbr_t *uip_ds6_nbr_add(uip_ipaddr_t *ipaddr, uip_lladdr_t *lladdr, uint8_t isrouter, uint8_t state); -void uip_ds6_nbr_rm(uip_ds6_nbr_t * nbr); -uip_ds6_nbr_t *uip_ds6_nbr_lookup(uip_ipaddr_t * ipaddr); +void uip_ds6_nbr_rm(uip_ds6_nbr_t *nbr); +uip_ds6_nbr_t *uip_ds6_nbr_lookup(uip_ipaddr_t *ipaddr); /** @} */ /** \name Default router list basic routines */ /** @{ */ -uip_ds6_defrt_t *uip_ds6_defrt_add(uip_ipaddr_t * ipaddr, +uip_ds6_defrt_t *uip_ds6_defrt_add(uip_ipaddr_t *ipaddr, unsigned long interval); -void uip_ds6_defrt_rm(uip_ds6_defrt_t * defrt); -uip_ds6_defrt_t *uip_ds6_defrt_lookup(uip_ipaddr_t * ipaddr); +void uip_ds6_defrt_rm(uip_ds6_defrt_t *defrt); +uip_ds6_defrt_t *uip_ds6_defrt_lookup(uip_ipaddr_t *ipaddr); uip_ipaddr_t *uip_ds6_defrt_choose(void); /** @} */ @@ -299,53 +299,54 @@ uip_ipaddr_t *uip_ds6_defrt_choose(void); /** \name Prefix list basic routines */ /** @{ */ #if UIP_CONF_ROUTER -uip_ds6_prefix_t *uip_ds6_prefix_add(uip_ipaddr_t * ipaddr, uint8_t length, +uip_ds6_prefix_t *uip_ds6_prefix_add(uip_ipaddr_t *ipaddr, uint8_t length, uint8_t advertise, uint8_t flags, unsigned long vtime, unsigned long ptime); #else /* UIP_CONF_ROUTER */ -uip_ds6_prefix_t *uip_ds6_prefix_add(uip_ipaddr_t * ipaddr, uint8_t length, +uip_ds6_prefix_t *uip_ds6_prefix_add(uip_ipaddr_t *ipaddr, uint8_t length, unsigned long interval); #endif /* UIP_CONF_ROUTER */ -void uip_ds6_prefix_rm(uip_ds6_prefix_t * prefix); -uip_ds6_prefix_t *uip_ds6_prefix_lookup(uip_ipaddr_t * ipaddr, +void uip_ds6_prefix_rm(uip_ds6_prefix_t *prefix); +uip_ds6_prefix_t *uip_ds6_prefix_lookup(uip_ipaddr_t *ipaddr, uint8_t ipaddrlen); -uint8_t uip_ds6_is_addr_onlink(uip_ipaddr_t * ipaddr); +uint8_t uip_ds6_is_addr_onlink(uip_ipaddr_t *ipaddr); /** @} */ /** \name Unicast address list basic routines */ /** @{ */ -uip_ds6_addr_t *uip_ds6_addr_add(uip_ipaddr_t * ipaddr, +uip_ds6_addr_t *uip_ds6_addr_add(uip_ipaddr_t *ipaddr, unsigned long vlifetime, uint8_t type); -void uip_ds6_addr_rm(uip_ds6_addr_t * addr); -uip_ds6_addr_t *uip_ds6_addr_lookup(uip_ipaddr_t * ipaddr); +void uip_ds6_addr_rm(uip_ds6_addr_t *addr); +uip_ds6_addr_t *uip_ds6_addr_lookup(uip_ipaddr_t *ipaddr); /** @} */ /** \name Multicast address list basic routines */ /** @{ */ -uip_ds6_maddr_t *uip_ds6_maddr_add(uip_ipaddr_t * ipaddr); -void uip_ds6_maddr_rm(uip_ds6_maddr_t * maddr); -uip_ds6_maddr_t *uip_ds6_maddr_lookup(uip_ipaddr_t * ipaddr); +uip_ds6_maddr_t *uip_ds6_maddr_add(uip_ipaddr_t *ipaddr); +void uip_ds6_maddr_rm(uip_ds6_maddr_t *maddr); +uip_ds6_maddr_t *uip_ds6_maddr_lookup(uip_ipaddr_t *ipaddr); /** @} */ /** \name Anycast address list basic routines */ /** @{ */ -uip_ds6_aaddr_t *uip_ds6_aaddr_add(uip_ipaddr_t * ipaddr); -void uip_ds6_aaddr_rm(uip_ds6_aaddr_t * aaddr); -uip_ds6_aaddr_t *uip_ds6_aaddr_lookup(uip_ipaddr_t * ipaddr); +uip_ds6_aaddr_t *uip_ds6_aaddr_add(uip_ipaddr_t *ipaddr); +void uip_ds6_aaddr_rm(uip_ds6_aaddr_t *aaddr); +uip_ds6_aaddr_t *uip_ds6_aaddr_lookup(uip_ipaddr_t *ipaddr); /** @} */ /** \name Routing Table basic routines */ /** @{ */ -uip_ds6_route_t *uip_ds6_route_lookup(uip_ipaddr_t * destipaddr); -uip_ds6_route_t *uip_ds6_route_add(uip_ipaddr_t * ipaddr, uint8_t length, - uip_ipaddr_t * next_hop, u8_t metric); -void uip_ds6_route_rm(uip_ds6_route_t * route); +uip_ds6_route_t *uip_ds6_route_lookup(uip_ipaddr_t *destipaddr); +uip_ds6_route_t *uip_ds6_route_add(uip_ipaddr_t *ipaddr, uint8_t length, + uip_ipaddr_t *next_hop, u8_t metric); +void uip_ds6_route_rm(uip_ds6_route_t *route); +void uip_ds6_route_rm_by_nexthop(uip_ipaddr_t *nexthop); /** @} */