i40e: generate MAC address for VF
authorHelin Zhang <helin.zhang@intel.com>
Tue, 8 Mar 2016 06:42:08 +0000 (14:42 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 16 Mar 2016 16:20:10 +0000 (17:20 +0100)
Generate a MAC address for each VF during PF host
initialization.

Signed-off-by: Helin Zhang <helin.zhang@intel.com>
Acked-by: Zhe Tao <zhe.tao@intel.com>
doc/guides/rel_notes/release_16_04.rst
drivers/net/i40e/i40e_ethdev.h
drivers/net/i40e/i40e_pf.c

index 9851dcc..25f4042 100644 (file)
@@ -219,6 +219,11 @@ Drivers
   The driver now set the MDIO clock speed prior to initializing PHY ops and
   again after the MAC reset.
 
+* **i40e: Generated MAC address for each VFs.**
+
+  It generates a MAC address for each VFs during PF host initialization,
+  and keeps the VF MAC address the same among different VF launch.
+
 * **aesni_mb: Fixed wrong return value when creating a device.**
 
   cryptodev_aesni_mb_init() was returning the device id of the device created,
index db6173a..9109cd9 100644 (file)
@@ -312,6 +312,7 @@ struct i40e_pf_vf {
        uint16_t vf_idx; /* VF index in pf->vfs */
        uint16_t lan_nb_qps; /* Actual queues allocated */
        uint16_t reset_cnt; /* Total vf reset times */
+       struct ether_addr mac_addr;  /* Default MAC address */
 };
 
 /*
index cbf4e5b..5790377 100644 (file)
@@ -315,6 +315,8 @@ i40e_pf_host_process_cmd_get_vf_resource(struct i40e_pf_vf *vf)
        /* As assume Vf only has single VSI now, always return 0 */
        vf_res->vsi_res[0].vsi_id = 0;
        vf_res->vsi_res[0].num_queue_pairs = vf->vsi->nb_qps;
+       ether_addr_copy(&vf->mac_addr,
+               (struct ether_addr *)vf_res->vsi_res[0].default_mac_addr);
 
 send_msg:
        i40e_pf_host_send_msg_to_vf(vf, I40E_VIRTCHNL_OP_GET_VF_RESOURCES,
@@ -1045,6 +1047,7 @@ i40e_pf_host_init(struct rte_eth_dev *dev)
                ret = i40e_pf_host_vf_reset(&pf->vfs[i], 0);
                if (ret != I40E_SUCCESS)
                        goto fail;
+               eth_random_addr(pf->vfs[i].mac_addr.addr_bytes);
        }
 
        /* restore irq0 */