Re: [dpdk-dev] [PATCH] app/testpmd:vlan filter fail
Hi, Thanks for your review. I got it! Yanglong Wu -Original Message- From: Shahaf Shuler [mailto:shah...@mellanox.com] Sent: Sunday, February 4, 2018 2:27 PM To: Wu, Yanglong ; dev@dpdk.org Cc: Lu, Wenzhuo Subject: RE: [PATCH] app/testpmd:vlan filter fail Hi Wu, Indeed there is an issue here, but this is not the right fix. Friday, February 2, 2018 7:10 AM, Yanglong Wu: > Subject: [PATCH] app/testpmd:vlan filter fail > > Removing out port_conf.rxmode.hw_vlan_filter = 1 will let it equal to > 0 and port_conf.rxmode.offloads is assigned as 0 again if > hw_vlan_filter = 1. So it will always lead to fail for vlan filter > setting > > Fix:0074d02fc(convert to new Rx offloads API) > Signed-off-by: Yanglong Wu > --- > app/test-pmd/testpmd.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index > 5dc8ccac5..0751e573c 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -2328,7 +2328,7 @@ init_port_dcb_config(portid_t pid, > retval = get_eth_dcb_conf(&port_conf, dcb_mode, num_tcs, pfc_en); > if (retval < 0) > return retval; > - port_conf.rxmode.offloads |= DEV_RX_OFFLOAD_VLAN_FILTER; > + port_conf.rxmode.hw_vlan_filter = 1; The VLAN filter resets because the rxmode.ignore_offload_bitfield is not set. If it was set, the ethdev rxmode convert functions would have convert the new flag to the old API (rxmode.hw_vlan_filter). Am not much familiar with this configuration but here is a suggested fix: diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index d8ac43268..caf282386 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2324,6 +2324,8 @@ init_port_dcb_config(portid_t pid, rte_port = &ports[pid]; memset(&port_conf, 0, sizeof(struct rte_eth_conf)); + port_conf.rxmode = rte_port->dev_conf.rxmode; + port_conf.txmode = rte_port->dev_conf.txmode; /* Enter DCB configuration status */ dcb_config = 1; The port_conf for the dcb configuration will inherit the same configuration of the port (which has the ignore_offload_bitfield set). Otherwise, at least the rxmode.ignore_offload_bitfield must be set. > > /** >* Write the configuration into the device. > -- > 2.11.0
Re: [dpdk-dev] [PATCH] app/testpmd:vlan filter fail
Hi Wu, Indeed there is an issue here, but this is not the right fix. Friday, February 2, 2018 7:10 AM, Yanglong Wu: > Subject: [PATCH] app/testpmd:vlan filter fail > > Removing out port_conf.rxmode.hw_vlan_filter = 1 will let it equal to 0 and > port_conf.rxmode.offloads is assigned as 0 again if hw_vlan_filter = 1. So it > will always lead to fail for vlan filter setting > > Fix:0074d02fc(convert to new Rx offloads API) > Signed-off-by: Yanglong Wu > --- > app/test-pmd/testpmd.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index > 5dc8ccac5..0751e573c 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -2328,7 +2328,7 @@ init_port_dcb_config(portid_t pid, > retval = get_eth_dcb_conf(&port_conf, dcb_mode, num_tcs, > pfc_en); > if (retval < 0) > return retval; > - port_conf.rxmode.offloads |= DEV_RX_OFFLOAD_VLAN_FILTER; > + port_conf.rxmode.hw_vlan_filter = 1; The VLAN filter resets because the rxmode.ignore_offload_bitfield is not set. If it was set, the ethdev rxmode convert functions would have convert the new flag to the old API (rxmode.hw_vlan_filter). Am not much familiar with this configuration but here is a suggested fix: diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index d8ac43268..caf282386 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2324,6 +2324,8 @@ init_port_dcb_config(portid_t pid, rte_port = &ports[pid]; memset(&port_conf, 0, sizeof(struct rte_eth_conf)); + port_conf.rxmode = rte_port->dev_conf.rxmode; + port_conf.txmode = rte_port->dev_conf.txmode; /* Enter DCB configuration status */ dcb_config = 1; The port_conf for the dcb configuration will inherit the same configuration of the port (which has the ignore_offload_bitfield set). Otherwise, at least the rxmode.ignore_offload_bitfield must be set. > > /** >* Write the configuration into the device. > -- > 2.11.0
Re: [dpdk-dev] [PATCH] app/testpmd:vlan filter fail
Hi, This patch is wrong, but there is bug absolutely. The problem can be stated as following: in your patch(0074d02fc), @@ -2224,7 +2221,7 @@ init_port_dcb_config(portid_t pid, retval = get_eth_dcb_conf(&port_conf, dcb_mode, num_tcs, pfc_en); if (retval < 0) return retval; - port_conf.rxmode.hw_vlan_filter = 1; + port_conf.rxmode.offloads |= DEV_RX_OFFLOAD_VLAN_FILTER; You remove out port_conf.rxmode.hw_vlan_filter = 1 and assign port_conf.rxmode.offloads directly, so here port_conf.rxmode.hw_vlan_filter will equal to 0 and port_conf.rxmode.offloads will equal to DEV_RX_OFFLOAD_VLAN_FILTER, right? But next in the function rte_eth_dev_configure(pid, 0, 0, &port_conf) --> rte_eth_convert_rx_offload_bitfield , it will assign port_conf.rxmode.offloads according to value of port_conf.rxmode.hw_vlan_filter again. As you remove out port_conf.rxmode.hw_vlan_filter = 1 and it equal to 0 now, port_conf.rxmode.offloads is assigned as 0 again. So it will always lead to fail for vlan filter setting. So I think port_Conf.rxmode.hw_vlan_filter should equeal to 1 and removing out port_conf.rxmode.hw_vlan_filter = 1 will leads it assigning as a wrong number and vlan filter failing. So port_conf.rxmode.hw_vlan_filter = 1 shouldn’t be removed out, do you think so? I will add this line and sent patch again Wu yanglong -Original Message- From: Shahaf Shuler [mailto:shah...@mellanox.com] Sent: Thursday, February 1, 2018 1:58 PM To: Wu, Yanglong ; dev@dpdk.org Cc: Lu, Wenzhuo Subject: RE: [PATCH] app/testpmd:vlan filter fail Thursday, February 1, 2018 3:27 AM, Yanglong Wu: > And-operartion with a constant will > always lead to fail for vlan filter. It will work after dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_VLAN_FILTER , right? I don't understand what this patch tries to fix. > > fix:0074d02fc(convert to new Rx offloads API) > Signed-off-by: Yanglong Wu > --- > lib/librte_ether/rte_ethdev.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lib/librte_ether/rte_ethdev.c > b/lib/librte_ether/rte_ethdev.c index f285ba278..d468bb4a1 100644 > --- a/lib/librte_ether/rte_ethdev.c > +++ b/lib/librte_ether/rte_ethdev.c > @@ -2288,7 +2288,7 @@ rte_eth_dev_vlan_filter(uint16_t port_id, > uint16_t vlan_id, int on) > > RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); > dev = &rte_eth_devices[port_id]; > - if (!(dev->data->dev_conf.rxmode.offloads & > + if (!(dev->data->dev_conf.rxmode.offloads || > DEV_RX_OFFLOAD_VLAN_FILTER)) { > RTE_PMD_DEBUG_TRACE("port %d: vlan-filtering disabled\n", > port_id); > return -ENOSYS; > -- > 2.11.0
Re: [dpdk-dev] [PATCH] app/testpmd:vlan filter fail
Thursday, February 1, 2018 3:27 AM, Yanglong Wu: > And-operartion with a constant will > always lead to fail for vlan filter. It will work after dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_VLAN_FILTER , right? I don't understand what this patch tries to fix. > > fix:0074d02fc(convert to new Rx offloads API) > Signed-off-by: Yanglong Wu > --- > lib/librte_ether/rte_ethdev.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c > index f285ba278..d468bb4a1 100644 > --- a/lib/librte_ether/rte_ethdev.c > +++ b/lib/librte_ether/rte_ethdev.c > @@ -2288,7 +2288,7 @@ rte_eth_dev_vlan_filter(uint16_t port_id, uint16_t > vlan_id, int on) > > RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); > dev = &rte_eth_devices[port_id]; > - if (!(dev->data->dev_conf.rxmode.offloads & > + if (!(dev->data->dev_conf.rxmode.offloads || > DEV_RX_OFFLOAD_VLAN_FILTER)) { > RTE_PMD_DEBUG_TRACE("port %d: vlan-filtering > disabled\n", port_id); > return -ENOSYS; > -- > 2.11.0
Re: [dpdk-dev] [PATCH] app/testpmd:vlan filter fail
01/02/2018 02:26, Yanglong Wu: > And-operartion with a constant will > always lead to fail for vlan filter. > > fix:0074d02fc(convert to new Rx offloads API) > Signed-off-by: Yanglong Wu [...] > --- a/lib/librte_ether/rte_ethdev.c > +++ b/lib/librte_ether/rte_ethdev.c > @@ -2288,7 +2288,7 @@ rte_eth_dev_vlan_filter(uint16_t port_id, uint16_t > vlan_id, int on) > > RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); > dev = &rte_eth_devices[port_id]; > - if (!(dev->data->dev_conf.rxmode.offloads & > + if (!(dev->data->dev_conf.rxmode.offloads || > DEV_RX_OFFLOAD_VLAN_FILTER)) { > RTE_PMD_DEBUG_TRACE("port %d: vlan-filtering disabled\n", > port_id); > return -ENOSYS; This patch is wrong. If you are trying to use VLAN filtering with testpmd, you must enable it with --enable-hw-vlan-filter.