On Tuesday, September 05, 2017 13:51:32 Andrey V. Elsukov
wrote:> You can try to use dtrace to detect that RA is received by IPv6 stack.
> # kldload dtraceall
> # dtrace -n 'fbt::nd6_ra_input:entry {m = (struct mbuf *)arg0; ip6
> (struct ip6_hdr *)m->m_data; printf("RA from %s received on
%s",
> inet_ntoa6(&ip6->ip6_src),
stringof(m->m_pkthdr.rcvif->if_xname));}'
>
> It should produce the output like this:
> dtrace: description 'fbt::nd6_ra_input:entry ' matched 1 probe
> CPU ID FUNCTION:NAME
> 2 37912 nd6_ra_input:entry RA from
> fe80:1::92e2:baff:fe6a:c7c received on ix0
> 2 37912 nd6_ra_input:entry RA from
> fe80:1::92e2:baff:fe6a:c7c received on ix0
>
Thank you Andrey! I started both dtrace and tcpdump, and then ran rtsol;
here's the result:
# rtsol -dD lagg0
checking if lagg0 is ready...
lagg0 is ready
set timer for lagg0 to 0s
New timer is 0s
timer expiration on lagg0, state = 1
send RS on lagg0, whose state is 2
set timer for lagg0 to 4s
New timer is 4s
timer expiration on lagg0, state = 2
send RS on lagg0, whose state is 2
set timer for lagg0 to 4s
New timer is 4s
timer expiration on lagg0, state = 2
send RS on lagg0, whose state is 2
set timer for lagg0 to 1s
New timer is 1s
timer expiration on lagg0, state = 2
No answer after sending 3 RSs
stop timer for lagg0
there is no timer
# tcpdump -tttt -i lagg0 ip6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lagg0, link-type EN10MB (Ethernet), capture size 262144 bytes
2017-09-05 09:30:24.195501 IP6 fe80::ae16:2dff:fe1e:b880 > ff02::2: ICMP6,
router solicitation, length 16
2017-09-05 09:30:24.195573 IP6 fe80::ae16:2dff:fe1e:b880 > ff02::2: ICMP6,
router solicitation, length 16
2017-09-05 09:30:28.199198 IP6 fe80::ae16:2dff:fe1e:b880 > ff02::2: ICMP6,
router solicitation, length 16
2017-09-05 09:30:28.199395 IP6 fe80::ae16:2dff:fe1e:b880 > ff02::2: ICMP6,
router solicitation, length 16
2017-09-05 09:30:28.199724 IP6 fe80:XXXX:XXXX:4013:23::2 >
fe80::ae16:2dff:fe1e:b880: ICMP6, router advertisement, length 64
2017-09-05 09:30:28.199729 IP6 fe80:XXXX:XXXX:4013:23::3 >
fe80::ae16:2dff:fe1e:b880: ICMP6, router advertisement, length 64
2017-09-05 09:30:29.196133 IP6 fe80:XXXX:XXXX:4013:23::2 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
2017-09-05 09:30:29.196369 IP6 fe80:XXXX:XXXX:4013:23::3 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
2017-09-05 09:30:30.196234 IP6 fe80:XXXX:XXXX:4013:23::2 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
2017-09-05 09:30:30.196649 IP6 fe80:XXXX:XXXX:4013:23::3 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
2017-09-05 09:30:31.196341 IP6 fe80:XXXX:XXXX:4013:23::2 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
2017-09-05 09:30:31.196915 IP6 fe80:XXXX:XXXX:4013:23::3 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
2017-09-05 09:30:32.199683 IP6 fe80::ae16:2dff:fe1e:b880 > ff02::2: ICMP6,
router solicitation, length 16
2017-09-05 09:30:32.199746 IP6 fe80::ae16:2dff:fe1e:b880 > ff02::2: ICMP6,
router solicitation, length 16
2017-09-05 09:30:32.200289 IP6 fe80:XXXX:XXXX:4013:23::3 >
fe80::ae16:2dff:fe1e:b880: ICMP6, router advertisement, length 64
2017-09-05 09:30:32.200597 IP6 fe80:XXXX:XXXX:4013:23::2 >
fe80::ae16:2dff:fe1e:b880: ICMP6, router advertisement, length 64
2017-09-05 09:30:37.200331 IP6 fe80:XXXX:XXXX:4013:23::2 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
2017-09-05 09:30:37.212444 IP6 fe80:XXXX:XXXX:4013:23::3 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
2017-09-05 09:30:38.200407 IP6 fe80:XXXX:XXXX:4013:23::2 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
2017-09-05 09:30:38.212714 IP6 fe80:XXXX:XXXX:4013:23::3 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
2017-09-05 09:30:39.200517 IP6 fe80:XXXX:XXXX:4013:23::2 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
2017-09-05 09:30:39.213490 IP6 fe80:XXXX:XXXX:4013:23::3 >
fe80::ae16:2dff:fe1e:b880: ICMP6, neighbor solicitation, who has
fe80::ae16:2dff:fe1e:b880, length 32
^C
22 packets captured
38215 packets received by filter
0 packets dropped by kernel
# dtrace -n 'fbt::nd6_ra_input:entry {m = (struct mbuf *)arg0; ip6 = (struct
ip6_hdr *)m->m_data; printf("RA from %s received on %s",
inet_ntoa6(&ip6->ip6_src),
stringof(m->m_pkthdr.rcvif->if_xname));}'
dtrace: description 'fbt::nd6_ra_input:entry ' matched 1 probe
^C
dtrace saw nothing, yet tcpdump recorded what one would expect. Apparently the
inbound RAs and NSs are not making it through to the IPv6 stack. At this point I
suspect a bug in the Emulex oce(4) driver, or a bad interaction between oce(4)
and lagg(4). I have not seen this issue on hosts with lagg and other NICs. As
soon as I can, I'm going to eliminate lagg and repeat the experiment while
running on just one oce interface. I'll report back with results.
> > $ ping6 fe80:XXXX:XXXX:4013:23::2%lagg0
> > ping6: UDP connect: Network is unreachable
>
> Hmm. Can you show the second word of address in this example?
> Is it not zero? I.e. fe80:XXXX: is correct or you missed '::' part?
>
Correct, neither of the XXXX parts are zero; the :: part is at the end of the
address: ...::2%lagg0. Sorry for the obfuscation, but policy at $WORK about
company information on public lists is very strict.
--
Greg Rivers