Skip to content

Commit 0cb9ed5

Browse files
committed
Merge branch 'mlxsw-add-802-1x-and-mab-offload-support'
Petr Machata says: ==================== mlxsw: Add 802.1X and MAB offload support This patchset adds 802.1X [1] and MAB [2] offload support in mlxsw. Patches #1-#3 add the required switchdev interfaces. Patches #4-#5 add the required packet traps for 802.1X. Patches #6-#10 are small preparations in mlxsw. Patch #11 adds locked bridge port support in mlxsw. Patches #12-#15 add mlxsw selftests. The patchset was also tested with the generic forwarding selftest ('bridge_locked_port.sh'). [1] https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=a21d9a670d81103db7f788de1a4a4a6e4b891a0b [2] https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=a35ec8e38cdd1766f29924ca391a01de20163931 ==================== Link: https://lore.kernel.org/r/cover.1667902754.git.petrm@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2 parents bf9b855 + cdbde7e commit 0cb9ed5

18 files changed

Lines changed: 366 additions & 25 deletions

File tree

Documentation/networking/devlink/devlink-trap.rst

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,16 @@ be added to the following table:
485485
- Traps incoming packets that the device decided to drop because
486486
the destination MAC is not configured in the MAC table and
487487
the interface is not in promiscuous mode
488+
* - ``eapol``
489+
- ``control``
490+
- Traps "Extensible Authentication Protocol over LAN" (EAPOL) packets
491+
specified in IEEE 802.1X
492+
* - ``locked_port``
493+
- ``drop``
494+
- Traps packets that the device decided to drop because they failed the
495+
locked bridge port check. That is, packets that were received via a
496+
locked port and whose {SMAC, VID} does not correspond to an FDB entry
497+
pointing to the port
488498

489499
Driver-specific Packet Traps
490500
============================
@@ -589,6 +599,9 @@ narrow. The description of these groups must be added to the following table:
589599
* - ``parser_error_drops``
590600
- Contains packet traps for packets that were marked by the device during
591601
parsing as erroneous
602+
* - ``eapol``
603+
- Contains packet traps for "Extensible Authentication Protocol over LAN"
604+
(EAPOL) packets specified in IEEE 802.1X
592605

593606
Packet Trap Policers
594607
====================

drivers/net/ethernet/mellanox/mlxsw/reg.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2046,6 +2046,39 @@ static inline void mlxsw_reg_spvmlr_pack(char *payload, u16 local_port,
20462046
}
20472047
}
20482048

2049+
/* SPFSR - Switch Port FDB Security Register
2050+
* -----------------------------------------
2051+
* Configures the security mode per port.
2052+
*/
2053+
#define MLXSW_REG_SPFSR_ID 0x2023
2054+
#define MLXSW_REG_SPFSR_LEN 0x08
2055+
2056+
MLXSW_REG_DEFINE(spfsr, MLXSW_REG_SPFSR_ID, MLXSW_REG_SPFSR_LEN);
2057+
2058+
/* reg_spfsr_local_port
2059+
* Local port.
2060+
* Access: Index
2061+
*
2062+
* Note: not supported for CPU port.
2063+
*/
2064+
MLXSW_ITEM32_LP(reg, spfsr, 0x00, 16, 0x00, 12);
2065+
2066+
/* reg_spfsr_security
2067+
* Security checks.
2068+
* 0: disabled (default)
2069+
* 1: enabled
2070+
* Access: RW
2071+
*/
2072+
MLXSW_ITEM32(reg, spfsr, security, 0x04, 31, 1);
2073+
2074+
static inline void mlxsw_reg_spfsr_pack(char *payload, u16 local_port,
2075+
bool security)
2076+
{
2077+
MLXSW_REG_ZERO(spfsr, payload);
2078+
mlxsw_reg_spfsr_local_port_set(payload, local_port);
2079+
mlxsw_reg_spfsr_security_set(payload, security);
2080+
}
2081+
20492082
/* SPVC - Switch Port VLAN Classification Register
20502083
* -----------------------------------------------
20512084
* Configures the port to identify packets as untagged / single tagged /
@@ -6316,6 +6349,7 @@ enum mlxsw_reg_htgt_trap_group {
63166349
MLXSW_REG_HTGT_TRAP_GROUP_SP_TUNNEL_DISCARDS,
63176350
MLXSW_REG_HTGT_TRAP_GROUP_SP_ACL_DISCARDS,
63186351
MLXSW_REG_HTGT_TRAP_GROUP_SP_BUFFER_DISCARDS,
6352+
MLXSW_REG_HTGT_TRAP_GROUP_SP_EAPOL,
63196353

63206354
__MLXSW_REG_HTGT_TRAP_GROUP_MAX,
63216355
MLXSW_REG_HTGT_TRAP_GROUP_MAX = __MLXSW_REG_HTGT_TRAP_GROUP_MAX - 1
@@ -12761,6 +12795,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = {
1276112795
MLXSW_REG(svpe),
1276212796
MLXSW_REG(sfmr),
1276312797
MLXSW_REG(spvmlr),
12798+
MLXSW_REG(spfsr),
1276412799
MLXSW_REG(spvc),
1276512800
MLXSW_REG(spevet),
1276612801
MLXSW_REG(smpe),

drivers/net/ethernet/mellanox/mlxsw/spectrum.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,24 @@ int mlxsw_sp_port_vid_learning_set(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid,
466466
return err;
467467
}
468468

469+
int mlxsw_sp_port_security_set(struct mlxsw_sp_port *mlxsw_sp_port, bool enable)
470+
{
471+
struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
472+
char spfsr_pl[MLXSW_REG_SPFSR_LEN];
473+
int err;
474+
475+
if (mlxsw_sp_port->security == enable)
476+
return 0;
477+
478+
mlxsw_reg_spfsr_pack(spfsr_pl, mlxsw_sp_port->local_port, enable);
479+
err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(spfsr), spfsr_pl);
480+
if (err)
481+
return err;
482+
483+
mlxsw_sp_port->security = enable;
484+
return 0;
485+
}
486+
469487
int mlxsw_sp_ethtype_to_sver_type(u16 ethtype, u8 *p_sver_type)
470488
{
471489
switch (ethtype) {
@@ -4742,6 +4760,10 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev,
47424760
NL_SET_ERR_MSG_MOD(extack, "VLAN uppers are only supported with 802.1q VLAN protocol");
47434761
return -EOPNOTSUPP;
47444762
}
4763+
if (is_vlan_dev(upper_dev) && mlxsw_sp_port->security) {
4764+
NL_SET_ERR_MSG_MOD(extack, "VLAN uppers are not supported on a locked port");
4765+
return -EOPNOTSUPP;
4766+
}
47454767
break;
47464768
case NETDEV_CHANGEUPPER:
47474769
upper_dev = info->upper_dev;

drivers/net/ethernet/mellanox/mlxsw/spectrum.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,8 @@ struct mlxsw_sp_port {
321321
struct mlxsw_sp *mlxsw_sp;
322322
u16 local_port;
323323
u8 lagged:1,
324-
split:1;
324+
split:1,
325+
security:1;
325326
u16 pvid;
326327
u16 lag_id;
327328
struct {
@@ -687,6 +688,8 @@ int mlxsw_sp_port_vid_stp_set(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid,
687688
int mlxsw_sp_port_vp_mode_set(struct mlxsw_sp_port *mlxsw_sp_port, bool enable);
688689
int mlxsw_sp_port_vid_learning_set(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid,
689690
bool learn_enable);
691+
int mlxsw_sp_port_security_set(struct mlxsw_sp_port *mlxsw_sp_port,
692+
bool enable);
690693
int mlxsw_sp_ethtype_to_sver_type(u16 ethtype, u8 *p_sver_type);
691694
int mlxsw_sp_port_egress_ethtype_set(struct mlxsw_sp_port *mlxsw_sp_port,
692695
u16 ethtype);

drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c

Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -782,10 +782,25 @@ mlxsw_sp_bridge_port_learning_set(struct mlxsw_sp_port *mlxsw_sp_port,
782782

783783
static int
784784
mlxsw_sp_port_attr_br_pre_flags_set(struct mlxsw_sp_port *mlxsw_sp_port,
785-
struct switchdev_brport_flags flags)
785+
const struct net_device *orig_dev,
786+
struct switchdev_brport_flags flags,
787+
struct netlink_ext_ack *extack)
786788
{
787-
if (flags.mask & ~(BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD))
789+
if (flags.mask & ~(BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD |
790+
BR_PORT_LOCKED | BR_PORT_MAB)) {
791+
NL_SET_ERR_MSG_MOD(extack, "Unsupported bridge port flag");
788792
return -EINVAL;
793+
}
794+
795+
if ((flags.mask & BR_PORT_LOCKED) && is_vlan_dev(orig_dev)) {
796+
NL_SET_ERR_MSG_MOD(extack, "Locked flag cannot be set on a VLAN upper");
797+
return -EINVAL;
798+
}
799+
800+
if ((flags.mask & BR_PORT_LOCKED) && vlan_uses_dev(orig_dev)) {
801+
NL_SET_ERR_MSG_MOD(extack, "Locked flag cannot be set on a bridge port that has VLAN uppers");
802+
return -EINVAL;
803+
}
789804

790805
return 0;
791806
}
@@ -819,6 +834,13 @@ static int mlxsw_sp_port_attr_br_flags_set(struct mlxsw_sp_port *mlxsw_sp_port,
819834
return err;
820835
}
821836

837+
if (flags.mask & BR_PORT_LOCKED) {
838+
err = mlxsw_sp_port_security_set(mlxsw_sp_port,
839+
flags.val & BR_PORT_LOCKED);
840+
if (err)
841+
return err;
842+
}
843+
822844
if (bridge_port->bridge_device->multicast_enabled)
823845
goto out;
824846

@@ -1186,7 +1208,9 @@ static int mlxsw_sp_port_attr_set(struct net_device *dev, const void *ctx,
11861208
break;
11871209
case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
11881210
err = mlxsw_sp_port_attr_br_pre_flags_set(mlxsw_sp_port,
1189-
attr->u.brport_flags);
1211+
attr->orig_dev,
1212+
attr->u.brport_flags,
1213+
extack);
11901214
break;
11911215
case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
11921216
err = mlxsw_sp_port_attr_br_flags_set(mlxsw_sp_port,
@@ -2783,6 +2807,7 @@ void mlxsw_sp_port_bridge_leave(struct mlxsw_sp_port *mlxsw_sp_port,
27832807

27842808
bridge_device->ops->port_leave(bridge_device, bridge_port,
27852809
mlxsw_sp_port);
2810+
mlxsw_sp_port_security_set(mlxsw_sp_port, false);
27862811
mlxsw_sp_bridge_port_put(mlxsw_sp->bridge, bridge_port);
27872812
}
27882813

@@ -2888,13 +2913,14 @@ static void mlxsw_sp_fdb_nve_call_notifiers(struct net_device *dev,
28882913
static void
28892914
mlxsw_sp_fdb_call_notifiers(enum switchdev_notifier_type type,
28902915
const char *mac, u16 vid,
2891-
struct net_device *dev, bool offloaded)
2916+
struct net_device *dev, bool offloaded, bool locked)
28922917
{
28932918
struct switchdev_notifier_fdb_info info = {};
28942919

28952920
info.addr = mac;
28962921
info.vid = vid;
28972922
info.offloaded = offloaded;
2923+
info.locked = locked;
28982924
call_switchdev_notifiers(type, dev, &info.info, NULL);
28992925
}
29002926

@@ -2941,6 +2967,12 @@ static void mlxsw_sp_fdb_notify_mac_process(struct mlxsw_sp *mlxsw_sp,
29412967
vid = bridge_device->vlan_enabled ? mlxsw_sp_port_vlan->vid : 0;
29422968
evid = mlxsw_sp_port_vlan->vid;
29432969

2970+
if (adding && mlxsw_sp_port->security) {
2971+
mlxsw_sp_fdb_call_notifiers(SWITCHDEV_FDB_ADD_TO_BRIDGE, mac,
2972+
vid, bridge_port->dev, false, true);
2973+
return;
2974+
}
2975+
29442976
do_fdb_op:
29452977
err = mlxsw_sp_port_fdb_uc_op(mlxsw_sp, local_port, mac, fid, evid,
29462978
adding, true);
@@ -2952,7 +2984,8 @@ static void mlxsw_sp_fdb_notify_mac_process(struct mlxsw_sp *mlxsw_sp,
29522984
if (!do_notification)
29532985
return;
29542986
type = adding ? SWITCHDEV_FDB_ADD_TO_BRIDGE : SWITCHDEV_FDB_DEL_TO_BRIDGE;
2955-
mlxsw_sp_fdb_call_notifiers(type, mac, vid, bridge_port->dev, adding);
2987+
mlxsw_sp_fdb_call_notifiers(type, mac, vid, bridge_port->dev, adding,
2988+
false);
29562989

29572990
return;
29582991

@@ -3004,6 +3037,12 @@ static void mlxsw_sp_fdb_notify_mac_lag_process(struct mlxsw_sp *mlxsw_sp,
30043037
vid = bridge_device->vlan_enabled ? mlxsw_sp_port_vlan->vid : 0;
30053038
lag_vid = mlxsw_sp_port_vlan->vid;
30063039

3040+
if (adding && mlxsw_sp_port->security) {
3041+
mlxsw_sp_fdb_call_notifiers(SWITCHDEV_FDB_ADD_TO_BRIDGE, mac,
3042+
vid, bridge_port->dev, false, true);
3043+
return;
3044+
}
3045+
30073046
do_fdb_op:
30083047
err = mlxsw_sp_port_fdb_uc_lag_op(mlxsw_sp, lag_id, mac, fid, lag_vid,
30093048
adding, true);
@@ -3015,7 +3054,8 @@ static void mlxsw_sp_fdb_notify_mac_lag_process(struct mlxsw_sp *mlxsw_sp,
30153054
if (!do_notification)
30163055
return;
30173056
type = adding ? SWITCHDEV_FDB_ADD_TO_BRIDGE : SWITCHDEV_FDB_DEL_TO_BRIDGE;
3018-
mlxsw_sp_fdb_call_notifiers(type, mac, vid, bridge_port->dev, adding);
3057+
mlxsw_sp_fdb_call_notifiers(type, mac, vid, bridge_port->dev, adding,
3058+
false);
30193059

30203060
return;
30213061

@@ -3122,7 +3162,7 @@ static void mlxsw_sp_fdb_notify_mac_uc_tunnel_process(struct mlxsw_sp *mlxsw_sp,
31223162

31233163
type = adding ? SWITCHDEV_FDB_ADD_TO_BRIDGE :
31243164
SWITCHDEV_FDB_DEL_TO_BRIDGE;
3125-
mlxsw_sp_fdb_call_notifiers(type, mac, vid, nve_dev, adding);
3165+
mlxsw_sp_fdb_call_notifiers(type, mac, vid, nve_dev, adding, false);
31263166

31273167
mlxsw_sp_fid_put(fid);
31283168

@@ -3264,7 +3304,7 @@ mlxsw_sp_switchdev_bridge_vxlan_fdb_event(struct mlxsw_sp *mlxsw_sp,
32643304
&vxlan_fdb_info.info, NULL);
32653305
mlxsw_sp_fdb_call_notifiers(SWITCHDEV_FDB_OFFLOADED,
32663306
vxlan_fdb_info.eth_addr,
3267-
fdb_info->vid, dev, true);
3307+
fdb_info->vid, dev, true, false);
32683308
break;
32693309
case SWITCHDEV_FDB_DEL_TO_DEVICE:
32703310
err = mlxsw_sp_port_fdb_tunnel_uc_op(mlxsw_sp,
@@ -3359,7 +3399,7 @@ static void mlxsw_sp_switchdev_bridge_fdb_event_work(struct work_struct *work)
33593399
break;
33603400
mlxsw_sp_fdb_call_notifiers(SWITCHDEV_FDB_OFFLOADED,
33613401
fdb_info->addr,
3362-
fdb_info->vid, dev, true);
3402+
fdb_info->vid, dev, true, false);
33633403
break;
33643404
case SWITCHDEV_FDB_DEL_TO_DEVICE:
33653405
fdb_info = &switchdev_work->fdb_info;
@@ -3443,7 +3483,8 @@ mlxsw_sp_switchdev_vxlan_fdb_add(struct mlxsw_sp *mlxsw_sp,
34433483
call_switchdev_notifiers(SWITCHDEV_VXLAN_FDB_OFFLOADED, dev,
34443484
&vxlan_fdb_info->info, NULL);
34453485
mlxsw_sp_fdb_call_notifiers(SWITCHDEV_FDB_OFFLOADED,
3446-
vxlan_fdb_info->eth_addr, vid, dev, true);
3486+
vxlan_fdb_info->eth_addr, vid, dev, true,
3487+
false);
34473488

34483489
mlxsw_sp_fid_put(fid);
34493490

@@ -3493,7 +3534,8 @@ mlxsw_sp_switchdev_vxlan_fdb_del(struct mlxsw_sp *mlxsw_sp,
34933534
false, false);
34943535
vid = bridge_device->ops->fid_vid(bridge_device, fid);
34953536
mlxsw_sp_fdb_call_notifiers(SWITCHDEV_FDB_OFFLOADED,
3496-
vxlan_fdb_info->eth_addr, vid, dev, false);
3537+
vxlan_fdb_info->eth_addr, vid, dev, false,
3538+
false);
34973539

34983540
mlxsw_sp_fid_put(fid);
34993541
}

drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,9 @@ mlxsw_sp_trap_policer_items_arr[] = {
510510
{
511511
.policer = MLXSW_SP_TRAP_POLICER(20, 10240, 4096),
512512
},
513+
{
514+
.policer = MLXSW_SP_TRAP_POLICER(21, 128, 128),
515+
},
513516
};
514517

515518
static const struct mlxsw_sp_trap_group_item mlxsw_sp_trap_group_items_arr[] = {
@@ -628,6 +631,11 @@ static const struct mlxsw_sp_trap_group_item mlxsw_sp_trap_group_items_arr[] = {
628631
.hw_group_id = MLXSW_REG_HTGT_TRAP_GROUP_SP_FLOW_LOGGING,
629632
.priority = 4,
630633
},
634+
{
635+
.group = DEVLINK_TRAP_GROUP_GENERIC(EAPOL, 21),
636+
.hw_group_id = MLXSW_REG_HTGT_TRAP_GROUP_SP_EAPOL,
637+
.priority = 5,
638+
},
631639
};
632640

633641
static const struct mlxsw_sp_trap_item mlxsw_sp_trap_items_arr[] = {
@@ -1160,6 +1168,23 @@ static const struct mlxsw_sp_trap_item mlxsw_sp_trap_items_arr[] = {
11601168
MLXSW_SP_RXL_DISCARD(ROUTER3, L3_DISCARDS),
11611169
},
11621170
},
1171+
{
1172+
.trap = MLXSW_SP_TRAP_CONTROL(EAPOL, EAPOL, TRAP),
1173+
.listeners_arr = {
1174+
MLXSW_SP_RXL_NO_MARK(EAPOL, EAPOL, TRAP_TO_CPU, true),
1175+
},
1176+
},
1177+
{
1178+
.trap = MLXSW_SP_TRAP_DROP(LOCKED_PORT, L2_DROPS),
1179+
.listeners_arr = {
1180+
MLXSW_RXL_DIS(mlxsw_sp_rx_drop_listener, FDB_MISS,
1181+
TRAP_EXCEPTION_TO_CPU, false,
1182+
SP_L2_DISCARDS, DISCARD, SP_L2_DISCARDS),
1183+
MLXSW_RXL_DIS(mlxsw_sp_rx_drop_listener, FDB_MISMATCH,
1184+
TRAP_EXCEPTION_TO_CPU, false,
1185+
SP_L2_DISCARDS, DISCARD, SP_L2_DISCARDS),
1186+
},
1187+
},
11631188
};
11641189

11651190
static struct mlxsw_sp_trap_policer_item *

drivers/net/ethernet/mellanox/mlxsw/trap.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ enum {
2525
MLXSW_TRAP_ID_IGMP_V2_LEAVE = 0x33,
2626
MLXSW_TRAP_ID_IGMP_V3_REPORT = 0x34,
2727
MLXSW_TRAP_ID_PKT_SAMPLE = 0x38,
28+
MLXSW_TRAP_ID_FDB_MISS = 0x3A,
29+
MLXSW_TRAP_ID_FDB_MISMATCH = 0x3B,
2830
MLXSW_TRAP_ID_FID_MISS = 0x3D,
2931
MLXSW_TRAP_ID_DECAP_ECN0 = 0x40,
3032
MLXSW_TRAP_ID_MTUERROR = 0x52,

include/net/devlink.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,8 @@ enum devlink_trap_generic_id {
894894
DEVLINK_TRAP_GENERIC_ID_ESP_PARSING,
895895
DEVLINK_TRAP_GENERIC_ID_BLACKHOLE_NEXTHOP,
896896
DEVLINK_TRAP_GENERIC_ID_DMAC_FILTER,
897+
DEVLINK_TRAP_GENERIC_ID_EAPOL,
898+
DEVLINK_TRAP_GENERIC_ID_LOCKED_PORT,
897899

898900
/* Add new generic trap IDs above */
899901
__DEVLINK_TRAP_GENERIC_ID_MAX,
@@ -930,6 +932,7 @@ enum devlink_trap_group_generic_id {
930932
DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_SAMPLE,
931933
DEVLINK_TRAP_GROUP_GENERIC_ID_ACL_TRAP,
932934
DEVLINK_TRAP_GROUP_GENERIC_ID_PARSER_ERROR_DROPS,
935+
DEVLINK_TRAP_GROUP_GENERIC_ID_EAPOL,
933936

934937
/* Add new generic trap group IDs above */
935938
__DEVLINK_TRAP_GROUP_GENERIC_ID_MAX,
@@ -1121,6 +1124,10 @@ enum devlink_trap_group_generic_id {
11211124
"blackhole_nexthop"
11221125
#define DEVLINK_TRAP_GENERIC_NAME_DMAC_FILTER \
11231126
"dmac_filter"
1127+
#define DEVLINK_TRAP_GENERIC_NAME_EAPOL \
1128+
"eapol"
1129+
#define DEVLINK_TRAP_GENERIC_NAME_LOCKED_PORT \
1130+
"locked_port"
11241131

11251132
#define DEVLINK_TRAP_GROUP_GENERIC_NAME_L2_DROPS \
11261133
"l2_drops"
@@ -1174,6 +1181,8 @@ enum devlink_trap_group_generic_id {
11741181
"acl_trap"
11751182
#define DEVLINK_TRAP_GROUP_GENERIC_NAME_PARSER_ERROR_DROPS \
11761183
"parser_error_drops"
1184+
#define DEVLINK_TRAP_GROUP_GENERIC_NAME_EAPOL \
1185+
"eapol"
11771186

11781187
#define DEVLINK_TRAP_GENERIC(_type, _init_action, _id, _group_id, \
11791188
_metadata_cap) \

0 commit comments

Comments
 (0)