On Wed, 4 May 2016 16:36:31 +0900, Simon Horman wrote: > + /* Packets from user space for execution only have metadata key > + * attributes. OVS_KEY_ATTR_PACKET_ETHERTYPE is then used to specify > + * the starting layer of the packet. Packets with Ethernet headers > + * have this attribute set to 0 > + */ > + if (*attrs & (1ULL << OVS_KEY_ATTR_PACKET_ETHERTYPE)) { > + __be16 eth_type; > + > + if (is_mask) { > + /* Always exact match packet EtherType */ > + eth_type = htons(0xffff); > + } else { > + eth_type = > nla_get_be16(a[OVS_KEY_ATTR_PACKET_ETHERTYPE]); > + is_layer3 = ((eth_type == htons(ETH_P_IP)) || > + (eth_type == htons(ETH_P_IPV6)));
Unknown types need to be rejected, not treated as layer2, otherwise we may run into problems later (with combination of this kernel + newer user space) when we add more types, such as ETH_P_NSH. Jiri