7 Replies Latest reply on Oct 11, 2017 7:52 PM by Intel Corporation

    "IPV6 header not found" in syslog for QinQ ICMP6 packets

    Andres_Pozo

      Hi all,

       

      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(or bridge, no difference), 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 or Neighbour Discovery.

       

      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 (Intel Corporation Ethernet Controller XL710 for 40GbE QSFP+ (rev 02)).

       

      sysadmin@olnmpep02318n002:~/andres$ ethtool -k enp2s0f1

      Features for enp2s0f1:

      rx-checksumming: off

      tx-checksumming: off

        tx-checksum-ipv4: off

        tx-checksum-ip-generic: off [fixed]

        tx-checksum-ipv6: off

        tx-checksum-fcoe-crc: off [fixed]

        tx-checksum-sctp: off

      scatter-gather: off

        tx-scatter-gather: off

        tx-scatter-gather-fraglist: off [fixed]

      tcp-segmentation-offload: off

        tx-tcp-segmentation: off

        tx-tcp-ecn-segmentation: off

        tx-tcp6-segmentation: off

      udp-fragmentation-offload: off [fixed]

      generic-segmentation-offload: off [requested on]

      generic-receive-offload: on

      large-receive-offload: off [fixed]

      rx-vlan-offload: off

      tx-vlan-offload: off

      ntuple-filters: on

      receive-hashing: on

      highdma: on

      rx-vlan-filter: off

      vlan-challenged: off [fixed]

      tx-lockless: off [fixed]

      netns-local: off [fixed]

      tx-gso-robust: off [fixed]

      tx-fcoe-segmentation: off [fixed]

      tx-gre-segmentation: on

      tx-ipip-segmentation: off [fixed]

      tx-sit-segmentation: off [fixed]

      tx-udp_tnl-segmentation: on

      fcoe-mtu: off [fixed]

      tx-nocache-copy: off

      loopback: off [fixed]

      rx-fcs: off [fixed]

      rx-all: off [fixed]

      tx-vlan-stag-hw-insert: off [fixed]

      rx-vlan-stag-hw-parse: off [fixed]

      rx-vlan-stag-filter: off [fixed]

      l2-fwd-offload: off [fixed]

      busy-poll: off [fixed]

      hw-tc-offload: off [fixed]

       

       

       

      Any help/hint is trully appreciated!

       

       

      Regards,

      Andrés