From 4cdf2d4819bd2310a6a75324474ef512f7a6e49a Mon Sep 17 00:00:00 2001 From: Simon Duquennoy Date: Sun, 10 Dec 2017 06:10:35 -0800 Subject: [PATCH] Routing API: added ext_header_srh_get_next_hop --- os/net/ipv6/tcpip.c | 7 +------ os/net/routing/nullrouting/nullrouting.c | 9 ++++++++- os/net/routing/routing.h | 7 +++++++ os/net/routing/rpl-classic/rpl.c | 1 + os/net/routing/rpl-lite/rpl.c | 1 + 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/os/net/ipv6/tcpip.c b/os/net/ipv6/tcpip.c index dc2af6174..3c870d433 100644 --- a/os/net/ipv6/tcpip.c +++ b/os/net/ipv6/tcpip.c @@ -95,11 +95,6 @@ enum { PACKET_INPUT }; -#if UIP_CONF_IPV6_RPL && RPL_WITH_NON_STORING -#define NEXTHOP_NON_STORING(addr) rpl_ext_header_srh_get_next_hop(addr) -#else -#define NEXTHOP_NON_STORING(addr) 0 -#endif /*---------------------------------------------------------------------------*/ static void init_appstate(uip_tcp_appstate_t *as, void *state) @@ -525,7 +520,7 @@ get_nexthop(uip_ipaddr_t *addr) LOG_INFO_6ADDR(&UIP_IP_BUF->destipaddr); LOG_INFO_("\n"); - if(NEXTHOP_NON_STORING(addr)) { + if(NETSTACK_ROUTING.ext_header_srh_get_next_hop(addr)) { LOG_INFO("output: selected next hop from SRH: "); LOG_INFO_6ADDR(addr); LOG_INFO_("\n"); diff --git a/os/net/routing/nullrouting/nullrouting.c b/os/net/routing/nullrouting/nullrouting.c index 54e7e62e3..9bcca0e3e 100644 --- a/os/net/routing/nullrouting/nullrouting.c +++ b/os/net/routing/nullrouting/nullrouting.c @@ -74,6 +74,12 @@ ext_header_remove(void) uip_ext_len = 0; } /*---------------------------------------------------------------------------*/ +static int +ext_header_srh_get_next_hop(uip_ipaddr_t *ipaddr) +{ + return 0; +} +/*---------------------------------------------------------------------------*/ const struct routing_driver nullrouting_driver = { "Null Routing", init, @@ -81,7 +87,8 @@ const struct routing_driver nullrouting_driver = { root_start, global_repair, local_repair, - ext_header_remove + ext_header_remove, + ext_header_srh_get_next_hop, }; /*---------------------------------------------------------------------------*/ diff --git a/os/net/routing/routing.h b/os/net/routing/routing.h index e946a2d11..1d00aa106 100644 --- a/os/net/routing/routing.h +++ b/os/net/routing/routing.h @@ -81,6 +81,13 @@ struct routing_driver { * Removes all extension headers that pertain to the routing protocol. */ void (* ext_header_remove)(void); + /** + * Look for next hop from SRH of current uIP packet. + * + * \param ipaddr A pointer to the address where to store the next hop. + * \return 1 if a next hop was found, 0 otherwise + */ + int (* ext_header_srh_get_next_hop)(uip_ipaddr_t *ipaddr); }; #endif /* ROUTING_H_ */ diff --git a/os/net/routing/rpl-classic/rpl.c b/os/net/routing/rpl-classic/rpl.c index 406b693c3..807808e1c 100644 --- a/os/net/routing/rpl-classic/rpl.c +++ b/os/net/routing/rpl-classic/rpl.c @@ -379,6 +379,7 @@ const struct routing_driver rpl_classic_driver = { global_repair, local_repair, rpl_ext_header_remove, + rpl_ext_header_srh_get_next_hop, }; /*---------------------------------------------------------------------------*/ diff --git a/os/net/routing/rpl-lite/rpl.c b/os/net/routing/rpl-lite/rpl.c index 41d39f1de..13e3c820e 100644 --- a/os/net/routing/rpl-lite/rpl.c +++ b/os/net/routing/rpl-lite/rpl.c @@ -201,6 +201,7 @@ const struct routing_driver rpl_lite_driver = { rpl_global_repair, rpl_local_repair, rpl_ext_header_remove, + rpl_ext_header_srh_get_next_hop, }; /*---------------------------------------------------------------------------*/