Skip to content

Commit

Permalink
Broadcast IP route based on source IP address.
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangyanjiaoesp committed Jul 2, 2018
1 parent b55dc99 commit ff18b91
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion src/core/ipv4/ip4.c
Expand Up @@ -121,9 +121,37 @@ ip4_set_default_multicast_netif(struct netif* default_multicast_netif)
#endif /* LWIP_MULTICAST_TX_OPTIONS */

#ifdef LWIP_HOOK_IP4_ROUTE_SRC
#if ESP_LWIP
/**
* Source based IPv4 routing hook function. This function works only
* when destination IP is broadcast IP.
*/
struct netif *
ip4_route_src_hook(const ip4_addr_t *dest, const ip4_addr_t *src)
{
struct netif *netif = NULL;

/* destination IP is broadcast IP? */
if ((src != NULL) && (!ip4_addr_isany(src) || dest->addr == IPADDR_BROADCAST)) {
/* iterate through netifs */
for (netif = netif_list; netif != NULL; netif = netif->next) {
/* is the netif up, does it have a link and a valid address? */
if (netif_is_up(netif) && netif_is_link_up(netif) && !ip4_addr_isany_val(*netif_ip4_addr(netif))) {
/* source IP matches? */
if (ip4_addr_cmp(src, netif_ip4_addr(netif))) {
/* return netif on which to forward IP packet */
return netif;
}
}
}
}
return netif;
}
#endif

/**
* Source based IPv4 routing must be fully implemented in
* LWIP_HOOK_IP4_ROUTE_SRC(). This function only provides he parameters.
* LWIP_HOOK_IP4_ROUTE_SRC(). This function only provides the parameters.
*/
struct netif *
ip4_route_src(const ip4_addr_t *dest, const ip4_addr_t *src)
Expand Down

0 comments on commit ff18b91

Please sign in to comment.