mirror of
https://git.FreeBSD.org/src.git
synced 2024-10-19 02:29:40 +00:00
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. Requested by: hrs Reviewed by: IHANet folks including hrs MFC after: 1 week
This commit is contained in:
parent
744c26b250
commit
164051cea5
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=245230
@ -473,6 +473,8 @@ static struct cmd inet6_cmds[] = {
|
||||
DEF_CMD("-nud", -ND6_IFF_PERFORMNUD, 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),
|
||||
|
@ -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 *);
|
||||
|
@ -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
|
||||
@ -716,6 +716,13 @@ Set a flag to enable Neighbor Unreachability Detection.
|
||||
.It Cm -nud
|
||||
Clear a flag
|
||||
.Cm nud .
|
||||
.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
|
||||
|
@ -383,10 +383,12 @@ in6_selectsrc(struct sockaddr_in6 *dstsock, struct ip6_pktopts *opts,
|
||||
*/
|
||||
|
||||
/* 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
|
||||
|
@ -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
|
||||
|
@ -29,7 +29,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd July 9, 2012
|
||||
.Dd Jan 10, 2013
|
||||
.Dt NDP 8
|
||||
.Os
|
||||
.\"
|
||||
@ -192,6 +192,15 @@ on
|
||||
This flag is set by
|
||||
.Va net.inet6.ip6.auto_linklocal
|
||||
sysctl variable.
|
||||
.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
|
||||
|
@ -981,6 +981,9 @@ ifinfo(ifname, argc, argv)
|
||||
#endif
|
||||
#ifdef ND6_IFF_AUTO_LINKLOCAL
|
||||
SETFLAG("auto_linklocal", ND6_IFF_AUTO_LINKLOCAL);
|
||||
#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);
|
||||
@ -1054,6 +1057,10 @@ ifinfo(ifname, argc, argv)
|
||||
#ifdef ND6_IFF_AUTO_LINKLOCAL
|
||||
if ((ND.flags & ND6_IFF_AUTO_LINKLOCAL))
|
||||
printf("auto_linklocal ");
|
||||
#endif
|
||||
#ifdef ND6_IFF_NO_PREFER_IFACE
|
||||
if ((ND.flags & ND6_IFF_NO_PREFER_IFACE))
|
||||
printf("no_prefer_iface ");
|
||||
#endif
|
||||
}
|
||||
putc('\n', stdout);
|
||||
|
Loading…
Reference in New Issue
Block a user