Added input & route hooks for IPv6 to stay in line with IPv4

This commit is contained in:
sg 2015-03-24 20:33:47 +01:00
parent 86970a01d7
commit 71d121fab2
2 changed files with 35 additions and 0 deletions

View File

@ -83,6 +83,13 @@ ip6_route(const struct ip6_addr *src, const struct ip6_addr *dest)
struct netif *netif; struct netif *netif;
s8_t i; s8_t i;
#ifdef LWIP_HOOK_IP6_ROUTE
netif = LWIP_HOOK_IP6_ROUTE(src, dest);
if (netif != NULL) {
return netif;
}
#endif
/* If single netif configuration, fast return. */ /* If single netif configuration, fast return. */
if ((netif_list != NULL) && (netif_list->next == NULL)) { if ((netif_list != NULL) && (netif_list->next == NULL)) {
if (!netif_is_up(netif_list) || !netif_is_link_up(netif_list)) { if (!netif_is_up(netif_list) || !netif_is_link_up(netif_list)) {
@ -388,6 +395,13 @@ ip6_input(struct pbuf *p, struct netif *inp)
return ERR_OK; return ERR_OK;
} }
#ifdef LWIP_HOOK_IP6_INPUT
if (LWIP_HOOK_IP6_INPUT(p, inp)) {
/* the packet has been eaten */
return ERR_OK;
}
#endif
/* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */ /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */
if ((IP6_HLEN > p->len) || ((IP6H_PLEN(ip6hdr) + IP6_HLEN) > p->tot_len)) { if ((IP6_HLEN > p->len) || ((IP6H_PLEN(ip6hdr) + IP6_HLEN) > p->tot_len)) {
if (IP6_HLEN > p->len) { if (IP6_HLEN > p->len) {

View File

@ -2612,6 +2612,27 @@
* not part of lwIP but can e.g. be hidden in the netif's state argument. * not part of lwIP but can e.g. be hidden in the netif's state argument.
*/ */
/**
* LWIP_HOOK_IP6_INPUT(pbuf, input_netif):
* - called from ip6_input() (IPv6)
* - pbuf: received struct pbuf passed to ip6_input()
* - input_netif: struct netif on which the packet has been received
* Return values:
* - 0: Hook has not consumed the packet, packet is processed as normal
* - != 0: Hook has consumed the packet.
* If the hook consumed the packet, 'pbuf' is in the responsibility of the hook
* (i.e. free it when done).
*/
/**
* LWIP_HOOK_IP6_ROUTE(src, dest):
* - called from ip6_route() (IPv6)
* - src: sourc IPv6 address
* - dest: destination IPv6 address
* Returns the destination netif or NULL if no destination netif is found. In
* that case, ip6_route() continues as normal.
*/
/** /**
* LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr): * LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr):
* - called from ethernet_input() if VLAN support is enabled * - called from ethernet_input() if VLAN support is enabled