[Top] [All Lists]

Re: how to suppress link local addresses

To: "netdev@xxxxxxxxxxx" <netdev@xxxxxxxxxxx>
Subject: Re: how to suppress link local addresses
From: Patrick McManus <mcmanus@xxxxxxxxxxxx>
Date: Wed, 27 Apr 2005 23:22:46 -0400
In-reply-to: <>
References: <>
Sender: netdev-bounce@xxxxxxxxxxx
On Wed, 2005-04-27 at 14:33 -0400, patrick mcmanus wrote:

> I've got a 2.6.12-rc2 kernel with IPv6 compiled in monolithically.
> using it on several different boxes and would like them all to run the
> same kernel. Most of the boxes have IPv6 connectivity and are working
> fine.. however one of them is on an IPv4 only net.
> When I bring up an IPv4 interface on that box it also gets an automagic
> ipv6 link-local address as a bonus. I would like to prevent that from
> happening if possible.. I had thought that the conf/*/autoconf sysctl
> should do that for me, but I couldn't get it to work (see my
> illustration below). I'm not certain if that's a bug or I just don't
> understand what that is supposed to do.

It turns out other folks have been here before (isn't that always the

The conventional wisdom then seemed to be "don't load IPv6" or "fix the
userspace app". That strikes me as kind of unsatisfying, it feels like
this should be the sort of thing that is doable by runtime config. But
who am I to argue? I was just fooled by some bad documentation floating
around out there in an (old?) IPv6 on Linux faq on the what the autoconf
sysctl was supposed to do - the state of external documentation
certainly isn't a kernel issue.

For the sake of future googlers I'll include the primitive patch I am
now using locally.

Index: net/ipv6/addrconf.c
--- 3608de2fc88b062070a9d197eda9cac1fb9635d3/net/ipv6/addrconf.c  (mode:100644 
+++ uncommitted/net/ipv6/addrconf.c  (mode:100664)
@@ -1855,6 +1855,9 @@
                printk(KERN_DEBUG "init loopback: add_dev failed\n");
+       if (idev->cnf.autoconf == 0)
+         return;

        ifp = ipv6_add_addr(idev, &in6addr_loopback, 128, IFA_HOST, 
        if (!IS_ERR(ifp)) {
@@ -1894,9 +1897,10 @@

        idev = addrconf_add_dev(dev);
-       if (idev == NULL)
+       if ((idev == NULL) || (idev->cnf.autoconf == 0))

        memset(&addr, 0, sizeof(struct in6_addr));
        addr.s6_addr32[0] = htonl(0xFE800000);

<Prev in Thread] Current Thread [Next in Thread>