Lines Matching refs:bond

266 static bool bond_time_in_interval(struct bonding *bond, unsigned long last_act,
297 netdev_tx_t bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, in bond_dev_queue_xmit() argument
306 if (unlikely(netpoll_tx_running(bond->dev))) in bond_dev_queue_xmit()
307 return bond_netpoll_send_skb(bond_get_slave_by_dev(bond, slave_dev), skb); in bond_dev_queue_xmit()
312 static bool bond_sk_check(struct bonding *bond) in bond_sk_check() argument
314 switch (BOND_MODE(bond)) { in bond_sk_check()
317 if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER34) in bond_sk_check()
325 static bool bond_xdp_check(struct bonding *bond) in bond_xdp_check() argument
327 switch (BOND_MODE(bond)) { in bond_xdp_check()
336 if (bond->params.xmit_policy != BOND_XMIT_POLICY_VLAN_SRCMAC) in bond_xdp_check()
371 struct bonding *bond = netdev_priv(bond_dev); in bond_vlan_rx_add_vid() local
376 bond_for_each_slave(bond, slave, iter) { in bond_vlan_rx_add_vid()
386 bond_for_each_slave(bond, rollback_slave, iter) { in bond_vlan_rx_add_vid()
405 struct bonding *bond = netdev_priv(bond_dev); in bond_vlan_rx_kill_vid() local
409 bond_for_each_slave(bond, slave, iter) in bond_vlan_rx_kill_vid()
412 if (bond_is_lb(bond)) in bond_vlan_rx_kill_vid()
413 bond_alb_clear_vlan(bond, vid); in bond_vlan_rx_kill_vid()
431 struct bonding *bond; in bond_ipsec_add_sa() local
439 bond = netdev_priv(bond_dev); in bond_ipsec_add_sa()
440 slave = rcu_dereference(bond->curr_active_slave); in bond_ipsec_add_sa()
465 spin_lock_bh(&bond->ipsec_lock); in bond_ipsec_add_sa()
466 list_add(&ipsec->list, &bond->ipsec_list); in bond_ipsec_add_sa()
467 spin_unlock_bh(&bond->ipsec_lock); in bond_ipsec_add_sa()
475 static void bond_ipsec_add_sa_all(struct bonding *bond) in bond_ipsec_add_sa_all() argument
477 struct net_device *bond_dev = bond->dev; in bond_ipsec_add_sa_all()
482 slave = rcu_dereference(bond->curr_active_slave); in bond_ipsec_add_sa_all()
489 spin_lock_bh(&bond->ipsec_lock); in bond_ipsec_add_sa_all()
490 if (!list_empty(&bond->ipsec_list)) in bond_ipsec_add_sa_all()
494 spin_unlock_bh(&bond->ipsec_lock); in bond_ipsec_add_sa_all()
498 spin_lock_bh(&bond->ipsec_lock); in bond_ipsec_add_sa_all()
499 list_for_each_entry(ipsec, &bond->ipsec_list, list) { in bond_ipsec_add_sa_all()
506 spin_unlock_bh(&bond->ipsec_lock); in bond_ipsec_add_sa_all()
519 struct bonding *bond; in bond_ipsec_del_sa() local
526 bond = netdev_priv(bond_dev); in bond_ipsec_del_sa()
527 slave = rcu_dereference(bond->curr_active_slave); in bond_ipsec_del_sa()
546 spin_lock_bh(&bond->ipsec_lock); in bond_ipsec_del_sa()
547 list_for_each_entry(ipsec, &bond->ipsec_list, list) { in bond_ipsec_del_sa()
554 spin_unlock_bh(&bond->ipsec_lock); in bond_ipsec_del_sa()
558 static void bond_ipsec_del_sa_all(struct bonding *bond) in bond_ipsec_del_sa_all() argument
560 struct net_device *bond_dev = bond->dev; in bond_ipsec_del_sa_all()
565 slave = rcu_dereference(bond->curr_active_slave); in bond_ipsec_del_sa_all()
571 spin_lock_bh(&bond->ipsec_lock); in bond_ipsec_del_sa_all()
572 list_for_each_entry(ipsec, &bond->ipsec_list, list) { in bond_ipsec_del_sa_all()
587 spin_unlock_bh(&bond->ipsec_lock); in bond_ipsec_del_sa_all()
601 struct bonding *bond; in bond_ipsec_offload_ok() local
604 bond = netdev_priv(bond_dev); in bond_ipsec_offload_ok()
606 curr_active = rcu_dereference(bond->curr_active_slave); in bond_ipsec_offload_ok()
609 if (BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) { in bond_ipsec_offload_ok()
647 int bond_set_carrier(struct bonding *bond) in bond_set_carrier() argument
652 if (!bond_has_slaves(bond)) in bond_set_carrier()
655 if (BOND_MODE(bond) == BOND_MODE_8023AD) in bond_set_carrier()
656 return bond_3ad_set_carrier(bond); in bond_set_carrier()
658 bond_for_each_slave(bond, slave, iter) { in bond_set_carrier()
660 if (!netif_carrier_ok(bond->dev)) { in bond_set_carrier()
661 netif_carrier_on(bond->dev); in bond_set_carrier()
669 if (netif_carrier_ok(bond->dev)) { in bond_set_carrier()
670 netif_carrier_off(bond->dev); in bond_set_carrier()
741 static int bond_check_dev_link(struct bonding *bond, in bond_check_dev_link() argument
752 if (bond->params.use_carrier) in bond_check_dev_link()
796 static int bond_set_promiscuity(struct bonding *bond, int inc) in bond_set_promiscuity() argument
801 if (bond_uses_primary(bond)) { in bond_set_promiscuity()
802 struct slave *curr_active = rtnl_dereference(bond->curr_active_slave); in bond_set_promiscuity()
809 bond_for_each_slave(bond, slave, iter) { in bond_set_promiscuity()
819 static int bond_set_allmulti(struct bonding *bond, int inc) in bond_set_allmulti() argument
824 if (bond_uses_primary(bond)) { in bond_set_allmulti()
825 struct slave *curr_active = rtnl_dereference(bond->curr_active_slave); in bond_set_allmulti()
832 bond_for_each_slave(bond, slave, iter) { in bond_set_allmulti()
847 struct bonding *bond = container_of(work, struct bonding, in bond_resend_igmp_join_requests_delayed() local
851 queue_delayed_work(bond->wq, &bond->mcast_work, 1); in bond_resend_igmp_join_requests_delayed()
854 call_netdevice_notifiers(NETDEV_RESEND_IGMP, bond->dev); in bond_resend_igmp_join_requests_delayed()
856 if (bond->igmp_retrans > 1) { in bond_resend_igmp_join_requests_delayed()
857 bond->igmp_retrans--; in bond_resend_igmp_join_requests_delayed()
858 queue_delayed_work(bond->wq, &bond->mcast_work, HZ/5); in bond_resend_igmp_join_requests_delayed()
867 struct bonding *bond = netdev_priv(bond_dev); in bond_hw_addr_flush() local
872 if (BOND_MODE(bond) == BOND_MODE_8023AD) in bond_hw_addr_flush()
883 static void bond_hw_addr_swap(struct bonding *bond, struct slave *new_active, in bond_hw_addr_swap() argument
887 if (bond->dev->flags & IFF_PROMISC) in bond_hw_addr_swap()
890 if (bond->dev->flags & IFF_ALLMULTI) in bond_hw_addr_swap()
893 if (bond->dev->flags & IFF_UP) in bond_hw_addr_swap()
894 bond_hw_addr_flush(bond->dev, old_active->dev); in bond_hw_addr_swap()
899 if (bond->dev->flags & IFF_PROMISC) in bond_hw_addr_swap()
902 if (bond->dev->flags & IFF_ALLMULTI) in bond_hw_addr_swap()
905 if (bond->dev->flags & IFF_UP) { in bond_hw_addr_swap()
906 netif_addr_lock_bh(bond->dev); in bond_hw_addr_swap()
907 dev_uc_sync(new_active->dev, bond->dev); in bond_hw_addr_swap()
908 dev_mc_sync(new_active->dev, bond->dev); in bond_hw_addr_swap()
909 netif_addr_unlock_bh(bond->dev); in bond_hw_addr_swap()
938 static struct slave *bond_get_old_active(struct bonding *bond, in bond_get_old_active() argument
944 bond_for_each_slave(bond, slave, iter) { in bond_get_old_active()
948 if (ether_addr_equal(bond->dev->dev_addr, slave->dev->dev_addr)) in bond_get_old_active()
961 static void bond_do_fail_over_mac(struct bonding *bond, in bond_do_fail_over_mac() argument
969 switch (bond->params.fail_over_mac) { in bond_do_fail_over_mac()
972 rv = bond_set_dev_addr(bond->dev, new_active->dev); in bond_do_fail_over_mac()
974 slave_err(bond->dev, new_active->dev, "Error %d setting bond MAC from slave\n", in bond_do_fail_over_mac()
987 old_active = bond_get_old_active(bond, new_active); in bond_do_fail_over_mac()
997 bond_hw_addr_copy(ss.__data, bond->dev->dev_addr, in bond_do_fail_over_mac()
998 bond->dev->addr_len); in bond_do_fail_over_mac()
999 ss.ss_family = bond->dev->type; in bond_do_fail_over_mac()
1005 slave_err(bond->dev, new_active->dev, "Error %d setting MAC of new active slave\n", in bond_do_fail_over_mac()
1020 slave_err(bond->dev, old_active->dev, "Error %d setting MAC of old active slave\n", in bond_do_fail_over_mac()
1025 netdev_err(bond->dev, "bond_do_fail_over_mac impossible: bad policy %d\n", in bond_do_fail_over_mac()
1026 bond->params.fail_over_mac); in bond_do_fail_over_mac()
1043 static struct slave *bond_choose_primary_or_current(struct bonding *bond) in bond_choose_primary_or_current() argument
1045 struct slave *prim = rtnl_dereference(bond->primary_slave); in bond_choose_primary_or_current()
1046 struct slave *curr = rtnl_dereference(bond->curr_active_slave); in bond_choose_primary_or_current()
1051 bond_for_each_slave(bond, slave, iter) { in bond_choose_primary_or_current()
1069 if (bond->force_primary) { in bond_choose_primary_or_current()
1070 bond->force_primary = false; in bond_choose_primary_or_current()
1079 switch (bond->params.primary_reselect) { in bond_choose_primary_or_current()
1091 netdev_err(bond->dev, "impossible primary_reselect %d\n", in bond_choose_primary_or_current()
1092 bond->params.primary_reselect); in bond_choose_primary_or_current()
1101 static struct slave *bond_find_best_slave(struct bonding *bond) in bond_find_best_slave() argument
1105 int mintime = bond->params.updelay; in bond_find_best_slave()
1107 slave = bond_choose_primary_or_current(bond); in bond_find_best_slave()
1111 bond_for_each_slave(bond, slave, iter) { in bond_find_best_slave()
1124 static bool bond_should_notify_peers(struct bonding *bond) in bond_should_notify_peers() argument
1129 slave = rcu_dereference(bond->curr_active_slave); in bond_should_notify_peers()
1132 if (!slave || !bond->send_peer_notif || in bond_should_notify_peers()
1133 bond->send_peer_notif % in bond_should_notify_peers()
1134 max(1, bond->params.peer_notif_delay) != 0 || in bond_should_notify_peers()
1135 !netif_carrier_ok(bond->dev) || in bond_should_notify_peers()
1139 netdev_dbg(bond->dev, "bond_should_notify_peers: slave %s\n", in bond_should_notify_peers()
1160 void bond_change_active_slave(struct bonding *bond, struct slave *new_active) in bond_change_active_slave() argument
1166 old_active = rtnl_dereference(bond->curr_active_slave); in bond_change_active_slave()
1172 bond_ipsec_del_sa_all(bond); in bond_change_active_slave()
1179 if (bond_uses_primary(bond)) { in bond_change_active_slave()
1180 slave_info(bond->dev, new_active->dev, "making interface the new active one %d ms earlier\n", in bond_change_active_slave()
1181 (bond->params.updelay - new_active->delay) * bond->params.miimon); in bond_change_active_slave()
1188 if (BOND_MODE(bond) == BOND_MODE_8023AD) in bond_change_active_slave()
1191 if (bond_is_lb(bond)) in bond_change_active_slave()
1192 bond_alb_handle_link_change(bond, new_active, BOND_LINK_UP); in bond_change_active_slave()
1194 if (bond_uses_primary(bond)) in bond_change_active_slave()
1195 slave_info(bond->dev, new_active->dev, "making interface the new active one\n"); in bond_change_active_slave()
1199 if (bond_uses_primary(bond)) in bond_change_active_slave()
1200 bond_hw_addr_swap(bond, new_active, old_active); in bond_change_active_slave()
1202 if (bond_is_lb(bond)) { in bond_change_active_slave()
1203 bond_alb_handle_active_change(bond, new_active); in bond_change_active_slave()
1211 rcu_assign_pointer(bond->curr_active_slave, new_active); in bond_change_active_slave()
1214 if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP) { in bond_change_active_slave()
1225 if (bond->params.fail_over_mac) in bond_change_active_slave()
1226 bond_do_fail_over_mac(bond, new_active, in bond_change_active_slave()
1229 if (netif_running(bond->dev)) { in bond_change_active_slave()
1230 bond->send_peer_notif = in bond_change_active_slave()
1231 bond->params.num_peer_notif * in bond_change_active_slave()
1232 max(1, bond->params.peer_notif_delay); in bond_change_active_slave()
1234 bond_should_notify_peers(bond); in bond_change_active_slave()
1237 call_netdevice_notifiers(NETDEV_BONDING_FAILOVER, bond->dev); in bond_change_active_slave()
1239 bond->send_peer_notif--; in bond_change_active_slave()
1241 bond->dev); in bond_change_active_slave()
1247 bond_ipsec_add_sa_all(bond); in bond_change_active_slave()
1255 if (netif_running(bond->dev) && (bond->params.resend_igmp > 0) && in bond_change_active_slave()
1256 ((bond_uses_primary(bond) && new_active) || in bond_change_active_slave()
1257 BOND_MODE(bond) == BOND_MODE_ROUNDROBIN)) { in bond_change_active_slave()
1258 bond->igmp_retrans = bond->params.resend_igmp; in bond_change_active_slave()
1259 queue_delayed_work(bond->wq, &bond->mcast_work, 1); in bond_change_active_slave()
1274 void bond_select_active_slave(struct bonding *bond) in bond_select_active_slave() argument
1281 best_slave = bond_find_best_slave(bond); in bond_select_active_slave()
1282 if (best_slave != rtnl_dereference(bond->curr_active_slave)) { in bond_select_active_slave()
1283 bond_change_active_slave(bond, best_slave); in bond_select_active_slave()
1284 rv = bond_set_carrier(bond); in bond_select_active_slave()
1288 if (netif_carrier_ok(bond->dev)) in bond_select_active_slave()
1289 netdev_info(bond->dev, "active interface up!\n"); in bond_select_active_slave()
1291 netdev_info(bond->dev, "now running without any active interface!\n"); in bond_select_active_slave()
1329 struct bonding *bond = netdev_priv(bond_dev); in bond_poll_controller() local
1334 if (BOND_MODE(bond) == BOND_MODE_8023AD) in bond_poll_controller()
1335 if (bond_3ad_get_active_agg_info(bond, &ad_info)) in bond_poll_controller()
1338 bond_for_each_slave_rcu(bond, slave, iter) { in bond_poll_controller()
1342 if (BOND_MODE(bond) == BOND_MODE_8023AD) { in bond_poll_controller()
1357 struct bonding *bond = netdev_priv(bond_dev); in bond_netpoll_cleanup() local
1361 bond_for_each_slave(bond, slave, iter) in bond_netpoll_cleanup()
1368 struct bonding *bond = netdev_priv(dev); in bond_netpoll_setup() local
1373 bond_for_each_slave(bond, slave, iter) { in bond_netpoll_setup()
1400 struct bonding *bond = netdev_priv(dev); in bond_fix_features() local
1410 bond_for_each_slave(bond, slave, iter) { in bond_fix_features()
1431 static void bond_compute_features(struct bonding *bond) in bond_compute_features() argument
1441 struct net_device *bond_dev = bond->dev; in bond_compute_features()
1448 if (!bond_has_slaves(bond)) in bond_compute_features()
1453 bond_for_each_slave(bond, slave, iter) { in bond_compute_features()
1524 struct bonding *bond) in bond_should_deliver_exact_match() argument
1527 if (BOND_MODE(bond) == BOND_MODE_ALB && in bond_should_deliver_exact_match()
1540 struct bonding *bond; in bond_handle_frame() local
1552 bond = slave->bond; in bond_handle_frame()
1554 recv_probe = READ_ONCE(bond->recv_probe); in bond_handle_frame()
1556 ret = recv_probe(skb, bond, slave); in bond_handle_frame()
1574 if (bond_should_deliver_exact_match(skb, slave, bond)) { in bond_handle_frame()
1580 skb->dev = bond->dev; in bond_handle_frame()
1582 if (BOND_MODE(bond) == BOND_MODE_ALB && in bond_handle_frame()
1583 netif_is_bridge_port(bond->dev) && in bond_handle_frame()
1591 bond_hw_addr_copy(eth_hdr(skb)->h_dest, bond->dev->dev_addr, in bond_handle_frame()
1592 bond->dev->addr_len); in bond_handle_frame()
1598 static enum netdev_lag_tx_type bond_lag_tx_type(struct bonding *bond) in bond_lag_tx_type() argument
1600 switch (BOND_MODE(bond)) { in bond_lag_tx_type()
1615 static enum netdev_lag_hash bond_lag_hash_type(struct bonding *bond, in bond_lag_hash_type() argument
1621 switch (bond->params.xmit_policy) { in bond_lag_hash_type()
1639 static int bond_master_upper_dev_link(struct bonding *bond, struct slave *slave, in bond_master_upper_dev_link() argument
1646 type = bond_lag_tx_type(bond); in bond_master_upper_dev_link()
1648 lag_upper_info.hash_type = bond_lag_hash_type(bond, type); in bond_master_upper_dev_link()
1650 err = netdev_master_upper_dev_link(slave->dev, bond->dev, slave, in bond_master_upper_dev_link()
1659 static void bond_upper_dev_unlink(struct bonding *bond, struct slave *slave) in bond_upper_dev_unlink() argument
1661 netdev_upper_dev_unlink(slave->dev, bond->dev); in bond_upper_dev_unlink()
1668 struct bonding *bond = bond_get_bond_by_slave(slave); in slave_kobj_release() local
1671 if (BOND_MODE(bond) == BOND_MODE_8023AD) in slave_kobj_release()
1696 static struct slave *bond_alloc_slave(struct bonding *bond, in bond_alloc_slave() argument
1705 slave->bond = bond; in bond_alloc_slave()
1712 if (BOND_MODE(bond) == BOND_MODE_8023AD) { in bond_alloc_slave()
1724 static void bond_fill_ifbond(struct bonding *bond, struct ifbond *info) in bond_fill_ifbond() argument
1726 info->bond_mode = BOND_MODE(bond); in bond_fill_ifbond()
1727 info->miimon = bond->params.miimon; in bond_fill_ifbond()
1728 info->num_slaves = bond->slave_cnt; in bond_fill_ifbond()
1748 bond_fill_ifbond(slave->bond, &binfo.master); in bond_netdev_notify_work()
1752 queue_delayed_work(slave->bond->wq, &slave->notify_work, 1); in bond_netdev_notify_work()
1758 queue_delayed_work(slave->bond->wq, &slave->notify_work, 0); in bond_queue_slave_event()
1801 struct bonding *bond = netdev_priv(bond_dev); in bond_xdp_set_features() local
1808 if (!bond_xdp_check(bond)) { in bond_xdp_set_features()
1813 bond_for_each_slave(bond, slave, iter) in bond_xdp_set_features()
1823 struct bonding *bond = netdev_priv(bond_dev); in bond_enslave() local
1837 if (!bond->params.use_carrier && in bond_enslave()
1891 if (!bond_has_slaves(bond)) { in bond_enslave()
1923 BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) { in bond_enslave()
1933 if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP && in bond_enslave()
1934 bond->params.fail_over_mac != BOND_FOM_ACTIVE) { in bond_enslave()
1935 if (!bond_has_slaves(bond)) { in bond_enslave()
1936 bond->params.fail_over_mac = BOND_FOM_ACTIVE; in bond_enslave()
1952 if (!bond_has_slaves(bond) && in bond_enslave()
1953 bond->dev->addr_assign_type == NET_ADDR_RANDOM) { in bond_enslave()
1954 res = bond_set_dev_addr(bond->dev, slave_dev); in bond_enslave()
1959 new_slave = bond_alloc_slave(bond, slave_dev); in bond_enslave()
1972 res = dev_set_mtu(slave_dev, bond->dev->mtu); in bond_enslave()
1985 if (!bond->params.fail_over_mac || in bond_enslave()
1986 BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) { in bond_enslave()
2014 if (bond_is_lb(bond)) { in bond_enslave()
2018 res = bond_alb_init_slave(bond, new_slave); in bond_enslave()
2029 prev_slave = bond_last_slave(bond); in bond_enslave()
2035 bond_needs_speed_duplex(bond)) in bond_enslave()
2039 (msecs_to_jiffies(bond->params.arp_interval) + 1); in bond_enslave()
2045 if (bond->params.miimon && !bond->params.use_carrier) { in bond_enslave()
2046 link_reporting = bond_check_dev_link(bond, slave_dev, 1); in bond_enslave()
2048 if ((link_reporting == -1) && !bond->params.arp_interval) { in bond_enslave()
2066 if (bond->params.miimon) { in bond_enslave()
2067 if (bond_check_dev_link(bond, slave_dev, 0) == BMSR_LSTATUS) { in bond_enslave()
2068 if (bond->params.updelay) { in bond_enslave()
2072 new_slave->delay = bond->params.updelay; in bond_enslave()
2082 } else if (bond->params.arp_interval) { in bond_enslave()
2098 if (bond_uses_primary(bond) && bond->params.primary[0]) { in bond_enslave()
2100 if (strcmp(bond->params.primary, new_slave->dev->name) == 0) { in bond_enslave()
2101 rcu_assign_pointer(bond->primary_slave, new_slave); in bond_enslave()
2102 bond->force_primary = true; in bond_enslave()
2106 switch (BOND_MODE(bond)) { in bond_enslave()
2123 bond_3ad_initialize(bond); in bond_enslave()
2146 if (!rcu_access_pointer(bond->curr_active_slave) && in bond_enslave()
2148 rcu_assign_pointer(bond->curr_active_slave, new_slave); in bond_enslave()
2154 if (bond->dev->npinfo) { in bond_enslave()
2173 res = bond_master_upper_dev_link(bond, new_slave, extack); in bond_enslave()
2190 if (!bond_uses_primary(bond)) { in bond_enslave()
2214 if (BOND_MODE(bond) == BOND_MODE_8023AD) in bond_enslave()
2219 bond->slave_cnt++; in bond_enslave()
2220 bond_compute_features(bond); in bond_enslave()
2221 bond_set_carrier(bond); in bond_enslave()
2223 if (bond_uses_primary(bond)) { in bond_enslave()
2225 bond_select_active_slave(bond); in bond_enslave()
2229 if (bond_mode_can_use_xmit_hash(bond)) in bond_enslave()
2230 bond_update_slave_arr(bond, NULL); in bond_enslave()
2235 if (bond->xdp_prog) { in bond_enslave()
2241 } else if (bond->xdp_prog) { in bond_enslave()
2245 .prog = bond->xdp_prog, in bond_enslave()
2262 if (bond->xdp_prog) in bond_enslave()
2263 bpf_prog_inc(bond->xdp_prog); in bond_enslave()
2281 bond_upper_dev_unlink(bond, new_slave); in bond_enslave()
2288 if (rcu_access_pointer(bond->primary_slave) == new_slave) in bond_enslave()
2289 RCU_INIT_POINTER(bond->primary_slave, NULL); in bond_enslave()
2290 if (rcu_access_pointer(bond->curr_active_slave) == new_slave) { in bond_enslave()
2292 bond_change_active_slave(bond, NULL); in bond_enslave()
2293 bond_select_active_slave(bond); in bond_enslave()
2307 if (!bond->params.fail_over_mac || in bond_enslave()
2308 BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) { in bond_enslave()
2327 if (!bond_has_slaves(bond)) { in bond_enslave()
2355 struct bonding *bond = netdev_priv(bond_dev); in __bond_release_one() local
2370 slave = bond_get_slave_by_dev(bond, slave_dev); in __bond_release_one()
2383 bond_get_stats(bond->dev, &bond->bond_stats); in __bond_release_one()
2385 if (bond->xdp_prog) { in __bond_release_one()
2401 if (BOND_MODE(bond) == BOND_MODE_8023AD) in __bond_release_one()
2404 bond_upper_dev_unlink(bond, slave); in __bond_release_one()
2406 if (bond_mode_can_use_xmit_hash(bond)) in __bond_release_one()
2407 bond_update_slave_arr(bond, slave); in __bond_release_one()
2412 oldcurrent = rcu_access_pointer(bond->curr_active_slave); in __bond_release_one()
2414 RCU_INIT_POINTER(bond->current_arp_slave, NULL); in __bond_release_one()
2416 if (!all && (!bond->params.fail_over_mac || in __bond_release_one()
2417 BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP)) { in __bond_release_one()
2419 bond_has_slaves(bond)) in __bond_release_one()
2424 if (rtnl_dereference(bond->primary_slave) == slave) in __bond_release_one()
2425 RCU_INIT_POINTER(bond->primary_slave, NULL); in __bond_release_one()
2428 bond_change_active_slave(bond, NULL); in __bond_release_one()
2430 if (bond_is_lb(bond)) { in __bond_release_one()
2436 bond_alb_deinit_slave(bond, slave); in __bond_release_one()
2440 RCU_INIT_POINTER(bond->curr_active_slave, NULL); in __bond_release_one()
2446 bond_select_active_slave(bond); in __bond_release_one()
2449 bond_set_carrier(bond); in __bond_release_one()
2450 if (!bond_has_slaves(bond)) in __bond_release_one()
2455 bond->slave_cnt--; in __bond_release_one()
2457 if (!bond_has_slaves(bond)) { in __bond_release_one()
2458 call_netdevice_notifiers(NETDEV_CHANGEADDR, bond->dev); in __bond_release_one()
2459 call_netdevice_notifiers(NETDEV_RELEASE, bond->dev); in __bond_release_one()
2462 bond_compute_features(bond); in __bond_release_one()
2472 if (!bond_uses_primary(bond)) { in __bond_release_one()
2498 if (bond->params.fail_over_mac != BOND_FOM_ACTIVE || in __bond_release_one()
2499 BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) { in __bond_release_one()
2533 struct bonding *bond = netdev_priv(bond_dev); in bond_release_and_destroy() local
2537 if (ret == 0 && !bond_has_slaves(bond) && in bond_release_and_destroy()
2541 bond_remove_proc_entry(bond); in bond_release_and_destroy()
2549 struct bonding *bond = netdev_priv(bond_dev); in bond_info_query() local
2551 bond_fill_ifbond(bond, info); in bond_info_query()
2556 struct bonding *bond = netdev_priv(bond_dev); in bond_slave_info_query() local
2561 bond_for_each_slave(bond, slave, iter) { in bond_slave_info_query()
2575 static int bond_miimon_inspect(struct bonding *bond) in bond_miimon_inspect() argument
2582 if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP) { in bond_miimon_inspect()
2583 ignore_updelay = !rcu_dereference(bond->curr_active_slave); in bond_miimon_inspect()
2587 usable_slaves = rcu_dereference(bond->usable_slaves); in bond_miimon_inspect()
2593 bond_for_each_slave_rcu(bond, slave, iter) { in bond_miimon_inspect()
2596 link_state = bond_check_dev_link(bond, slave->dev, 0); in bond_miimon_inspect()
2605 slave->delay = bond->params.downdelay; in bond_miimon_inspect()
2607 slave_info(bond->dev, slave->dev, "link status down for %sinterface, disabling it in %d ms\n", in bond_miimon_inspect()
2608 (BOND_MODE(bond) == in bond_miimon_inspect()
2612 bond->params.downdelay * bond->params.miimon); in bond_miimon_inspect()
2620 slave_info(bond->dev, slave->dev, "link status up again after %d ms\n", in bond_miimon_inspect()
2621 (bond->params.downdelay - slave->delay) * in bond_miimon_inspect()
2622 bond->params.miimon); in bond_miimon_inspect()
2642 slave->delay = bond->params.updelay; in bond_miimon_inspect()
2645 slave_info(bond->dev, slave->dev, "link status up, enabling it in %d ms\n", in bond_miimon_inspect()
2647 bond->params.updelay * in bond_miimon_inspect()
2648 bond->params.miimon); in bond_miimon_inspect()
2654 slave_info(bond->dev, slave->dev, "link status down again after %d ms\n", in bond_miimon_inspect()
2655 (bond->params.updelay - slave->delay) * in bond_miimon_inspect()
2656 bond->params.miimon); in bond_miimon_inspect()
2679 static void bond_miimon_link_change(struct bonding *bond, in bond_miimon_link_change() argument
2683 switch (BOND_MODE(bond)) { in bond_miimon_link_change()
2689 bond_alb_handle_link_change(bond, slave, link); in bond_miimon_link_change()
2692 bond_update_slave_arr(bond, NULL); in bond_miimon_link_change()
2697 static void bond_miimon_commit(struct bonding *bond) in bond_miimon_commit() argument
2705 bond_for_each_slave(bond, slave, iter) { in bond_miimon_commit()
2714 if (BOND_MODE(bond) == BOND_MODE_8023AD && in bond_miimon_commit()
2721 bond_needs_speed_duplex(bond)) { in bond_miimon_commit()
2724 slave_warn(bond->dev, slave->dev, in bond_miimon_commit()
2732 primary = rtnl_dereference(bond->primary_slave); in bond_miimon_commit()
2733 if (BOND_MODE(bond) == BOND_MODE_8023AD) { in bond_miimon_commit()
2736 } else if (BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) { in bond_miimon_commit()
2741 slave_info(bond->dev, slave->dev, "link status definitely up, %u Mbps %s duplex\n", in bond_miimon_commit()
2745 bond_miimon_link_change(bond, slave, BOND_LINK_UP); in bond_miimon_commit()
2747 active = rtnl_dereference(bond->curr_active_slave); in bond_miimon_commit()
2760 if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP || in bond_miimon_commit()
2761 BOND_MODE(bond) == BOND_MODE_8023AD) in bond_miimon_commit()
2765 slave_info(bond->dev, slave->dev, "link status definitely down, disabling slave\n"); in bond_miimon_commit()
2767 bond_miimon_link_change(bond, slave, BOND_LINK_DOWN); in bond_miimon_commit()
2769 if (slave == rcu_access_pointer(bond->curr_active_slave)) in bond_miimon_commit()
2775 slave_err(bond->dev, slave->dev, "invalid new link %d on slave\n", in bond_miimon_commit()
2785 bond_select_active_slave(bond); in bond_miimon_commit()
2789 bond_set_carrier(bond); in bond_miimon_commit()
2801 struct bonding *bond = container_of(work, struct bonding, in bond_mii_monitor() local
2809 delay = msecs_to_jiffies(bond->params.miimon); in bond_mii_monitor()
2811 if (!bond_has_slaves(bond)) in bond_mii_monitor()
2815 should_notify_peers = bond_should_notify_peers(bond); in bond_mii_monitor()
2816 commit = !!bond_miimon_inspect(bond); in bond_mii_monitor()
2817 if (bond->send_peer_notif) { in bond_mii_monitor()
2820 bond->send_peer_notif--; in bond_mii_monitor()
2835 bond_for_each_slave(bond, slave, iter) { in bond_mii_monitor()
2838 bond_miimon_commit(bond); in bond_mii_monitor()
2844 if (bond->params.miimon) in bond_mii_monitor()
2845 queue_delayed_work(bond->wq, &bond->mii_work, delay); in bond_mii_monitor()
2850 call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, bond->dev); in bond_mii_monitor()
2863 static bool bond_has_this_ip(struct bonding *bond, __be32 ip) in bond_has_this_ip() argument
2870 if (ip == bond_confirm_addr(bond->dev, 0, ip)) in bond_has_this_ip()
2874 if (netdev_walk_all_upper_dev_rcu(bond->dev, bond_upper_dev_walk, &priv)) in bond_has_this_ip()
2886 struct net_device *bond_dev = slave->bond->dev; in bond_handle_vlan()
2931 struct net_device *bond_dev = slave->bond->dev; in bond_arp_send()
2994 static void bond_arp_send_all(struct bonding *bond, struct slave *slave) in bond_arp_send_all() argument
2998 __be32 *targets = bond->params.arp_targets, addr; in bond_arp_send_all()
3002 slave_dbg(bond->dev, slave->dev, "%s: target %pI4\n", in bond_arp_send_all()
3007 rt = ip_route_output(dev_net(bond->dev), targets[i], 0, in bond_arp_send_all()
3013 if (bond->params.arp_validate) in bond_arp_send_all()
3015 bond->dev->name, in bond_arp_send_all()
3023 if (rt->dst.dev == bond->dev) in bond_arp_send_all()
3027 tags = bond_verify_device_path(bond->dev, rt->dst.dev, 0); in bond_arp_send_all()
3034 slave_dbg(bond->dev, slave->dev, "no path to arp_ip_target %pI4 via rt.dev %s\n", in bond_arp_send_all()
3048 static void bond_validate_arp(struct bonding *bond, struct slave *slave, __be32 sip, __be32 tip) in bond_validate_arp() argument
3052 if (!sip || !bond_has_this_ip(bond, tip)) { in bond_validate_arp()
3053 slave_dbg(bond->dev, slave->dev, "%s: sip %pI4 tip %pI4 not found\n", in bond_validate_arp()
3058 i = bond_get_targets_ip(bond->params.arp_targets, sip); in bond_validate_arp()
3060 slave_dbg(bond->dev, slave->dev, "%s: sip %pI4 not found in targets\n", in bond_validate_arp()
3068 static int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond, in bond_arp_rcv() argument
3077 alen = arp_hdr_len(bond->dev); in bond_arp_rcv()
3087 if (arp->ar_hln != bond->dev->addr_len || in bond_arp_rcv()
3096 arp_ptr += bond->dev->addr_len; in bond_arp_rcv()
3098 arp_ptr += 4 + bond->dev->addr_len; in bond_arp_rcv()
3101 slave_dbg(bond->dev, slave->dev, "%s: %s/%d av %d sv %d sip %pI4 tip %pI4\n", in bond_arp_rcv()
3103 bond->params.arp_validate, slave_do_arp_validate(bond, slave), in bond_arp_rcv()
3106 curr_active_slave = rcu_dereference(bond->curr_active_slave); in bond_arp_rcv()
3107 curr_arp_slave = rcu_dereference(bond->current_arp_slave); in bond_arp_rcv()
3133 bond_validate_arp(bond, slave, sip, tip); in bond_arp_rcv()
3135 time_after(slave_last_rx(bond, curr_active_slave), in bond_arp_rcv()
3137 bond_validate_arp(bond, slave, tip, sip); in bond_arp_rcv()
3139 bond_time_in_interval(bond, slave_last_tx(curr_arp_slave), 1)) in bond_arp_rcv()
3140 bond_validate_arp(bond, slave, sip, tip); in bond_arp_rcv()
3152 struct net_device *bond_dev = slave->bond->dev; in bond_ns_send()
3173 static void bond_ns_send_all(struct bonding *bond, struct slave *slave) in bond_ns_send_all() argument
3175 struct in6_addr *targets = bond->params.ns_targets; in bond_ns_send_all()
3183 slave_dbg(bond->dev, slave->dev, "%s: target %pI6c\n", in bond_ns_send_all()
3190 fl6.flowi6_oif = bond->dev->ifindex; in bond_ns_send_all()
3192 dst = ip6_route_output(dev_net(bond->dev), NULL, &fl6); in bond_ns_send_all()
3198 if (bond->params.arp_validate) in bond_ns_send_all()
3200 bond->dev->name, in bond_ns_send_all()
3207 if (dst->dev == bond->dev) in bond_ns_send_all()
3211 tags = bond_verify_device_path(bond->dev, dst->dev, 0); in bond_ns_send_all()
3218 slave_dbg(bond->dev, slave->dev, "no path to ns_ip6_target %pI6c via dst->dev %s\n", in bond_ns_send_all()
3243 static bool bond_has_this_ip6(struct bonding *bond, struct in6_addr *addr) in bond_has_this_ip6() argument
3250 if (bond_confirm_addr6(bond->dev, &priv)) in bond_has_this_ip6()
3254 if (netdev_walk_all_upper_dev_rcu(bond->dev, bond_confirm_addr6, &priv)) in bond_has_this_ip6()
3261 static void bond_validate_na(struct bonding *bond, struct slave *slave, in bond_validate_na() argument
3273 !bond_has_this_ip6(bond, daddr))) { in bond_validate_na()
3274 slave_dbg(bond->dev, slave->dev, "%s: sip %pI6c tip %pI6c not found\n", in bond_validate_na()
3279 i = bond_get_targets_ip6(bond->params.ns_targets, saddr); in bond_validate_na()
3281 slave_dbg(bond->dev, slave->dev, "%s: sip %pI6c not found in targets\n", in bond_validate_na()
3289 static int bond_na_rcv(const struct sk_buff *skb, struct bonding *bond, in bond_na_rcv() argument
3312 slave_dbg(bond->dev, slave->dev, "%s: %s/%d av %d sv %d sip %pI6c tip %pI6c\n", in bond_na_rcv()
3314 bond->params.arp_validate, slave_do_arp_validate(bond, slave), in bond_na_rcv()
3317 curr_active_slave = rcu_dereference(bond->curr_active_slave); in bond_na_rcv()
3318 curr_arp_slave = rcu_dereference(bond->current_arp_slave); in bond_na_rcv()
3324 bond_validate_na(bond, slave, saddr, daddr); in bond_na_rcv()
3326 time_after(slave_last_rx(bond, curr_active_slave), in bond_na_rcv()
3328 bond_validate_na(bond, slave, daddr, saddr); in bond_na_rcv()
3330 bond_time_in_interval(bond, slave_last_tx(curr_arp_slave), 1)) in bond_na_rcv()
3331 bond_validate_na(bond, slave, saddr, daddr); in bond_na_rcv()
3338 int bond_rcv_validate(const struct sk_buff *skb, struct bonding *bond, in bond_rcv_validate() argument
3346 slave_dbg(bond->dev, slave->dev, "%s: skb->dev %s\n", in bond_rcv_validate()
3350 if (!slave_do_arp_validate(bond, slave)) { in bond_rcv_validate()
3351 if ((slave_do_arp_validate_only(bond) && is_arp) || in bond_rcv_validate()
3353 (slave_do_arp_validate_only(bond) && is_ipv6) || in bond_rcv_validate()
3355 !slave_do_arp_validate_only(bond)) in bond_rcv_validate()
3359 return bond_arp_rcv(skb, bond, slave); in bond_rcv_validate()
3362 return bond_na_rcv(skb, bond, slave); in bond_rcv_validate()
3369 static void bond_send_validate(struct bonding *bond, struct slave *slave) in bond_send_validate() argument
3371 bond_arp_send_all(bond, slave); in bond_send_validate()
3373 bond_ns_send_all(bond, slave); in bond_send_validate()
3381 static bool bond_time_in_interval(struct bonding *bond, unsigned long last_act, in bond_time_in_interval() argument
3384 int delta_in_ticks = msecs_to_jiffies(bond->params.arp_interval); in bond_time_in_interval()
3397 static void bond_loadbalance_arp_mon(struct bonding *bond) in bond_loadbalance_arp_mon() argument
3403 if (!bond_has_slaves(bond)) in bond_loadbalance_arp_mon()
3408 oldcurrent = rcu_dereference(bond->curr_active_slave); in bond_loadbalance_arp_mon()
3417 bond_for_each_slave_rcu(bond, slave, iter) { in bond_loadbalance_arp_mon()
3423 if (bond_time_in_interval(bond, last_tx, 1) && in bond_loadbalance_arp_mon()
3424 bond_time_in_interval(bond, slave->last_rx, 1)) { in bond_loadbalance_arp_mon()
3435 slave_info(bond->dev, slave->dev, "link status definitely up\n"); in bond_loadbalance_arp_mon()
3438 slave_info(bond->dev, slave->dev, "interface is now up\n"); in bond_loadbalance_arp_mon()
3448 if (!bond_time_in_interval(bond, last_tx, bond->params.missed_max) || in bond_loadbalance_arp_mon()
3449 !bond_time_in_interval(bond, slave->last_rx, bond->params.missed_max)) { in bond_loadbalance_arp_mon()
3457 slave_info(bond->dev, slave->dev, "interface is now down\n"); in bond_loadbalance_arp_mon()
3472 bond_send_validate(bond, slave); in bond_loadbalance_arp_mon()
3481 bond_for_each_slave(bond, slave, iter) { in bond_loadbalance_arp_mon()
3487 bond_slave_state_change(bond); in bond_loadbalance_arp_mon()
3488 if (BOND_MODE(bond) == BOND_MODE_XOR) in bond_loadbalance_arp_mon()
3489 bond_update_slave_arr(bond, NULL); in bond_loadbalance_arp_mon()
3493 bond_select_active_slave(bond); in bond_loadbalance_arp_mon()
3500 if (bond->params.arp_interval) in bond_loadbalance_arp_mon()
3501 queue_delayed_work(bond->wq, &bond->arp_work, in bond_loadbalance_arp_mon()
3502 msecs_to_jiffies(bond->params.arp_interval)); in bond_loadbalance_arp_mon()
3512 static int bond_ab_arp_inspect(struct bonding *bond) in bond_ab_arp_inspect() argument
3519 bond_for_each_slave_rcu(bond, slave, iter) { in bond_ab_arp_inspect()
3521 last_rx = slave_last_rx(bond, slave); in bond_ab_arp_inspect()
3524 if (bond_time_in_interval(bond, last_rx, 1)) { in bond_ab_arp_inspect()
3538 if (bond_time_in_interval(bond, slave->last_link_up, 2)) in bond_ab_arp_inspect()
3554 !rcu_access_pointer(bond->current_arp_slave) && in bond_ab_arp_inspect()
3555 !bond_time_in_interval(bond, last_rx, bond->params.missed_max + 1)) { in bond_ab_arp_inspect()
3567 (!bond_time_in_interval(bond, last_tx, bond->params.missed_max) || in bond_ab_arp_inspect()
3568 !bond_time_in_interval(bond, last_rx, bond->params.missed_max))) { in bond_ab_arp_inspect()
3582 static void bond_ab_arp_commit(struct bonding *bond) in bond_ab_arp_commit() argument
3589 bond_for_each_slave(bond, slave, iter) { in bond_ab_arp_commit()
3596 if (rtnl_dereference(bond->curr_active_slave) != slave || in bond_ab_arp_commit()
3597 (!rtnl_dereference(bond->curr_active_slave) && in bond_ab_arp_commit()
3598 bond_time_in_interval(bond, last_tx, 1))) { in bond_ab_arp_commit()
3601 current_arp_slave = rtnl_dereference(bond->current_arp_slave); in bond_ab_arp_commit()
3608 RCU_INIT_POINTER(bond->current_arp_slave, NULL); in bond_ab_arp_commit()
3611 slave_info(bond->dev, slave->dev, "link status definitely up\n"); in bond_ab_arp_commit()
3613 if (!rtnl_dereference(bond->curr_active_slave) || in bond_ab_arp_commit()
3614 slave == rtnl_dereference(bond->primary_slave) || in bond_ab_arp_commit()
3615 slave->prio > rtnl_dereference(bond->curr_active_slave)->prio) in bond_ab_arp_commit()
3631 slave_info(bond->dev, slave->dev, "link status definitely down, disabling slave\n"); in bond_ab_arp_commit()
3633 if (slave == rtnl_dereference(bond->curr_active_slave)) { in bond_ab_arp_commit()
3634 RCU_INIT_POINTER(bond->current_arp_slave, NULL); in bond_ab_arp_commit()
3649 if (rtnl_dereference(bond->curr_active_slave)) in bond_ab_arp_commit()
3650 RCU_INIT_POINTER(bond->current_arp_slave, NULL); in bond_ab_arp_commit()
3654 slave_err(bond->dev, slave->dev, in bond_ab_arp_commit()
3663 bond_select_active_slave(bond); in bond_ab_arp_commit()
3667 bond_set_carrier(bond); in bond_ab_arp_commit()
3674 static bool bond_ab_arp_probe(struct bonding *bond) in bond_ab_arp_probe() argument
3677 *curr_arp_slave = rcu_dereference(bond->current_arp_slave), in bond_ab_arp_probe()
3678 *curr_active_slave = rcu_dereference(bond->curr_active_slave); in bond_ab_arp_probe()
3684 netdev_info(bond->dev, "PROBE: c_arp %s && cas %s BAD\n", in bond_ab_arp_probe()
3689 bond_send_validate(bond, curr_active_slave); in bond_ab_arp_probe()
3699 curr_arp_slave = bond_first_slave_rcu(bond); in bond_ab_arp_probe()
3704 bond_for_each_slave_rcu(bond, slave, iter) { in bond_ab_arp_probe()
3726 slave_info(bond->dev, slave->dev, "backup interface is now down\n"); in bond_ab_arp_probe()
3741 bond_send_validate(bond, new_slave); in bond_ab_arp_probe()
3743 rcu_assign_pointer(bond->current_arp_slave, new_slave); in bond_ab_arp_probe()
3746 bond_for_each_slave_rcu(bond, slave, iter) { in bond_ab_arp_probe()
3755 static void bond_activebackup_arp_mon(struct bonding *bond) in bond_activebackup_arp_mon() argument
3761 delta_in_ticks = msecs_to_jiffies(bond->params.arp_interval); in bond_activebackup_arp_mon()
3763 if (!bond_has_slaves(bond)) in bond_activebackup_arp_mon()
3768 should_notify_peers = bond_should_notify_peers(bond); in bond_activebackup_arp_mon()
3770 if (bond_ab_arp_inspect(bond)) { in bond_activebackup_arp_mon()
3780 bond_ab_arp_commit(bond); in bond_activebackup_arp_mon()
3786 should_notify_rtnl = bond_ab_arp_probe(bond); in bond_activebackup_arp_mon()
3790 if (bond->params.arp_interval) in bond_activebackup_arp_mon()
3791 queue_delayed_work(bond->wq, &bond->arp_work, delta_in_ticks); in bond_activebackup_arp_mon()
3798 bond->send_peer_notif--; in bond_activebackup_arp_mon()
3800 bond->dev); in bond_activebackup_arp_mon()
3803 bond_slave_state_notify(bond); in bond_activebackup_arp_mon()
3804 bond_slave_link_notify(bond); in bond_activebackup_arp_mon()
3813 struct bonding *bond = container_of(work, struct bonding, in bond_arp_monitor() local
3816 if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP) in bond_arp_monitor()
3817 bond_activebackup_arp_mon(bond); in bond_arp_monitor()
3819 bond_loadbalance_arp_mon(bond); in bond_arp_monitor()
3825 static int bond_event_changename(struct bonding *bond) in bond_event_changename() argument
3827 bond_remove_proc_entry(bond); in bond_event_changename()
3828 bond_create_proc_entry(bond); in bond_event_changename()
3830 bond_debug_reregister(bond); in bond_event_changename()
3865 struct bonding *bond; in bond_slave_netdev_event() local
3877 bond_dev = slave->bond->dev; in bond_slave_netdev_event()
3878 bond = slave->bond; in bond_slave_netdev_event()
3879 primary = rtnl_dereference(bond->primary_slave); in bond_slave_netdev_event()
3900 BOND_MODE(bond) == BOND_MODE_8023AD) { in bond_slave_netdev_event()
3907 if (BOND_MODE(bond) == BOND_MODE_8023AD) in bond_slave_netdev_event()
3919 if (bond_mode_can_use_xmit_hash(bond)) in bond_slave_netdev_event()
3920 bond_update_slave_arr(bond, NULL); in bond_slave_netdev_event()
3937 if (!bond_uses_primary(bond) || in bond_slave_netdev_event()
3938 !bond->params.primary[0]) in bond_slave_netdev_event()
3943 RCU_INIT_POINTER(bond->primary_slave, NULL); in bond_slave_netdev_event()
3944 } else if (!strcmp(slave_dev->name, bond->params.primary)) { in bond_slave_netdev_event()
3946 rcu_assign_pointer(bond->primary_slave, slave); in bond_slave_netdev_event()
3951 netdev_info(bond->dev, "Primary slave changed to %s, reselecting active slave\n", in bond_slave_netdev_event()
3955 bond_select_active_slave(bond); in bond_slave_netdev_event()
3959 if (!bond->notifier_ctx) { in bond_slave_netdev_event()
3960 bond->notifier_ctx = true; in bond_slave_netdev_event()
3961 bond_compute_features(bond); in bond_slave_netdev_event()
3962 bond->notifier_ctx = false; in bond_slave_netdev_event()
3967 call_netdevice_notifiers(event, slave->bond->dev); in bond_slave_netdev_event()
4104 static bool bond_flow_dissect(struct bonding *bond, struct sk_buff *skb, const void *data, in bond_flow_dissect() argument
4107 bool l34 = bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER34; in bond_flow_dissect()
4110 switch (bond->params.xmit_policy) { in bond_flow_dissect()
4168 static u32 __bond_xmit_hash(struct bonding *bond, struct sk_buff *skb, const void *data, in __bond_xmit_hash() argument
4174 if (bond->params.xmit_policy == BOND_XMIT_POLICY_VLAN_SRCMAC) in __bond_xmit_hash()
4177 if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER2 || in __bond_xmit_hash()
4178 !bond_flow_dissect(bond, skb, data, l2_proto, nhoff, hlen, &flow)) in __bond_xmit_hash()
4181 if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER23 || in __bond_xmit_hash()
4182 bond->params.xmit_policy == BOND_XMIT_POLICY_ENCAP23) { in __bond_xmit_hash()
4191 return bond_ip_hash(hash, &flow, bond->params.xmit_policy); in __bond_xmit_hash()
4202 u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb) in bond_xmit_hash() argument
4204 if (bond->params.xmit_policy == BOND_XMIT_POLICY_ENCAP34 && in bond_xmit_hash()
4208 return __bond_xmit_hash(bond, skb, skb->data, skb->protocol, in bond_xmit_hash()
4220 static u32 bond_xmit_hash_xdp(struct bonding *bond, struct xdp_buff *xdp) in bond_xmit_hash_xdp() argument
4229 return __bond_xmit_hash(bond, NULL, xdp->data, eth->h_proto, 0, in bond_xmit_hash_xdp()
4235 void bond_work_init_all(struct bonding *bond) in bond_work_init_all() argument
4237 INIT_DELAYED_WORK(&bond->mcast_work, in bond_work_init_all()
4239 INIT_DELAYED_WORK(&bond->alb_work, bond_alb_monitor); in bond_work_init_all()
4240 INIT_DELAYED_WORK(&bond->mii_work, bond_mii_monitor); in bond_work_init_all()
4241 INIT_DELAYED_WORK(&bond->arp_work, bond_arp_monitor); in bond_work_init_all()
4242 INIT_DELAYED_WORK(&bond->ad_work, bond_3ad_state_machine_handler); in bond_work_init_all()
4243 INIT_DELAYED_WORK(&bond->slave_arr_work, bond_slave_arr_handler); in bond_work_init_all()
4246 static void bond_work_cancel_all(struct bonding *bond) in bond_work_cancel_all() argument
4248 cancel_delayed_work_sync(&bond->mii_work); in bond_work_cancel_all()
4249 cancel_delayed_work_sync(&bond->arp_work); in bond_work_cancel_all()
4250 cancel_delayed_work_sync(&bond->alb_work); in bond_work_cancel_all()
4251 cancel_delayed_work_sync(&bond->ad_work); in bond_work_cancel_all()
4252 cancel_delayed_work_sync(&bond->mcast_work); in bond_work_cancel_all()
4253 cancel_delayed_work_sync(&bond->slave_arr_work); in bond_work_cancel_all()
4258 struct bonding *bond = netdev_priv(bond_dev); in bond_open() local
4262 if (BOND_MODE(bond) == BOND_MODE_ROUNDROBIN && !bond->rr_tx_counter) { in bond_open()
4263 bond->rr_tx_counter = alloc_percpu(u32); in bond_open()
4264 if (!bond->rr_tx_counter) in bond_open()
4269 if (bond_has_slaves(bond)) { in bond_open()
4270 bond_for_each_slave(bond, slave, iter) { in bond_open()
4271 if (bond_uses_primary(bond) && in bond_open()
4272 slave != rcu_access_pointer(bond->curr_active_slave)) { in bond_open()
4275 } else if (BOND_MODE(bond) != BOND_MODE_8023AD) { in bond_open()
4282 if (bond_is_lb(bond)) { in bond_open()
4286 if (bond_alb_initialize(bond, (BOND_MODE(bond) == BOND_MODE_ALB))) in bond_open()
4288 if (bond->params.tlb_dynamic_lb || BOND_MODE(bond) == BOND_MODE_ALB) in bond_open()
4289 queue_delayed_work(bond->wq, &bond->alb_work, 0); in bond_open()
4292 if (bond->params.miimon) /* link check interval, in milliseconds. */ in bond_open()
4293 queue_delayed_work(bond->wq, &bond->mii_work, 0); in bond_open()
4295 if (bond->params.arp_interval) { /* arp interval, in milliseconds. */ in bond_open()
4296 queue_delayed_work(bond->wq, &bond->arp_work, 0); in bond_open()
4297 bond->recv_probe = bond_rcv_validate; in bond_open()
4300 if (BOND_MODE(bond) == BOND_MODE_8023AD) { in bond_open()
4301 queue_delayed_work(bond->wq, &bond->ad_work, 0); in bond_open()
4303 bond->recv_probe = bond_3ad_lacpdu_recv; in bond_open()
4304 bond_3ad_initiate_agg_selection(bond, 1); in bond_open()
4306 bond_for_each_slave(bond, slave, iter) in bond_open()
4310 if (bond_mode_can_use_xmit_hash(bond)) in bond_open()
4311 bond_update_slave_arr(bond, NULL); in bond_open()
4318 struct bonding *bond = netdev_priv(bond_dev); in bond_close() local
4321 bond_work_cancel_all(bond); in bond_close()
4322 bond->send_peer_notif = 0; in bond_close()
4323 if (bond_is_lb(bond)) in bond_close()
4324 bond_alb_deinitialize(bond); in bond_close()
4325 bond->recv_probe = NULL; in bond_close()
4327 if (bond_uses_primary(bond)) { in bond_close()
4329 slave = rcu_dereference(bond->curr_active_slave); in bond_close()
4336 bond_for_each_slave(bond, slave, iter) in bond_close()
4416 struct bonding *bond = netdev_priv(bond_dev); in bond_get_stats() local
4428 spin_lock_nested(&bond->stats_lock, nest_level); in bond_get_stats()
4429 memcpy(stats, &bond->bond_stats, sizeof(*stats)); in bond_get_stats()
4431 bond_for_each_slave_rcu(bond, slave, iter) { in bond_get_stats()
4441 memcpy(&bond->bond_stats, stats, sizeof(*stats)); in bond_get_stats()
4442 spin_unlock(&bond->stats_lock); in bond_get_stats()
4448 struct bonding *bond = netdev_priv(bond_dev); in bond_eth_ioctl() local
4471 if (netif_carrier_ok(bond->dev)) in bond_eth_ioctl()
4485 struct bonding *bond = netdev_priv(bond_dev); in bond_do_ioctl() local
4549 res = __bond_opt_set_notify(bond, BOND_OPT_ACTIVE_SLAVE, in bond_do_ioctl()
4584 struct bonding *bond = netdev_priv(bond_dev); in bond_change_rx_flags() local
4587 bond_set_promiscuity(bond, in bond_change_rx_flags()
4591 bond_set_allmulti(bond, in bond_change_rx_flags()
4597 struct bonding *bond = netdev_priv(bond_dev); in bond_set_rx_mode() local
4602 if (bond_uses_primary(bond)) { in bond_set_rx_mode()
4603 slave = rcu_dereference(bond->curr_active_slave); in bond_set_rx_mode()
4609 bond_for_each_slave_rcu(bond, slave, iter) { in bond_set_rx_mode()
4619 struct bonding *bond = netdev_priv(n->dev); in bond_neigh_init() local
4626 slave = bond_first_slave_rcu(bond); in bond_neigh_init()
4675 struct bonding *bond = netdev_priv(bond_dev); in bond_change_mtu() local
4680 netdev_dbg(bond_dev, "bond=%p, new_mtu=%d\n", bond, new_mtu); in bond_change_mtu()
4682 bond_for_each_slave(bond, slave, iter) { in bond_change_mtu()
4709 bond_for_each_slave(bond, rollback_slave, iter) { in bond_change_mtu()
4732 struct bonding *bond = netdev_priv(bond_dev); in bond_set_mac_address() local
4738 if (BOND_MODE(bond) == BOND_MODE_ALB) in bond_set_mac_address()
4742 netdev_dbg(bond_dev, "%s: bond=%p\n", __func__, bond); in bond_set_mac_address()
4747 if (bond->params.fail_over_mac && in bond_set_mac_address()
4748 BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP) in bond_set_mac_address()
4754 bond_for_each_slave(bond, slave, iter) { in bond_set_mac_address()
4780 bond_for_each_slave(bond, rollback_slave, iter) { in bond_set_mac_address()
4805 static struct slave *bond_get_slave_by_id(struct bonding *bond, in bond_get_slave_by_id() argument
4813 bond_for_each_slave_rcu(bond, slave, iter) { in bond_get_slave_by_id()
4822 bond_for_each_slave_rcu(bond, slave, iter) { in bond_get_slave_by_id()
4840 static u32 bond_rr_gen_slave_id(struct bonding *bond) in bond_rr_gen_slave_id() argument
4844 int packets_per_slave = bond->params.packets_per_slave; in bond_rr_gen_slave_id()
4851 slave_id = this_cpu_inc_return(*bond->rr_tx_counter); in bond_rr_gen_slave_id()
4855 bond->params.reciprocal_packets_per_slave; in bond_rr_gen_slave_id()
4856 slave_id = this_cpu_inc_return(*bond->rr_tx_counter); in bond_rr_gen_slave_id()
4865 static struct slave *bond_xmit_roundrobin_slave_get(struct bonding *bond, in bond_xmit_roundrobin_slave_get() argument
4887 slave = rcu_dereference(bond->curr_active_slave); in bond_xmit_roundrobin_slave_get()
4890 return bond_get_slave_by_id(bond, 0); in bond_xmit_roundrobin_slave_get()
4895 slave_cnt = READ_ONCE(bond->slave_cnt); in bond_xmit_roundrobin_slave_get()
4897 slave_id = bond_rr_gen_slave_id(bond) % slave_cnt; in bond_xmit_roundrobin_slave_get()
4898 return bond_get_slave_by_id(bond, slave_id); in bond_xmit_roundrobin_slave_get()
4903 static struct slave *bond_xdp_xmit_roundrobin_slave_get(struct bonding *bond, in bond_xdp_xmit_roundrobin_slave_get() argument
4928 slave = rcu_dereference(bond->curr_active_slave); in bond_xdp_xmit_roundrobin_slave_get()
4931 return bond_get_slave_by_id(bond, 0); in bond_xdp_xmit_roundrobin_slave_get()
4936 slave_cnt = READ_ONCE(bond->slave_cnt); in bond_xdp_xmit_roundrobin_slave_get()
4938 slave_id = bond_rr_gen_slave_id(bond) % slave_cnt; in bond_xdp_xmit_roundrobin_slave_get()
4939 return bond_get_slave_by_id(bond, slave_id); in bond_xdp_xmit_roundrobin_slave_get()
4947 struct bonding *bond = netdev_priv(bond_dev); in bond_xmit_roundrobin() local
4950 slave = bond_xmit_roundrobin_slave_get(bond, skb); in bond_xmit_roundrobin()
4952 return bond_dev_queue_xmit(bond, skb, slave->dev); in bond_xmit_roundrobin()
4957 static struct slave *bond_xmit_activebackup_slave_get(struct bonding *bond) in bond_xmit_activebackup_slave_get() argument
4959 return rcu_dereference(bond->curr_active_slave); in bond_xmit_activebackup_slave_get()
4968 struct bonding *bond = netdev_priv(bond_dev); in bond_xmit_activebackup() local
4971 slave = bond_xmit_activebackup_slave_get(bond); in bond_xmit_activebackup()
4973 return bond_dev_queue_xmit(bond, skb, slave->dev); in bond_xmit_activebackup()
4982 void bond_slave_arr_work_rearm(struct bonding *bond, unsigned long delay) in bond_slave_arr_work_rearm() argument
4984 queue_delayed_work(bond->wq, &bond->slave_arr_work, delay); in bond_slave_arr_work_rearm()
4990 struct bonding *bond = container_of(work, struct bonding, in bond_slave_arr_handler() local
4997 ret = bond_update_slave_arr(bond, NULL); in bond_slave_arr_handler()
5006 bond_slave_arr_work_rearm(bond, 1); in bond_slave_arr_handler()
5032 static void bond_set_slave_arr(struct bonding *bond, in bond_set_slave_arr() argument
5038 usable = rtnl_dereference(bond->usable_slaves); in bond_set_slave_arr()
5039 rcu_assign_pointer(bond->usable_slaves, usable_slaves); in bond_set_slave_arr()
5042 all = rtnl_dereference(bond->all_slaves); in bond_set_slave_arr()
5043 rcu_assign_pointer(bond->all_slaves, all_slaves); in bond_set_slave_arr()
5047 static void bond_reset_slave_arr(struct bonding *bond) in bond_reset_slave_arr() argument
5049 bond_set_slave_arr(bond, NULL, NULL); in bond_reset_slave_arr()
5060 int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave) in bond_update_slave_arr() argument
5071 bond->slave_cnt), GFP_KERNEL); in bond_update_slave_arr()
5073 bond->slave_cnt), GFP_KERNEL); in bond_update_slave_arr()
5078 if (BOND_MODE(bond) == BOND_MODE_8023AD) { in bond_update_slave_arr()
5081 spin_lock_bh(&bond->mode_lock); in bond_update_slave_arr()
5082 if (bond_3ad_get_active_agg_info(bond, &ad_info)) { in bond_update_slave_arr()
5083 spin_unlock_bh(&bond->mode_lock); in bond_update_slave_arr()
5088 bond_reset_slave_arr(bond); in bond_update_slave_arr()
5091 spin_unlock_bh(&bond->mode_lock); in bond_update_slave_arr()
5094 bond_for_each_slave(bond, slave, iter) { in bond_update_slave_arr()
5099 if (BOND_MODE(bond) == BOND_MODE_8023AD) { in bond_update_slave_arr()
5109 slave_dbg(bond->dev, slave->dev, "Adding slave to tx hash array[%d]\n", in bond_update_slave_arr()
5115 bond_set_slave_arr(bond, usable_slaves, all_slaves); in bond_update_slave_arr()
5119 bond_skip_slave(rtnl_dereference(bond->all_slaves), in bond_update_slave_arr()
5121 bond_skip_slave(rtnl_dereference(bond->usable_slaves), in bond_update_slave_arr()
5130 static struct slave *bond_xmit_3ad_xor_slave_get(struct bonding *bond, in bond_xmit_3ad_xor_slave_get() argument
5138 hash = bond_xmit_hash(bond, skb); in bond_xmit_3ad_xor_slave_get()
5147 static struct slave *bond_xdp_xmit_3ad_xor_slave_get(struct bonding *bond, in bond_xdp_xmit_3ad_xor_slave_get() argument
5154 hash = bond_xmit_hash_xdp(bond, xdp); in bond_xdp_xmit_3ad_xor_slave_get()
5155 slaves = rcu_dereference(bond->usable_slaves); in bond_xdp_xmit_3ad_xor_slave_get()
5170 struct bonding *bond = netdev_priv(dev); in bond_3ad_xor_xmit() local
5174 slaves = rcu_dereference(bond->usable_slaves); in bond_3ad_xor_xmit()
5175 slave = bond_xmit_3ad_xor_slave_get(bond, skb, slaves); in bond_3ad_xor_xmit()
5177 return bond_dev_queue_xmit(bond, skb, slave->dev); in bond_3ad_xor_xmit()
5186 struct bonding *bond = netdev_priv(bond_dev); in bond_xmit_broadcast() local
5192 bond_for_each_slave_rcu(bond, slave, iter) { in bond_xmit_broadcast()
5198 if (bond_is_last_slave(bond, slave)) { in bond_xmit_broadcast()
5210 if (bond_dev_queue_xmit(bond, skb2, slave->dev) == NETDEV_TX_OK) in bond_xmit_broadcast()
5227 static inline int bond_slave_override(struct bonding *bond, in bond_slave_override() argument
5237 bond_for_each_slave_rcu(bond, slave, iter) { in bond_slave_override()
5241 bond_dev_queue_xmit(bond, skb, slave->dev); in bond_slave_override()
5278 struct bonding *bond = netdev_priv(master_dev); in bond_xmit_get_slave() local
5282 switch (BOND_MODE(bond)) { in bond_xmit_get_slave()
5284 slave = bond_xmit_roundrobin_slave_get(bond, skb); in bond_xmit_get_slave()
5287 slave = bond_xmit_activebackup_slave_get(bond); in bond_xmit_get_slave()
5292 slaves = rcu_dereference(bond->all_slaves); in bond_xmit_get_slave()
5294 slaves = rcu_dereference(bond->usable_slaves); in bond_xmit_get_slave()
5295 slave = bond_xmit_3ad_xor_slave_get(bond, skb, slaves); in bond_xmit_get_slave()
5300 slave = bond_xmit_alb_slave_get(bond, skb); in bond_xmit_get_slave()
5303 slave = bond_xmit_tlb_slave_get(bond, skb); in bond_xmit_get_slave()
5362 static struct net_device *__bond_sk_get_lower_dev(struct bonding *bond, in __bond_sk_get_lower_dev() argument
5370 slaves = rcu_dereference(bond->usable_slaves); in __bond_sk_get_lower_dev()
5384 struct bonding *bond = netdev_priv(dev); in bond_sk_get_lower_dev() local
5388 if (bond_sk_check(bond)) in bond_sk_get_lower_dev()
5389 lower = __bond_sk_get_lower_dev(bond, sk); in bond_sk_get_lower_dev()
5396 static netdev_tx_t bond_tls_device_xmit(struct bonding *bond, struct sk_buff *skb, in bond_tls_device_xmit() argument
5405 if (likely(bond_get_slave_by_dev(bond, tls_netdev))) in bond_tls_device_xmit()
5406 return bond_dev_queue_xmit(bond, skb, tls_netdev); in bond_tls_device_xmit()
5413 struct bonding *bond = netdev_priv(dev); in __bond_start_xmit() local
5415 if (bond_should_override_tx_queue(bond) && in __bond_start_xmit()
5416 !bond_slave_override(bond, skb)) in __bond_start_xmit()
5421 return bond_tls_device_xmit(bond, skb, dev); in __bond_start_xmit()
5424 switch (BOND_MODE(bond)) { in __bond_start_xmit()
5440 netdev_err(dev, "Unknown bonding mode %d\n", BOND_MODE(bond)); in __bond_start_xmit()
5448 struct bonding *bond = netdev_priv(dev); in bond_start_xmit() local
5458 if (bond_has_slaves(bond)) in bond_start_xmit()
5470 struct bonding *bond = netdev_priv(bond_dev); in bond_xdp_get_xmit_slave() local
5475 switch (BOND_MODE(bond)) { in bond_xdp_get_xmit_slave()
5477 slave = bond_xdp_xmit_roundrobin_slave_get(bond, xdp); in bond_xdp_get_xmit_slave()
5481 slave = bond_xmit_activebackup_slave_get(bond); in bond_xdp_get_xmit_slave()
5486 slave = bond_xdp_xmit_3ad_xor_slave_get(bond, xdp); in bond_xdp_get_xmit_slave()
5491 netdev_err(bond_dev, "Unknown bonding mode %d for xdp xmit\n", BOND_MODE(bond)); in bond_xdp_get_xmit_slave()
5542 struct bonding *bond = netdev_priv(dev); in bond_xdp_set() local
5556 if (!bond_xdp_check(bond)) in bond_xdp_set()
5559 old_prog = bond->xdp_prog; in bond_xdp_set()
5560 bond->xdp_prog = prog; in bond_xdp_set()
5562 bond_for_each_slave(bond, slave, iter) { in bond_xdp_set()
5601 bond->xdp_prog = old_prog; in bond_xdp_set()
5605 bond_for_each_slave(bond, rollback_slave, iter) { in bond_xdp_set()
5666 struct bonding *bond = netdev_priv(dev); in bond_hwtstamp_get() local
5670 real_dev = bond_option_active_slave_get_rcu(bond); in bond_hwtstamp_get()
5685 struct bonding *bond = netdev_priv(dev); in bond_hwtstamp_set() local
5692 real_dev = bond_option_active_slave_get_rcu(bond); in bond_hwtstamp_set()
5706 struct bonding *bond = netdev_priv(bond_dev); in bond_ethtool_get_link_ksettings() local
5719 bond_for_each_slave(bond, slave, iter) { in bond_ethtool_get_link_ksettings()
5723 if (BOND_MODE(bond) == BOND_MODE_BROADCAST) in bond_ethtool_get_link_ksettings()
5750 struct bonding *bond = netdev_priv(bond_dev); in bond_ethtool_get_ts_info() local
5761 real_dev = bond_option_active_slave_get_rcu(bond); in bond_ethtool_get_ts_info()
5779 bond_for_each_slave_rcu(bond, slave, iter) { in bond_ethtool_get_ts_info()
5862 struct bonding *bond = netdev_priv(bond_dev); in bond_destructor() local
5864 if (bond->wq) in bond_destructor()
5865 destroy_workqueue(bond->wq); in bond_destructor()
5867 free_percpu(bond->rr_tx_counter); in bond_destructor()
5872 struct bonding *bond = netdev_priv(bond_dev); in bond_setup() local
5874 spin_lock_init(&bond->mode_lock); in bond_setup()
5875 bond->params = bonding_defaults; in bond_setup()
5878 bond->dev = bond_dev; in bond_setup()
5899 INIT_LIST_HEAD(&bond->ipsec_list); in bond_setup()
5900 spin_lock_init(&bond->ipsec_lock); in bond_setup()
5928 if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP) in bond_setup()
5932 if (bond_xdp_check(bond)) in bond_setup()
5941 struct bonding *bond = netdev_priv(bond_dev); in bond_uninit() local
5948 bond_for_each_slave(bond, slave, iter) in bond_uninit()
5952 bond_set_slave_arr(bond, NULL, NULL); in bond_uninit()
5954 list_del(&bond->bond_list); in bond_uninit()
5956 bond_debug_unregister(bond); in bond_uninit()
6353 struct bonding *bond = netdev_priv(bond_dev); in bond_init() local
6358 bond->wq = alloc_ordered_workqueue(bond_dev->name, WQ_MEM_RECLAIM); in bond_init()
6359 if (!bond->wq) in bond_init()
6362 bond->notifier_ctx = false; in bond_init()
6364 spin_lock_init(&bond->stats_lock); in bond_init()
6367 list_add_tail(&bond->bond_list, &bn->dev_list); in bond_init()
6369 bond_prepare_sysfs_group(bond); in bond_init()
6371 bond_debug_register(bond); in bond_init()
6394 struct bonding *bond; in bond_create() local
6405 bond = netdev_priv(bond_dev); in bond_create()
6417 bond_work_init_all(bond); in bond_create()
6451 struct bonding *bond, *tmp_bond; in bond_net_exit_batch() local
6454 list_for_each_entry_safe(bond, tmp_bond, &bn->dev_list, bond_list) in bond_net_exit_batch()
6455 unregister_netdevice_queue(bond->dev, &list); in bond_net_exit_batch()