Lines Matching +full:data +full:- +full:role
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (C) 2018-2021, Intel Corporation. */
10 * ice_lag_nop_handler - no-op Rx handler to disable LAG
19 * ice_lag_set_primary - set PF LAG state as Primary
24 struct ice_pf *pf = lag->pf; in ice_lag_set_primary()
29 if (lag->role != ICE_LAG_UNSET && lag->role != ICE_LAG_BACKUP) { in ice_lag_set_primary()
31 netdev_name(lag->netdev)); in ice_lag_set_primary()
35 lag->role = ICE_LAG_PRIMARY; in ice_lag_set_primary()
39 * ice_lag_set_backup - set PF LAG state to Backup
44 struct ice_pf *pf = lag->pf; in ice_lag_set_backup()
49 if (lag->role != ICE_LAG_UNSET && lag->role != ICE_LAG_PRIMARY) { in ice_lag_set_backup()
51 netdev_name(lag->netdev)); in ice_lag_set_backup()
55 lag->role = ICE_LAG_BACKUP; in ice_lag_set_backup()
59 * ice_display_lag_info - print LAG info
64 const char *name, *peer, *upper, *role, *bonded, *master; in ice_display_lag_info() local
65 struct device *dev = &lag->pf->pdev->dev; in ice_display_lag_info()
67 name = lag->netdev ? netdev_name(lag->netdev) : "unset"; in ice_display_lag_info()
68 peer = lag->peer_netdev ? netdev_name(lag->peer_netdev) : "unset"; in ice_display_lag_info()
69 upper = lag->upper_netdev ? netdev_name(lag->upper_netdev) : "unset"; in ice_display_lag_info()
70 master = lag->master ? "TRUE" : "FALSE"; in ice_display_lag_info()
71 bonded = lag->bonded ? "BONDED" : "UNBONDED"; in ice_display_lag_info()
73 switch (lag->role) { in ice_display_lag_info()
75 role = "NONE"; in ice_display_lag_info()
78 role = "PRIMARY"; in ice_display_lag_info()
81 role = "BACKUP"; in ice_display_lag_info()
84 role = "UNSET"; in ice_display_lag_info()
87 role = "ERROR"; in ice_display_lag_info()
90 dev_dbg(dev, "%s %s, peer:%s, upper:%s, role:%s, master:%s\n", name, in ice_display_lag_info()
91 bonded, peer, upper, role, master); in ice_display_lag_info()
95 * ice_lag_info_event - handle NETDEV_BONDING_INFO event
97 * @ptr: opaque data pointer
110 lag_netdev_name = netdev_name(lag->netdev); in ice_lag_info_event()
111 bonding_info = &info->bonding_info; in ice_lag_info_event()
113 if (event_netdev != lag->netdev || !lag->bonded || !lag->upper_netdev) in ice_lag_info_event()
116 if (bonding_info->master.bond_mode != BOND_MODE_ACTIVEBACKUP) { in ice_lag_info_event()
117 netdev_dbg(lag->netdev, "Bonding event recv, but mode not active/backup\n"); in ice_lag_info_event()
121 if (strcmp(bonding_info->slave.slave_name, lag_netdev_name)) { in ice_lag_info_event()
122 netdev_dbg(lag->netdev, "Bonding event recv, but slave info not for us\n"); in ice_lag_info_event()
126 if (bonding_info->slave.state) in ice_lag_info_event()
136 * ice_lag_link - handle LAG link event
143 struct net_device *netdev_tmp, *upper = info->upper_dev; in ice_lag_link()
144 struct ice_pf *pf = lag->pf; in ice_lag_link()
147 if (lag->bonded) in ice_lag_link()
149 netdev_name(lag->netdev)); in ice_lag_link()
156 if (lag->upper_netdev != upper) { in ice_lag_link()
158 lag->upper_netdev = upper; in ice_lag_link()
164 lag->bonded = true; in ice_lag_link()
165 lag->role = ICE_LAG_UNSET; in ice_lag_link()
168 lag->master = !!(peers == 1); in ice_lag_link()
172 * ice_lag_unlink - handle unlink event
180 struct net_device *netdev_tmp, *upper = info->upper_dev; in ice_lag_unlink()
181 struct ice_pf *pf = lag->pf; in ice_lag_unlink()
184 if (!lag->bonded) { in ice_lag_unlink()
185 netdev_dbg(lag->netdev, "bonding unlink event on non-LAG netdev\n"); in ice_lag_unlink()
192 if (netdev_tmp == lag->netdev) { in ice_lag_unlink()
202 if (lag->upper_netdev) { in ice_lag_unlink()
203 dev_put(lag->upper_netdev); in ice_lag_unlink()
204 lag->upper_netdev = NULL; in ice_lag_unlink()
207 if (lag->peer_netdev) { in ice_lag_unlink()
208 dev_put(lag->peer_netdev); in ice_lag_unlink()
209 lag->peer_netdev = NULL; in ice_lag_unlink()
214 lag->bonded = false; in ice_lag_unlink()
215 lag->role = ICE_LAG_NONE; in ice_lag_unlink()
219 * ice_lag_changeupper_event - handle LAG changeupper event
221 * @ptr: opaque pointer data
234 if (netdev != lag->netdev) in ice_lag_changeupper_event()
237 if (!info->upper_dev) { in ice_lag_changeupper_event()
242 netdev_dbg(netdev, "bonding %s\n", info->linking ? "LINK" : "UNLINK"); in ice_lag_changeupper_event()
244 if (!netif_is_lag_master(info->upper_dev)) { in ice_lag_changeupper_event()
249 if (info->linking) in ice_lag_changeupper_event()
258 * ice_lag_changelower_event - handle LAG changelower event
260 * @ptr: opaque data pointer
268 if (netdev != lag->netdev) in ice_lag_changelower_event()
278 * ice_lag_event_handler - handle LAG events from netdev
281 * @ptr: opaque data containing notifier event
292 if (!lag->netdev) in ice_lag_event_handler()
320 * ice_register_lag_handler - register LAG handler on netdev
325 struct device *dev = ice_pf_to_dev(lag->pf); in ice_register_lag_handler()
328 notif_blk = &lag->notif_block; in ice_register_lag_handler()
330 if (!notif_blk->notifier_call) { in ice_register_lag_handler()
331 notif_blk->notifier_call = ice_lag_event_handler; in ice_register_lag_handler()
333 notif_blk->notifier_call = NULL; in ice_register_lag_handler()
335 return -EINVAL; in ice_register_lag_handler()
343 * ice_unregister_lag_handler - unregister LAG handler on netdev
348 struct device *dev = ice_pf_to_dev(lag->pf); in ice_unregister_lag_handler()
351 notif_blk = &lag->notif_block; in ice_unregister_lag_handler()
352 if (notif_blk->notifier_call) { in ice_unregister_lag_handler()
359 * ice_init_lag - initialize support for LAG
372 pf->lag = kzalloc(sizeof(*lag), GFP_KERNEL); in ice_init_lag()
373 if (!pf->lag) in ice_init_lag()
374 return -ENOMEM; in ice_init_lag()
375 lag = pf->lag; in ice_init_lag()
380 err = -EIO; in ice_init_lag()
384 lag->pf = pf; in ice_init_lag()
385 lag->netdev = vsi->netdev; in ice_init_lag()
386 lag->role = ICE_LAG_NONE; in ice_init_lag()
387 lag->bonded = false; in ice_init_lag()
388 lag->peer_netdev = NULL; in ice_init_lag()
389 lag->upper_netdev = NULL; in ice_init_lag()
390 lag->notif_block.notifier_call = NULL; in ice_init_lag()
405 pf->lag = NULL; in ice_init_lag()
410 * ice_deinit_lag - Clean up LAG
420 lag = pf->lag; in ice_deinit_lag()
425 if (lag->pf) in ice_deinit_lag()
428 if (lag->upper_netdev) in ice_deinit_lag()
429 dev_put(lag->upper_netdev); in ice_deinit_lag()
431 if (lag->peer_netdev) in ice_deinit_lag()
432 dev_put(lag->peer_netdev); in ice_deinit_lag()
436 pf->lag = NULL; in ice_deinit_lag()