+ if (*tun_type == ICE_SW_TUN_PPPOE_PAY &&
+ inner_vlan_valid && outer_vlan_valid)
+ *tun_type = ICE_SW_TUN_PPPOE_PAY_QINQ;
+ else if (*tun_type == ICE_SW_TUN_PPPOE &&
+ inner_vlan_valid && outer_vlan_valid)
+ *tun_type = ICE_SW_TUN_PPPOE_QINQ;
+ else if (*tun_type == ICE_NON_TUN &&
+ inner_vlan_valid && outer_vlan_valid)
+ *tun_type = ICE_NON_TUN_QINQ;
+ else if (*tun_type == ICE_SW_TUN_AND_NON_TUN &&
+ inner_vlan_valid && outer_vlan_valid)
+ *tun_type = ICE_SW_TUN_AND_NON_TUN_QINQ;
+
+ if (pppoe_patt_valid && !pppoe_prot_valid) {
+ if (inner_vlan_valid && outer_vlan_valid && ipv4_valid)
+ *tun_type = ICE_SW_TUN_PPPOE_IPV4_QINQ;
+ else if (inner_vlan_valid && outer_vlan_valid && ipv6_valid)
+ *tun_type = ICE_SW_TUN_PPPOE_IPV6_QINQ;
+ else if (inner_vlan_valid && outer_vlan_valid)
+ *tun_type = ICE_SW_TUN_PPPOE_QINQ;
+ else if (ipv6_valid && udp_valid)
+ *tun_type = ICE_SW_TUN_PPPOE_IPV6_UDP;
+ else if (ipv6_valid && tcp_valid)
+ *tun_type = ICE_SW_TUN_PPPOE_IPV6_TCP;
+ else if (ipv4_valid && udp_valid)
+ *tun_type = ICE_SW_TUN_PPPOE_IPV4_UDP;
+ else if (ipv4_valid && tcp_valid)
+ *tun_type = ICE_SW_TUN_PPPOE_IPV4_TCP;
+ else if (ipv6_valid)
+ *tun_type = ICE_SW_TUN_PPPOE_IPV6;
+ else if (ipv4_valid)
+ *tun_type = ICE_SW_TUN_PPPOE_IPV4;
+ else
+ *tun_type = ICE_SW_TUN_PPPOE;
+ }
+
+ if (*tun_type == ICE_NON_TUN) {
+ if (vxlan_valid)
+ *tun_type = ICE_SW_TUN_VXLAN;
+ else if (nvgre_valid)
+ *tun_type = ICE_SW_TUN_NVGRE;
+ else if (ipv4_valid && tcp_valid)
+ *tun_type = ICE_SW_IPV4_TCP;
+ else if (ipv4_valid && udp_valid)
+ *tun_type = ICE_SW_IPV4_UDP;
+ else if (ipv6_valid && tcp_valid)
+ *tun_type = ICE_SW_IPV6_TCP;
+ else if (ipv6_valid && udp_valid)
+ *tun_type = ICE_SW_IPV6_UDP;
+ }
+
+ if (input_set_byte > MAX_INPUT_SET_BYTE) {
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_ITEM,
+ item,
+ "too much input set");
+ return -ENOTSUP;
+ }
+