A simple routing table implementation for addition, deletion and lookup of IPv6 routes.ツ APIs are: 1) s8_t ip6_add_route_entry(struct ip6_prefix *ip6_prefix, ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ struct netif *netif, ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ip6_addr_t *gateway, ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ ツ s8_t *index); 2) err_t ip6_remove_route_entry(struct ip6_prefix *ip6_prefix); 3) s8_t ip6_find_route_entry(ip6_addr_t *ip6_dest_addr); 4) struct netif *ip6_static_route(ip6_addr_t *src, ip6_addr_t *dest); 5) ip6_addr_t *ip6_get_gateway(struct netif *netif, ip6_addr_t *dest); 6) struct ip6_route_entry *ip6_get_route_table(void); For route lookup from the table, TheツLWIP_HOOK_IP6_ROUTE hook in ip6_route(..) of ip6.c could be assigned to the ip6_static_route() API of this implementation to return the appropriate netif. -- The application can add routes using the API ip6_add_route_entry(..).ツ ツ ツThis API adds the ip6 prefix route into the static route table while ツ ツkeeping all entries sorted in decreasing order of prefix length. ツ ツSubsequently, a linear search down the list can be performed to retrieve a ツ ツmatching route entry for a Longest Prefix Match. ツ ツThe prefix length is expected to be at an 8-bit boundary. While this isツ ツ ツa limitation, it would serve most practical purposes. -- The application can remove routes using the API ip6_remove_route_entry(..). -- The application can find a route entry for a specific address using theツ ツ ツip6_find_route_entry() function which returns the index of the found entry.ツ ツ ツThis is used internally by the route lookup function ip6_static_route() API. -- To fetch the gateway IPv6 address for a specific destination IPv6ツ ツ ツaddress and target netif, the application can call ip6_get_gateway(..). This API could be assigned to the LWIP_HOOK_ND6_GET_GW() if a gateway has been added as part of the ip6_add_route_entry(). -- To fetch a pointer to the head of the table, the application can callツ ツ ツip6_get_route_table().