You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Dirk Ziegelmeier edd4914cf6 Fix MSVC compile warnings in ip6_route_table.c 9 years ago
..
README patch #8680: Add support for LwIP static route table 9 years ago
ip6_route_table.c Fix MSVC compile warnings in ip6_route_table.c 9 years ago
ip6_route_table.h Rename some more index variables to idx 9 years ago

README

A simple routing table implementation for addition, deletion and lookup of IPv6 routes.<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>

APIs are:
1) s8_t ip6_add_route_entry(struct ip6_prefix *ip6_prefix,
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> struct netif *netif,
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> ip6_addr_t *gateway,
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> 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<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>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(..).<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>This API adds the ip6 prefix route into the static route table while
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>keeping all entries sorted in decreasing order of prefix length.
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>Subsequently, a linear search down the list can be performed to retrieve a
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>matching route entry for a Longest Prefix Match.
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>The prefix length is expected to be at an 8-bit boundary. While this is<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>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<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>ip6_find_route_entry() function which returns the index of the found entry.<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>This is used internally by the route lookup function ip6_static_route() API.

-- To fetch the gateway IPv6 address for a specific destination IPv6<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>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<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>
<span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span> <span class="escaped-code-point" data-escaped="[U+00A0]"><span class="char"> </span></span>ip6_get_route_table().