Author: melifaro
Date: Thu Apr  2 20:06:37 2020
New Revision: 359580
URL: https://svnweb.freebsd.org/changeset/base/359580
Log:
  Use interface fib for proxyarp checks.
  
  Before the change, proxyarp checks for src and dst addresses
   were performed using default fib, breaking multi-fib scenario.
  
  PR:           245181
  Submitted by: Scott Aitken (original version)
  MFC after:    2 weeks
  Differential Revision:        https://reviews.freebsd.org/D24244

Modified:
  head/sys/netinet/if_ether.c

Modified: head/sys/netinet/if_ether.c
==============================================================================
--- head/sys/netinet/if_ether.c Thu Apr  2 20:02:33 2020        (r359579)
+++ head/sys/netinet/if_ether.c Thu Apr  2 20:06:37 2020        (r359580)
@@ -1044,7 +1044,11 @@ reply:
                (void)memcpy(ar_tha(ah), ar_sha(ah), ah->ar_hln);
                (void)memcpy(ar_sha(ah), enaddr, ah->ar_hln);
        } else {
-               struct llentry *lle = NULL;
+               /*
+                * Destination address is not ours. Check if
+                * proxyarp entry exists or proxyarp is turned on globally.
+                */
+               struct llentry *lle;
 
                sin.sin_addr = itaddr;
                lle = lla_lookup(LLTABLE(ifp), 0, (struct sockaddr *)&sin);
@@ -1061,8 +1065,8 @@ reply:
                        if (!V_arp_proxyall)
                                goto drop;
 
-                       /* XXX MRT use table 0 for arp reply  */
-                       if (fib4_lookup_nh_basic(0, itaddr, 0, 0, &nh4) != 0)
+                       if (fib4_lookup_nh_basic(ifp->if_fib, itaddr, 0, 0,
+                           &nh4) != 0)
                                goto drop;
 
                        /*
@@ -1083,8 +1087,8 @@ reply:
                         * wrong network.
                         */
 
-                       /* XXX MRT use table 0 for arp checks */
-                       if (fib4_lookup_nh_basic(0, isaddr, 0, 0, &nh4) != 0)
+                       if (fib4_lookup_nh_basic(ifp->if_fib, isaddr, 0, 0,
+                           &nh4) != 0)
                                goto drop;
                        if (nh4.nh_ifp != ifp) {
                                ARP_LOG(LOG_INFO, "proxy: ignoring request"
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to