All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6 0/4] ice repr functions by DCF
@ 2022-03-02  6:30 Ke Zhang
  2022-03-02  6:30 ` [PATCH v6 1/4] net/ice: add support for setting promisc " Ke Zhang
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Ke Zhang @ 2022-03-02  6:30 UTC (permalink / raw)
  To: dev, qiming.yang, qi.z.zhang; +Cc: Ke Zhang

This feature add some functions associated with representor:
1. DCF is able to configure the VLAN filter for VFs.
2. DCF is able to configure promiscuous mode for VFs
3. Add / Remove VF mac address
4. display VF stats;
5. reset VF stats

Ke Zhang (3):
  net/ice: add support for display/reset stats by DCF
  net/ice: add support for add/remove mac addr by DCF
  net/ice: add support to configure the VLAN filter by DCF

Yiding Zhou (1):
  net/ice: add support for setting promisc by DCF

 drivers/net/ice/ice_dcf_ethdev.h         |   1 +
 drivers/net/ice/ice_dcf_vf_representor.c | 317 +++++++++++++++++++++--
 2 files changed, 300 insertions(+), 18 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v6 1/4] net/ice: add support for setting promisc by DCF
  2022-03-02  6:30 [PATCH v6 0/4] ice repr functions by DCF Ke Zhang
@ 2022-03-02  6:30 ` Ke Zhang
  2022-03-02  9:14   ` David Marchand
  2022-03-02  6:30 ` [PATCH v6 2/4] net/ice: add support for display/reset stats " Ke Zhang
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 6+ messages in thread
From: Ke Zhang @ 2022-03-02  6:30 UTC (permalink / raw)
  To: dev, qiming.yang, qi.z.zhang; +Cc: Yiding Zhou, Ke Zhang

From: Yiding Zhou <yidingx.zhou@intel.com>

allow to enable/disable VFs promisc mode over VF0.
this feature need to update ice kernel driver (newer than v1.8.0)

Signed-off-by: Yiding Zhou <yidingx.zhou@intel.com>
Signed-off-by: Ke Zhang <ke1x.zhang@intel.com>
---
 drivers/net/ice/ice_dcf_vf_representor.c | 56 +++++++++++++++++-------
 1 file changed, 39 insertions(+), 17 deletions(-)

diff --git a/drivers/net/ice/ice_dcf_vf_representor.c b/drivers/net/ice/ice_dcf_vf_representor.c
index b9fcfc80ad..781282f68c 100644
--- a/drivers/net/ice/ice_dcf_vf_representor.c
+++ b/drivers/net/ice/ice_dcf_vf_representor.c
@@ -10,6 +10,20 @@
 #include "ice_dcf_ethdev.h"
 #include "ice_rxtx.h"
 
+static __rte_always_inline struct ice_dcf_hw *
+ice_dcf_vf_repr_hw(struct ice_dcf_vf_repr *repr)
+{
+	struct ice_dcf_adapter *dcf_adapter =
+			repr->dcf_eth_dev->data->dev_private;
+
+	if (!dcf_adapter) {
+		PMD_DRV_LOG(ERR, "DCF for VF representor has been released\n");
+		return NULL;
+	}
+
+	return &dcf_adapter->real_hw;
+}
+
 static uint16_t
 ice_dcf_vf_repr_rx_burst(__rte_unused void *rxq,
 			 __rte_unused struct rte_mbuf **rx_pkts,
@@ -78,15 +92,36 @@ ice_dcf_vf_repr_tx_queue_setup(__rte_unused struct rte_eth_dev *dev,
 }
 
 static int
-ice_dcf_vf_repr_promiscuous_enable(__rte_unused struct rte_eth_dev *ethdev)
+ice_dcf_vf_repr_promiscuous_enable(struct rte_eth_dev *ethdev)
 {
-	return 0;
+	struct ice_dcf_vf_repr *repr = ethdev->data->dev_private;
+	struct dcf_virtchnl_cmd args;
+	struct virtchnl_promisc_info promisc;
+	struct ice_dcf_hw *hw = ice_dcf_vf_repr_hw(repr);
+	memset(&args, 0, sizeof(args));
+	args.v_op = VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE;
+	promisc.flags = 0;
+	promisc.vsi_id = hw->vf_vsi_map[repr->vf_id] & ~VIRTCHNL_DCF_VF_VSI_VALID;
+	promisc.flags |= FLAG_VF_UNICAST_PROMISC;
+	args.req_msg = (uint8_t *)&promisc;
+	args.req_msglen = sizeof(promisc);
+	return ice_dcf_execute_virtchnl_cmd(hw, &args);
 }
 
 static int
-ice_dcf_vf_repr_promiscuous_disable(__rte_unused struct rte_eth_dev *ethdev)
+ice_dcf_vf_repr_promiscuous_disable(struct rte_eth_dev *ethdev)
 {
-	return 0;
+	struct ice_dcf_vf_repr *repr = ethdev->data->dev_private;
+	struct dcf_virtchnl_cmd args;
+	struct virtchnl_promisc_info promisc;
+	struct ice_dcf_hw *hw = ice_dcf_vf_repr_hw(repr);
+	memset(&args, 0, sizeof(args));
+	args.v_op = VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE;
+	promisc.flags = 0;
+	promisc.vsi_id = hw->vf_vsi_map[repr->vf_id] & ~VIRTCHNL_DCF_VF_VSI_VALID;
+	args.req_msg = (uint8_t *)&promisc;
+	args.req_msglen = sizeof(promisc);
+	return ice_dcf_execute_virtchnl_cmd(hw, &args);
 }
 
 static int
@@ -108,19 +143,6 @@ ice_dcf_vf_repr_link_update(__rte_unused struct rte_eth_dev *ethdev,
 	return 0;
 }
 
-static __rte_always_inline struct ice_dcf_hw *
-ice_dcf_vf_repr_hw(struct ice_dcf_vf_repr *repr)
-{
-	struct ice_dcf_adapter *dcf_adapter =
-			repr->dcf_eth_dev->data->dev_private;
-
-	if (!dcf_adapter) {
-		PMD_DRV_LOG(ERR, "DCF for VF representor has been released\n");
-		return NULL;
-	}
-
-	return &dcf_adapter->real_hw;
-}
 
 static int
 ice_dcf_vf_repr_dev_info_get(struct rte_eth_dev *dev,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v6 2/4] net/ice: add support for display/reset stats by DCF
  2022-03-02  6:30 [PATCH v6 0/4] ice repr functions by DCF Ke Zhang
  2022-03-02  6:30 ` [PATCH v6 1/4] net/ice: add support for setting promisc " Ke Zhang
@ 2022-03-02  6:30 ` Ke Zhang
  2022-03-02  6:30 ` [PATCH v6 3/4] net/ice: add support for add/remove mac addr " Ke Zhang
  2022-03-02  6:30 ` [PATCH v6 4/4] net/ice: add support to configure the VLAN filter " Ke Zhang
  3 siblings, 0 replies; 6+ messages in thread
From: Ke Zhang @ 2022-03-02  6:30 UTC (permalink / raw)
  To: dev, qiming.yang, qi.z.zhang; +Cc: Ke Zhang

allow to display/reset VFs stats over VF0.
this feature need to update ice kernel driver (newer than v1.8.0)

Signed-off-by: Ke Zhang <ke1x.zhang@intel.com>
---
 drivers/net/ice/ice_dcf_vf_representor.c | 129 +++++++++++++++++++++++
 1 file changed, 129 insertions(+)

diff --git a/drivers/net/ice/ice_dcf_vf_representor.c b/drivers/net/ice/ice_dcf_vf_representor.c
index 781282f68c..765f5d4c95 100644
--- a/drivers/net/ice/ice_dcf_vf_representor.c
+++ b/drivers/net/ice/ice_dcf_vf_representor.c
@@ -10,6 +10,10 @@
 #include "ice_dcf_ethdev.h"
 #include "ice_rxtx.h"
 
+#define ICE_DCF_REPR_32_BIT_WIDTH (CHAR_BIT * 4)
+#define ICE_DCF_REPR_48_BIT_WIDTH (CHAR_BIT * 6)
+#define ICE_DCF_REPR_48_BIT_MASK  RTE_LEN2MASK(ICE_DCF_REPR_48_BIT_WIDTH, uint64_t)
+
 static __rte_always_inline struct ice_dcf_hw *
 ice_dcf_vf_repr_hw(struct ice_dcf_vf_repr *repr)
 {
@@ -409,6 +413,129 @@ ice_dcf_vf_repr_vlan_tpid_set(struct rte_eth_dev *dev,
 	return 0;
 }
 
+static int
+ice_dcf_repr_query_stats(struct ice_dcf_hw *hw,
+			 uint16_t vf_id, struct virtchnl_eth_stats *pstats)
+{
+	struct virtchnl_queue_select q_stats;
+	struct dcf_virtchnl_cmd args;
+	int err;
+
+	memset(&q_stats, 0, sizeof(q_stats));
+	q_stats.vsi_id = hw->vf_vsi_map[vf_id] & ~VIRTCHNL_DCF_VF_VSI_VALID;
+
+	args.v_op = VIRTCHNL_OP_GET_STATS;
+	args.req_msg = (uint8_t *)&q_stats;
+	args.req_msglen = sizeof(q_stats);
+	args.rsp_msglen = sizeof(struct virtchnl_eth_stats);
+	args.rsp_msgbuf = (uint8_t *)pstats;
+	args.rsp_buflen = sizeof(struct virtchnl_eth_stats);
+
+	err = ice_dcf_execute_virtchnl_cmd(hw, &args);
+	if (err) {
+		PMD_DRV_LOG(ERR, "fail to execute command OP_GET_STATS");
+		return err;
+	}
+
+	return 0;
+}
+
+static int
+ice_dcf_vf_repr_stats_reset(struct rte_eth_dev *dev)
+{
+	struct ice_dcf_vf_repr *repr = dev->data->dev_private;
+	struct ice_dcf_hw *hw = ice_dcf_vf_repr_hw(repr);
+	struct virtchnl_eth_stats pstats;
+	int ret;
+
+	if (hw->resetting)
+		return 0;
+
+	/* read stat values to clear hardware registers */
+	ret = ice_dcf_repr_query_stats(hw, repr->vf_id, &pstats);
+	if (ret != 0)
+		return ret;
+
+	/* set stats offset base on current values */
+	hw->eth_stats_offset = pstats;
+
+	return 0;
+}
+
+static void
+ice_dcf_stat_update_48(uint64_t *offset, uint64_t *stat)
+{
+	if (*stat >= *offset)
+		*stat = *stat - *offset;
+	else
+		*stat = (uint64_t)((*stat +
+			((uint64_t)1 << ICE_DCF_REPR_48_BIT_WIDTH)) - *offset);
+
+	*stat &= ICE_DCF_REPR_48_BIT_MASK;
+}
+
+static void
+ice_dcf_stat_update_32(uint64_t *offset, uint64_t *stat)
+{
+	if (*stat >= *offset)
+		*stat = (uint64_t)(*stat - *offset);
+	else
+		*stat = (uint64_t)((*stat +
+			((uint64_t)1 << ICE_DCF_REPR_32_BIT_WIDTH)) - *offset);
+}
+
+static void
+ice_dcf_update_stats(struct ice_dcf_hw *hw, struct virtchnl_eth_stats *nes)
+{
+	struct virtchnl_eth_stats *oes = &hw->eth_stats_offset;
+
+	ice_dcf_stat_update_48(&oes->rx_bytes, &nes->rx_bytes);
+	ice_dcf_stat_update_48(&oes->rx_unicast, &nes->rx_unicast);
+	ice_dcf_stat_update_48(&oes->rx_multicast, &nes->rx_multicast);
+	ice_dcf_stat_update_48(&oes->rx_broadcast, &nes->rx_broadcast);
+	ice_dcf_stat_update_32(&oes->rx_discards, &nes->rx_discards);
+	ice_dcf_stat_update_48(&oes->tx_bytes, &nes->tx_bytes);
+	ice_dcf_stat_update_48(&oes->tx_unicast, &nes->tx_unicast);
+	ice_dcf_stat_update_48(&oes->tx_multicast, &nes->tx_multicast);
+	ice_dcf_stat_update_48(&oes->tx_broadcast, &nes->tx_broadcast);
+	ice_dcf_stat_update_32(&oes->tx_errors, &nes->tx_errors);
+	ice_dcf_stat_update_32(&oes->tx_discards, &nes->tx_discards);
+}
+
+static int
+ice_dcf_vf_repr_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
+{
+	struct ice_dcf_vf_repr *repr = dev->data->dev_private;
+	struct ice_dcf_hw *hw = ice_dcf_vf_repr_hw(repr);
+	struct virtchnl_eth_stats pstats;
+	int ret;
+
+	if (hw->resetting) {
+		PMD_DRV_LOG(ERR,
+			    "The DCF has been reset by PF, please reinit first");
+		return -EIO;
+	}
+
+	ret = ice_dcf_repr_query_stats(hw, repr->vf_id, &pstats);
+	if (ret == 0) {
+		uint8_t crc_stats_len = (dev->data->dev_conf.rxmode.offloads &
+					 RTE_ETH_RX_OFFLOAD_KEEP_CRC) ? 0 :
+					 RTE_ETHER_CRC_LEN;
+		ice_dcf_update_stats(hw, &pstats);
+		stats->ipackets = pstats.rx_unicast + pstats.rx_multicast +
+				pstats.rx_broadcast - pstats.rx_discards;
+		stats->opackets = pstats.tx_broadcast + pstats.tx_multicast +
+						pstats.tx_unicast;
+		stats->imissed = pstats.rx_discards;
+		stats->oerrors = pstats.tx_errors + pstats.tx_discards;
+		stats->ibytes = pstats.rx_bytes;
+		stats->ibytes -= stats->ipackets * crc_stats_len;
+		stats->obytes = pstats.tx_bytes;
+	} else {
+		PMD_DRV_LOG(ERR, "Get statistics failed, ret:%d", ret);
+	}
+	return ret;
+}
 static const struct eth_dev_ops ice_dcf_vf_repr_dev_ops = {
 	.dev_configure        = ice_dcf_vf_repr_dev_configure,
 	.dev_start            = ice_dcf_vf_repr_dev_start,
@@ -425,6 +552,8 @@ static const struct eth_dev_ops ice_dcf_vf_repr_dev_ops = {
 	.vlan_offload_set     = ice_dcf_vf_repr_vlan_offload_set,
 	.vlan_pvid_set        = ice_dcf_vf_repr_vlan_pvid_set,
 	.vlan_tpid_set        = ice_dcf_vf_repr_vlan_tpid_set,
+	.stats_reset          = ice_dcf_vf_repr_stats_reset,
+	.stats_get            = ice_dcf_vf_repr_stats_get,
 };
 
 int
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v6 3/4] net/ice: add support for add/remove mac addr by DCF
  2022-03-02  6:30 [PATCH v6 0/4] ice repr functions by DCF Ke Zhang
  2022-03-02  6:30 ` [PATCH v6 1/4] net/ice: add support for setting promisc " Ke Zhang
  2022-03-02  6:30 ` [PATCH v6 2/4] net/ice: add support for display/reset stats " Ke Zhang
@ 2022-03-02  6:30 ` Ke Zhang
  2022-03-02  6:30 ` [PATCH v6 4/4] net/ice: add support to configure the VLAN filter " Ke Zhang
  3 siblings, 0 replies; 6+ messages in thread
From: Ke Zhang @ 2022-03-02  6:30 UTC (permalink / raw)
  To: dev, qiming.yang, qi.z.zhang; +Cc: Ke Zhang

allow to add/remove VF's mac addr over VF0.
this feature need to update ice kernel driver (newer than v1.8.0)

Signed-off-by: Ke Zhang <ke1x.zhang@intel.com>
---
 drivers/net/ice/ice_dcf_ethdev.h         |  1 +
 drivers/net/ice/ice_dcf_vf_representor.c | 81 +++++++++++++++++++++++-
 2 files changed, 81 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ice/ice_dcf_ethdev.h b/drivers/net/ice/ice_dcf_ethdev.h
index 11a1305038..ea5c020d61 100644
--- a/drivers/net/ice/ice_dcf_ethdev.h
+++ b/drivers/net/ice/ice_dcf_ethdev.h
@@ -50,6 +50,7 @@ struct ice_dcf_vf_repr {
 	struct rte_ether_addr mac_addr;
 	uint16_t switch_domain_id;
 	uint16_t vf_id;
+	uint16_t mac_num;	  /* Number of MAC addresses */
 
 	struct ice_dcf_vlan outer_vlan_info; /* DCF always handle outer VLAN */
 };
diff --git a/drivers/net/ice/ice_dcf_vf_representor.c b/drivers/net/ice/ice_dcf_vf_representor.c
index 765f5d4c95..8a387461c4 100644
--- a/drivers/net/ice/ice_dcf_vf_representor.c
+++ b/drivers/net/ice/ice_dcf_vf_representor.c
@@ -159,7 +159,7 @@ ice_dcf_vf_repr_dev_info_get(struct rte_eth_dev *dev,
 		return -EIO;
 
 	dev_info->device = dev->device;
-	dev_info->max_mac_addrs = 1;
+	dev_info->max_mac_addrs = ICE_NUM_MACADDR_MAX;
 	dev_info->max_rx_queues = dcf_hw->vsi_res->num_queue_pairs;
 	dev_info->max_tx_queues = dcf_hw->vsi_res->num_queue_pairs;
 	dev_info->min_rx_bufsize = ICE_BUF_SIZE_MIN;
@@ -536,6 +536,82 @@ ice_dcf_vf_repr_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 	}
 	return ret;
 }
+static int
+ice_dcf_repr_add_del_eth_addr(struct ice_dcf_hw *hw,
+			uint16_t vf_id,
+			struct rte_ether_addr *addr,
+			bool add, uint8_t type)
+{
+	struct virtchnl_ether_addr_list *list;
+	struct dcf_virtchnl_cmd args;
+	uint8_t cmd_buffer[sizeof(struct virtchnl_ether_addr_list) +
+			   sizeof(struct virtchnl_ether_addr)];
+	int err;
+
+	list = (struct virtchnl_ether_addr_list *)cmd_buffer;
+	list->vsi_id = hw->vf_vsi_map[vf_id] & ~VIRTCHNL_DCF_VF_VSI_VALID;
+	list->num_elements = 1;
+	list->list[0].type = type;
+	rte_memcpy(list->list[0].addr, addr->addr_bytes,
+	    sizeof(addr->addr_bytes));
+
+	args.v_op = add ? VIRTCHNL_OP_ADD_ETH_ADDR : VIRTCHNL_OP_DEL_ETH_ADDR;
+	args.req_msg = cmd_buffer;
+	args.req_msglen = sizeof(cmd_buffer);
+
+	err = ice_dcf_execute_virtchnl_cmd(hw, &args);
+	if (err) {
+		PMD_DRV_LOG(ERR, "Fail to execute command %s",
+			    add ? "OP_ADD_ETH_ADDR" :  "OP_DEL_ETH_ADDR");
+		return err;
+	}
+
+	return 0;
+}
+
+static int
+ice_dcf_vf_repr_add_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *addr,
+		     __rte_unused uint32_t index,
+		     __rte_unused uint32_t pool)
+{
+	struct ice_dcf_vf_repr *repr = dev->data->dev_private;
+	struct ice_dcf_hw *hw = ice_dcf_vf_repr_hw(repr);
+	int err;
+
+	if (rte_is_zero_ether_addr(addr)) {
+		PMD_DRV_LOG(ERR, "Invalid Ethernet Address");
+		return -EINVAL;
+	}
+
+	err = ice_dcf_repr_add_del_eth_addr(hw, repr->vf_id, addr, true, VIRTCHNL_ETHER_ADDR_EXTRA);
+	if (err) {
+		PMD_DRV_LOG(ERR, "fail to add MAC address");
+		return -EIO;
+	}
+
+	repr->mac_num++;
+
+	return 0;
+}
+
+static void
+ice_dcf_vf_repr_del_mac_addr(struct rte_eth_dev *dev, uint32_t index)
+{
+	struct ice_dcf_vf_repr *repr = dev->data->dev_private;
+	struct ice_dcf_hw *hw = ice_dcf_vf_repr_hw(repr);
+	struct rte_ether_addr *addr;
+	int err;
+
+	addr = &dev->data->mac_addrs[index];
+
+	err = ice_dcf_repr_add_del_eth_addr(hw, repr->vf_id, addr,
+					false, VIRTCHNL_ETHER_ADDR_EXTRA);
+	if (err)
+		PMD_DRV_LOG(ERR, "fail to del MAC address");
+
+	repr->mac_num--;
+}
+
 static const struct eth_dev_ops ice_dcf_vf_repr_dev_ops = {
 	.dev_configure        = ice_dcf_vf_repr_dev_configure,
 	.dev_start            = ice_dcf_vf_repr_dev_start,
@@ -554,6 +630,8 @@ static const struct eth_dev_ops ice_dcf_vf_repr_dev_ops = {
 	.vlan_tpid_set        = ice_dcf_vf_repr_vlan_tpid_set,
 	.stats_reset          = ice_dcf_vf_repr_stats_reset,
 	.stats_get            = ice_dcf_vf_repr_stats_get,
+	.mac_addr_add         = ice_dcf_vf_repr_add_mac_addr,
+	.mac_addr_remove      = ice_dcf_vf_repr_del_mac_addr,
 };
 
 int
@@ -568,6 +646,7 @@ ice_dcf_vf_repr_init(struct rte_eth_dev *vf_rep_eth_dev, void *init_param)
 	repr->outer_vlan_info.port_vlan_ena = false;
 	repr->outer_vlan_info.stripping_ena = false;
 	repr->outer_vlan_info.tpid = RTE_ETHER_TYPE_VLAN;
+	repr->mac_num = 1;
 
 	vf_rep_eth_dev->dev_ops = &ice_dcf_vf_repr_dev_ops;
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v6 4/4] net/ice: add support to configure the VLAN filter by DCF
  2022-03-02  6:30 [PATCH v6 0/4] ice repr functions by DCF Ke Zhang
                   ` (2 preceding siblings ...)
  2022-03-02  6:30 ` [PATCH v6 3/4] net/ice: add support for add/remove mac addr " Ke Zhang
@ 2022-03-02  6:30 ` Ke Zhang
  3 siblings, 0 replies; 6+ messages in thread
From: Ke Zhang @ 2022-03-02  6:30 UTC (permalink / raw)
  To: dev, qiming.yang, qi.z.zhang; +Cc: Ke Zhang

allow to configure the VLAN filter over VF0.
this feature need to update ice kernel driver (newer than v1.8.0)

Signed-off-by: Ke Zhang <ke1x.zhang@intel.com>
---
 drivers/net/ice/ice_dcf_vf_representor.c | 51 ++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/drivers/net/ice/ice_dcf_vf_representor.c b/drivers/net/ice/ice_dcf_vf_representor.c
index 8a387461c4..eca2710735 100644
--- a/drivers/net/ice/ice_dcf_vf_representor.c
+++ b/drivers/net/ice/ice_dcf_vf_representor.c
@@ -612,6 +612,56 @@ ice_dcf_vf_repr_del_mac_addr(struct rte_eth_dev *dev, uint32_t index)
 	repr->mac_num--;
 }
 
+static int
+ice_dcf_add_del_vlan_v2(struct rte_eth_dev *dev, uint16_t vlanid, bool add)
+{
+	struct ice_dcf_vf_repr *repr = dev->data->dev_private;
+	struct ice_dcf_hw *hw = ice_dcf_vf_repr_hw(repr);
+	struct virtchnl_vlan_filter_list_v2 vlan_filter;
+	struct dcf_virtchnl_cmd args;
+	struct virtchnl_vlan *vlan_setting;
+	int err;
+
+	vlan_setting = &vlan_filter.filters[0].outer;
+	memset(&vlan_filter, 0, sizeof(vlan_filter));
+	vlan_filter.vport_id = hw->vf_vsi_map[repr->vf_id] & ~VIRTCHNL_DCF_VF_VSI_VALID;
+	vlan_filter.num_elements = 1;
+	vlan_setting->tpid = RTE_ETHER_TYPE_VLAN;
+	vlan_setting->tci = vlanid;
+
+	memset(&args, 0, sizeof(args));
+	args.v_op = add ? VIRTCHNL_OP_ADD_VLAN_V2 : VIRTCHNL_OP_DEL_VLAN_V2;
+	args.req_msg = (uint8_t *)&vlan_filter;
+	args.req_msglen = sizeof(vlan_filter);
+
+	err = ice_dcf_execute_virtchnl_cmd(hw, &args);
+	if (err) {
+		PMD_DRV_LOG(ERR, "Fail to execute command %s",
+				add ? "OP_ADD_ETH_ADDR" :  "OP_DEL_ETH_ADDR");
+		return err;
+	}
+	return 0;
+}
+
+static int
+ice_dcf_vf_repr_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
+{
+	struct ice_dcf_vf_repr *repr = dev->data->dev_private;
+	int err;
+
+	if (!ice_dcf_vlan_offload_ena(repr)) {
+		PMD_DRV_LOG(ERR, "It is not VLAN_V2");
+		return -ENOTSUP;
+	}
+
+	err = ice_dcf_add_del_vlan_v2(dev, vlan_id, on);
+	if (err) {
+		PMD_DRV_LOG(ERR, "Failed to set vlan filter, err:%d", err);
+		return -ENOTSUP;
+	}
+	return 0;
+}
+
 static const struct eth_dev_ops ice_dcf_vf_repr_dev_ops = {
 	.dev_configure        = ice_dcf_vf_repr_dev_configure,
 	.dev_start            = ice_dcf_vf_repr_dev_start,
@@ -632,6 +682,7 @@ static const struct eth_dev_ops ice_dcf_vf_repr_dev_ops = {
 	.stats_get            = ice_dcf_vf_repr_stats_get,
 	.mac_addr_add         = ice_dcf_vf_repr_add_mac_addr,
 	.mac_addr_remove      = ice_dcf_vf_repr_del_mac_addr,
+	.vlan_filter_set      = ice_dcf_vf_repr_vlan_filter_set,
 };
 
 int
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v6 1/4] net/ice: add support for setting promisc by DCF
  2022-03-02  6:30 ` [PATCH v6 1/4] net/ice: add support for setting promisc " Ke Zhang
@ 2022-03-02  9:14   ` David Marchand
  0 siblings, 0 replies; 6+ messages in thread
From: David Marchand @ 2022-03-02  9:14 UTC (permalink / raw)
  To: Ke Zhang
  Cc: dev, Qiming Yang, Qi Zhang, Yiding Zhou, Yigit, Ferruh, Maxime Coquelin

On Wed, Mar 2, 2022 at 7:35 AM Ke Zhang <ke1x.zhang@intel.com> wrote:
>
> From: Yiding Zhou <yidingx.zhou@intel.com>
>
> allow to enable/disable VFs promisc mode over VF0.
> this feature need to update ice kernel driver (newer than v1.8.0)

I guess v1.8.0 is about the out of tree driver Intel maintains.
If so, please state it clearly.


I had a quick look but I can't find a released v1.8.0 driver.
Is this series aimed at v22.03 or for later dpdk release?


About upstream kernel, is there plans to make it work in the future?
Were non regression tests passed with upstream?

Thanks.

-- 
David Marchand


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-03-02  9:15 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-02  6:30 [PATCH v6 0/4] ice repr functions by DCF Ke Zhang
2022-03-02  6:30 ` [PATCH v6 1/4] net/ice: add support for setting promisc " Ke Zhang
2022-03-02  9:14   ` David Marchand
2022-03-02  6:30 ` [PATCH v6 2/4] net/ice: add support for display/reset stats " Ke Zhang
2022-03-02  6:30 ` [PATCH v6 3/4] net/ice: add support for add/remove mac addr " Ke Zhang
2022-03-02  6:30 ` [PATCH v6 4/4] net/ice: add support to configure the VLAN filter " Ke Zhang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.