[2.4.0test6] IPv6 link-local TCP still slightly broken

From: Felix von Leitner (felix@convergence.de)
Date: Tue Aug 29 2000 - 17:52:59 EST

The application that triggers this problem is npoll (to be found at
http://www.fefe.de/ncp/). Basically, it consists of two parts, npush
and npoll. npush will send IPv6 multicast packets to the network and
npoll will use them to see where it has to connect().

The multicast packets are send out on eth0, and (I had a bug report
about this earlier) the IPv6 scope_id now signals the interface as eth0,

npoll then tries to connect to my own link local address on eth0. This
fails horribly. Here is a tcpdump:

00:14:38.506140 ::1.32796 > fe80::260:67ff:fe33:d15b.8002: S 3266263975:3266263975(0) win 32144 <mss 16084,sackOK,timestamp 276547 0,nop,wscale 0>
00:14:38.506180 fe80::260:67ff:fe33:d15b.8002 > ::1.32796: S 3269115708:3269115708(0) ack 3266263976 win 32144 <mss 16084,sackOK,timestamp 276547 276547,nop,wscale 0>
00:14:38.506191 ::1.32796 > fe80::260:67ff:fe33:d15b.8002: R 3266263976:3266263976(0) win 0
00:14:41.502287 ::1.32796 > fe80::260:67ff:fe33:d15b.8002: S 3266263975:3266263975(0) win 32144 <mss 16084,sackOK,timestamp 276847 0,nop,wscale 0>
00:14:41.502316 fe80::260:67ff:fe33:d15b.8002 > ::1.32796: R 1025851588:1025851588(0) ack 1 win 0

Due to another bug that I haven't isolated yet, the packets are actually
received twice by tcpdump. I edited the duplicates away. Please note
that this traffic was captured off lo, not eth0, so although I specified
eth0 as interface, the SYN packet is sent over lo. And, the source IP
is ::1, the loopback IP.

Apparently, through some major kludge somewhere, the kernel is allowed
to send a packet from an eth0 link-local address to ::1 on lo, but the
receiver code understands that this can't be right and tries to reset
the connection. Please note that the reset is apparently never seen by
the other side, though, so the connect() system call eventually times
out. This is just a dump of the first seconds.

I don't think that "::1" is the proper source address. This should be
changed to fe80::260:67ff:fe33:d15b, my link-local address. Then, the
lo code should be changed to allow packets to and from any of my
link-local addresses.

Any comments? Does this make any sense?
I am not sure if my resubscription on linux-kernel worked (haven't
received a confirmation yet), and I am not subscribed to netdev yet, so
please carbon-copy comments to me. Thanks.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

This archive was generated by hypermail 2b29 : Thu Aug 31 2000 - 21:00:24 EST