[dpdk-dev] [PATCH v2] ixgbe: support multicast promiscuous mode on VF
Wang, Xiao W
xiao.w.wang at intel.com
Mon Feb 15 09:09:42 CET 2016
Hi,
Best Regards,
Wang, Xiao
> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Wenzhuo Lu
> Sent: Sunday, February 14, 2016 2:25 PM
> To: dev at dpdk.org
> Subject: [dpdk-dev] [PATCH v2] ixgbe: support multicast promiscuous mode on
> VF
>
> Add multicast promiscuous mode support on ixgbe VF driver.
>
> Please note if we want to use this promiscuous mode, we need both PF and VF
> driver to support it. The reason is this VF feature is configged on PF.
> If use kernel PF driver + dpdk VF driver, make sure kernel PF driver support VF
> multicast promiscuous mode. If use dpdk PF + dpdk VF, better make sure PF
> driver is the same version as VF.
>
> V2:
> Update release note.
Maybe it's better to put change log below the "---"
>
> Signed-off-by: Wenzhuo Lu <wenzhuo.lu at intel.com>
> Acked-by: Shaopeng He <shaopeng.he at intel.com>
> ---
> doc/guides/rel_notes/release_16_04.rst | 11 ++++++
> drivers/net/ixgbe/base/ixgbe_mbx.h | 4 +++
> drivers/net/ixgbe/ixgbe_ethdev.c | 66
> ++++++++++++++++++++++++++++++++++
> drivers/net/ixgbe/ixgbe_pf.c | 65
> +++++++++++++++++++++++++++++++++
> 4 files changed, 146 insertions(+)
>
> diff --git a/doc/guides/rel_notes/release_16_04.rst
> b/doc/guides/rel_notes/release_16_04.rst
> index 27fc624..e71d316 100644
> --- a/doc/guides/rel_notes/release_16_04.rst
> +++ b/doc/guides/rel_notes/release_16_04.rst
> @@ -39,6 +39,17 @@ This section should contain new features added in this
> release. Sample format:
>
> Enabled virtio 1.0 support for virtio pmd driver.
>
> +* **Added multicast promiscuous mode support on VF for ixgbe.**
> +
> + Added multicast promiscuous mode support on ixgbe VF driver. So all
> + the VFs can receive the multicast packets.
> +
> + Please note if we want to use this promiscuous mode, we need both PF
> + and VF driver to support it. The reason is this VF feature is configged on PF.
> + If use kernel PF driver + dpdk VF driver, make sure kernel PF driver
> + support VF multicast promiscuous mode. If use dpdk PF + dpdk VF,
> + better make sure PF driver is the same version as VF.
> +
>
> Resolved Issues
> ---------------
> diff --git a/drivers/net/ixgbe/base/ixgbe_mbx.h
> b/drivers/net/ixgbe/base/ixgbe_mbx.h
> index 445df10..4a120a3 100644
> --- a/drivers/net/ixgbe/base/ixgbe_mbx.h
> +++ b/drivers/net/ixgbe/base/ixgbe_mbx.h
> @@ -89,6 +89,7 @@ enum ixgbe_pfvf_api_rev {
> ixgbe_mbox_api_10, /* API version 1.0, linux/freebsd VF driver */
> ixgbe_mbox_api_20, /* API version 2.0, solaris Phase1 VF driver */
> ixgbe_mbox_api_11, /* API version 1.1, linux/freebsd VF driver */
> + ixgbe_mbox_api_12, /* API version 1.2, linux/freebsd VF driver */
> /* This value should always be last */
> ixgbe_mbox_api_unknown, /* indicates that API version is not
> known */
> };
> @@ -107,6 +108,9 @@ enum ixgbe_pfvf_api_rev {
> /* mailbox API, version 1.1 VF requests */
> #define IXGBE_VF_GET_QUEUES 0x09 /* get queue configuration */
>
> +/* mailbox API, version 1.2 VF requests */
> +#define IXGBE_VF_UPDATE_XCAST_MODE 0x0C
> +
> /* GET_QUEUES return data indices within the mailbox */
> #define IXGBE_VF_TX_QUEUES 1 /* number of Tx queues supported */
> #define IXGBE_VF_RX_QUEUES 2 /* number of Rx queues supported */
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> b/drivers/net/ixgbe/ixgbe_ethdev.c
> index 3e6fe86..82ba755 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -138,6 +138,12 @@
>
> #define IXGBE_CYCLECOUNTER_MASK 0xffffffffffffffffULL
>
> +enum ixgbevf_xcast_modes {
> + IXGBEVF_XCAST_MODE_NONE = 0,
> + IXGBEVF_XCAST_MODE_MULTI,
> + IXGBEVF_XCAST_MODE_ALLMULTI,
> +};
> +
> static int eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev); static int
> eth_ixgbe_dev_uninit(struct rte_eth_dev *eth_dev); static int
> ixgbe_dev_configure(struct rte_eth_dev *dev); @@ -237,6 +243,8 @@ static
> int ixgbevf_dev_rx_queue_intr_disable(struct rte_eth_dev *dev, static void
> ixgbevf_set_ivar_map(struct ixgbe_hw *hw, int8_t direction,
> uint8_t queue, uint8_t msix_vector); static
> void ixgbevf_configure_msix(struct rte_eth_dev *dev);
> +static void ixgbevf_dev_allmulticast_enable(struct rte_eth_dev *dev);
> +static void ixgbevf_dev_allmulticast_disable(struct rte_eth_dev *dev);
>
> /* For Eth VMDQ APIs support */
> static int ixgbe_uc_hash_table_set(struct rte_eth_dev *dev, struct @@ -511,6
> +519,8 @@ static const struct eth_dev_ops ixgbevf_eth_dev_ops = {
> .stats_reset = ixgbevf_dev_stats_reset,
> .xstats_reset = ixgbevf_dev_stats_reset,
> .dev_close = ixgbevf_dev_close,
> + .allmulticast_enable = ixgbevf_dev_allmulticast_enable,
> + .allmulticast_disable = ixgbevf_dev_allmulticast_disable,
> .dev_infos_get = ixgbevf_dev_info_get,
> .mtu_set = ixgbevf_dev_set_mtu,
> .vlan_filter_set = ixgbevf_vlan_filter_set,
> @@ -1224,6 +1234,7 @@ ixgbevf_negotiate_api(struct ixgbe_hw *hw)
>
> /* start with highest supported, proceed down */
> static const enum ixgbe_pfvf_api_rev sup_ver[] = {
> + ixgbe_mbox_api_12,
> ixgbe_mbox_api_11,
> ixgbe_mbox_api_10,
> };
> @@ -6191,6 +6202,61 @@ ixgbe_dev_get_dcb_info(struct rte_eth_dev *dev,
> return 0;
> }
>
> +/* ixgbevf_update_xcast_mode - Update Multicast mode
> + * @hw: pointer to the HW structure
> + * @netdev: pointer to net device structure
> + * @xcast_mode: new multicast mode
> + *
> + * Updates the Multicast Mode of VF.
> + */
> +static int ixgbevf_update_xcast_mode(struct ixgbe_hw *hw,
> + int xcast_mode)
> +{
> + struct ixgbe_mbx_info *mbx = &hw->mbx;
> + u32 msgbuf[2];
> + s32 err;
> +
> + switch (hw->api_version) {
> + case ixgbe_mbox_api_12:
> + break;
> + default:
> + return -EOPNOTSUPP;
> + }
> +
> + msgbuf[0] = IXGBE_VF_UPDATE_XCAST_MODE;
> + msgbuf[1] = xcast_mode;
> +
> + err = mbx->ops.write_posted(hw, msgbuf, 2, 0);
> + if (err)
> + return err;
> +
> + err = mbx->ops.read_posted(hw, msgbuf, 2, 0);
Is it more reasonable to read a message of size 1 than 2? Pf side only write 1 word into mbx.
> + if (err)
> + return err;
More information about the dev
mailing list