drivers/net/team/team_core.c
1000
dev_put(team->dev);
drivers/net/team/team_core.c
1005
static void team_port_leave(struct team *team, struct team_port *port)
drivers/net/team/team_core.c
1007
if (team->ops.port_leave)
drivers/net/team/team_core.c
1008
team->ops.port_leave(team, port);
drivers/net/team/team_core.c
1009
dev_put(team->dev);
drivers/net/team/team_core.c
1033
if (!port->team->dev->npinfo)
drivers/net/team/team_core.c
1059
static int team_upper_dev_link(struct team *team, struct team_port *port,
drivers/net/team/team_core.c
1065
lag_upper_info.tx_type = team->mode->lag_tx_type;
drivers/net/team/team_core.c
1067
err = netdev_master_upper_dev_link(port->dev, team->dev, NULL,
drivers/net/team/team_core.c
1075
static void team_upper_dev_unlink(struct team *team, struct team_port *port)
drivers/net/team/team_core.c
1077
netdev_upper_dev_unlink(port->dev, team->dev);
drivers/net/team/team_core.c
1085
static int team_port_add(struct team *team, struct net_device *port_dev,
drivers/net/team/team_core.c
1088
struct net_device *dev = team->dev;
drivers/net/team/team_core.c
1142
port = kzalloc(sizeof(struct team_port) + team->mode->port_priv_size,
drivers/net/team/team_core.c
1148
port->team = team;
drivers/net/team/team_core.c
1166
err = team_port_enter(team, port);
drivers/net/team/team_core.c
119
static struct team_option *__team_find_option(struct team *team,
drivers/net/team/team_core.c
1205
err = team_upper_dev_link(team, port, extack);
drivers/net/team/team_core.c
1212
err = __team_option_inst_add_port(team, port);
drivers/net/team/team_core.c
124
list_for_each_entry(option, &team->option_list, list) {
drivers/net/team/team_core.c
1248
list_add_tail_rcu(&port->list, &team->port_list);
drivers/net/team/team_core.c
1249
team_port_enable(team, port);
drivers/net/team/team_core.c
1250
netdev_compute_master_upper_features(team->dev, true);
drivers/net/team/team_core.c
1252
__team_options_change_check(team);
drivers/net/team/team_core.c
1261
__team_option_inst_del_port(team, port);
drivers/net/team/team_core.c
1264
team_upper_dev_unlink(team, port);
drivers/net/team/team_core.c
1279
team_port_leave(team, port);
drivers/net/team/team_core.c
1293
static int team_port_del(struct team *team, struct net_device *port_dev, bool unregister)
drivers/net/team/team_core.c
1295
struct net_device *dev = team->dev;
drivers/net/team/team_core.c
1300
if (!port || !team_port_find(team, port)) {
drivers/net/team/team_core.c
1306
team_port_disable(team, port);
drivers/net/team/team_core.c
1314
team_upper_dev_unlink(team, port);
drivers/net/team/team_core.c
1323
team_port_leave(team, port);
drivers/net/team/team_core.c
1325
__team_option_inst_mark_removed_port(team, port);
drivers/net/team/team_core.c
1326
__team_options_change_check(team);
drivers/net/team/team_core.c
1327
__team_option_inst_del_port(team, port);
drivers/net/team/team_core.c
1340
netdev_compute_master_upper_features(team->dev, true);
drivers/net/team/team_core.c
1350
static void team_mode_option_get(struct team *team, struct team_gsetter_ctx *ctx)
drivers/net/team/team_core.c
1352
ctx->data.str_val = team->mode->kind;
drivers/net/team/team_core.c
1355
static int team_mode_option_set(struct team *team, struct team_gsetter_ctx *ctx)
drivers/net/team/team_core.c
1357
return team_change_mode(team, ctx->data.str_val);
drivers/net/team/team_core.c
1360
static void team_notify_peers_count_get(struct team *team,
drivers/net/team/team_core.c
1363
ctx->data.u32_val = team->notify_peers.count;
drivers/net/team/team_core.c
1366
static int team_notify_peers_count_set(struct team *team,
drivers/net/team/team_core.c
1369
team->notify_peers.count = ctx->data.u32_val;
drivers/net/team/team_core.c
137
static void __team_option_inst_del_option(struct team *team,
drivers/net/team/team_core.c
1373
static void team_notify_peers_interval_get(struct team *team,
drivers/net/team/team_core.c
1376
ctx->data.u32_val = team->notify_peers.interval;
drivers/net/team/team_core.c
1379
static int team_notify_peers_interval_set(struct team *team,
drivers/net/team/team_core.c
1382
team->notify_peers.interval = ctx->data.u32_val;
drivers/net/team/team_core.c
1386
static void team_mcast_rejoin_count_get(struct team *team,
drivers/net/team/team_core.c
1389
ctx->data.u32_val = team->mcast_rejoin.count;
drivers/net/team/team_core.c
1392
static int team_mcast_rejoin_count_set(struct team *team,
drivers/net/team/team_core.c
1395
team->mcast_rejoin.count = ctx->data.u32_val;
drivers/net/team/team_core.c
1399
static void team_mcast_rejoin_interval_get(struct team *team,
drivers/net/team/team_core.c
1402
ctx->data.u32_val = team->mcast_rejoin.interval;
drivers/net/team/team_core.c
1405
static int team_mcast_rejoin_interval_set(struct team *team,
drivers/net/team/team_core.c
1408
team->mcast_rejoin.interval = ctx->data.u32_val;
drivers/net/team/team_core.c
1412
static void team_port_en_option_get(struct team *team,
drivers/net/team/team_core.c
142
list_for_each_entry_safe(opt_inst, tmp, &team->option_inst_list, list) {
drivers/net/team/team_core.c
1420
static int team_port_en_option_set(struct team *team,
drivers/net/team/team_core.c
1426
team_port_enable(team, port);
drivers/net/team/team_core.c
1428
team_port_disable(team, port);
drivers/net/team/team_core.c
1432
static void team_user_linkup_option_get(struct team *team,
drivers/net/team/team_core.c
1440
static void __team_carrier_check(struct team *team);
drivers/net/team/team_core.c
1442
static int team_user_linkup_option_set(struct team *team,
drivers/net/team/team_core.c
1449
__team_carrier_check(port->team);
drivers/net/team/team_core.c
1453
static void team_user_linkup_en_option_get(struct team *team,
drivers/net/team/team_core.c
1461
static int team_user_linkup_en_option_set(struct team *team,
drivers/net/team/team_core.c
1468
__team_carrier_check(port->team);
drivers/net/team/team_core.c
1472
static void team_priority_option_get(struct team *team,
drivers/net/team/team_core.c
148
static int __team_option_inst_add(struct team *team, struct team_option *option,
drivers/net/team/team_core.c
1480
static int team_priority_option_set(struct team *team,
drivers/net/team/team_core.c
1489
team_queue_override_port_prio_changed(team, port);
drivers/net/team/team_core.c
1493
static void team_queue_id_option_get(struct team *team,
drivers/net/team/team_core.c
1501
static int team_queue_id_option_set(struct team *team,
drivers/net/team/team_core.c
1509
if (new_queue_id >= team->dev->real_num_tx_queues)
drivers/net/team/team_core.c
1511
team_queue_override_port_change_queue_id(team, port, new_queue_id);
drivers/net/team/team_core.c
1586
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1590
team->dev = dev;
drivers/net/team/team_core.c
1591
team_set_no_mode(team);
drivers/net/team/team_core.c
1592
team->notifier_ctx = false;
drivers/net/team/team_core.c
1594
team->pcpu_stats = netdev_alloc_pcpu_stats(struct team_pcpu_stats);
drivers/net/team/team_core.c
1595
if (!team->pcpu_stats)
drivers/net/team/team_core.c
1599
INIT_HLIST_HEAD(&team->en_port_hlist[i]);
drivers/net/team/team_core.c
1600
INIT_LIST_HEAD(&team->port_list);
drivers/net/team/team_core.c
1601
err = team_queue_override_init(team);
drivers/net/team/team_core.c
1605
team_adjust_ops(team);
drivers/net/team/team_core.c
1607
INIT_LIST_HEAD(&team->option_list);
drivers/net/team/team_core.c
1608
INIT_LIST_HEAD(&team->option_inst_list);
drivers/net/team/team_core.c
1610
team_notify_peers_init(team);
drivers/net/team/team_core.c
1611
team_mcast_rejoin_init(team);
drivers/net/team/team_core.c
1613
err = team_options_register(team, team_options, ARRAY_SIZE(team_options));
drivers/net/team/team_core.c
1623
team_mcast_rejoin_fini(team);
drivers/net/team/team_core.c
1624
team_notify_peers_fini(team);
drivers/net/team/team_core.c
1625
team_queue_override_fini(team);
drivers/net/team/team_core.c
1627
free_percpu(team->pcpu_stats);
drivers/net/team/team_core.c
1634
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1640
list_for_each_entry_safe(port, tmp, &team->port_list, list)
drivers/net/team/team_core.c
1641
team_port_del(team, port->dev, false);
drivers/net/team/team_core.c
1643
__team_change_mode(team, NULL); /* cleanup */
drivers/net/team/team_core.c
1644
__team_options_unregister(team, team_options, ARRAY_SIZE(team_options));
drivers/net/team/team_core.c
1645
team_mcast_rejoin_fini(team);
drivers/net/team/team_core.c
1646
team_notify_peers_fini(team);
drivers/net/team/team_core.c
1647
team_queue_override_fini(team);
drivers/net/team/team_core.c
1653
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1655
free_percpu(team->pcpu_stats);
drivers/net/team/team_core.c
1665
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1668
list_for_each_entry(port, &team->port_list, list) {
drivers/net/team/team_core.c
168
list_add_tail(&opt_inst->list, &team->option_inst_list);
drivers/net/team/team_core.c
1681
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1685
tx_success = team_queue_override_transmit(team, skb);
drivers/net/team/team_core.c
1687
tx_success = team->ops.transmit(team, skb);
drivers/net/team/team_core.c
1691
pcpu_stats = this_cpu_ptr(team->pcpu_stats);
drivers/net/team/team_core.c
1697
this_cpu_inc(team->pcpu_stats->tx_dropped);
drivers/net/team/team_core.c
170
option->init(team, &opt_inst->info);
drivers/net/team/team_core.c
1729
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1735
list_for_each_entry(port, &team->port_list, list) {
drivers/net/team/team_core.c
1749
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1753
list_for_each_entry_rcu(port, &team->port_list, list) {
drivers/net/team/team_core.c
176
static int __team_option_inst_add_option(struct team *team,
drivers/net/team/team_core.c
1763
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1771
list_for_each_entry(port, &team->port_list, list)
drivers/net/team/team_core.c
1772
if (team->ops.port_change_dev_addr)
drivers/net/team/team_core.c
1773
team->ops.port_change_dev_addr(team, port);
drivers/net/team/team_core.c
1779
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1785
team->port_mtu_change_allowed = true;
drivers/net/team/team_core.c
1786
list_for_each_entry(port, &team->port_list, list) {
drivers/net/team/team_core.c
1794
team->port_mtu_change_allowed = false;
drivers/net/team/team_core.c
1801
list_for_each_entry_continue_reverse(port, &team->port_list, list)
drivers/net/team/team_core.c
1803
team->port_mtu_change_allowed = false;
drivers/net/team/team_core.c
1811
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1819
p = per_cpu_ptr(team->pcpu_stats, i);
drivers/net/team/team_core.c
182
err = __team_option_inst_add(team, option, NULL);
drivers/net/team/team_core.c
1849
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1855
list_for_each_entry(port, &team->port_list, list) {
drivers/net/team/team_core.c
1864
list_for_each_entry_continue_reverse(port, &team->port_list, list)
drivers/net/team/team_core.c
1872
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1877
list_for_each_entry(port, &team->port_list, list)
drivers/net/team/team_core.c
1888
static void __team_netpoll_cleanup(struct team *team)
drivers/net/team/team_core.c
189
__team_option_inst_del_option(team, option);
drivers/net/team/team_core.c
1892
list_for_each_entry(port, &team->port_list, list)
drivers/net/team/team_core.c
1898
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1902
__team_netpoll_cleanup(team);
drivers/net/team/team_core.c
1907
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1913
list_for_each_entry(port, &team->port_list, list) {
drivers/net/team/team_core.c
1916
__team_netpoll_cleanup(team);
drivers/net/team/team_core.c
1927
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
193
static void __team_option_inst_mark_removed_option(struct team *team,
drivers/net/team/team_core.c
1931
return team_port_add(team, port_dev, extack);
drivers/net/team/team_core.c
1936
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1940
return team_port_del(team, port_dev, false);
drivers/net/team/team_core.c
1945
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1949
return team_port_del(team, port_dev, true);
drivers/net/team/team_core.c
1956
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1963
list_for_each_entry_rcu(port, &team->port_list, list) {
drivers/net/team/team_core.c
1977
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
1979
team->user_carrier_enabled = true;
drivers/net/team/team_core.c
198
list_for_each_entry(opt_inst, &team->option_inst_list, list) {
drivers/net/team/team_core.c
2027
struct team *team= netdev_priv(dev);
drivers/net/team/team_core.c
2035
list_for_each_entry_rcu(port, &team->port_list, list) {
drivers/net/team/team_core.c
206
static void __team_option_inst_del_port(struct team *team,
drivers/net/team/team_core.c
2064
static struct team_port *team_header_port_get_rcu(struct team *team,
drivers/net/team/team_core.c
2069
list_for_each_entry_rcu(port, &team->port_list, list) {
drivers/net/team/team_core.c
2081
struct team *team = netdev_priv(team_dev);
drivers/net/team/team_core.c
2087
port = team_header_port_get_rcu(team, true);
drivers/net/team/team_core.c
2102
struct team *team = netdev_priv(team_dev);
drivers/net/team/team_core.c
2108
port = team_header_port_get_rcu(team, false);
drivers/net/team/team_core.c
211
list_for_each_entry_safe(opt_inst, tmp, &team->option_inst_list, list) {
drivers/net/team/team_core.c
2126
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
2129
dev->header_ops = team->header_ops_cache;
drivers/net/team/team_core.c
2154
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
2160
if (!list_empty(&team->port_list)) {
drivers/net/team/team_core.c
2179
struct team *team = netdev_priv(dev);
drivers/net/team/team_core.c
218
static int __team_option_inst_add_port(struct team *team,
drivers/net/team/team_core.c
2183
team->header_ops_cache = dev->header_ops;
drivers/net/team/team_core.c
224
list_for_each_entry(option, &team->option_list, list) {
drivers/net/team/team_core.c
2253
.priv_size = sizeof(struct team),
drivers/net/team/team_core.c
227
err = __team_option_inst_add(team, option, port);
drivers/net/team/team_core.c
2299
static struct team *team_nl_team_get(struct genl_info *info)
drivers/net/team/team_core.c
2320
static void team_nl_team_put(struct team *team)
drivers/net/team/team_core.c
2322
dev_put(team->dev);
drivers/net/team/team_core.c
2326
struct team *team, u32 portid);
drivers/net/team/team_core.c
2328
static int team_nl_send_unicast(struct sk_buff *skb, struct team *team, u32 portid)
drivers/net/team/team_core.c
2330
return genlmsg_unicast(dev_net(team->dev), skb, portid);
drivers/net/team/team_core.c
2333
static int team_nl_fill_one_option_get(struct sk_buff *skb, struct team *team,
drivers/net/team/team_core.c
234
__team_option_inst_del_port(team, port);
drivers/net/team/team_core.c
2343
err = team_option_get(team, opt_inst, &ctx);
drivers/net/team/team_core.c
238
static void __team_option_inst_mark_removed_port(struct team *team,
drivers/net/team/team_core.c
2415
struct team *team, u32 portid,
drivers/net/team/team_core.c
2421
err = send_func(*pskb, team, portid);
drivers/net/team/team_core.c
243
list_for_each_entry(opt_inst, &team->option_inst_list, list) {
drivers/net/team/team_core.c
2431
static int team_nl_send_options_get(struct team *team, u32 portid, u32 seq,
drivers/net/team/team_core.c
2448
err = __send_and_alloc_skb(&skb, team, portid, send_func);
drivers/net/team/team_core.c
2459
if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex))
drivers/net/team/team_core.c
2468
err = team_nl_fill_one_option_get(skb, team, opt_inst);
drivers/net/team/team_core.c
2489
err = __send_and_alloc_skb(&skb, team, portid, send_func);
drivers/net/team/team_core.c
2495
return send_func(skb, team, portid);
drivers/net/team/team_core.c
2506
struct team *team;
drivers/net/team/team_core.c
251
static int __team_options_register(struct team *team,
drivers/net/team/team_core.c
2513
team = team_nl_team_get(info);
drivers/net/team/team_core.c
2514
if (!team) {
drivers/net/team/team_core.c
2519
list_for_each_entry(opt_inst, &team->option_inst_list, list)
drivers/net/team/team_core.c
2521
err = team_nl_send_options_get(team, info->snd_portid, info->snd_seq,
drivers/net/team/team_core.c
2525
team_nl_team_put(team);
drivers/net/team/team_core.c
2533
static int team_nl_send_event_options_get(struct team *team,
drivers/net/team/team_core.c
2538
struct team *team;
drivers/net/team/team_core.c
2545
team = team_nl_team_get(info);
drivers/net/team/team_core.c
2546
if (!team) {
drivers/net/team/team_core.c
2623
list_for_each_entry(opt_inst, &team->option_inst_list, list) {
drivers/net/team/team_core.c
263
if (__team_find_option(team, option->name)) {
drivers/net/team/team_core.c
2666
err = team_option_set(team, opt_inst, &ctx);
drivers/net/team/team_core.c
2677
err = team_nl_send_event_options_get(team, &opt_inst_list);
drivers/net/team/team_core.c
2683
team_nl_team_put(team);
drivers/net/team/team_core.c
2719
static int team_nl_send_port_list_get(struct team *team, u32 portid, u32 seq,
drivers/net/team/team_core.c
2732
port = list_first_entry_or_null(&team->port_list,
drivers/net/team/team_core.c
2736
err = __send_and_alloc_skb(&skb, team, portid, send_func);
drivers/net/team/team_core.c
2747
if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex))
drivers/net/team/team_core.c
275
err = __team_option_inst_add_option(team, dst_opts[i]);
drivers/net/team/team_core.c
2764
list_for_each_entry_from(port, &team->port_list, list) {
drivers/net/team/team_core.c
278
list_add_tail(&dst_opts[i]->list, &team->option_list);
drivers/net/team/team_core.c
2787
err = __send_and_alloc_skb(&skb, team, portid, send_func);
drivers/net/team/team_core.c
2793
return send_func(skb, team, portid);
drivers/net/team/team_core.c
2805
struct team *team;
drivers/net/team/team_core.c
2810
team = team_nl_team_get(info);
drivers/net/team/team_core.c
2811
if (!team) {
drivers/net/team/team_core.c
2816
err = team_nl_send_port_list_get(team, info->snd_portid, info->snd_seq,
drivers/net/team/team_core.c
2819
team_nl_team_put(team);
drivers/net/team/team_core.c
2846
struct team *team, u32 portid)
drivers/net/team/team_core.c
2848
return genlmsg_multicast_netns(&team_nl_family, dev_net(team->dev),
drivers/net/team/team_core.c
2852
static int team_nl_send_event_options_get(struct team *team,
drivers/net/team/team_core.c
2855
return team_nl_send_options_get(team, 0, 0, 0, team_nl_send_multicast,
drivers/net/team/team_core.c
2859
static int team_nl_send_event_port_get(struct team *team,
drivers/net/team/team_core.c
286
__team_option_inst_del_option(team, dst_opts[i]);
drivers/net/team/team_core.c
2862
return team_nl_send_port_list_get(team, 0, 0, 0, team_nl_send_multicast,
drivers/net/team/team_core.c
2881
static void __team_options_change_check(struct team *team)
drivers/net/team/team_core.c
2887
list_for_each_entry(opt_inst, &team->option_inst_list, list) {
drivers/net/team/team_core.c
2891
err = team_nl_send_event_options_get(team, &sel_opt_inst_list);
drivers/net/team/team_core.c
2893
netdev_warn(team->dev, "Failed to send options change via netlink (err %d)\n",
drivers/net/team/team_core.c
2920
err = team_nl_send_event_port_get(port->team, port);
drivers/net/team/team_core.c
2922
netdev_warn(port->team->dev, "Failed to send port change of device %s via netlink (err %d)\n",
drivers/net/team/team_core.c
2927
static void __team_carrier_check(struct team *team)
drivers/net/team/team_core.c
2932
if (team->user_carrier_enabled)
drivers/net/team/team_core.c
2936
list_for_each_entry(port, &team->port_list, list) {
drivers/net/team/team_core.c
2944
netif_carrier_on(team->dev);
drivers/net/team/team_core.c
2946
netif_carrier_off(team->dev);
drivers/net/team/team_core.c
2953
__team_carrier_check(port->team);
drivers/net/team/team_core.c
2959
__team_carrier_check(port->team);
drivers/net/team/team_core.c
2966
__team_carrier_check(port->team);
drivers/net/team/team_core.c
299
static void __team_options_mark_removed(struct team *team,
drivers/net/team/team_core.c
3005
team_del_slave_on_unregister(port->team->dev, dev);
drivers/net/team/team_core.c
3008
if (!port->team->notifier_ctx) {
drivers/net/team/team_core.c
3009
port->team->notifier_ctx = true;
drivers/net/team/team_core.c
3010
netdev_compute_master_upper_features(port->team->dev, true);
drivers/net/team/team_core.c
3011
port->team->notifier_ctx = false;
drivers/net/team/team_core.c
3016
if (!port->team->port_mtu_change_allowed)
drivers/net/team/team_core.c
3024
call_netdevice_notifiers(event, port->team->dev);
drivers/net/team/team_core.c
308
del_opt = __team_find_option(team, option->name);
drivers/net/team/team_core.c
310
__team_option_inst_mark_removed_option(team, del_opt);
drivers/net/team/team_core.c
314
static void __team_options_unregister(struct team *team,
drivers/net/team/team_core.c
323
del_opt = __team_find_option(team, option->name);
drivers/net/team/team_core.c
325
__team_option_inst_del_option(team, del_opt);
drivers/net/team/team_core.c
332
static void __team_options_change_check(struct team *team);
drivers/net/team/team_core.c
334
int team_options_register(struct team *team,
drivers/net/team/team_core.c
340
err = __team_options_register(team, option, option_count);
drivers/net/team/team_core.c
343
__team_options_change_check(team);
drivers/net/team/team_core.c
348
void team_options_unregister(struct team *team,
drivers/net/team/team_core.c
352
__team_options_mark_removed(team, option, option_count);
drivers/net/team/team_core.c
353
__team_options_change_check(team);
drivers/net/team/team_core.c
354
__team_options_unregister(team, option, option_count);
drivers/net/team/team_core.c
358
static int team_option_get(struct team *team,
drivers/net/team/team_core.c
365
opt_inst->option->getter(team, ctx);
drivers/net/team/team_core.c
369
static int team_option_set(struct team *team,
drivers/net/team/team_core.c
375
return opt_inst->option->setter(team, ctx);
drivers/net/team/team_core.c
387
void team_options_change_check(struct team *team)
drivers/net/team/team_core.c
389
__team_options_change_check(team);
drivers/net/team/team_core.c
500
static bool team_dummy_transmit(struct team *team, struct sk_buff *skb)
drivers/net/team/team_core.c
506
static rx_handler_result_t team_dummy_receive(struct team *team,
drivers/net/team/team_core.c
517
static bool team_is_mode_set(struct team *team)
drivers/net/team/team_core.c
519
return team->mode != &__team_no_mode;
drivers/net/team/team_core.c
522
static void team_set_no_mode(struct team *team)
drivers/net/team/team_core.c
524
team->user_carrier_enabled = false;
drivers/net/team/team_core.c
525
team->mode = &__team_no_mode;
drivers/net/team/team_core.c
528
static void team_adjust_ops(struct team *team)
drivers/net/team/team_core.c
535
if (!team->en_port_count || !team_is_mode_set(team) ||
drivers/net/team/team_core.c
536
!team->mode->ops->transmit)
drivers/net/team/team_core.c
537
team->ops.transmit = team_dummy_transmit;
drivers/net/team/team_core.c
539
team->ops.transmit = team->mode->ops->transmit;
drivers/net/team/team_core.c
541
if (!team->en_port_count || !team_is_mode_set(team) ||
drivers/net/team/team_core.c
542
!team->mode->ops->receive)
drivers/net/team/team_core.c
543
team->ops.receive = team_dummy_receive;
drivers/net/team/team_core.c
545
team->ops.receive = team->mode->ops->receive;
drivers/net/team/team_core.c
553
static int __team_change_mode(struct team *team,
drivers/net/team/team_core.c
557
if (team_is_mode_set(team)) {
drivers/net/team/team_core.c
558
void (*exit_op)(struct team *team) = team->ops.exit;
drivers/net/team/team_core.c
561
memset(&team->ops, 0, sizeof(struct team_mode_ops));
drivers/net/team/team_core.c
562
team_adjust_ops(team);
drivers/net/team/team_core.c
565
exit_op(team);
drivers/net/team/team_core.c
566
team_mode_put(team->mode);
drivers/net/team/team_core.c
567
team_set_no_mode(team);
drivers/net/team/team_core.c
569
memset(&team->mode_priv, 0,
drivers/net/team/team_core.c
570
sizeof(struct team) - offsetof(struct team, mode_priv));
drivers/net/team/team_core.c
579
err = new_mode->ops->init(team);
drivers/net/team/team_core.c
584
team->mode = new_mode;
drivers/net/team/team_core.c
585
memcpy(&team->ops, new_mode->ops, sizeof(struct team_mode_ops));
drivers/net/team/team_core.c
586
team_adjust_ops(team);
drivers/net/team/team_core.c
591
static int team_change_mode(struct team *team, const char *kind)
drivers/net/team/team_core.c
594
struct net_device *dev = team->dev;
drivers/net/team/team_core.c
597
if (!list_empty(&team->port_list)) {
drivers/net/team/team_core.c
602
if (team_is_mode_set(team) && strcmp(team->mode->kind, kind) == 0) {
drivers/net/team/team_core.c
613
err = __team_change_mode(team, new_mode);
drivers/net/team/team_core.c
631
struct team *team;
drivers/net/team/team_core.c
634
team = container_of(work, struct team, notify_peers.dw.work);
drivers/net/team/team_core.c
637
schedule_delayed_work(&team->notify_peers.dw, 0);
drivers/net/team/team_core.c
640
val = atomic_dec_if_positive(&team->notify_peers.count_pending);
drivers/net/team/team_core.c
645
call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, team->dev);
drivers/net/team/team_core.c
648
schedule_delayed_work(&team->notify_peers.dw,
drivers/net/team/team_core.c
649
msecs_to_jiffies(team->notify_peers.interval));
drivers/net/team/team_core.c
652
static void team_notify_peers(struct team *team)
drivers/net/team/team_core.c
654
if (!team->notify_peers.count || !netif_running(team->dev))
drivers/net/team/team_core.c
656
atomic_add(team->notify_peers.count, &team->notify_peers.count_pending);
drivers/net/team/team_core.c
657
schedule_delayed_work(&team->notify_peers.dw, 0);
drivers/net/team/team_core.c
66
static int team_port_set_team_dev_addr(struct team *team,
drivers/net/team/team_core.c
660
static void team_notify_peers_init(struct team *team)
drivers/net/team/team_core.c
662
INIT_DELAYED_WORK(&team->notify_peers.dw, team_notify_peers_work);
drivers/net/team/team_core.c
665
static void team_notify_peers_fini(struct team *team)
drivers/net/team/team_core.c
667
cancel_delayed_work_sync(&team->notify_peers.dw);
drivers/net/team/team_core.c
677
struct team *team;
drivers/net/team/team_core.c
680
team = container_of(work, struct team, mcast_rejoin.dw.work);
drivers/net/team/team_core.c
683
schedule_delayed_work(&team->mcast_rejoin.dw, 0);
drivers/net/team/team_core.c
686
val = atomic_dec_if_positive(&team->mcast_rejoin.count_pending);
drivers/net/team/team_core.c
69
return __set_port_dev_addr(port->dev, team->dev->dev_addr);
drivers/net/team/team_core.c
691
call_netdevice_notifiers(NETDEV_RESEND_IGMP, team->dev);
drivers/net/team/team_core.c
694
schedule_delayed_work(&team->mcast_rejoin.dw,
drivers/net/team/team_core.c
695
msecs_to_jiffies(team->mcast_rejoin.interval));
drivers/net/team/team_core.c
698
static void team_mcast_rejoin(struct team *team)
drivers/net/team/team_core.c
700
if (!team->mcast_rejoin.count || !netif_running(team->dev))
drivers/net/team/team_core.c
702
atomic_add(team->mcast_rejoin.count, &team->mcast_rejoin.count_pending);
drivers/net/team/team_core.c
703
schedule_delayed_work(&team->mcast_rejoin.dw, 0);
drivers/net/team/team_core.c
706
static void team_mcast_rejoin_init(struct team *team)
drivers/net/team/team_core.c
708
INIT_DELAYED_WORK(&team->mcast_rejoin.dw, team_mcast_rejoin_work);
drivers/net/team/team_core.c
711
static void team_mcast_rejoin_fini(struct team *team)
drivers/net/team/team_core.c
713
cancel_delayed_work_sync(&team->mcast_rejoin.dw);
drivers/net/team/team_core.c
72
int team_modeop_port_enter(struct team *team, struct team_port *port)
drivers/net/team/team_core.c
726
struct team *team;
drivers/net/team/team_core.c
736
team = port->team;
drivers/net/team/team_core.c
74
return team_port_set_team_dev_addr(team, port);
drivers/net/team/team_core.c
746
res = team->ops.receive(team, port, skb);
drivers/net/team/team_core.c
751
pcpu_stats = this_cpu_ptr(team->pcpu_stats);
drivers/net/team/team_core.c
759
skb->dev = team->dev;
drivers/net/team/team_core.c
761
this_cpu_inc(team->pcpu_stats->rx_nohandler);
drivers/net/team/team_core.c
763
this_cpu_inc(team->pcpu_stats->rx_dropped);
drivers/net/team/team_core.c
774
static int team_queue_override_init(struct team *team)
drivers/net/team/team_core.c
777
unsigned int queue_cnt = team->dev->num_tx_queues - 1;
drivers/net/team/team_core.c
78
void team_modeop_port_change_dev_addr(struct team *team,
drivers/net/team/team_core.c
785
team->qom_lists = listarr;
drivers/net/team/team_core.c
791
static void team_queue_override_fini(struct team *team)
drivers/net/team/team_core.c
793
kfree(team->qom_lists);
drivers/net/team/team_core.c
796
static struct list_head *__team_get_qom_list(struct team *team, u16 queue_id)
drivers/net/team/team_core.c
798
return &team->qom_lists[queue_id - 1];
drivers/net/team/team_core.c
804
static bool team_queue_override_transmit(struct team *team, struct sk_buff *skb)
drivers/net/team/team_core.c
809
if (!team->queue_override_enabled || !skb->queue_mapping)
drivers/net/team/team_core.c
81
team_port_set_team_dev_addr(team, port);
drivers/net/team/team_core.c
811
qom_list = __team_get_qom_list(team, skb->queue_mapping);
drivers/net/team/team_core.c
813
if (!team_dev_queue_xmit(team, port, skb))
drivers/net/team/team_core.c
819
static void __team_queue_override_port_del(struct team *team,
drivers/net/team/team_core.c
839
static void __team_queue_override_port_add(struct team *team,
drivers/net/team/team_core.c
848
qom_list = __team_get_qom_list(team, port->queue_id);
drivers/net/team/team_core.c
858
static void __team_queue_override_enabled_check(struct team *team)
drivers/net/team/team_core.c
863
list_for_each_entry(port, &team->port_list, list) {
drivers/net/team/team_core.c
869
if (enabled == team->queue_override_enabled)
drivers/net/team/team_core.c
871
netdev_dbg(team->dev, "%s queue override\n",
drivers/net/team/team_core.c
873
team->queue_override_enabled = enabled;
drivers/net/team/team_core.c
876
static void team_queue_override_port_prio_changed(struct team *team,
drivers/net/team/team_core.c
881
__team_queue_override_port_del(team, port);
drivers/net/team/team_core.c
882
__team_queue_override_port_add(team, port);
drivers/net/team/team_core.c
883
__team_queue_override_enabled_check(team);
drivers/net/team/team_core.c
886
static void team_queue_override_port_change_queue_id(struct team *team,
drivers/net/team/team_core.c
891
__team_queue_override_port_del(team, port);
drivers/net/team/team_core.c
893
__team_queue_override_port_add(team, port);
drivers/net/team/team_core.c
894
__team_queue_override_enabled_check(team);
drivers/net/team/team_core.c
900
static void team_queue_override_port_add(struct team *team,
drivers/net/team/team_core.c
903
__team_queue_override_port_add(team, port);
drivers/net/team/team_core.c
904
__team_queue_override_enabled_check(team);
drivers/net/team/team_core.c
907
static void team_queue_override_port_del(struct team *team,
drivers/net/team/team_core.c
910
__team_queue_override_port_del(team, port);
drivers/net/team/team_core.c
911
__team_queue_override_enabled_check(team);
drivers/net/team/team_core.c
919
static bool team_port_find(const struct team *team,
drivers/net/team/team_core.c
924
list_for_each_entry(cur, &team->port_list, list)
drivers/net/team/team_core.c
936
static void team_port_enable(struct team *team,
drivers/net/team/team_core.c
941
port->index = team->en_port_count++;
drivers/net/team/team_core.c
943
team_port_index_hash(team, port->index));
drivers/net/team/team_core.c
944
team_adjust_ops(team);
drivers/net/team/team_core.c
945
team_queue_override_port_add(team, port);
drivers/net/team/team_core.c
946
if (team->ops.port_enabled)
drivers/net/team/team_core.c
947
team->ops.port_enabled(team, port);
drivers/net/team/team_core.c
948
team_notify_peers(team);
drivers/net/team/team_core.c
949
team_mcast_rejoin(team);
drivers/net/team/team_core.c
953
static void __reconstruct_port_hlist(struct team *team, int rm_index)
drivers/net/team/team_core.c
958
for (i = rm_index + 1; i < team->en_port_count; i++) {
drivers/net/team/team_core.c
959
port = team_get_port_by_index(team, i);
drivers/net/team/team_core.c
963
team_port_index_hash(team, port->index));
drivers/net/team/team_core.c
967
static void team_port_disable(struct team *team,
drivers/net/team/team_core.c
972
if (team->ops.port_disabled)
drivers/net/team/team_core.c
973
team->ops.port_disabled(team, port);
drivers/net/team/team_core.c
975
__reconstruct_port_hlist(team, port->index);
drivers/net/team/team_core.c
977
team->en_port_count--;
drivers/net/team/team_core.c
978
team_queue_override_port_del(team, port);
drivers/net/team/team_core.c
979
team_adjust_ops(team);
drivers/net/team/team_core.c
983
static int team_port_enter(struct team *team, struct team_port *port)
drivers/net/team/team_core.c
987
dev_hold(team->dev);
drivers/net/team/team_core.c
988
if (team->ops.port_enter) {
drivers/net/team/team_core.c
989
err = team->ops.port_enter(team, port);
drivers/net/team/team_core.c
991
netdev_err(team->dev, "Device %s failed to enter team mode\n",
drivers/net/team/team_mode_activebackup.c
100
static int ab_init(struct team *team)
drivers/net/team/team_mode_activebackup.c
102
return team_options_register(team, ab_options, ARRAY_SIZE(ab_options));
drivers/net/team/team_mode_activebackup.c
105
static void ab_exit(struct team *team)
drivers/net/team/team_mode_activebackup.c
107
team_options_unregister(team, ab_options, ARRAY_SIZE(ab_options));
drivers/net/team/team_mode_activebackup.c
21
static struct ab_priv *ab_priv(struct team *team)
drivers/net/team/team_mode_activebackup.c
23
return (struct ab_priv *) &team->mode_priv;
drivers/net/team/team_mode_activebackup.c
26
static rx_handler_result_t ab_receive(struct team *team, struct team_port *port,
drivers/net/team/team_mode_activebackup.c
30
active_port = rcu_dereference(ab_priv(team)->active_port);
drivers/net/team/team_mode_activebackup.c
36
static bool ab_transmit(struct team *team, struct sk_buff *skb)
drivers/net/team/team_mode_activebackup.c
40
active_port = rcu_dereference_bh(ab_priv(team)->active_port);
drivers/net/team/team_mode_activebackup.c
43
if (team_dev_queue_xmit(team, active_port, skb))
drivers/net/team/team_mode_activebackup.c
52
static void ab_port_leave(struct team *team, struct team_port *port)
drivers/net/team/team_mode_activebackup.c
54
if (ab_priv(team)->active_port == port) {
drivers/net/team/team_mode_activebackup.c
55
RCU_INIT_POINTER(ab_priv(team)->active_port, NULL);
drivers/net/team/team_mode_activebackup.c
56
team_option_inst_set_change(ab_priv(team)->ap_opt_inst_info);
drivers/net/team/team_mode_activebackup.c
60
static void ab_active_port_init(struct team *team,
drivers/net/team/team_mode_activebackup.c
63
ab_priv(team)->ap_opt_inst_info = info;
drivers/net/team/team_mode_activebackup.c
66
static void ab_active_port_get(struct team *team, struct team_gsetter_ctx *ctx)
drivers/net/team/team_mode_activebackup.c
70
active_port = rtnl_dereference(ab_priv(team)->active_port);
drivers/net/team/team_mode_activebackup.c
77
static int ab_active_port_set(struct team *team, struct team_gsetter_ctx *ctx)
drivers/net/team/team_mode_activebackup.c
81
list_for_each_entry(port, &team->port_list, list) {
drivers/net/team/team_mode_activebackup.c
83
rcu_assign_pointer(ab_priv(team)->active_port, port);
drivers/net/team/team_mode_broadcast.c
14
static bool bc_transmit(struct team *team, struct sk_buff *skb)
drivers/net/team/team_mode_broadcast.c
22
list_for_each_entry_rcu(cur, &team->port_list, list) {
drivers/net/team/team_mode_broadcast.c
27
ret = !team_dev_queue_xmit(team, last,
drivers/net/team/team_mode_broadcast.c
37
ret = !team_dev_queue_xmit(team, last, skb);
drivers/net/team/team_mode_loadbalance.c
114
team_options_change_check(team);
drivers/net/team/team_mode_loadbalance.c
118
static struct team_port *lb_hash_select_tx_port(struct team *team,
drivers/net/team/team_mode_loadbalance.c
121
int port_index = team_num_to_port_index(team, hash);
drivers/net/team/team_mode_loadbalance.c
123
return team_get_port_by_index_rcu(team, port_index);
drivers/net/team/team_mode_loadbalance.c
127
static struct team_port *lb_htpm_select_tx_port(struct team *team,
drivers/net/team/team_mode_loadbalance.c
130
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
137
return lb_hash_select_tx_port(team, hash);
drivers/net/team/team_mode_loadbalance.c
17
static rx_handler_result_t lb_receive(struct team *team, struct team_port *port,
drivers/net/team/team_mode_loadbalance.c
217
static bool lb_transmit(struct team *team, struct sk_buff *skb)
drivers/net/team/team_mode_loadbalance.c
219
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
227
port = select_tx_port_func(team, hash);
drivers/net/team/team_mode_loadbalance.c
230
if (team_dev_queue_xmit(team, port, skb))
drivers/net/team/team_mode_loadbalance.c
240
static void lb_bpf_func_get(struct team *team, struct team_gsetter_ctx *ctx)
drivers/net/team/team_mode_loadbalance.c
242
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
281
static int lb_bpf_func_set(struct team *team, struct team_gsetter_ctx *ctx)
drivers/net/team/team_mode_loadbalance.c
283
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
317
static void lb_bpf_func_free(struct team *team)
drivers/net/team/team_mode_loadbalance.c
319
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
330
static void lb_tx_method_get(struct team *team, struct team_gsetter_ctx *ctx)
drivers/net/team/team_mode_loadbalance.c
332
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
342
static int lb_tx_method_set(struct team *team, struct team_gsetter_ctx *ctx)
drivers/net/team/team_mode_loadbalance.c
344
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
354
static void lb_tx_hash_to_port_mapping_init(struct team *team,
drivers/net/team/team_mode_loadbalance.c
357
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
363
static void lb_tx_hash_to_port_mapping_get(struct team *team,
drivers/net/team/team_mode_loadbalance.c
366
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
374
static int lb_tx_hash_to_port_mapping_set(struct team *team,
drivers/net/team/team_mode_loadbalance.c
377
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
381
list_for_each_entry(port, &team->port_list, list) {
drivers/net/team/team_mode_loadbalance.c
392
static void lb_hash_stats_init(struct team *team,
drivers/net/team/team_mode_loadbalance.c
395
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
401
static void lb_hash_stats_get(struct team *team, struct team_gsetter_ctx *ctx)
drivers/net/team/team_mode_loadbalance.c
403
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
410
static void lb_port_stats_init(struct team *team,
drivers/net/team/team_mode_loadbalance.c
419
static void lb_port_stats_get(struct team *team, struct team_gsetter_ctx *ctx)
drivers/net/team/team_mode_loadbalance.c
435
struct team *team)
drivers/net/team/team_mode_loadbalance.c
461
struct team *team;
drivers/net/team/team_mode_loadbalance.c
475
team = lb_priv_ex->team;
drivers/net/team/team_mode_loadbalance.c
476
lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
492
changed |= __lb_stats_info_refresh_check(s_info, team);
drivers/net/team/team_mode_loadbalance.c
495
list_for_each_entry(port, &team->port_list, list) {
drivers/net/team/team_mode_loadbalance.c
506
changed |= __lb_stats_info_refresh_check(s_info, team);
drivers/net/team/team_mode_loadbalance.c
510
team_options_change_check(team);
drivers/net/team/team_mode_loadbalance.c
518
static void lb_stats_refresh_interval_get(struct team *team,
drivers/net/team/team_mode_loadbalance.c
521
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
526
static int lb_stats_refresh_interval_set(struct team *team,
drivers/net/team/team_mode_loadbalance.c
529
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
58
struct team *team;
drivers/net/team/team_mode_loadbalance.c
586
static int lb_init(struct team *team)
drivers/net/team/team_mode_loadbalance.c
588
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
600
lb_priv->ex->team = team;
drivers/net/team/team_mode_loadbalance.c
617
err = team_options_register(team, lb_options, ARRAY_SIZE(lb_options));
drivers/net/team/team_mode_loadbalance.c
629
static void lb_exit(struct team *team)
drivers/net/team/team_mode_loadbalance.c
631
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_loadbalance.c
633
team_options_unregister(team, lb_options,
drivers/net/team/team_mode_loadbalance.c
635
lb_bpf_func_free(team);
drivers/net/team/team_mode_loadbalance.c
641
static int lb_port_enter(struct team *team, struct team_port *port)
drivers/net/team/team_mode_loadbalance.c
651
static void lb_port_leave(struct team *team, struct team_port *port)
drivers/net/team/team_mode_loadbalance.c
658
static void lb_port_disabled(struct team *team, struct team_port *port)
drivers/net/team/team_mode_loadbalance.c
660
lb_tx_hash_to_port_mapping_null_port(team, port);
drivers/net/team/team_mode_loadbalance.c
75
static struct lb_priv *get_lb_priv(struct team *team)
drivers/net/team/team_mode_loadbalance.c
77
return (struct lb_priv *) &team->mode_priv;
drivers/net/team/team_mode_loadbalance.c
96
static void lb_tx_hash_to_port_mapping_null_port(struct team *team,
drivers/net/team/team_mode_loadbalance.c
99
struct lb_priv *lb_priv = get_lb_priv(team);
drivers/net/team/team_mode_random.c
14
static bool rnd_transmit(struct team *team, struct sk_buff *skb)
drivers/net/team/team_mode_random.c
19
port_index = get_random_u32_below(team->en_port_count);
drivers/net/team/team_mode_random.c
20
port = team_get_port_by_index_rcu(team, port_index);
drivers/net/team/team_mode_random.c
23
port = team_get_first_port_txable_rcu(team, port);
drivers/net/team/team_mode_random.c
26
if (team_dev_queue_xmit(team, port, skb))
drivers/net/team/team_mode_roundrobin.c
18
static struct rr_priv *rr_priv(struct team *team)
drivers/net/team/team_mode_roundrobin.c
20
return (struct rr_priv *) &team->mode_priv;
drivers/net/team/team_mode_roundrobin.c
23
static bool rr_transmit(struct team *team, struct sk_buff *skb)
drivers/net/team/team_mode_roundrobin.c
28
port_index = team_num_to_port_index(team,
drivers/net/team/team_mode_roundrobin.c
29
rr_priv(team)->sent_packets++);
drivers/net/team/team_mode_roundrobin.c
30
port = team_get_port_by_index_rcu(team, port_index);
drivers/net/team/team_mode_roundrobin.c
33
port = team_get_first_port_txable_rcu(team, port);
drivers/net/team/team_mode_roundrobin.c
36
if (team_dev_queue_xmit(team, port, skb))
include/linux/if_team.h
115
int (*init)(struct team *team);
include/linux/if_team.h
116
void (*exit)(struct team *team);
include/linux/if_team.h
117
rx_handler_result_t (*receive)(struct team *team,
include/linux/if_team.h
120
bool (*transmit)(struct team *team, struct sk_buff *skb);
include/linux/if_team.h
121
int (*port_enter)(struct team *team, struct team_port *port);
include/linux/if_team.h
122
void (*port_leave)(struct team *team, struct team_port *port);
include/linux/if_team.h
123
void (*port_change_dev_addr)(struct team *team, struct team_port *port);
include/linux/if_team.h
124
void (*port_enabled)(struct team *team, struct team_port *port);
include/linux/if_team.h
125
void (*port_disabled)(struct team *team, struct team_port *port);
include/linux/if_team.h
128
extern int team_modeop_port_enter(struct team *team, struct team_port *port);
include/linux/if_team.h
129
extern void team_modeop_port_change_dev_addr(struct team *team,
include/linux/if_team.h
165
void (*init)(struct team *team, struct team_option_inst_info *info);
include/linux/if_team.h
166
void (*getter)(struct team *team, struct team_gsetter_ctx *ctx);
include/linux/if_team.h
167
int (*setter)(struct team *team, struct team_gsetter_ctx *ctx);
include/linux/if_team.h
171
extern void team_options_change_check(struct team *team);
include/linux/if_team.h
227
static inline int team_dev_queue_xmit(struct team *team, struct team_port *port,
include/linux/if_team.h
235
if (unlikely(netpoll_tx_running(team->dev))) {
include/linux/if_team.h
242
static inline struct hlist_head *team_port_index_hash(struct team *team,
include/linux/if_team.h
245
return &team->en_port_hlist[port_index & (TEAM_PORT_HASHENTRIES - 1)];
include/linux/if_team.h
248
static inline struct team_port *team_get_port_by_index(struct team *team,
include/linux/if_team.h
252
struct hlist_head *head = team_port_index_hash(team, port_index);
include/linux/if_team.h
26
struct team;
include/linux/if_team.h
260
static inline int team_num_to_port_index(struct team *team, unsigned int num)
include/linux/if_team.h
262
int en_port_count = READ_ONCE(team->en_port_count);
include/linux/if_team.h
269
static inline struct team_port *team_get_port_by_index_rcu(struct team *team,
include/linux/if_team.h
273
struct hlist_head *head = team_port_index_hash(team, port_index);
include/linux/if_team.h
282
team_get_first_port_txable_rcu(struct team *team, struct team_port *port)
include/linux/if_team.h
289
list_for_each_entry_continue_rcu(cur, &team->port_list, list)
include/linux/if_team.h
292
list_for_each_entry_rcu(cur, &team->port_list, list) {
include/linux/if_team.h
301
extern int team_options_register(struct team *team,
include/linux/if_team.h
304
extern void team_options_unregister(struct team *team,
include/linux/if_team.h
32
struct team *team;