- if (!spec_ipv4 && !spec_ipv6) {
- /* Don't care any field of IP header,
- * only care IP protocol.
- * Example: flow create 0 ingress pattern ipv6 /
- */
- /* Eth type is actually used for IP identification.
- */
- /* TODO: Current design only supports Eth + IP,
- * Eth + vLan + IP needs to add.
- */
- struct proto_discrimination proto;
-
- index = dpaa2_flow_extract_search(
- &priv->extract.qos_key_extract.dpkg,
- NET_PROT_ETH, NH_FLD_ETH_TYPE);
- if (index < 0) {
- ret = dpaa2_flow_proto_discrimination_extract(
- &priv->extract.qos_key_extract,
- RTE_FLOW_ITEM_TYPE_ETH);
- if (ret) {
- DPAA2_PMD_ERR(
- "QoS Ext ETH_TYPE to discriminate IP failed.");
-
- return -1;
- }
- local_cfg |= DPAA2_QOS_TABLE_RECONFIGURE;
- }
-
- index = dpaa2_flow_extract_search(
- &priv->extract.tc_key_extract[group].dpkg,
- NET_PROT_ETH, NH_FLD_ETH_TYPE);
- if (index < 0) {
- ret = dpaa2_flow_proto_discrimination_extract(
- &priv->extract.tc_key_extract[group],
- RTE_FLOW_ITEM_TYPE_ETH);
- if (ret) {
- DPAA2_PMD_ERR(
- "FS Ext ETH_TYPE to discriminate IP failed");
-
- return -1;
- }
- local_cfg |= DPAA2_FS_TABLE_RECONFIGURE;
- }
-
- ret = dpaa2_flow_rule_move_ipaddr_tail(flow, priv, group);
- if (ret) {
- DPAA2_PMD_ERR(
- "Move ipaddr before IP discrimination set failed");
- return -1;
- }
-
- proto.type = RTE_FLOW_ITEM_TYPE_ETH;
- if (pattern->type == RTE_FLOW_ITEM_TYPE_IPV4)
- proto.eth_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4);
- else
- proto.eth_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV6);
- ret = dpaa2_flow_proto_discrimination_rule(priv, flow,
- proto, group);
- if (ret) {
- DPAA2_PMD_ERR("IP discrimination rule set failed");
- return -1;
- }
-
- (*device_configured) |= local_cfg;
+ ret = dpaa2_configure_flow_ip_discrimation(priv,
+ flow, pattern, &local_cfg,
+ device_configured, group);
+ if (ret) {
+ DPAA2_PMD_ERR("IP discrimation failed!");
+ return -1;
+ }