diff --git a/CHANGELOG b/CHANGELOG index 134c3c54..5755d74c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,9 @@ HISTORY ++ New features: + 2016-12-13: Pradip De + * opt.h, ethip6.c: Added LWIP_HOOK_ETHIP6_GET_GW() + 2016-12-09: Dirk Ziegelmeier * ip6_frag.c: Implemented support for LWIP_NETIF_TX_SINGLE_PBUF diff --git a/src/core/ipv6/ethip6.c b/src/core/ipv6/ethip6.c index 509fc1c5..b9bbcce4 100644 --- a/src/core/ipv6/ethip6.c +++ b/src/core/ipv6/ethip6.c @@ -96,6 +96,19 @@ ethip6_output(struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr) /* We have a unicast destination IP address */ /* @todo anycast? */ + +#ifdef LWIP_HOOK_ETHIP6_GET_GW + { + /* See if a gateway is present for the destination address in a routing table */ + const ip6_addr_t *gateway = LWIP_HOOK_ETHIP6_GET_GW(netif, ip6addr); + if (gateway != NULL) { + /* Replace the destination with the gateway. The gateway is + assumed to be on-link. */ + ip6addr = gateway; + } + } +#endif /* LWIP_HOOK_ETHIP6_GET_GW */ + /* Get next hop record. */ i = nd6_get_next_hop_entry(ip6addr, netif); if (i < 0) { diff --git a/src/include/lwip/opt.h b/src/include/lwip/opt.h index 304609be..ceff1fd7 100644 --- a/src/include/lwip/opt.h +++ b/src/include/lwip/opt.h @@ -2433,7 +2433,7 @@ * - dest: the destination IPv4 address * Returns the IPv4 address of the gateway to handle the specified destination * IPv4 address. If NULL is returned, the netif's default gateway is used. - * The returned address MUST be reachable on the specified netif! + * The returned address MUST be directly reachable on the specified netif! * This function is meant to implement advanced IPv4 routing together with * LWIP_HOOK_IP4_ROUTE(). The actual routing/gateway table implementation is * not part of lwIP but can e.g. be hidden in the netif's state argument. @@ -2469,6 +2469,19 @@ #define LWIP_HOOK_IP6_ROUTE(src, dest) #endif +/** +* LWIP_HOOK_ETHIP6_GET_GW(netif, dest): +* - called from ethip6_output() (IPv6) +* - netif: the netif used for sending +* - dest: the destination IPv6 address +* Returns the IPv6 address of the gateway to handle the specified destination +* IPv6 address. If NULL is returned, the default nexthop is used. +* The returned address MUST be directly reachable on the specified netif! +*/ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_ETHIP6_GET_GW(netif, dest) +#endif + /** * LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr): * - called from ethernet_input() if VLAN support is enabled