Re: in6_unlink_ifa: interface address has no prefix

2013-06-12 Thread Alexander Bluhm
On Wed, Jun 12, 2013 at 12:19:30PM +0100, Stuart Henderson wrote:
> 3. the reason for in6_unlink_ifa being called at all is because
> in6_ifattach_loopback automatically tries to add in6addr_loopback to a
> newly created lo interface, which is the wrong thing to do in the case
> of multiple lo(4) interfaces.
> 
> In the v4 case, 127.0.0.1 is set on the interface explicitly by /etc/netstart;
> v6 should probably do the same.

I don't think so.  Many things that are handled by userland in IPv4
are done by the kernel in IPv6.  These are autoconfiguration, and
link-local addresses, and the ::1 address.  Like it or not, this
is part of the idea.

There are just bugs and unimplemented cases in our stack.  Look at
these comments in netinet6/in6_ifattach.c .

 * XXX multiple loopback interface needs more care.  for instance,
 * nodelocal address needs to be configured onto only one of them.
 * XXX multiple link-local address case

 * assign loopback address for loopback interface.
 * XXX multiple loopback interface case.

bluhm



Re: in6_unlink_ifa: interface address has no prefix

2013-06-12 Thread Martin Pieuchot
On 12/06/13(Wed) 12:19, Stuart Henderson wrote:
> On 2013/06/12 12:51, Martin Pieuchot wrote:
> > On 10/06/13(Mon) 02:05, Alexander Bluhm wrote:
> > > On Sun, Jun 09, 2013 at 06:34:27PM +0200, Christopher Zimmermann wrote:
> > > > inet 172.26.153.50 0xff00 NONE mtu 1398
> > > > 
> > > > in6_unlink_ifa: interface address 0x80624a00 has no prefix
> > > > in6_unlink_ifa: interface address 0x80624a00 has no prefix
> > > 
> > > The error message is triggered by ifconfig lo1 create up.  With
> > > address instead of pointer logging and sysctl net.inet6.icmp6.nd6_debug=1
> > > you see the source of the problem.
> > > 
> > > in6_unlink_ifa: interface address ::0001 has no prefix
> > > in6_ifattach_loopback: failed to configure the loopback address on lo1 
> > > (errno=17)
> > > 
> > > It is a different issue that creating lo1 tries to add a ::1 address.
> > > But when this fails, it is correct that it has no prefix.  So don't
> > > log an error here.
> 
> Diff is OK sthen.
> 
> > I'm not sure to understand here, you're saying that is it correct that
> > lo1 has no prefix because it is a loopback interface or because, in
> > this case adding an IPv6 address failed?
> > 
> > Martin
> > 
> 
> Both..
> 
> 1. it is correct that it has no prefix because it's a loopback address, and

Thanks for the explanation, I'm ok with the diff then. 

> 2. in6_unlink_ifa is called on the loopback address, which then complains
> about the adress.
> 
> but also:
> 
> 3. the reason for in6_unlink_ifa being called at all is because
> in6_ifattach_loopback automatically tries to add in6addr_loopback to a
> newly created lo interface, which is the wrong thing to do in the case
> of multiple lo(4) interfaces.
> 
> In the v4 case, 127.0.0.1 is set on the interface explicitly by /etc/netstart;
> v6 should probably do the same.
> 
> 



Re: in6_unlink_ifa: interface address has no prefix

2013-06-12 Thread Stuart Henderson
On 2013/06/12 12:51, Martin Pieuchot wrote:
> On 10/06/13(Mon) 02:05, Alexander Bluhm wrote:
> > On Sun, Jun 09, 2013 at 06:34:27PM +0200, Christopher Zimmermann wrote:
> > > inet 172.26.153.50 0xff00 NONE mtu 1398
> > > 
> > > in6_unlink_ifa: interface address 0x80624a00 has no prefix
> > > in6_unlink_ifa: interface address 0x80624a00 has no prefix
> > 
> > The error message is triggered by ifconfig lo1 create up.  With
> > address instead of pointer logging and sysctl net.inet6.icmp6.nd6_debug=1
> > you see the source of the problem.
> > 
> > in6_unlink_ifa: interface address ::0001 has no prefix
> > in6_ifattach_loopback: failed to configure the loopback address on lo1 
> > (errno=17)
> > 
> > It is a different issue that creating lo1 tries to add a ::1 address.
> > But when this fails, it is correct that it has no prefix.  So don't
> > log an error here.

Diff is OK sthen.

> I'm not sure to understand here, you're saying that is it correct that
> lo1 has no prefix because it is a loopback interface or because, in
> this case adding an IPv6 address failed?
> 
> Martin
> 

Both..

1. it is correct that it has no prefix because it's a loopback address, and

2. in6_unlink_ifa is called on the loopback address, which then complains
about the adress.

but also:

3. the reason for in6_unlink_ifa being called at all is because
in6_ifattach_loopback automatically tries to add in6addr_loopback to a
newly created lo interface, which is the wrong thing to do in the case
of multiple lo(4) interfaces.

In the v4 case, 127.0.0.1 is set on the interface explicitly by /etc/netstart;
v6 should probably do the same.




Re: in6_unlink_ifa: interface address has no prefix

2013-06-12 Thread Martin Pieuchot
On 10/06/13(Mon) 02:05, Alexander Bluhm wrote:
> On Sun, Jun 09, 2013 at 06:34:27PM +0200, Christopher Zimmermann wrote:
> > inet 172.26.153.50 0xff00 NONE mtu 1398
> > 
> > in6_unlink_ifa: interface address 0x80624a00 has no prefix
> > in6_unlink_ifa: interface address 0x80624a00 has no prefix
> 
> The error message is triggered by ifconfig lo1 create up.  With
> address instead of pointer logging and sysctl net.inet6.icmp6.nd6_debug=1
> you see the source of the problem.
> 
> in6_unlink_ifa: interface address ::0001 has no prefix
> in6_ifattach_loopback: failed to configure the loopback address on lo1 
> (errno=17)
> 
> It is a different issue that creating lo1 tries to add a ::1 address.
> But when this fails, it is correct that it has no prefix.  So don't
> log an error here.

I'm not sure to understand here, you're saying that is it correct that
lo1 has no prefix because it is a loopback interface or because, in
this case adding an IPv6 address failed?

Martin



Re: in6_unlink_ifa: interface address has no prefix

2013-06-09 Thread Alexander Bluhm
On Sun, Jun 09, 2013 at 06:34:27PM +0200, Christopher Zimmermann wrote:
> inet 172.26.153.50 0xff00 NONE mtu 1398
> 
> in6_unlink_ifa: interface address 0x80624a00 has no prefix
> in6_unlink_ifa: interface address 0x80624a00 has no prefix

The error message is triggered by ifconfig lo1 create up.  With
address instead of pointer logging and sysctl net.inet6.icmp6.nd6_debug=1
you see the source of the problem.

in6_unlink_ifa: interface address ::0001 has no prefix
in6_ifattach_loopback: failed to configure the loopback address on lo1 
(errno=17)

It is a different issue that creating lo1 tries to add a ::1 address.
But when this fails, it is correct that it has no prefix.  So don't
log an error here.

ok?

bluhm

Index: netinet6/in6.c
===
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/in6.c,v
retrieving revision 1.112
diff -u -p -r1.112 in6.c
--- netinet6/in6.c  31 May 2013 15:04:23 -  1.112
+++ netinet6/in6.c  9 Jun 2013 23:48:08 -
@@ -1238,9 +1238,10 @@ in6_unlink_ifa(struct in6_ifaddr *ia, st
 
/* Release the reference to the base prefix. */
if (ia->ia6_ndpr == NULL) {
-   if (!IN6_IS_ADDR_LINKLOCAL(IA6_IN6(ia)))
+   if (!IN6_IS_ADDR_LINKLOCAL(IA6_IN6(ia)) &&
+   !IN6_IS_ADDR_LOOPBACK(IA6_IN6(ia)))
log(LOG_NOTICE, "in6_unlink_ifa: interface address "
-   "%p has no prefix\n", ia);
+   "%s has no prefix\n", ip6_sprintf(IA6_IN6(ia)));
} else {
ia->ia6_flags &= ~IN6_IFF_AUTOCONF;
if (--ia->ia6_ndpr->ndpr_refcnt == 0)