diff --git a/os/net/ipv6/sicslowpan.c b/os/net/ipv6/sicslowpan.c index be6821275..9bb906f6d 100644 --- a/os/net/ipv6/sicslowpan.c +++ b/os/net/ipv6/sicslowpan.c @@ -1431,10 +1431,8 @@ packet_sent(void *ptr, int status, int transmissions) /* Update neighbor link statistics */ link_stats_packet_sent(dest, status, transmissions); -#if UIP_CONF_IPV6_RPL - /* Call RPL link callback */ - rpl_link_callback(dest, status, transmissions); -#endif /* UIP_CONF_IPV6_RPL */ + /* Call routing protocol link callback */ + NETSTACK_ROUTING.link_callback(dest, status, transmissions); /* DS6 callback, used for UIP_DS6_LL_NUD */ uip_ds6_link_callback(status, transmissions); diff --git a/os/net/mac/tsch/tsch-rpl.c b/os/net/mac/tsch/tsch-rpl.c index 99cb8d9a2..f603c0e60 100644 --- a/os/net/mac/tsch/tsch-rpl.c +++ b/os/net/mac/tsch/tsch-rpl.c @@ -60,7 +60,7 @@ void tsch_rpl_callback_ka_sent(int status, int transmissions) { - rpl_link_callback(packetbuf_addr(PACKETBUF_ADDR_RECEIVER), status, transmissions); + NETSTACK_ROUTING.link_callback(packetbuf_addr(PACKETBUF_ADDR_RECEIVER), status, transmissions); } /*---------------------------------------------------------------------------*/ /* To use, set #define TSCH_CALLBACK_JOINING_NETWORK tsch_rpl_callback_joining_network */ diff --git a/os/net/routing/nullrouting/nullrouting.c b/os/net/routing/nullrouting/nullrouting.c index a133cf34f..5707143b1 100644 --- a/os/net/routing/nullrouting/nullrouting.c +++ b/os/net/routing/nullrouting/nullrouting.c @@ -98,6 +98,11 @@ ext_header_srh_get_next_hop(uip_ipaddr_t *ipaddr) return 0; } /*---------------------------------------------------------------------------*/ +static void +link_callback(const linkaddr_t *addr, int status, int numtx) +{ +} +/*---------------------------------------------------------------------------*/ const struct routing_driver nullrouting_driver = { "Null Routing", init, @@ -110,6 +115,7 @@ const struct routing_driver nullrouting_driver = { ext_header_hbh_update, ext_header_srh_update, ext_header_srh_get_next_hop, + link_callback, }; /*---------------------------------------------------------------------------*/ diff --git a/os/net/routing/routing.h b/os/net/routing/routing.h index ec982c9ad..fa0e301af 100644 --- a/os/net/routing/routing.h +++ b/os/net/routing/routing.h @@ -110,6 +110,14 @@ struct routing_driver { * \return 1 if a next hop was found, 0 otherwise */ int (* ext_header_srh_get_next_hop)(uip_ipaddr_t *ipaddr); + /** + * Called by lower layers after every packet transmission + * + * \param addr The link-layer addrress of the packet destination + * \param status The transmission status (see os/net/mac/mac.h) + * \param numtx The total number of transmission attempts + */ + void (* link_callback)(const linkaddr_t *addr, int status, int numtx); }; #endif /* ROUTING_H_ */ diff --git a/os/net/routing/rpl-classic/rpl.c b/os/net/routing/rpl-classic/rpl.c index 6ac987ebf..6fa041eba 100644 --- a/os/net/routing/rpl-classic/rpl.c +++ b/os/net/routing/rpl-classic/rpl.c @@ -383,6 +383,7 @@ const struct routing_driver rpl_classic_driver = { rpl_ext_header_hbh_update, rpl_ext_header_srh_update, rpl_ext_header_srh_get_next_hop, + rpl_link_callback, }; /*---------------------------------------------------------------------------*/ diff --git a/os/net/routing/rpl-lite/rpl.c b/os/net/routing/rpl-lite/rpl.c index 9a27d7262..fe4f87684 100644 --- a/os/net/routing/rpl-lite/rpl.c +++ b/os/net/routing/rpl-lite/rpl.c @@ -205,6 +205,7 @@ const struct routing_driver rpl_lite_driver = { rpl_ext_header_hbh_update, rpl_ext_header_srh_update, rpl_ext_header_srh_get_next_hop, + rpl_link_callback, }; /*---------------------------------------------------------------------------*/