[ovs-dev] [PATCH v2 1/2] netdev-dpdk: Add ability to set MAC address.

Ilya Maximets i.maximets at ovn.org
Tue Sep 15 21:41:29 UTC 2020


On 7/7/20 11:18 AM, Gaetan Rivet wrote:
> From: Ilya Maximets <i.maximets at ovn.org>
> 
> It is possible to set MAC address for DPDK ports by calling
> rte_eth_dev_default_mac_addr_set().  For some reason OVS didn't
> use this functionality avoiding real MAC address configuration.
> 
> With this change following command will result in real MAC address
> update on HW NIC:
> 
>   ovs-vsctl set Interface <dpdk interface> mac="xx:xx:xx:xx:xx:xx"

Hi.
Sorry for it took so long for me, but I finally got to these patches.

This commit message is not correct since OVS will not actually use
'mac' column for any ports beside internal ones.
It was written before we foun this behavior and should be re-rwritten.
e.g. "It is possible to set MAC address for DPDK ports by calling
rte_eth_dev_default_mac_addr_set().  OVS doesn't actually call this
function for non-internal ports, but the implementation will be used
in a later commit."

> 
> Signed-off-by: Ilya Maximets <i.maximets at ovn.org>
> Acked-by: Ben Pfaff <blp at ovn.org>
> ---
>  lib/netdev-dpdk.c | 19 ++++++++++++++++---
>  1 file changed, 16 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index 44ebf96da..6324ed96f 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -2913,15 +2913,28 @@ static int
>  netdev_dpdk_set_etheraddr(struct netdev *netdev, const struct eth_addr mac)
>  {
>      struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
> +    int err = 0;
>  
>      ovs_mutex_lock(&dev->mutex);
>      if (!eth_addr_equals(dev->hwaddr, mac)) {
> -        dev->hwaddr = mac;
> -        netdev_change_seq_changed(netdev);
> +        if (dev->type == DPDK_DEV_ETH) {
> +            struct rte_ether_addr ea;
> +
> +            memcpy(ea.addr_bytes, mac.ea, ETH_ADDR_LEN);
> +            err = rte_eth_dev_default_mac_addr_set(dev->port_id, &ea);
> +        }
> +        if (!err) {
> +            dev->hwaddr = mac;
> +            netdev_change_seq_changed(netdev);
> +        } else {
> +            VLOG_WARN("%s: Failed to set requested mac("ETH_ADDR_FMT"): %s",
> +                      netdev_get_name(netdev), ETH_ADDR_ARGS(mac),
> +                      rte_strerror(-err));
> +        }
>      }

It might make sense to move this code to a separate function right away in this
patch, to avoid moving in the next one.

>      ovs_mutex_unlock(&dev->mutex);
>  
> -    return 0;
> +    return -err;
>  }
>  
>  static int
> 



More information about the dev mailing list