diff --git a/sys/net/sixlowpan/sixlownd.c b/sys/net/sixlowpan/sixlownd.c index 82b9db5dcd..680587ff68 100644 --- a/sys/net/sixlowpan/sixlownd.c +++ b/sys/net/sixlowpan/sixlownd.c @@ -1138,10 +1138,11 @@ void def_rtr_lst_rem(def_rtr_lst_t *entry){ //------------------------------------------------------------------------------ // prefix list functions -void plist_add(ipv6_addr_t *addr, uint8_t size, uint32_t val_ltime, +plist_t *plist_add(ipv6_addr_t *addr, uint8_t size, uint32_t val_ltime, uint32_t pref_ltime, uint8_t adv_opt, uint8_t l_a_reserved1){ if(prefix_count == OPT_PI_LIST_LEN){ printf("ERROR: prefix list full\n"); + return NULL; } else { plist[prefix_count].inuse = 1; plist[prefix_count].length = size; @@ -1151,6 +1152,6 @@ void plist_add(ipv6_addr_t *addr, uint8_t size, uint32_t val_ltime, plist[prefix_count].pref_ltime = HTONL(pref_ltime); memcpy(&(plist[prefix_count].addr.uint8[0]), &(addr->uint8[0]), 16); - prefix_count++; + return &(plist[prefix_count++]); } } diff --git a/sys/net/sixlowpan/sixlownd.h b/sys/net/sixlowpan/sixlownd.h index 2418837c30..55c9b41ca1 100644 --- a/sys/net/sixlowpan/sixlownd.h +++ b/sys/net/sixlowpan/sixlownd.h @@ -218,7 +218,7 @@ void init_rtr_adv(ipv6_addr_t *addr, uint8_t sllao, uint8_t mtu, uint8_t pi, uint8_t sixco, uint8_t abro); uint8_t plist_search(ipv6_addr_t *addr); uint8_t plist_cmp(ipv6_addr_t *addr1, ipv6_addr_t *addr2); -void plist_add(ipv6_addr_t *addr, uint8_t size, uint32_t val_ltime, +plist_t *plist_add(ipv6_addr_t *addr, uint8_t size, uint32_t val_ltime, uint32_t pref_ltime, uint8_t adv_opt, uint8_t l_a_reserved1); void set_llao(opt_stllao_t *sllao, uint8_t type, uint8_t length); abr_cache_t *abr_update_cache( @@ -240,7 +240,5 @@ void init_nbr_sol(ipv6_addr_t *src, ipv6_addr_t *dest, ipv6_addr_t *targ, uint8_t slloa, uint8_t aro); void init_nbr_adv(ipv6_addr_t *src, ipv6_addr_t *dst, ipv6_addr_t *tgt, uint8_t rso, uint8_t sllao, uint8_t aro, uint8_t aro_state); -void plist_add(ipv6_addr_t *addr, uint8_t size, uint32_t val_ltime, - uint32_t pref_ltime, uint8_t adv_opt, uint8_t l_a_reserved1); void recv_nbr_sol(void); #endif /* SIXLOWND_H*/