15/08/2019 17:34, Jerin Jacob Kollanukkaran: > From: Thomas Monjalon > > > > In a virtual environment, the network controller may have to configure some > > SR-IOV VF parameters for security reasons. > > > > When the PF (host port) is drived by DPDK (OVS-DPDK case), we face two > > different cases: > > - driver is bifurcated (Mellanox case), > > so the VF can be configured via the kernel. > > - driver is on top of UIO or VFIO, so DPDK API is required. > > > > This RFC proposes to use generic DPDK API for VF configuration. > > The impacted functions are (can be extended): > > > > - rte_eth_dev_is_valid_port > > - rte_eth_promiscuous_enable > > - rte_eth_promiscuous_disable > > - rte_eth_promiscuous_get > > - rte_eth_allmulticast_enable > > - rte_eth_allmulticast_disable > > - rte_eth_allmulticast_get > > - rte_eth_dev_set_mc_addr_list > > - rte_eth_dev_default_mac_addr_set > > - rte_eth_macaddr_get > > - rte_eth_dev_mac_addr_add > > - rte_eth_dev_mac_addr_remove > > - rte_eth_dev_vlan_filter > > - rte_eth_dev_get_mtu > > - rte_eth_dev_set_mtu > > > > In order to target these functions to a VF (which has no port id in the > > host), > > the higher bit of port id is reserved: > > > > #define RTE_ETH_VF_PORT_FLAG (1 << 15) > > Instead of changing the port number behavior, How about adding a bit field/ > I think, There is no ABI breakage as the parent type of bit field is uint8_t > and there > is still more room. > > --- a/lib/librte_ethdev/rte_ethdev_core.h > +++ b/lib/librte_ethdev/rte_ethdev_core.h > @@ -621,6 +621,7 @@ struct rte_eth_dev_data { > all_multicast : 1, /**< RX all multicast mode ON(1) / OFF(0). > */ > dev_started : 1, /**< Device state: STARTED(1) / > STOPPED(0). */ > lro : 1; /**< RX LRO is ON(1) / OFF(0) */ > + vf : 1; /**< SR-IOV VF device */ > uint8_t rx_queue_state[RTE_MAX_QUEUES_PER_PORT]; > /**< Queues state: STARTED(1) / STOPPED(0). */ > uint8_t tx_queue_state[RTE_MAX_QUEUES_PER_PORT];
Sorry I don't understand how it can help. We need to specify which VF we want to configure. My proposal is to use the representor port, which is connected to a VF. We distinguish the representor and the VF with a flag in the port id parameter passed to the functions.