Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Sep 2014 20:53:37 +0000 (UTC)
From:      Alan Somers <asomers@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r271825 - in stable/9/sys: net netinet
Message-ID:  <201409182053.s8IKrbBa058668@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: asomers
Date: Thu Sep 18 20:53:36 2014
New Revision: 271825
URL: http://svnweb.freebsd.org/changeset/base/271825

Log:
  MFC r264887, except for the ATF test change.  Also,
  ifa_switch_loopback_route doesn't exist in stable/9, so the relevant change
  to that function went into in_scrubprefix instead.
  
  Fix host and network routes for new interfaces when net.add_addr_allfibs=0
  
  sys/net/route.c
          In rtinit1, use the interface fib instead of the process fib.  The
          latter wasn't very useful because ifconfig(8) is usually invoked
          with the default process fib.  Changing ifconfig(8) to use setfib(2)
          would be redundant, because it already sets the interface fib.
  
  tests/sys/netinet/fibs_test.sh
          Clear the expected ATF failure
  
  sys/net/if.c
          Pass the interface fib in calls to rtrequest1_fib and rtalloc1_fib
  
  sys/netinet/in.c
  sys/net/if_var.h
          Add a fibnum argument to ifa_switch_loopback_route, a subroutine of
          in_scrubprefix.  Pass it the interface fib.
  
  PR:             kern/187549

Modified:
  stable/9/sys/net/if.c
  stable/9/sys/net/route.c
  stable/9/sys/netinet/in.c
Directory Properties:
  stable/9/   (props changed)
  stable/9/sys/   (props changed)
  stable/9/sys/net/   (props changed)

Modified: stable/9/sys/net/if.c
==============================================================================
--- stable/9/sys/net/if.c	Thu Sep 18 20:53:02 2014	(r271824)
+++ stable/9/sys/net/if.c	Thu Sep 18 20:53:36 2014	(r271825)
@@ -1479,7 +1479,7 @@ ifa_add_loopback_route(struct ifaddr *if
 	info.rti_flags = ifa->ifa_flags | RTF_HOST | RTF_STATIC;
 	info.rti_info[RTAX_DST] = ia;
 	info.rti_info[RTAX_GATEWAY] = (struct sockaddr *)&null_sdl;
-	error = rtrequest1_fib(RTM_ADD, &info, &rt, 0);
+	error = rtrequest1_fib(RTM_ADD, &info, &rt, ifa->ifa_ifp->if_fib);
 
 	if (error == 0 && rt != NULL) {
 		RT_LOCK(rt);
@@ -1511,7 +1511,7 @@ ifa_del_loopback_route(struct ifaddr *if
 	info.rti_flags = ifa->ifa_flags | RTF_HOST | RTF_STATIC;
 	info.rti_info[RTAX_DST] = ia;
 	info.rti_info[RTAX_GATEWAY] = (struct sockaddr *)&null_sdl;
-	error = rtrequest1_fib(RTM_DELETE, &info, NULL, 0);
+	error = rtrequest1_fib(RTM_DELETE, &info, NULL, ifa->ifa_ifp->if_fib);
 
 	if (error != 0)
 		log(LOG_INFO, "ifa_del_loopback_route: deletion failed\n");

Modified: stable/9/sys/net/route.c
==============================================================================
--- stable/9/sys/net/route.c	Thu Sep 18 20:53:02 2014	(r271824)
+++ stable/9/sys/net/route.c	Thu Sep 18 20:53:36 2014	(r271825)
@@ -1527,7 +1527,7 @@ rtinit1(struct ifaddr *ifa, int cmd, int
 	}
 	if (fibnum == RT_ALL_FIBS) {
 		if (rt_add_addr_allfibs == 0 && cmd == (int)RTM_ADD) {
-			startfib = endfib = curthread->td_proc->p_fibnum;
+			startfib = endfib = ifa->ifa_ifp->if_fib;
 		} else {
 			startfib = 0;
 			endfib = rt_numfibs - 1;

Modified: stable/9/sys/netinet/in.c
==============================================================================
--- stable/9/sys/netinet/in.c	Thu Sep 18 20:53:02 2014	(r271824)
+++ stable/9/sys/netinet/in.c	Thu Sep 18 20:53:36 2014	(r271825)
@@ -1069,7 +1069,7 @@ in_scrubprefix(struct in_ifaddr *target,
 
 		bzero(&ia_ro, sizeof(ia_ro));
 		*((struct sockaddr_in *)(&ia_ro.ro_dst)) = target->ia_addr;
-		rtalloc_ign_fib(&ia_ro, 0, 0);
+		rtalloc_ign_fib(&ia_ro, 0, fibnum);
 		if ((ia_ro.ro_rt != NULL) && (ia_ro.ro_rt->rt_ifp != NULL) &&
 		    (ia_ro.ro_rt->rt_ifp == V_loif)) {
 			RT_LOCK(ia_ro.ro_rt);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201409182053.s8IKrbBa058668>