X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fsoftnic%2Frte_eth_softnic_flow.c;h=ca70eab6782c38fbb39637c21a24fab381378206;hb=675a6c18746694a8e19a0256b16bd6b3e8dcbfd2;hp=f05ff092fafe4da69731848a38446cecc0c68b03;hpb=538da7a1cad25fbdffe298c8ca76fc4dbd262d1b;p=dpdk.git diff --git a/drivers/net/softnic/rte_eth_softnic_flow.c b/drivers/net/softnic/rte_eth_softnic_flow.c index f05ff092fa..ca70eab678 100644 --- a/drivers/net/softnic/rte_eth_softnic_flow.c +++ b/drivers/net/softnic/rte_eth_softnic_flow.c @@ -169,22 +169,22 @@ flow_item_is_proto(enum rte_flow_item_type type, case RTE_FLOW_ITEM_TYPE_ETH: *mask = &rte_flow_item_eth_mask; - *size = sizeof(struct rte_flow_item_eth); + *size = sizeof(struct rte_ether_hdr); return 1; /* TRUE */ case RTE_FLOW_ITEM_TYPE_VLAN: *mask = &rte_flow_item_vlan_mask; - *size = sizeof(struct rte_flow_item_vlan); + *size = sizeof(struct rte_vlan_hdr); return 1; case RTE_FLOW_ITEM_TYPE_IPV4: *mask = &rte_flow_item_ipv4_mask; - *size = sizeof(struct rte_flow_item_ipv4); + *size = sizeof(struct rte_ipv4_hdr); return 1; case RTE_FLOW_ITEM_TYPE_IPV6: *mask = &rte_flow_item_ipv6_mask; - *size = sizeof(struct rte_flow_item_ipv6); + *size = sizeof(struct rte_ipv6_hdr); return 1; case RTE_FLOW_ITEM_TYPE_ICMP: @@ -1166,6 +1166,7 @@ flow_rule_action_get(struct pmd_internals *softnic, { struct softnic_table_action_profile *profile; struct softnic_table_action_profile_params *params; + struct softnic_mtr_meter_policy *policy; int n_jump_queue_rss_drop = 0; int n_count = 0; int n_mark = 0; @@ -1447,13 +1448,6 @@ flow_rule_action_get(struct pmd_internals *softnic, action, "COUNT: Null configuration"); - if (conf->shared) - return rte_flow_error_set(error, - ENOTSUP, - RTE_FLOW_ERROR_TYPE_ACTION_CONF, - conf, - "COUNT: Shared counters not supported"); - if (n_count) return rte_flow_error_set(error, ENOTSUP, @@ -1621,15 +1615,25 @@ flow_rule_action_get(struct pmd_internals *softnic, return -1; } } - + /* Meter policy must exist */ + policy = softnic_mtr_meter_policy_find(softnic, + m->params.meter_policy_id); + if (policy == NULL) { + rte_flow_error_set(error, + EINVAL, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, + "METER: fail to find meter policy"); + return -1; + } /* RTE_TABLE_ACTION_METER */ rule_action->mtr.mtr[0].meter_profile_id = meter_profile_id; rule_action->mtr.mtr[0].policer[RTE_COLOR_GREEN] = - softnic_table_action_policer(m->params.action[RTE_COLOR_GREEN]); + policy->policer[RTE_COLOR_GREEN]; rule_action->mtr.mtr[0].policer[RTE_COLOR_YELLOW] = - softnic_table_action_policer(m->params.action[RTE_COLOR_YELLOW]); + policy->policer[RTE_COLOR_YELLOW]; rule_action->mtr.mtr[0].policer[RTE_COLOR_RED] = - softnic_table_action_policer(m->params.action[RTE_COLOR_RED]); + policy->policer[RTE_COLOR_RED]; rule_action->mtr.tc_mask = 1; rule_action->action_mask |= 1 << RTE_TABLE_ACTION_MTR; break; @@ -2196,7 +2200,8 @@ pmd_flow_flush(struct rte_eth_dev *dev, void *temp; int status; - TAILQ_FOREACH_SAFE(flow, &table->flows, node, temp) { + RTE_TAILQ_FOREACH_SAFE(flow, &table->flows, node, + temp) { /* Rule delete. */ status = softnic_pipeline_table_rule_delete (softnic,