[v3,10/10] vdpa/sfc: set a multicast filter during vDPA init
Checks
Commit Message
From: Vijay Kumar Srivastava <vsrivast@xilinx.com>
Insert unknown multicast filter to allow IPv6 neighbor discovery
Signed-off-by: Vijay Kumar Srivastava <vsrivast@xilinx.com>
Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
---
drivers/vdpa/sfc/sfc_vdpa.h | 3 ++-
drivers/vdpa/sfc/sfc_vdpa_filter.c | 19 +++++++++++++++++--
2 files changed, 19 insertions(+), 3 deletions(-)
Comments
> -----Original Message-----
> From: Vijay Srivastava <vijay.srivastava@xilinx.com>
> Sent: Friday, October 29, 2021 10:47 PM
> To: dev@dpdk.org
> Cc: maxime.coquelin@redhat.com; Xia, Chenbo <chenbo.xia@intel.com>;
> andrew.rybchenko@oktetlabs.ru; Vijay Kumar Srivastava <vsrivast@xilinx.com>
> Subject: [PATCH v3 10/10] vdpa/sfc: set a multicast filter during vDPA init
>
> From: Vijay Kumar Srivastava <vsrivast@xilinx.com>
>
> Insert unknown multicast filter to allow IPv6 neighbor discovery
>
> Signed-off-by: Vijay Kumar Srivastava <vsrivast@xilinx.com>
> Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> ---
> drivers/vdpa/sfc/sfc_vdpa.h | 3 ++-
> drivers/vdpa/sfc/sfc_vdpa_filter.c | 19 +++++++++++++++++--
> 2 files changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/vdpa/sfc/sfc_vdpa.h b/drivers/vdpa/sfc/sfc_vdpa.h
> index dbd099f..bedc76c 100644
> --- a/drivers/vdpa/sfc/sfc_vdpa.h
> +++ b/drivers/vdpa/sfc/sfc_vdpa.h
> @@ -21,7 +21,7 @@
> #define SFC_VDPA_DEFAULT_MCDI_IOVA 0x200000000000
>
> /* Broadcast & Unicast MAC filters are supported */
> -#define SFC_MAX_SUPPORTED_FILTERS 2
> +#define SFC_MAX_SUPPORTED_FILTERS 3
>
> /*
> * Get function-local index of the associated VI from the
> @@ -32,6 +32,7 @@
> enum sfc_vdpa_filter_type {
> SFC_VDPA_BCAST_MAC_FILTER = 0,
> SFC_VDPA_UCAST_MAC_FILTER = 1,
> + SFC_VDPA_MCAST_DST_FILTER = 2,
> SFC_VDPA_FILTER_NTYPE
> };
>
> diff --git a/drivers/vdpa/sfc/sfc_vdpa_filter.c
> b/drivers/vdpa/sfc/sfc_vdpa_filter.c
> index 03b6a5d..74204d3 100644
> --- a/drivers/vdpa/sfc/sfc_vdpa_filter.c
> +++ b/drivers/vdpa/sfc/sfc_vdpa_filter.c
> @@ -39,8 +39,12 @@
> spec->efs_flags = EFX_FILTER_FLAG_RX;
> spec->efs_dmaq_id = qid;
>
> - rc = efx_filter_spec_set_eth_local(spec, EFX_FILTER_SPEC_VID_UNSPEC,
> - eth_addr);
> + if (eth_addr == NULL)
> + rc = efx_filter_spec_set_mc_def(spec);
> + else
> + rc = efx_filter_spec_set_eth_local(spec,
> + EFX_FILTER_SPEC_VID_UNSPEC,
> + eth_addr);
> if (rc != 0)
> return rc;
>
> @@ -114,6 +118,17 @@ int sfc_vdpa_filter_config(struct sfc_vdpa_ops_data
> *ops_data)
> else
> sva->filters.filter_cnt++;
>
> + sfc_vdpa_log_init(sva, "insert unknown mcast filter");
> + spec = &sva->filters.spec[SFC_VDPA_MCAST_DST_FILTER];
> +
> + rc = sfc_vdpa_set_mac_filter(nic, spec, qid, NULL);
> + if (rc != 0)
> + sfc_vdpa_err(sva,
> + "mcast filter insertion failed: %s",
> + rte_strerror(rc));
Can improve to use two lines.
With this fixed:
Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
> + else
> + sva->filters.filter_cnt++;
> +
> sfc_vdpa_log_init(sva, "done");
>
> return rc;
> --
> 1.8.3.1
@@ -21,7 +21,7 @@
#define SFC_VDPA_DEFAULT_MCDI_IOVA 0x200000000000
/* Broadcast & Unicast MAC filters are supported */
-#define SFC_MAX_SUPPORTED_FILTERS 2
+#define SFC_MAX_SUPPORTED_FILTERS 3
/*
* Get function-local index of the associated VI from the
@@ -32,6 +32,7 @@
enum sfc_vdpa_filter_type {
SFC_VDPA_BCAST_MAC_FILTER = 0,
SFC_VDPA_UCAST_MAC_FILTER = 1,
+ SFC_VDPA_MCAST_DST_FILTER = 2,
SFC_VDPA_FILTER_NTYPE
};
@@ -39,8 +39,12 @@
spec->efs_flags = EFX_FILTER_FLAG_RX;
spec->efs_dmaq_id = qid;
- rc = efx_filter_spec_set_eth_local(spec, EFX_FILTER_SPEC_VID_UNSPEC,
- eth_addr);
+ if (eth_addr == NULL)
+ rc = efx_filter_spec_set_mc_def(spec);
+ else
+ rc = efx_filter_spec_set_eth_local(spec,
+ EFX_FILTER_SPEC_VID_UNSPEC,
+ eth_addr);
if (rc != 0)
return rc;
@@ -114,6 +118,17 @@ int sfc_vdpa_filter_config(struct sfc_vdpa_ops_data *ops_data)
else
sva->filters.filter_cnt++;
+ sfc_vdpa_log_init(sva, "insert unknown mcast filter");
+ spec = &sva->filters.spec[SFC_VDPA_MCAST_DST_FILTER];
+
+ rc = sfc_vdpa_set_mac_filter(nic, spec, qid, NULL);
+ if (rc != 0)
+ sfc_vdpa_err(sva,
+ "mcast filter insertion failed: %s",
+ rte_strerror(rc));
+ else
+ sva->filters.filter_cnt++;
+
sfc_vdpa_log_init(sva, "done");
return rc;