if the autoconf sysctl is off this patch will prevent an interface
from picking up a link local address just because it gets turned
up.. you want a sysctl.conf that looks like

net/ipv6/conf/all/accept_ra=0
net/ipv6/conf/default/accept_ra=0
net/ipv6/conf/lo/accept_ra=0

net/ipv6/conf/all/autoconf=0
net/ipv6/conf/default/autoconf=0

- Patrick McManus <mcmanus@ducksong.com> 4/27/05

Index: net/ipv6/addrconf.c
===================================================================
--- 3608de2fc88b062070a9d197eda9cac1fb9635d3/net/ipv6/addrconf.c  (mode:100644 sha1:7196ac2f2d1688d410e2f51973f90c0118549c63)
+++ uncommitted/net/ipv6/addrconf.c  (mode:100664)
@@ -1855,6 +1855,9 @@
 		printk(KERN_DEBUG "init loopback: add_dev failed\n");
 		return;
 	}
+	
+	if (idev->cnf.autoconf == 0)
+	  return;
 
 	ifp = ipv6_add_addr(idev, &in6addr_loopback, 128, IFA_HOST, IFA_F_PERMANENT);
 	if (!IS_ERR(ifp)) {
@@ -1894,9 +1897,10 @@
 	}
 
 	idev = addrconf_add_dev(dev);
-	if (idev == NULL)
+	if ((idev == NULL) || (idev->cnf.autoconf == 0)) 
 		return;
 
+
 	memset(&addr, 0, sizeof(struct in6_addr));
 	addr.s6_addr32[0] = htonl(0xFE800000);
 
