Author: ume
Date: Thu Jan 17 16:39:21 2013
New Revision: 245555
URL: http://svnweb.freebsd.org/changeset/base/245555

Log:
  MFC r245230: Add no_prefer_iface option.
  It stops treating the address on the interface as special by source
  address selection rule even when the interface is outgoing interface.
  This is desired in some situation.

Modified:
  stable/9/sbin/ifconfig/af_inet6.c
  stable/9/sbin/ifconfig/af_nd6.c
  stable/9/sbin/ifconfig/ifconfig.8
  stable/9/sys/netinet6/in6_src.c
  stable/9/sys/netinet6/nd6.h
  stable/9/usr.sbin/ndp/ndp.8
  stable/9/usr.sbin/ndp/ndp.c
Directory Properties:
  stable/9/sbin/ifconfig/   (props changed)
  stable/9/sys/   (props changed)
  stable/9/usr.sbin/ndp/   (props changed)

Modified: stable/9/sbin/ifconfig/af_inet6.c
==============================================================================
--- stable/9/sbin/ifconfig/af_inet6.c   Thu Jan 17 16:26:40 2013        
(r245554)
+++ stable/9/sbin/ifconfig/af_inet6.c   Thu Jan 17 16:39:21 2013        
(r245555)
@@ -511,6 +511,8 @@ static struct cmd inet6_cmds[] = {
        DEF_CMD("-prefer_source",-ND6_IFF_PREFER_SOURCE,setnd6flags),
        DEF_CMD("auto_linklocal",ND6_IFF_AUTO_LINKLOCAL,setnd6flags),
        DEF_CMD("-auto_linklocal",-ND6_IFF_AUTO_LINKLOCAL,setnd6flags),
+       DEF_CMD("no_prefer_iface",ND6_IFF_NO_PREFER_IFACE,setnd6flags),
+       DEF_CMD("-no_prefer_iface",-ND6_IFF_NO_PREFER_IFACE,setnd6flags),
        DEF_CMD_ARG("pltime",                           setip6pltime),
        DEF_CMD_ARG("vltime",                           setip6vltime),
        DEF_CMD("eui64",        0,                      setip6eui64),

Modified: stable/9/sbin/ifconfig/af_nd6.c
==============================================================================
--- stable/9/sbin/ifconfig/af_nd6.c     Thu Jan 17 16:26:40 2013        
(r245554)
+++ stable/9/sbin/ifconfig/af_nd6.c     Thu Jan 17 16:39:21 2013        
(r245555)
@@ -58,7 +58,7 @@ static const char rcsid[] =
 #define        MAX_SYSCTL_TRY  5
 #define        ND6BITS "\020\001PERFORMNUD\002ACCEPT_RTADV\003PREFER_SOURCE" \
                "\004IFDISABLED\005DONT_SET_IFROUTE\006AUTO_LINKLOCAL" \
-               "\007NO_RADR\020DEFAULTIF"
+               "\007NO_RADR\010NO_PREFER_IFACE\020DEFAULTIF"
 
 static int isnd6defif(int);
 void setnd6flags(const char *, int, int, const struct afswtch *);

Modified: stable/9/sbin/ifconfig/ifconfig.8
==============================================================================
--- stable/9/sbin/ifconfig/ifconfig.8   Thu Jan 17 16:26:40 2013        
(r245554)
+++ stable/9/sbin/ifconfig/ifconfig.8   Thu Jan 17 16:39:21 2013        
(r245555)
@@ -28,7 +28,7 @@
 .\"     From: @(#)ifconfig.8   8.3 (Berkeley) 1/5/94
 .\" $FreeBSD$
 .\"
-.Dd November 7, 2012
+.Dd January 10, 2013
 .Dt IFCONFIG 8
 .Os
 .Sh NAME
@@ -722,6 +722,13 @@ source address for outgoing packets.
 .It Cm -prefer_source
 Clear a flag
 .Cm prefer_source .
+.It Cm no_prefer_iface
+Set a flag to not prefer address on the interface as candidates of the
+source address for outgoing packets, even when the interface is
+outgoing interface.
+.It Cm -no_prefer_iface
+Clear a flag
+.Cm no_prefer_iface .
 .El
 .Pp
 The following parameters are specific to cloning

Modified: stable/9/sys/netinet6/in6_src.c
==============================================================================
--- stable/9/sys/netinet6/in6_src.c     Thu Jan 17 16:26:40 2013        
(r245554)
+++ stable/9/sys/netinet6/in6_src.c     Thu Jan 17 16:39:21 2013        
(r245555)
@@ -383,10 +383,12 @@ in6_selectsrc(struct sockaddr_in6 *dstso
                 */
 
                /* Rule 5: Prefer outgoing interface */
-               if (ia_best->ia_ifp == ifp && ia->ia_ifp != ifp)
-                       NEXT(5);
-               if (ia_best->ia_ifp != ifp && ia->ia_ifp == ifp)
-                       REPLACE(5);
+               if (!(ND_IFINFO(ifp)->flags & ND6_IFF_NO_PREFER_IFACE)) {
+                       if (ia_best->ia_ifp == ifp && ia->ia_ifp != ifp)
+                               NEXT(5);
+                       if (ia_best->ia_ifp != ifp && ia->ia_ifp == ifp)
+                               REPLACE(5);
+               }
 
                /*
                 * Rule 6: Prefer matching label

Modified: stable/9/sys/netinet6/nd6.h
==============================================================================
--- stable/9/sys/netinet6/nd6.h Thu Jan 17 16:26:40 2013        (r245554)
+++ stable/9/sys/netinet6/nd6.h Thu Jan 17 16:39:21 2013        (r245555)
@@ -86,6 +86,7 @@ struct nd_ifinfo {
 #define ND6_IFF_DONT_SET_IFROUTE       0x10
 #define ND6_IFF_AUTO_LINKLOCAL 0x20
 #define        ND6_IFF_NO_RADR         0x40
+#define ND6_IFF_NO_PREFER_IFACE        0x80 /* XXX: not related to ND. */
 
 #define        ND6_CREATE              LLE_CREATE
 #define        ND6_EXCLUSIVE           LLE_EXCLUSIVE

Modified: stable/9/usr.sbin/ndp/ndp.8
==============================================================================
--- stable/9/usr.sbin/ndp/ndp.8 Thu Jan 17 16:26:40 2013        (r245554)
+++ stable/9/usr.sbin/ndp/ndp.8 Thu Jan 17 16:39:21 2013        (r245555)
@@ -29,7 +29,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd September 2, 2009
+.Dd Jan 10, 2013
 .Dt NDP 8
 .Os
 .\"
@@ -201,6 +201,15 @@ For more details about the entire algori
 selection, see the
 .Pa IMPLEMENTATION
 file supplied with the KAME kit.
+.It Ic no_prefer_iface
+The address on the outgoing interface is preferred by source addess
+selection rule.
+If this flag is set, stop treating the address on the
+.Ar interface
+as special even when the
+.Ar interface
+is outgoing interface.
+The default value of this flag is off.
 .It Ic disabled
 Disable IPv6 operation on the interface.
 When disabled, the interface discards any IPv6 packets

Modified: stable/9/usr.sbin/ndp/ndp.c
==============================================================================
--- stable/9/usr.sbin/ndp/ndp.c Thu Jan 17 16:26:40 2013        (r245554)
+++ stable/9/usr.sbin/ndp/ndp.c Thu Jan 17 16:39:21 2013        (r245555)
@@ -1011,6 +1011,9 @@ ifinfo(ifname, argc, argv)
 #ifdef ND6_IFF_PREFER_SOURCE
                SETFLAG("prefer_source", ND6_IFF_PREFER_SOURCE);
 #endif
+#ifdef ND6_IFF_NO_PREFER_IFACE
+               SETFLAG("no_prefer_iface", ND6_IFF_NO_PREFER_IFACE);
+#endif
                SETVALUE("basereachable", ND.basereachable);
                SETVALUE("retrans", ND.retrans);
                SETVALUE("curhlim", ND.chlim);
@@ -1088,6 +1091,10 @@ ifinfo(ifname, argc, argv)
                if ((ND.flags & ND6_IFF_PREFER_SOURCE))
                        printf("prefer_source ");
 #endif
+#ifdef ND6_IFF_NO_PREFER_IFACE
+               if ((ND.flags & ND6_IFF_NO_PREFER_IFACE))
+                       printf("no_prefer_iface ");
+#endif
        }
        putc('\n', stdout);
 #undef ND
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to