@@ -7475,13 +7475,14 @@ u8 mlxsw_sp_router_port(const struct mlxsw_sp *mlxsw_sp)
7475
7475
return mlxsw_core_max_ports (mlxsw_sp -> core ) + 1 ;
7476
7476
}
7477
7477
7478
- static int mlxsw_sp_rif_vlan_configure (struct mlxsw_sp_rif * rif )
7478
+ static int mlxsw_sp_rif_fid_configure (struct mlxsw_sp_rif * rif )
7479
7479
{
7480
7480
struct mlxsw_sp * mlxsw_sp = rif -> mlxsw_sp ;
7481
- u16 vid = mlxsw_sp_fid_8021q_vid (rif -> fid );
7481
+ u16 fid_index = mlxsw_sp_fid_index (rif -> fid );
7482
7482
int err ;
7483
7483
7484
- err = mlxsw_sp_rif_vlan_fid_op (rif , MLXSW_REG_RITR_VLAN_IF , vid , true);
7484
+ err = mlxsw_sp_rif_vlan_fid_op (rif , MLXSW_REG_RITR_FID_IF , fid_index ,
7485
+ true);
7485
7486
if (err )
7486
7487
return err ;
7487
7488
@@ -7510,13 +7511,13 @@ static int mlxsw_sp_rif_vlan_configure(struct mlxsw_sp_rif *rif)
7510
7511
mlxsw_sp_fid_flood_set (rif -> fid , MLXSW_SP_FLOOD_TYPE_MC ,
7511
7512
mlxsw_sp_router_port (mlxsw_sp ), false);
7512
7513
err_fid_mc_flood_set :
7513
- mlxsw_sp_rif_vlan_fid_op (rif , MLXSW_REG_RITR_VLAN_IF , vid , false);
7514
+ mlxsw_sp_rif_vlan_fid_op (rif , MLXSW_REG_RITR_FID_IF , fid_index , false);
7514
7515
return err ;
7515
7516
}
7516
7517
7517
- static void mlxsw_sp_rif_vlan_deconfigure (struct mlxsw_sp_rif * rif )
7518
+ static void mlxsw_sp_rif_fid_deconfigure (struct mlxsw_sp_rif * rif )
7518
7519
{
7519
- u16 vid = mlxsw_sp_fid_8021q_vid (rif -> fid );
7520
+ u16 fid_index = mlxsw_sp_fid_index (rif -> fid );
7520
7521
struct mlxsw_sp * mlxsw_sp = rif -> mlxsw_sp ;
7521
7522
struct mlxsw_sp_fid * fid = rif -> fid ;
7522
7523
@@ -7528,9 +7529,40 @@ static void mlxsw_sp_rif_vlan_deconfigure(struct mlxsw_sp_rif *rif)
7528
7529
mlxsw_sp_router_port (mlxsw_sp ), false);
7529
7530
mlxsw_sp_fid_flood_set (rif -> fid , MLXSW_SP_FLOOD_TYPE_MC ,
7530
7531
mlxsw_sp_router_port (mlxsw_sp ), false);
7531
- mlxsw_sp_rif_vlan_fid_op (rif , MLXSW_REG_RITR_VLAN_IF , vid , false);
7532
+ mlxsw_sp_rif_vlan_fid_op (rif , MLXSW_REG_RITR_FID_IF , fid_index , false);
7533
+ }
7534
+
7535
+ static struct mlxsw_sp_fid *
7536
+ mlxsw_sp_rif_fid_fid_get (struct mlxsw_sp_rif * rif ,
7537
+ struct netlink_ext_ack * extack )
7538
+ {
7539
+ return mlxsw_sp_fid_8021d_get (rif -> mlxsw_sp , rif -> dev -> ifindex );
7532
7540
}
7533
7541
7542
+ static void mlxsw_sp_rif_fid_fdb_del (struct mlxsw_sp_rif * rif , const char * mac )
7543
+ {
7544
+ struct switchdev_notifier_fdb_info info ;
7545
+ struct net_device * dev ;
7546
+
7547
+ dev = br_fdb_find_port (rif -> dev , mac , 0 );
7548
+ if (!dev )
7549
+ return ;
7550
+
7551
+ info .addr = mac ;
7552
+ info .vid = 0 ;
7553
+ call_switchdev_notifiers (SWITCHDEV_FDB_DEL_TO_BRIDGE , dev , & info .info ,
7554
+ NULL );
7555
+ }
7556
+
7557
+ static const struct mlxsw_sp_rif_ops mlxsw_sp_rif_fid_ops = {
7558
+ .type = MLXSW_SP_RIF_TYPE_FID ,
7559
+ .rif_size = sizeof (struct mlxsw_sp_rif ),
7560
+ .configure = mlxsw_sp_rif_fid_configure ,
7561
+ .deconfigure = mlxsw_sp_rif_fid_deconfigure ,
7562
+ .fid_get = mlxsw_sp_rif_fid_fid_get ,
7563
+ .fdb_del = mlxsw_sp_rif_fid_fdb_del ,
7564
+ };
7565
+
7534
7566
static struct mlxsw_sp_fid *
7535
7567
mlxsw_sp_rif_vlan_fid_get (struct mlxsw_sp_rif * rif ,
7536
7568
struct netlink_ext_ack * extack )
@@ -7573,103 +7605,6 @@ static void mlxsw_sp_rif_vlan_fdb_del(struct mlxsw_sp_rif *rif, const char *mac)
7573
7605
NULL );
7574
7606
}
7575
7607
7576
- static const struct mlxsw_sp_rif_ops mlxsw_sp_rif_vlan_ops = {
7577
- .type = MLXSW_SP_RIF_TYPE_VLAN ,
7578
- .rif_size = sizeof (struct mlxsw_sp_rif ),
7579
- .configure = mlxsw_sp_rif_vlan_configure ,
7580
- .deconfigure = mlxsw_sp_rif_vlan_deconfigure ,
7581
- .fid_get = mlxsw_sp_rif_vlan_fid_get ,
7582
- .fdb_del = mlxsw_sp_rif_vlan_fdb_del ,
7583
- };
7584
-
7585
- static int mlxsw_sp_rif_fid_configure (struct mlxsw_sp_rif * rif )
7586
- {
7587
- struct mlxsw_sp * mlxsw_sp = rif -> mlxsw_sp ;
7588
- u16 fid_index = mlxsw_sp_fid_index (rif -> fid );
7589
- int err ;
7590
-
7591
- err = mlxsw_sp_rif_vlan_fid_op (rif , MLXSW_REG_RITR_FID_IF , fid_index ,
7592
- true);
7593
- if (err )
7594
- return err ;
7595
-
7596
- err = mlxsw_sp_fid_flood_set (rif -> fid , MLXSW_SP_FLOOD_TYPE_MC ,
7597
- mlxsw_sp_router_port (mlxsw_sp ), true);
7598
- if (err )
7599
- goto err_fid_mc_flood_set ;
7600
-
7601
- err = mlxsw_sp_fid_flood_set (rif -> fid , MLXSW_SP_FLOOD_TYPE_BC ,
7602
- mlxsw_sp_router_port (mlxsw_sp ), true);
7603
- if (err )
7604
- goto err_fid_bc_flood_set ;
7605
-
7606
- err = mlxsw_sp_rif_fdb_op (rif -> mlxsw_sp , rif -> dev -> dev_addr ,
7607
- mlxsw_sp_fid_index (rif -> fid ), true);
7608
- if (err )
7609
- goto err_rif_fdb_op ;
7610
-
7611
- mlxsw_sp_fid_rif_set (rif -> fid , rif );
7612
- return 0 ;
7613
-
7614
- err_rif_fdb_op :
7615
- mlxsw_sp_fid_flood_set (rif -> fid , MLXSW_SP_FLOOD_TYPE_BC ,
7616
- mlxsw_sp_router_port (mlxsw_sp ), false);
7617
- err_fid_bc_flood_set :
7618
- mlxsw_sp_fid_flood_set (rif -> fid , MLXSW_SP_FLOOD_TYPE_MC ,
7619
- mlxsw_sp_router_port (mlxsw_sp ), false);
7620
- err_fid_mc_flood_set :
7621
- mlxsw_sp_rif_vlan_fid_op (rif , MLXSW_REG_RITR_FID_IF , fid_index , false);
7622
- return err ;
7623
- }
7624
-
7625
- static void mlxsw_sp_rif_fid_deconfigure (struct mlxsw_sp_rif * rif )
7626
- {
7627
- u16 fid_index = mlxsw_sp_fid_index (rif -> fid );
7628
- struct mlxsw_sp * mlxsw_sp = rif -> mlxsw_sp ;
7629
- struct mlxsw_sp_fid * fid = rif -> fid ;
7630
-
7631
- mlxsw_sp_fid_rif_set (fid , NULL );
7632
- mlxsw_sp_rif_fdb_op (rif -> mlxsw_sp , rif -> dev -> dev_addr ,
7633
- mlxsw_sp_fid_index (fid ), false);
7634
- mlxsw_sp_rif_macvlan_flush (rif );
7635
- mlxsw_sp_fid_flood_set (rif -> fid , MLXSW_SP_FLOOD_TYPE_BC ,
7636
- mlxsw_sp_router_port (mlxsw_sp ), false);
7637
- mlxsw_sp_fid_flood_set (rif -> fid , MLXSW_SP_FLOOD_TYPE_MC ,
7638
- mlxsw_sp_router_port (mlxsw_sp ), false);
7639
- mlxsw_sp_rif_vlan_fid_op (rif , MLXSW_REG_RITR_FID_IF , fid_index , false);
7640
- }
7641
-
7642
- static struct mlxsw_sp_fid *
7643
- mlxsw_sp_rif_fid_fid_get (struct mlxsw_sp_rif * rif ,
7644
- struct netlink_ext_ack * extack )
7645
- {
7646
- return mlxsw_sp_fid_8021d_get (rif -> mlxsw_sp , rif -> dev -> ifindex );
7647
- }
7648
-
7649
- static void mlxsw_sp_rif_fid_fdb_del (struct mlxsw_sp_rif * rif , const char * mac )
7650
- {
7651
- struct switchdev_notifier_fdb_info info ;
7652
- struct net_device * dev ;
7653
-
7654
- dev = br_fdb_find_port (rif -> dev , mac , 0 );
7655
- if (!dev )
7656
- return ;
7657
-
7658
- info .addr = mac ;
7659
- info .vid = 0 ;
7660
- call_switchdev_notifiers (SWITCHDEV_FDB_DEL_TO_BRIDGE , dev , & info .info ,
7661
- NULL );
7662
- }
7663
-
7664
- static const struct mlxsw_sp_rif_ops mlxsw_sp_rif_fid_ops = {
7665
- .type = MLXSW_SP_RIF_TYPE_FID ,
7666
- .rif_size = sizeof (struct mlxsw_sp_rif ),
7667
- .configure = mlxsw_sp_rif_fid_configure ,
7668
- .deconfigure = mlxsw_sp_rif_fid_deconfigure ,
7669
- .fid_get = mlxsw_sp_rif_fid_fid_get ,
7670
- .fdb_del = mlxsw_sp_rif_fid_fdb_del ,
7671
- };
7672
-
7673
7608
static const struct mlxsw_sp_rif_ops mlxsw_sp_rif_vlan_emu_ops = {
7674
7609
.type = MLXSW_SP_RIF_TYPE_VLAN ,
7675
7610
.rif_size = sizeof (struct mlxsw_sp_rif ),
0 commit comments