clib_error_t * dpdk_set_mac_address (vnet_hw_interface_t * hi, char * address) { int error; dpdk_main_t * dm = &dpdk_main; dpdk_device_t * xd = vec_elt_at_index (dm->devices, hi->dev_instance); error=rte_eth_dev_default_mac_addr_set(xd->device_index, (struct ether_addr *) address); if (error) { return clib_error_return (0, "mac address set failed: %d", error); } else { return NULL; } }
static int fs_eth_dev_create(struct rte_vdev_device *vdev) { struct rte_eth_dev *dev; struct ether_addr *mac; struct fs_priv *priv; struct sub_device *sdev; const char *params; unsigned int socket_id; uint8_t i; int ret; dev = NULL; priv = NULL; socket_id = rte_socket_id(); INFO("Creating fail-safe device on NUMA socket %u", socket_id); params = rte_vdev_device_args(vdev); if (params == NULL) { ERROR("This PMD requires sub-devices, none provided"); return -1; } dev = rte_eth_vdev_allocate(vdev, sizeof(*priv)); if (dev == NULL) { ERROR("Unable to allocate rte_eth_dev"); return -1; } priv = PRIV(dev); priv->dev = dev; dev->dev_ops = &failsafe_ops; dev->data->mac_addrs = &PRIV(dev)->mac_addrs[0]; dev->data->dev_link = eth_link; PRIV(dev)->nb_mac_addr = 1; TAILQ_INIT(&PRIV(dev)->flow_list); dev->rx_pkt_burst = (eth_rx_burst_t)&failsafe_rx_burst; dev->tx_pkt_burst = (eth_tx_burst_t)&failsafe_tx_burst; ret = fs_sub_device_alloc(dev, params); if (ret) { ERROR("Could not allocate sub_devices"); goto free_dev; } ret = failsafe_args_parse(dev, params); if (ret) goto free_subs; ret = rte_eth_dev_owner_new(&priv->my_owner.id); if (ret) { ERROR("Failed to get unique owner identifier"); goto free_args; } snprintf(priv->my_owner.name, sizeof(priv->my_owner.name), FAILSAFE_OWNER_NAME); DEBUG("Failsafe port %u owner info: %s_%016"PRIX64, dev->data->port_id, priv->my_owner.name, priv->my_owner.id); ret = rte_eth_dev_callback_register(RTE_ETH_ALL, RTE_ETH_EVENT_NEW, failsafe_eth_new_event_callback, dev); if (ret) { ERROR("Failed to register NEW callback"); goto free_args; } ret = failsafe_eal_init(dev); if (ret) goto unregister_new_callback; ret = fs_mutex_init(priv); if (ret) goto unregister_new_callback; ret = failsafe_hotplug_alarm_install(dev); if (ret) { ERROR("Could not set up plug-in event detection"); goto unregister_new_callback; } mac = &dev->data->mac_addrs[0]; if (failsafe_mac_from_arg) { /* * If MAC address was provided as a parameter, * apply to all probed slaves. */ FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_PROBED) { ret = rte_eth_dev_default_mac_addr_set(PORT_ID(sdev), mac); if (ret) { ERROR("Failed to set default MAC address"); goto cancel_alarm; } } } else {