Created
August 24, 2018 06:58
-
-
Save apoz/637a75d8c56e40111a8e9899bb1f9218 to your computer and use it in GitHub Desktop.
"IPV6 header not found" issue
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
I am facing some -I think- strange problem with IPV6 and QinQ in a Linux host, and may be someone has faced similar problem (or could provide a hint). | |
I have some VMs running in a host (KVM), and every time any VM sends an ICMP6 Router Advertisement, we get the following log in syslog: | |
Aug 10 11:18:36 Hostname kernel: [1722430.045240] IPv6 header not found | |
For the traffic, I use QinQ (802.1Q in both tags), the inner tag is set with OVS in the tap, and the outer is set with a veth of vlan type, in the following way: | |
+-------------------------------------------------------+ | |
| +-----------+ HOST | | |
| | | Unbuntu 16.04 | | |
| | VM-1 | 4.4.0-62-generic | |
| | | | | |
| +----+------+ | | |
| | | | |
| |TAG=1 | | |
| +-----------------------+ | | |
| | OVS | | | |
| +---------+-------------+ | | |
| | veth1.203 | | |
| | | | |
| | | | |
| +veth0 | | |
| +---------------------+ | | |
| | Bridge | | | |
| +-------+-------------+ | | |
| | | | |
| | | | |
| +--+----+ | | |
| |ens11f1| | | |
+-------------------------------------------------------+ | |
'Regular traffic' (non ICMP6) seems to work fine, the problem happens apparently only with the Router Advertisement. | |
I checked the code writing that log, and I think it's in 'kernel/net/ipv6/exthdrs_core.c' | |
if (*offset) { | |
struct ipv6hdr _ip6, *ip6; | |
ip6 = skb_header_pointer(skb, *offset, sizeof(_ip6), &_ip6); | |
if (!ip6 || (ip6->version != 6)) { | |
printk(KERN_ERR "IPv6 header not found\n"); | |
return -EBADMSG; | |
} | |
start = *offset + sizeof(struct ipv6hdr); | |
nexthdr = ip6->nexthdr; | |
} | |
but both the protocol and protocol version seem right in tcpdump: | |
11:28:38.675686 02:00:40:00:21:31 > 33:33:00:00:00:01, ethertype 802.1Q (0x8100), length 158: vlan 203, p 0, ethertype 802.1Q, vlan 49, p 0, ethertype IPv6, fe80::40ff:fe00:2131 > ff02::1: ICMP6, router advertisement, length 96 | |
`....`:...........@...!1................... @...............@.!1..........@.... ........*.. ..!1................*.. ..!1............. '. | |
11:28:39.300076 02:00:40:00:23:2a > 33:33:00:00:00:01, ethertype 802.1Q (0x8100), length 158: vlan 204, p 0, ethertype 802.1Q, vlan 193, p 0, ethertype IPv6, fe80::40ff:fe00:232a > ff02::1: ICMP6, router advertisement, length 96 `....`:...........@...#*...................%@...............@.#*..........@.... ........*.. ..#*................*.. ..#*............. | |
I already disabled (just in case) all the offloading features in the ethernet card. | |
Questions: | |
Is there any way I can verify which packets are dropped? (which packets are causing the 'header not found' log) | |
Is QinQ supported in the kernel? Is there any config param I should change to enable? | |
Any hint what could be the reason? QinQ with ICMP6? | |
Any help/hint is trully appreciated! | |
Regards. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment