[ovs-dev] [PATCH 18/62] netdev-offload-dpdk.c: add flag to exclude multicast scenario
Tao YunXiang
taoyunxiang at cmss.chinamobile.com
Mon Dec 28 09:24:36 UTC 2020
From: Liuchang <liuchang at cmss.chinamobile.com>
Code Source From: Self Code
Description:
Now we can only offload unicast flow,so we should seperate
these pkts before offloading
Jira: #[Optional]
市场项目编号(名称):[Optional]
---
lib/netdev-offload-dpdk.c | 12 +++++++++++-
lib/netdev-offload.h | 1 +
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index 7d34870..970eada 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -1201,9 +1201,13 @@ parse_clone_actions(struct netdev *netdev,
continue;
}
} else if (clone_type == OVS_ACTION_ATTR_OUTPUT) {
- if (add_output_action(netdev, actions, ca,info)) {
+ if (add_output_action(netdev, actions, ca, info)) {
+ return -1;
+ } else if (info->valid_ucast) {
+ VLOG_DBG_RL(&rl, "Unsupported multicast output action");
return -1;
}
+ info->valid_ucast = true;
} else if (clone_type == OVS_ACTION_ATTR_PUSH_VLAN) {
const struct ovs_action_push_vlan *vlan = nl_attr_get(ca);
struct rte_flow_action_of_push_vlan *vlan_tci;
@@ -1235,14 +1239,20 @@ parse_flow_actions(struct netdev *netdev,
struct nlattr *nla;
size_t left;
uint8_t i = 0;
+
add_count_action(actions);
NL_ATTR_FOR_EACH_UNSAFE (nla, left, nl_actions, nl_actions_len) {
+
VLOG_DBG("TIMO:action type %0d:%d",i++,nl_attr_type(nla));
if (nl_attr_type(nla) == OVS_ACTION_ATTR_OUTPUT) {
if (add_output_action(netdev, actions, nla, info)) {
return -1;
+ } else if (info->valid_ucast) {
+ VLOG_DBG_RL(&rl, "Unsupported multicast output action");
+ return -1;
}
+ info->valid_ucast = true;
} else if (nl_attr_type(nla) == OVS_ACTION_ATTR_DROP) {
add_flow_action(actions, RTE_FLOW_ACTION_TYPE_DROP, NULL);
} else if (nl_attr_type(nla) == OVS_ACTION_ATTR_SET ||
diff --git a/lib/netdev-offload.h b/lib/netdev-offload.h
index 67504dd..cadbde1 100644
--- a/lib/netdev-offload.h
+++ b/lib/netdev-offload.h
@@ -76,6 +76,7 @@ struct offload_info {
bool tc_modify_flow_deleted; /* Indicate the tc modify flow put success
* to delete the original flow. */
+ bool valid_ucast; /* flag to judge multicast && broadcast */
};
int netdev_flow_flush(struct netdev *);
--
1.8.3.1
More information about the dev
mailing list