diff --git a/sys/net/sixlowpan/sixlowip.c b/sys/net/sixlowpan/sixlowip.c index ae3b2bb717..cf7e2dd7bd 100644 --- a/sys/net/sixlowpan/sixlowip.c +++ b/sys/net/sixlowpan/sixlowip.c @@ -383,3 +383,22 @@ uint32_t get_remaining_time(vtimer_t *t){ void set_remaining_time(vtimer_t *t, uint32_t time){ t->absolute.nanoseconds = time * 1000000; } + +void ipv6_init_iface_as_router(void) { + ipv6_addr_t addr; + + ipv6_set_all_rtrs_mcast_addr(&addr); + ipv6_iface_add_addr(&addr,ADDR_STATE_PREFERRED,0,0,ADDR_TYPE_MULTICAST); +} + + +uint8_t ipv6_is_router(void) { + ipv6_addr_t addr; + + ipv6_set_all_rtrs_mcast_addr(&addr); + if (ipv6_iface_addr_match(&addr) != NULL) { + return 1; + } + + return 0; +} diff --git a/sys/net/sixlowpan/sixlowip.h b/sys/net/sixlowpan/sixlowip.h index 9e285d7ddb..8f3aeff403 100644 --- a/sys/net/sixlowpan/sixlowip.h +++ b/sys/net/sixlowpan/sixlowip.h @@ -136,6 +136,8 @@ struct icmpv6_hdr_t* get_icmpv6_buf(uint8_t ext_len); struct ipv6_hdr_t* get_ipv6_buf(void); uint8_t * get_payload_buf(uint8_t ext_len); +void ipv6_init_iface_as_router(void); +uint8_t ipv6_is_router(void); void ipv6_set_ll_prefix(ipv6_addr_t *ipaddr); void ipv6_set_all_rtrs_mcast_addr(ipv6_addr_t *ipaddr); void ipv6_set_all_nds_mcast_addr(ipv6_addr_t *ipaddr);