lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] Multiple IPs and VLAN tagging


From: דור כהן
Subject: [lwip-users] Multiple IPs and VLAN tagging
Date: Sun, 26 Feb 2023 11:48:17 +0200

Hello, 
I am trying to support multiple ips in my embedded application. I have followed what I found out and enabled LWIP_ARP_FILTER_NETIF and implemented LWIP_ARP_FILTER_NETIF_FN as documented.
I also want it to work along VLAN.

Here is my function hook for LWIP_ARP_FILTER_NETIF_FN:


struct netif* find_netif_based_on_dest_ip(struct pbuf *p, u16_t type, struct netif* source_netif){  
  ip4_addr_t dest;
  struct netif* netif;
  s16_t ip_hdr_offset = SIZEOF_ETH_HDR;
 
#if ETHARP_SUPPORT_VLAN
    struct eth_hdr* ethhdr = (struct eth_hdr *)p->payload;
    if ( ethhdr->type == PP_HTONS(ETHTYPE_VLAN)) {
        ip_hdr_offset += SIZEOF_VLAN_HDR;
    }
#endif //ETHARP_SUPPORT_VLAN
  void* temp_pbuf = (u8_t *)p->payload + ip_hdr_offset;
  if(type == PP_HTONS(ETHTYPE_ARP)){
      struct etharp_hdr *ethhdr = (struct etharp_hdr *)temp_pbuf;
      IPADDR2_COPY(&dest, &ethhdr->dipaddr);
  }
  else if(type == PP_HTONS(ETHTYPE_IP)){
    struct ip_hdr *iphdr = (struct ip_hdr *)temp_pbuf;
    ip_addr_copy_from_ip4(dest, iphdr->dest);
  }
  else {
    return source_netif;
  }
 
  for (netif = netif_list; netif != NULL; netif = netif->next) {
        if (netif_is_up(netif) && netif_is_link_up(netif) && !ip4_addr_isany_val(*netif_ip4_addr(netif))) {
            u8_t for_us = (u8_t)ip4_addr_cmp(&dest, netif_ip4_addr(netif));
            if(for_us){
                break;
            }
        }
    }
    return netif == NULL ? source_netif : netif;
}
(pastebin link if you want to read it like a normal person: https://pastebin.com/GdzBJYv2).

Have I missed anything? It seems to work on my minimal setup, but before we start developing our application I thought a quick check with you might help.
Sorry if that is not the right communication method to ask, if not where one might ask?

Thank you!

Dor

reply via email to

[Prev in Thread] Current Thread [Next in Thread]