+ if (!(dev->device_features & (1ULL << VIRTIO_NET_F_MAC)))
+ return -ENOTSUP;
+
+ if (!dev->ops->set_config)
+ return -ENOTSUP;
+
+ ret = dev->ops->set_config(dev, dev->mac_addr,
+ offsetof(struct virtio_net_config, mac),
+ RTE_ETHER_ADDR_LEN);
+ if (ret)
+ PMD_DRV_LOG(ERR, "(%s) Failed to set MAC address in device", dev->path);
+
+ return ret;
+}
+
+int
+virtio_user_dev_get_mac(struct virtio_user_dev *dev)
+{
+ int ret = 0;
+
+ if (!(dev->device_features & (1ULL << VIRTIO_NET_F_MAC)))
+ return -ENOTSUP;
+
+ if (!dev->ops->get_config)
+ return -ENOTSUP;
+
+ ret = dev->ops->get_config(dev, dev->mac_addr,
+ offsetof(struct virtio_net_config, mac),
+ RTE_ETHER_ADDR_LEN);
+ if (ret)
+ PMD_DRV_LOG(ERR, "(%s) Failed to get MAC address from device", dev->path);
+
+ return ret;
+}
+
+static void
+virtio_user_dev_init_mac(struct virtio_user_dev *dev, const char *mac)
+{
+ struct rte_ether_addr cmdline_mac;
+ char buf[RTE_ETHER_ADDR_FMT_SIZE];
+ int ret;