added route_rm_by_nexthop and small code cleanup

This commit is contained in:
joxe 2010-03-23 14:21:04 +00:00
parent 6197ac9c54
commit 4a6c6b0534
2 changed files with 56 additions and 49 deletions

View File

@ -334,7 +334,7 @@ uip_ds6_nbr_add(uip_ipaddr_t * ipaddr, uip_lladdr_t * lladdr,
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
void void
uip_ds6_nbr_rm(uip_ds6_nbr_t * nbr) uip_ds6_nbr_rm(uip_ds6_nbr_t *nbr)
{ {
if(nbr != NULL) { if(nbr != NULL) {
nbr->isused = 0; nbr->isused = 0;
@ -344,7 +344,7 @@ uip_ds6_nbr_rm(uip_ds6_nbr_t * nbr)
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
uip_ds6_nbr_t * 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 if(uip_ds6_list_loop
((uip_ds6_element_t *) uip_ds6_nbr_cache, UIP_DS6_NBR_NB, ((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_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 if(uip_ds6_list_loop
((uip_ds6_element_t *) uip_ds6_defrt_list, UIP_DS6_DEFRT_NB, ((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_t *
uip_ds6_defrt_lookup(uip_ipaddr_t * ipaddr) uip_ds6_defrt_lookup(uip_ipaddr_t * ipaddr)
{ {
if(uip_ds6_list_loop if(uip_ds6_list_loop((uip_ds6_element_t *) uip_ds6_defrt_list,
((uip_ds6_element_t *) uip_ds6_defrt_list, UIP_DS6_DEFRT_NB, UIP_DS6_DEFRT_NB, sizeof(uip_ds6_defrt_t), ipaddr, 128,
sizeof(uip_ds6_defrt_t), ipaddr, 128, (uip_ds6_element_t **) & locdefrt) == FOUND) {
(uip_ds6_element_t **) & locdefrt) == FOUND) {
return locdefrt; return locdefrt;
} }
return NULL; return NULL;
@ -500,10 +499,10 @@ uip_ds6_prefix_rm(uip_ds6_prefix_t * prefix)
uip_ds6_prefix_t * uip_ds6_prefix_t *
uip_ds6_prefix_lookup(uip_ipaddr_t * ipaddr, uint8_t ipaddrlen) uip_ds6_prefix_lookup(uip_ipaddr_t * ipaddr, uint8_t ipaddrlen)
{ {
if(uip_ds6_list_loop if(uip_ds6_list_loop((uip_ds6_element_t *)uip_ds6_prefix_list,
((uip_ds6_element_t *) uip_ds6_prefix_list, UIP_DS6_PREFIX_NB, UIP_DS6_PREFIX_NB, sizeof(uip_ds6_prefix_t),
sizeof(uip_ds6_prefix_t), ipaddr, ipaddrlen, ipaddr, ipaddrlen,
(uip_ds6_element_t **) & locprefix) == FOUND) { (uip_ds6_element_t **)&locprefix) == FOUND) {
return locprefix; return locprefix;
} }
return NULL; return NULL;
@ -515,10 +514,8 @@ uip_ds6_is_addr_onlink(uip_ipaddr_t * ipaddr)
{ {
for(locprefix = uip_ds6_prefix_list; for(locprefix = uip_ds6_prefix_list;
locprefix < uip_ds6_prefix_list + UIP_DS6_PREFIX_NB; locprefix++) { locprefix < uip_ds6_prefix_list + UIP_DS6_PREFIX_NB; locprefix++) {
if((locprefix->isused) if(locprefix->isused &&
&& uip_ipaddr_prefixcmp(&locprefix->ipaddr, ipaddr, locprefix->length)) {
(uip_ipaddr_prefixcmp(&locprefix->ipaddr, ipaddr, locprefix->length)))
{
return 1; return 1;
} }
} }
@ -649,10 +646,9 @@ uip_ds6_aaddr_rm(uip_ds6_aaddr_t * aaddr)
uip_ds6_aaddr_t * uip_ds6_aaddr_t *
uip_ds6_aaddr_lookup(uip_ipaddr_t * ipaddr) uip_ds6_aaddr_lookup(uip_ipaddr_t * ipaddr)
{ {
if(uip_ds6_list_loop if(uip_ds6_list_loop((uip_ds6_element_t *) uip_ds6_if.aaddr_list,
((uip_ds6_element_t *) uip_ds6_if.aaddr_list, UIP_DS6_AADDR_NB, UIP_DS6_AADDR_NB, sizeof(uip_ds6_aaddr_t), ipaddr, 128,
sizeof(uip_ds6_aaddr_t), ipaddr, 128, (uip_ds6_element_t **)&locaaddr) == FOUND) {
(uip_ds6_element_t **) & locaaddr) == FOUND) {
return locaaddr; return locaaddr;
} }
return NULL; return NULL;
@ -722,15 +718,25 @@ uip_ds6_route_add(uip_ipaddr_t * ipaddr, u8_t length, uip_ipaddr_t * nexthop,
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
void void
uip_ds6_route_rm(uip_ds6_route_t * route) uip_ds6_route_rm(uip_ds6_route_t *route)
{ {
route->isused = 0; 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 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 best = 0; /* number of bit in common with best match */
uint8_t n = 0; uint8_t n = 0;

View File

@ -272,26 +272,26 @@ void uip_ds6_periodic(void);
/** \brief Generic loop routine on an abstract data structure, which generalizes /** \brief Generic loop routine on an abstract data structure, which generalizes
* all data structures used in DS6 */ * all data structures used in DS6 */
uint8_t uip_ds6_list_loop(uip_ds6_element_t * list, uint8_t size, uint8_t uip_ds6_list_loop(uip_ds6_element_t *list, uint8_t size,
uint16_t elementsize, uip_ipaddr_t * ipaddr, uint16_t elementsize, uip_ipaddr_t *ipaddr,
uint8_t ipaddrlen, uint8_t ipaddrlen,
uip_ds6_element_t ** out_element); uip_ds6_element_t **out_element);
/** \name Neighbor Cache basic routines */ /** \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); uint8_t isrouter, uint8_t state);
void uip_ds6_nbr_rm(uip_ds6_nbr_t * nbr); void uip_ds6_nbr_rm(uip_ds6_nbr_t *nbr);
uip_ds6_nbr_t *uip_ds6_nbr_lookup(uip_ipaddr_t * ipaddr); uip_ds6_nbr_t *uip_ds6_nbr_lookup(uip_ipaddr_t *ipaddr);
/** @} */ /** @} */
/** \name Default router list basic routines */ /** \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); unsigned long interval);
void uip_ds6_defrt_rm(uip_ds6_defrt_t * defrt); void uip_ds6_defrt_rm(uip_ds6_defrt_t *defrt);
uip_ds6_defrt_t *uip_ds6_defrt_lookup(uip_ipaddr_t * ipaddr); uip_ds6_defrt_t *uip_ds6_defrt_lookup(uip_ipaddr_t *ipaddr);
uip_ipaddr_t *uip_ds6_defrt_choose(void); 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 */ /** \name Prefix list basic routines */
/** @{ */ /** @{ */
#if UIP_CONF_ROUTER #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, uint8_t advertise, uint8_t flags,
unsigned long vtime, unsigned long vtime,
unsigned long ptime); unsigned long ptime);
#else /* UIP_CONF_ROUTER */ #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); unsigned long interval);
#endif /* UIP_CONF_ROUTER */ #endif /* UIP_CONF_ROUTER */
void uip_ds6_prefix_rm(uip_ds6_prefix_t * prefix); void uip_ds6_prefix_rm(uip_ds6_prefix_t *prefix);
uip_ds6_prefix_t *uip_ds6_prefix_lookup(uip_ipaddr_t * ipaddr, uip_ds6_prefix_t *uip_ds6_prefix_lookup(uip_ipaddr_t *ipaddr,
uint8_t ipaddrlen); 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 */ /** \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); unsigned long vlifetime, uint8_t type);
void uip_ds6_addr_rm(uip_ds6_addr_t * addr); void uip_ds6_addr_rm(uip_ds6_addr_t *addr);
uip_ds6_addr_t *uip_ds6_addr_lookup(uip_ipaddr_t * ipaddr); uip_ds6_addr_t *uip_ds6_addr_lookup(uip_ipaddr_t *ipaddr);
/** @} */ /** @} */
/** \name Multicast address list basic routines */ /** \name Multicast address list basic routines */
/** @{ */ /** @{ */
uip_ds6_maddr_t *uip_ds6_maddr_add(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); 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_lookup(uip_ipaddr_t *ipaddr);
/** @} */ /** @} */
/** \name Anycast address list basic routines */ /** \name Anycast address list basic routines */
/** @{ */ /** @{ */
uip_ds6_aaddr_t *uip_ds6_aaddr_add(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); 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_lookup(uip_ipaddr_t *ipaddr);
/** @} */ /** @} */
/** \name Routing Table basic routines */ /** \name Routing Table basic routines */
/** @{ */ /** @{ */
uip_ds6_route_t *uip_ds6_route_lookup(uip_ipaddr_t * destipaddr); 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_ds6_route_t *uip_ds6_route_add(uip_ipaddr_t *ipaddr, uint8_t length,
uip_ipaddr_t * next_hop, u8_t metric); uip_ipaddr_t *next_hop, u8_t metric);
void uip_ds6_route_rm(uip_ds6_route_t * route); void uip_ds6_route_rm(uip_ds6_route_t *route);
void uip_ds6_route_rm_by_nexthop(uip_ipaddr_t *nexthop);
/** @} */ /** @} */