[ovs-dev] [PATCH] netdev-dpdk: Bring link down when NETDEV_UP is not set
Ilya Maximets
i.maximets at samsung.com
Wed Nov 7 13:11:02 UTC 2018
> When the netdev link flags are changed, !NETDEV_UP, the DPDK ports are not
> actually going down. This is causing problems for people trying to bring
> down a bond member. The bond link is no longer being used to receive or
> transmit traffic, however, the other end keeps sending data as the link
> remains up.
>
> With OVS 2.6 the link was brought down, and this was changed with commit
> 3b1fb0779. In this commit, it's explicitly mentioned that the link down/up
> DPDK APIs are not called as not all PMD devices support it.
>
> However, this patch does call the appropriate DPDK APIs and ignoring
> errors due to the PMD not supporting it. PMDs not supporting this should
> be fixed in DPDK upstream.
>
> I verified this patch is working correctly using the
> ovs-appctl netdev-dpdk/set-admin-state <port> {up|down} and
> ovs-ofctl mod-port <bridge> <port> {up|down} commands on a XL710
> and 82599ES.
>
> Fixes: 3b1fb0779b87 ("netdev-dpdk: Don't call rte_dev_stop() in update_flags().")
> Signed-off-by: Eelco Chaudron <echaudro at redhat.com>
> ---
> lib/netdev-dpdk.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index 7e0a593..ee8296b 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -2942,10 +2942,26 @@ netdev_dpdk_update_flags__(struct netdev_dpdk *dev,
> }
>
> if (dev->type == DPDK_DEV_ETH) {
> + int err;
> +
> + if (dev->flags & NETDEV_UP) {
> + err = rte_eth_dev_set_link_up(dev->port_id);
> + if (err < 0 && err != -ENOTSUP) {
> + return -err;
Should we restore the flags before returning the error?
Otherwise on the next equal call we'll return 0 without any real changes.
> + }
> + }
> +
> if (dev->flags & NETDEV_PROMISC) {
> rte_eth_promiscuous_enable(dev->port_id);
> }
>
> + if (!(dev->flags & NETDEV_UP)) {
> + err = rte_eth_dev_set_link_down(dev->port_id);
> + if (err < 0 && err != -ENOTSUP) {
> + return -err;
> + }
> + }
> +
> netdev_change_seq_changed(&dev->up);
> } else {
> /* If DPDK_DEV_VHOST device's NETDEV_UP flag was changed and vhost is
More information about the dev
mailing list