@@ -5339,8 +5339,9 @@ netdev_dpdk_is_uplink_port(struct netdev *netdev)
dev = netdev_dpdk_cast(netdev);
ovs_mutex_lock(&dev->mutex);
- /*ret = dev->is_uplink_port;*/
- ret = (dev->type == DPDK_DEV_ETH);
+ if (strstr(dev->devargs,"representor=[10")) {
+ ret = true;
+ }
ovs_mutex_unlock(&dev->mutex);
out:
return ret;
@@ -2159,8 +2159,33 @@ netdev_offload_dpdk_flow_get(struct netdev *netdev,
goto out;
}
attrs->dp_layer = "dpdk";
- ret = netdev_dpdk_rte_flow_query_count(netdev, rte_flow_data->rte_flow,
- &query, &error);
+ if (netdev_vport_is_vport_class(netdev->netdev_class)) {
+ struct netdev_flow_dump **netdev_dumps;
+ int num_ports = 0;
+ int i;
+
+ netdev_dumps = netdev_ports_flow_dump_create(netdev->dpif_type,
+ &num_ports);
+ for (i = 0; i < num_ports; i++) {
+ if (!netdev_dpdk_is_uplink_port(netdev_dumps[i]->netdev)) {
+ continue;
+ }
+ ret = netdev_dpdk_rte_flow_query_count(netdev_dumps[i]->netdev, rte_flow_data->rte_flow,
+ &query, &error);
+ break;
+ }
+ for (i = 0; i < num_ports; i++) {
+ int err = netdev_flow_dump_destroy(netdev_dumps[i]);
+
+ if (err != 0 && err != EOPNOTSUPP) {
+ VLOG_ERR("failed dumping netdev: %s", ovs_strerror(err));
+ }
+ }
+
+ } else {
+ ret = netdev_dpdk_rte_flow_query_count(netdev, rte_flow_data->rte_flow,
+ &query, &error);
+ }
if (ret) {
VLOG_DBG_RL(&rl, "%s: Failed to query ufid "UUID_FMT" flow: %p\n",
netdev_get_name(netdev), UUID_ARGS((struct uuid *) ufid),
From: Taoyunxiang <taoyunxiang@cmss.chinamobile.com> Code Source From: Self Code Description: Add flag to distinct between pf and rep port. Jira: #[Optional] 市场项目编号(名称):[Optional] --- lib/netdev-dpdk.c | 5 +++-- lib/netdev-offload-dpdk.c | 29 +++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-)