Lines Matching +full:primary +full:- +full:bond
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * drivers/net/bond/bond_netlink.c - Netlink interface for bonding
43 if (nla_put_u8(skb, IFLA_BOND_SLAVE_MII_STATUS, slave->link)) in bond_fill_slave_info()
47 slave->link_failure_count)) in bond_fill_slave_info()
51 slave_dev->addr_len, slave->perm_hwaddr)) in bond_fill_slave_info()
55 READ_ONCE(slave->queue_id))) in bond_fill_slave_info()
58 if (nla_put_s32(skb, IFLA_BOND_SLAVE_PRIO, slave->prio)) in bond_fill_slave_info()
61 if (BOND_MODE(slave->bond) == BOND_MODE_8023AD) { in bond_fill_slave_info()
65 ad_port = &SLAVE_AD_INFO(slave)->port; in bond_fill_slave_info()
66 agg = SLAVE_AD_INFO(slave)->port.aggregator; in bond_fill_slave_info()
69 agg->aggregator_identifier)) in bond_fill_slave_info()
73 ad_port->actor_oper_port_state)) in bond_fill_slave_info()
77 ad_port->partner_oper.port_state)) in bond_fill_slave_info()
85 return -EMSGSIZE; in bond_fill_slave_info()
140 return -EINVAL; in bond_validate()
142 return -EADDRNOTAVAIL; in bond_validate()
152 struct bonding *bond = netdev_priv(bond_dev); in bond_slave_changelink() local
165 slave_dev->name, queue_id); in bond_slave_changelink()
167 err = __bond_opt_set(bond, BOND_OPT_QUEUE_ID, &newval, in bond_slave_changelink()
177 err = __bond_opt_set(bond, BOND_OPT_PRIO, &newval, in bond_slave_changelink()
190 struct bonding *bond = netdev_priv(bond_dev); in bond_changelink() local
202 err = __bond_opt_set(bond, BOND_OPT_MODE, &newval, in bond_changelink()
216 return -ENODEV; in bond_changelink()
217 active_slave = slave_dev->name; in bond_changelink()
220 err = __bond_opt_set(bond, BOND_OPT_ACTIVE_SLAVE, &newval, in bond_changelink()
229 err = __bond_opt_set(bond, BOND_OPT_MIIMON, &newval, in bond_changelink()
238 err = __bond_opt_set(bond, BOND_OPT_UPDELAY, &newval, in bond_changelink()
247 err = __bond_opt_set(bond, BOND_OPT_DOWNDELAY, &newval, in bond_changelink()
256 err = __bond_opt_set(bond, BOND_OPT_PEER_NOTIF_DELAY, &newval, in bond_changelink()
265 err = __bond_opt_set(bond, BOND_OPT_USE_CARRIER, &newval, in bond_changelink()
276 return -EINVAL; in bond_changelink()
280 err = __bond_opt_set(bond, BOND_OPT_ARP_INTERVAL, &newval, in bond_changelink()
289 bond_option_arp_ip_targets_clear(bond); in bond_changelink()
294 return -EINVAL; in bond_changelink()
299 err = __bond_opt_set(bond, BOND_OPT_ARP_TARGETS, in bond_changelink()
307 if (i == 0 && bond->params.arp_interval) in bond_changelink()
308 netdev_warn(bond->dev, "Removing last arp target with arp_interval on\n"); in bond_changelink()
317 bond_option_ns_ip6_targets_clear(bond); in bond_changelink()
323 return -EINVAL; in bond_changelink()
329 err = __bond_opt_set(bond, BOND_OPT_NS_TARGETS, in bond_changelink()
337 if (i == 0 && bond->params.arp_interval) in bond_changelink()
338 netdev_warn(bond->dev, "Removing last ns target with arp_interval on\n"); in bond_changelink()
349 return -EINVAL; in bond_changelink()
353 err = __bond_opt_set(bond, BOND_OPT_ARP_VALIDATE, &newval, in bond_changelink()
363 err = __bond_opt_set(bond, BOND_OPT_ARP_ALL_TARGETS, &newval, in bond_changelink()
371 char *primary = ""; in bond_changelink() local
375 primary = dev->name; in bond_changelink()
377 bond_opt_initstr(&newval, primary); in bond_changelink()
378 err = __bond_opt_set(bond, BOND_OPT_PRIMARY, &newval, in bond_changelink()
388 err = __bond_opt_set(bond, BOND_OPT_PRIMARY_RESELECT, &newval, in bond_changelink()
398 err = __bond_opt_set(bond, BOND_OPT_FAIL_OVER_MAC, &newval, in bond_changelink()
408 err = __bond_opt_set(bond, BOND_OPT_XMIT_HASH, &newval, in bond_changelink()
418 err = __bond_opt_set(bond, BOND_OPT_RESEND_IGMP, &newval, in bond_changelink()
428 err = __bond_opt_set(bond, BOND_OPT_NUM_PEER_NOTIF, &newval, in bond_changelink()
438 err = __bond_opt_set(bond, BOND_OPT_ALL_SLAVES_ACTIVE, &newval, in bond_changelink()
448 err = __bond_opt_set(bond, BOND_OPT_MINLINKS, &newval, in bond_changelink()
458 err = __bond_opt_set(bond, BOND_OPT_LP_INTERVAL, &newval, in bond_changelink()
468 err = __bond_opt_set(bond, BOND_OPT_PACKETS_PER_SLAVE, &newval, in bond_changelink()
478 err = __bond_opt_set(bond, BOND_OPT_LACP_ACTIVE, &newval, in bond_changelink()
489 err = __bond_opt_set(bond, BOND_OPT_LACP_RATE, &newval, in bond_changelink()
499 err = __bond_opt_set(bond, BOND_OPT_AD_SELECT, &newval, in bond_changelink()
509 err = __bond_opt_set(bond, BOND_OPT_AD_ACTOR_SYS_PRIO, &newval, in bond_changelink()
519 err = __bond_opt_set(bond, BOND_OPT_AD_USER_PORT_KEY, &newval, in bond_changelink()
526 return -EINVAL; in bond_changelink()
530 err = __bond_opt_set(bond, BOND_OPT_AD_ACTOR_SYSTEM, &newval, in bond_changelink()
539 err = __bond_opt_set(bond, BOND_OPT_TLB_DYNAMIC_LB, &newval, in bond_changelink()
549 err = __bond_opt_set(bond, BOND_OPT_MISSED_MAX, &newval, in bond_changelink()
559 err = __bond_opt_set(bond, BOND_OPT_COUPLED_CONTROL, &newval, in bond_changelink()
569 err = __bond_opt_set(bond, BOND_OPT_BROADCAST_NEIGH, &newval, in bond_changelink()
582 struct nlattr **data = params->data; in bond_newlink()
583 struct nlattr **tb = params->tb; in bond_newlink()
592 struct bonding *bond = netdev_priv(bond_dev); in bond_newlink() local
595 bond_work_init_all(bond); in bond_newlink()
648 static int bond_option_active_slave_get_ifindex(struct bonding *bond) in bond_option_active_slave_get_ifindex() argument
654 slave = bond_option_active_slave_get_rcu(bond); in bond_option_active_slave_get_ifindex()
655 ifindex = slave ? slave->ifindex : 0; in bond_option_active_slave_get_ifindex()
663 struct bonding *bond = netdev_priv(bond_dev); in bond_fill_info() local
667 struct slave *primary; in bond_fill_info() local
669 if (nla_put_u8(skb, IFLA_BOND_MODE, BOND_MODE(bond))) in bond_fill_info()
672 ifindex = bond_option_active_slave_get_ifindex(bond); in bond_fill_info()
676 if (nla_put_u32(skb, IFLA_BOND_MIIMON, bond->params.miimon)) in bond_fill_info()
680 bond->params.updelay * bond->params.miimon)) in bond_fill_info()
684 bond->params.downdelay * bond->params.miimon)) in bond_fill_info()
688 bond->params.peer_notif_delay * bond->params.miimon)) in bond_fill_info()
691 if (nla_put_u8(skb, IFLA_BOND_USE_CARRIER, bond->params.use_carrier)) in bond_fill_info()
694 if (nla_put_u32(skb, IFLA_BOND_ARP_INTERVAL, bond->params.arp_interval)) in bond_fill_info()
703 if (bond->params.arp_targets[i]) { in bond_fill_info()
704 if (nla_put_be32(skb, i, bond->params.arp_targets[i])) in bond_fill_info()
715 if (nla_put_u32(skb, IFLA_BOND_ARP_VALIDATE, bond->params.arp_validate)) in bond_fill_info()
719 bond->params.arp_all_targets)) in bond_fill_info()
729 if (!ipv6_addr_any(&bond->params.ns_targets[i])) { in bond_fill_info()
730 if (nla_put_in6_addr(skb, i, &bond->params.ns_targets[i])) in bond_fill_info()
742 primary = rtnl_dereference(bond->primary_slave); in bond_fill_info()
743 if (primary && in bond_fill_info()
744 nla_put_u32(skb, IFLA_BOND_PRIMARY, primary->dev->ifindex)) in bond_fill_info()
748 bond->params.primary_reselect)) in bond_fill_info()
752 bond->params.fail_over_mac)) in bond_fill_info()
756 bond->params.xmit_policy)) in bond_fill_info()
760 bond->params.resend_igmp)) in bond_fill_info()
764 bond->params.num_peer_notif)) in bond_fill_info()
768 bond->params.all_slaves_active)) in bond_fill_info()
772 bond->params.min_links)) in bond_fill_info()
776 bond->params.lp_interval)) in bond_fill_info()
779 packets_per_slave = bond->params.packets_per_slave; in bond_fill_info()
785 bond->params.lacp_active)) in bond_fill_info()
789 bond->params.lacp_fast)) in bond_fill_info()
793 bond->params.ad_select)) in bond_fill_info()
797 bond->params.tlb_dynamic_lb)) in bond_fill_info()
801 bond->params.missed_max)) in bond_fill_info()
805 bond->params.coupled_control)) in bond_fill_info()
809 bond->params.broadcast_neighbor)) in bond_fill_info()
812 if (BOND_MODE(bond) == BOND_MODE_8023AD) { in bond_fill_info()
817 bond->params.ad_actor_sys_prio)) in bond_fill_info()
821 bond->params.ad_user_port_key)) in bond_fill_info()
825 ETH_ALEN, &bond->params.ad_actor_system)) in bond_fill_info()
828 if (!bond_3ad_get_active_agg_info(bond, &info)) { in bond_fill_info()
859 return -EMSGSIZE; in bond_fill_info()
882 struct bonding *bond; in bond_fill_linkxstats() local
886 bond = netdev_priv(dev); in bond_fill_linkxstats()
892 bond = slave->bond; in bond_fill_linkxstats()
895 return -EINVAL; in bond_fill_linkxstats()
900 return -EMSGSIZE; in bond_fill_linkxstats()
901 if (BOND_MODE(bond) == BOND_MODE_8023AD) { in bond_fill_linkxstats()
905 stats = &SLAVE_AD_INFO(slave)->stats; in bond_fill_linkxstats()
907 stats = &BOND_AD_INFO(bond).stats; in bond_fill_linkxstats()
912 return -EMSGSIZE; in bond_fill_linkxstats()
918 return -EMSGSIZE; in bond_fill_linkxstats()
928 .kind = "bond",
960 MODULE_ALIAS_RTNL_LINK("bond");