diff mbox series

[iwl-next,v4,1/7] ice: in dvm, use outer VLAN in MAC, VLAN lookup

Message ID 20260204154418.1285309-2-jakub.slepecki@intel.com
State Changes Requested
Delegated to: Anthony Nguyen
Headers show
Series ice: in VEB, prevent "cross-vlan" traffic | expand

Commit Message

Jakub Slepecki Feb. 4, 2026, 3:44 p.m. UTC
In double VLAN mode (DVM), outer VLAN is located a word earlier in
the field vector compared to the single VLAN mode.  We already modify
ICE_SW_LKUP_VLAN to use it but ICE_SW_LKUP_MAC_VLAN was left untouched,
causing the lookup to match any packet with one or no layer of Dot1q.
This change enables to fix cross-vlan loopback traffic using MAC,VLAN
lookups.

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Signed-off-by: Jakub Slepecki <jakub.slepecki@intel.com>

---
No changes in v4.
No changes in v3.
No changes in v2.
---
 drivers/net/ethernet/intel/ice/ice_vlan_mode.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Romanowski, Rafal March 2, 2026, 5:35 p.m. UTC | #1
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of Jakub
> Slepecki
> Sent: Wednesday, February 4, 2026 4:44 PM
> To: intel-wired-lan@lists.osuosl.org
> Cc: linux-kernel@vger.kernel.org; netdev@vger.kernel.org; Kitszel, Przemyslaw
> <przemyslaw.kitszel@intel.com>; Nguyen, Anthony L
> <anthony.l.nguyen@intel.com>; michal.swiatkowski@linux.intel.com; Slepecki,
> Jakub <jakub.slepecki@intel.com>; Loktionov, Aleksandr
> <aleksandr.loktionov@intel.com>
> Subject: [Intel-wired-lan] [PATCH iwl-next v4 1/7] ice: in dvm, use outer VLAN in
> MAC, VLAN lookup
> 
> In double VLAN mode (DVM), outer VLAN is located a word earlier in the field
> vector compared to the single VLAN mode.  We already modify
> ICE_SW_LKUP_VLAN to use it but ICE_SW_LKUP_MAC_VLAN was left
> untouched, causing the lookup to match any packet with one or no layer of Dot1q.
> This change enables to fix cross-vlan loopback traffic using MAC,VLAN lookups.
> 
> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
> Signed-off-by: Jakub Slepecki <jakub.slepecki@intel.com>
> 
> ---
> No changes in v4.
> No changes in v3.
> No changes in v2.
> ---
>  drivers/net/ethernet/intel/ice/ice_vlan_mode.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_vlan_mode.c
> b/drivers/net/ethernet/intel/ice/ice_vlan_mode.c
> index fb526cb84776..68a7b05de44e 100644
> --- a/drivers/net/ethernet/intel/ice/ice_vlan_mode.c
> +++ b/drivers/net/ethernet/intel/ice/ice_vlan_mode.c
> @@ -198,6 +198,7 @@ static bool ice_is_dvm_supported(struct ice_hw *hw)
>  #define ICE_SW_LKUP_VLAN_LOC_LKUP_IDX			1
>  #define ICE_SW_LKUP_VLAN_PKT_FLAGS_LKUP_IDX		2
>  #define ICE_SW_LKUP_PROMISC_VLAN_LOC_LKUP_IDX		2
> +#define ICE_SW_LKUP_MAC_VLAN_LOC_LKUP_IDX		4
>  #define ICE_PKT_FLAGS_0_TO_15_FV_IDX			1
>  static struct ice_update_recipe_lkup_idx_params ice_dvm_dflt_recipes[] = {
>  	{
> @@ -234,6 +235,17 @@ static struct ice_update_recipe_lkup_idx_params
> ice_dvm_dflt_recipes[] = {
>  		.mask_valid = false,  /* use pre-existing mask */
>  		.lkup_idx = ICE_SW_LKUP_PROMISC_VLAN_LOC_LKUP_IDX,
>  	},
> +	{
> +		/* Similarly to ICE_SW_LKUP_VLAN, change to outer/single
> VLAN in
> +		 * DVM
> +		 */
> +		.rid = ICE_SW_LKUP_MAC_VLAN,
> +		.fv_idx = ICE_EXTERNAL_VLAN_ID_FV_IDX,
> +		.ignore_valid = true,
> +		.mask = 0,
> +		.mask_valid = false,
> +		.lkup_idx = ICE_SW_LKUP_MAC_VLAN_LOC_LKUP_IDX,
> +	},
>  };
> 
>  /**
> --
> 2.43.0


Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/ice/ice_vlan_mode.c b/drivers/net/ethernet/intel/ice/ice_vlan_mode.c
index fb526cb84776..68a7b05de44e 100644
--- a/drivers/net/ethernet/intel/ice/ice_vlan_mode.c
+++ b/drivers/net/ethernet/intel/ice/ice_vlan_mode.c
@@ -198,6 +198,7 @@  static bool ice_is_dvm_supported(struct ice_hw *hw)
 #define ICE_SW_LKUP_VLAN_LOC_LKUP_IDX			1
 #define ICE_SW_LKUP_VLAN_PKT_FLAGS_LKUP_IDX		2
 #define ICE_SW_LKUP_PROMISC_VLAN_LOC_LKUP_IDX		2
+#define ICE_SW_LKUP_MAC_VLAN_LOC_LKUP_IDX		4
 #define ICE_PKT_FLAGS_0_TO_15_FV_IDX			1
 static struct ice_update_recipe_lkup_idx_params ice_dvm_dflt_recipes[] = {
 	{
@@ -234,6 +235,17 @@  static struct ice_update_recipe_lkup_idx_params ice_dvm_dflt_recipes[] = {
 		.mask_valid = false,  /* use pre-existing mask */
 		.lkup_idx = ICE_SW_LKUP_PROMISC_VLAN_LOC_LKUP_IDX,
 	},
+	{
+		/* Similarly to ICE_SW_LKUP_VLAN, change to outer/single VLAN in
+		 * DVM
+		 */
+		.rid = ICE_SW_LKUP_MAC_VLAN,
+		.fv_idx = ICE_EXTERNAL_VLAN_ID_FV_IDX,
+		.ignore_valid = true,
+		.mask = 0,
+		.mask_valid = false,
+		.lkup_idx = ICE_SW_LKUP_MAC_VLAN_LOC_LKUP_IDX,
+	},
 };
 
 /**