+ /* Tunnel header match */
+ if (f->type == VNET_FLOW_TYPE_IP4_VXLAN)
+ {
+ u32 vni = f->ip4_vxlan.vni;
+ vxlan_header_t spec_hdr = {
+ .flags = VXLAN_FLAGS_I,
+ .vni_reserved = clib_host_to_net_u32 (vni << 8)
+ };
+ vxlan_header_t mask_hdr = {
+ .flags = 0xff,
+ .vni_reserved = clib_host_to_net_u32 (((u32) - 1) << 8)
+ };
+
+ memset (raw, 0, sizeof raw);
+ raw[0].item.relative = 1;
+ raw[0].item.length = vxlan_hdr_sz;
+
+ clib_memcpy (raw[0].val + raw_sz, &spec_hdr, vxlan_hdr_sz);
+ clib_memcpy (raw[1].val + raw_sz, &mask_hdr, vxlan_hdr_sz);;
+
+ vec_add2 (items, item, 1);
+ item->type = RTE_FLOW_ITEM_TYPE_RAW;
+ item->spec = raw;
+ item->mask = raw + 1;
+ }
+