ICE_FDIR_INSET_VXLAN_IPV4 | \
ICE_INSET_TUN_SCTP_SRC_PORT | ICE_INSET_TUN_SCTP_DST_PORT)
+#define ICE_FDIR_INSET_GTPU_IPV4 (\
+ ICE_INSET_GTPU_TEID)
+
#define ICE_FDIR_INSET_GTPU_EH_IPV4 (\
ICE_INSET_GTPU_TEID | ICE_INSET_GTPU_QFI)
ICE_FDIR_INSET_VXLAN_IPV4_TCP, ICE_INSET_NONE},
{pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp,
ICE_FDIR_INSET_VXLAN_IPV4_SCTP, ICE_INSET_NONE},
+ {pattern_eth_ipv4_gtpu_ipv4, ICE_FDIR_INSET_GTPU_IPV4, ICE_INSET_NONE},
{pattern_eth_ipv4_gtpu_eh_ipv4,
ICE_FDIR_INSET_GTPU_EH_IPV4, ICE_INSET_NONE},
};
case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP:
case ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER:
ICE_FLOW_SET_HDRS(seg, ICE_FLOW_SEG_HDR_GTPU_EH |
+ ICE_FLOW_SEG_HDR_GTPU_IP |
ICE_FLOW_SEG_HDR_IPV4);
break;
default:
mark_spec = actions->conf;
filter->input.fltr_id = mark_spec->id;
+ filter->input.fdid_prio = ICE_FXD_FLTR_QW1_FDID_PRI_ONE;
break;
case RTE_FLOW_ACTION_TYPE_COUNT:
counter_num++;
filter->input.gtpu_data.teid = gtp_spec->teid;
}
+
+ tunnel_type = ICE_FDIR_TUNNEL_TYPE_GTPU;
break;
case RTE_FLOW_ITEM_TYPE_GTP_PSC:
gtp_psc_spec = item->spec;
filter->input.gtpu_data.qfi =
gtp_psc_spec->qfi;
}
-
- tunnel_type = ICE_FDIR_TUNNEL_TYPE_GTPU;
break;
default:
rte_flow_error_set(error, EINVAL,
ret = ice_fdir_parse_pattern(ad, pattern, error, filter);
if (ret)
- return ret;
+ goto error;
input_set = filter->input_set;
if (!input_set || input_set & ~item->input_set_mask) {
rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ITEM_SPEC,
pattern,
"Invalid input set");
- return -rte_errno;
+ ret = -rte_errno;
+ goto error;
}
ret = ice_fdir_parse_action(ad, actions, error, filter);
if (ret)
- return ret;
+ goto error;
*meta = filter;
-
- return 0;
+error:
+ rte_free(item);
+ return ret;
}
static struct ice_flow_parser ice_fdir_parser_os = {