How to enable IPv6 on a subset of interfaces

David Horn dhorn2000 at
Wed Jan 13 00:42:07 UTC 2010

On Tue, Jan 12, 2010 at 4:36 PM, Brett Lee <Brett.Lee at> wrote:
> Hello,
> Using FreeBSD 8.0-RELEASE, and am trying variations in /etc/rc.conf in an
> attempt to enable IPv6 on ONLY one of the systems two interfaces.
> Specifically, em0 should be enabled IPv4 DHCP, and bge0 should be enabled
> IPv6 only.
> From the KAME link below, and the files /etc/network.subr and
> /etc/defaults/rc.conf, am reading that "ipv6_network_interface" should work;
> however the following still results in em0 obtaining IPv6 addresses:
> ifconfig_em0="DHCP"
> ipv6_enable="YES"
> ipv6_network_interface="bge0"
> ipv6_network_interfaces="bge0"
> In another attempt (see link below), it looks like "ifconfig_em0" may
> support a "NOIPV6" param, but in practice it doesn't seem to work for me:
> ifconfig_em0="DHCP NOIPV6"
> ipv6_enable="YES"
> #ipv6_network_interface="bge0"
> #ipv6_network_interfaces="bge0"
> Am hopeful that someone might point out how I could enable this
> configuration.
> Thanks in advance!  -Brett

NOIPV6 is not a valid rc.conf configuration token at this time.

I am assuming that you are using SLAAC for IPv6 prefix/address
distribution (via rtadvd/radvd), and not DHCPv6.

ipv6_network_interfaces is the correct rc.conf(5) variable to use to
specifically control which interface gets configured using SLAAC via
rtsol(8), but will not stop other interfaces from getting the RA
(Router Advertisement) packet which starts IPv6 SLAAC (Stateless

In -current/9.0 there are nice new ifconfig parameters (inet6
ifdisabled -nud -accept_rtadv) and rc.conf variables that do just what
you are looking for, but they are not in 8.0 at this time.

In 8.0 you can use the ndp(8) utility to set the -accept_rtadv (and/or
ifdisabled/nud,etc.) flags on a per-interface basis. The
"-accept_rtadv" flag will disable SLAAC for the specified interface,
but must be called before the interface gets the "RA" packet to be

You can do an ugly *unsupported hack* in 8.0 to call ndp from within
rc.conf/rc.d startup scripts until the new code makes it into a

ifconfig_em0="DHCP `ndp -i em0 ifdisabled -nud -accept_rtadv >/dev/null 2>&1`"

This will cause some boot-time error messages about not finding ndp
(before /usr is mounted), but these can be ignored, as the backticked
ndp line will be run EVERY time that rc.conf is sourced.   This is
just a work-around for 8.0 that happened to work for me at the time.
If someone else has a better solution that fits properly within the
confines of rc.conf, please speak up.

While on the subject, I have been thinking about putting together a
patchset to experiment with adding some improved logic surrounding
using DHCPv6 vs DHPCPv4 vs SLAAC/RTSOL in the rc.conf scripts and
adding M+0 flag support +rdnss (RFC 5006) support to the kernel and
userland and devd.  If I can ever get a working prototype, I will
share to get some feedback.

Good Luck.

---Dave Horn

More information about the freebsd-net mailing list