Tom Rini | f3f86fd | 2024-10-16 08:10:14 -0600 | [diff] [blame^] | 1 | A simple routing table implementation for addition, deletion and lookup of IPv6 routes. |
| 2 | |
| 3 | APIs are: |
| 4 | 1) s8_t ip6_add_route_entry(struct ip6_prefix *ip6_prefix, |
| 5 | struct netif *netif, |
| 6 | ip6_addr_t *gateway, |
| 7 | s8_t *index); |
| 8 | |
| 9 | 2) err_t ip6_remove_route_entry(struct ip6_prefix *ip6_prefix); |
| 10 | |
| 11 | 3) s8_t ip6_find_route_entry(ip6_addr_t *ip6_dest_addr); |
| 12 | |
| 13 | 4) struct netif *ip6_static_route(ip6_addr_t *src, ip6_addr_t *dest); |
| 14 | |
| 15 | 5) ip6_addr_t *ip6_get_gateway(struct netif *netif, ip6_addr_t *dest); |
| 16 | |
| 17 | 6) struct ip6_route_entry *ip6_get_route_table(void); |
| 18 | |
| 19 | For route lookup from the table, The LWIP_HOOK_IP6_ROUTE hook in ip6_route(..) of ip6.c |
| 20 | could be assigned to the ip6_static_route() API of this implementation to return the |
| 21 | appropriate netif. |
| 22 | |
| 23 | -- The application can add routes using the API ip6_add_route_entry(..). |
| 24 | This API adds the ip6 prefix route into the static route table while |
| 25 | keeping all entries sorted in decreasing order of prefix length. |
| 26 | Subsequently, a linear search down the list can be performed to retrieve a |
| 27 | matching route entry for a Longest Prefix Match. |
| 28 | The prefix length is expected to be at an 8-bit boundary. While this is |
| 29 | a limitation, it would serve most practical purposes. |
| 30 | |
| 31 | -- The application can remove routes using the API ip6_remove_route_entry(..). |
| 32 | |
| 33 | -- The application can find a route entry for a specific address using the |
| 34 | ip6_find_route_entry() function which returns the index of the found entry. |
| 35 | This is used internally by the route lookup function ip6_static_route() API. |
| 36 | |
| 37 | -- To fetch the gateway IPv6 address for a specific destination IPv6 |
| 38 | address and target netif, the application can call ip6_get_gateway(..). |
| 39 | This API could be assigned to the LWIP_HOOK_ND6_GET_GW() if a gateway has |
| 40 | been added as part of the ip6_add_route_entry(). |
| 41 | |
| 42 | -- To fetch a pointer to the head of the table, the application can call |
| 43 | ip6_get_route_table(). |