1 /* 2 * Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify it 5 * under the terms of the GNU General Public License as published by the 6 * Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 11 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * for more details. 13 * 14 * You should have received a copy of the GNU General Public License along 15 * with this program; if not, write to the Free Software Foundation, Inc., 16 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 * 18 * The full GNU General Public License is included in this distribution in the 19 * file called LICENSE. 20 * 21 */ 22 23 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 24 25 #include <linux/skbuff.h> 26 #include <linux/netdevice.h> 27 #include <linux/etherdevice.h> 28 #include <linux/pkt_sched.h> 29 #include <linux/spinlock.h> 30 #include <linux/slab.h> 31 #include <linux/timer.h> 32 #include <linux/ip.h> 33 #include <linux/ipv6.h> 34 #include <linux/if_arp.h> 35 #include <linux/if_ether.h> 36 #include <linux/if_bonding.h> 37 #include <linux/if_vlan.h> 38 #include <linux/in.h> 39 #include <net/ipx.h> 40 #include <net/arp.h> 41 #include <net/ipv6.h> 42 #include <asm/byteorder.h> 43 #include "bonding.h" 44 #include "bond_alb.h" 45 46 47 48 #ifndef __long_aligned 49 #define __long_aligned __attribute__((aligned((sizeof(long))))) 50 #endif 51 static const u8 mac_bcast[ETH_ALEN] __long_aligned = { 52 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 53 }; 54 static const u8 mac_v6_allmcast[ETH_ALEN] __long_aligned = { 55 0x33, 0x33, 0x00, 0x00, 0x00, 0x01 56 }; 57 static const int alb_delta_in_ticks = HZ / ALB_TIMER_TICKS_PER_SEC; 58 59 #pragma pack(1) 60 struct learning_pkt { 61 u8 mac_dst[ETH_ALEN]; 62 u8 mac_src[ETH_ALEN]; 63 __be16 type; 64 u8 padding[ETH_ZLEN - ETH_HLEN]; 65 }; 66 67 struct arp_pkt { 68 __be16 hw_addr_space; 69 __be16 prot_addr_space; 70 u8 hw_addr_len; 71 u8 prot_addr_len; 72 __be16 op_code; 73 u8 mac_src[ETH_ALEN]; /* sender hardware address */ 74 __be32 ip_src; /* sender IP address */ 75 u8 mac_dst[ETH_ALEN]; /* target hardware address */ 76 __be32 ip_dst; /* target IP address */ 77 }; 78 #pragma pack() 79 80 static inline struct arp_pkt *arp_pkt(const struct sk_buff *skb) 81 { 82 return (struct arp_pkt *)skb_network_header(skb); 83 } 84 85 /* Forward declaration */ 86 static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[]); 87 static void rlb_purge_src_ip(struct bonding *bond, struct arp_pkt *arp); 88 static void rlb_src_unlink(struct bonding *bond, u32 index); 89 static void rlb_src_link(struct bonding *bond, u32 ip_src_hash, 90 u32 ip_dst_hash); 91 92 static inline u8 _simple_hash(const u8 *hash_start, int hash_size) 93 { 94 int i; 95 u8 hash = 0; 96 97 for (i = 0; i < hash_size; i++) { 98 hash ^= hash_start[i]; 99 } 100 101 return hash; 102 } 103 104 /*********************** tlb specific functions ***************************/ 105 106 static inline void _lock_tx_hashtbl_bh(struct bonding *bond) 107 { 108 spin_lock_bh(&(BOND_ALB_INFO(bond).tx_hashtbl_lock)); 109 } 110 111 static inline void _unlock_tx_hashtbl_bh(struct bonding *bond) 112 { 113 spin_unlock_bh(&(BOND_ALB_INFO(bond).tx_hashtbl_lock)); 114 } 115 116 static inline void _lock_tx_hashtbl(struct bonding *bond) 117 { 118 spin_lock(&(BOND_ALB_INFO(bond).tx_hashtbl_lock)); 119 } 120 121 static inline void _unlock_tx_hashtbl(struct bonding *bond) 122 { 123 spin_unlock(&(BOND_ALB_INFO(bond).tx_hashtbl_lock)); 124 } 125 126 /* Caller must hold tx_hashtbl lock */ 127 static inline void tlb_init_table_entry(struct tlb_client_info *entry, int save_load) 128 { 129 if (save_load) { 130 entry->load_history = 1 + entry->tx_bytes / 131 BOND_TLB_REBALANCE_INTERVAL; 132 entry->tx_bytes = 0; 133 } 134 135 entry->tx_slave = NULL; 136 entry->next = TLB_NULL_INDEX; 137 entry->prev = TLB_NULL_INDEX; 138 } 139 140 static inline void tlb_init_slave(struct slave *slave) 141 { 142 SLAVE_TLB_INFO(slave).load = 0; 143 SLAVE_TLB_INFO(slave).head = TLB_NULL_INDEX; 144 } 145 146 /* Caller must hold bond lock for read, BH disabled */ 147 static void __tlb_clear_slave(struct bonding *bond, struct slave *slave, 148 int save_load) 149 { 150 struct tlb_client_info *tx_hash_table; 151 u32 index; 152 153 /* clear slave from tx_hashtbl */ 154 tx_hash_table = BOND_ALB_INFO(bond).tx_hashtbl; 155 156 /* skip this if we've already freed the tx hash table */ 157 if (tx_hash_table) { 158 index = SLAVE_TLB_INFO(slave).head; 159 while (index != TLB_NULL_INDEX) { 160 u32 next_index = tx_hash_table[index].next; 161 tlb_init_table_entry(&tx_hash_table[index], save_load); 162 index = next_index; 163 } 164 } 165 166 tlb_init_slave(slave); 167 } 168 169 /* Caller must hold bond lock for read */ 170 static void tlb_clear_slave(struct bonding *bond, struct slave *slave, 171 int save_load) 172 { 173 _lock_tx_hashtbl_bh(bond); 174 __tlb_clear_slave(bond, slave, save_load); 175 _unlock_tx_hashtbl_bh(bond); 176 } 177 178 /* Must be called before starting the monitor timer */ 179 static int tlb_initialize(struct bonding *bond) 180 { 181 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 182 int size = TLB_HASH_TABLE_SIZE * sizeof(struct tlb_client_info); 183 struct tlb_client_info *new_hashtbl; 184 int i; 185 186 new_hashtbl = kzalloc(size, GFP_KERNEL); 187 if (!new_hashtbl) 188 return -1; 189 190 _lock_tx_hashtbl_bh(bond); 191 192 bond_info->tx_hashtbl = new_hashtbl; 193 194 for (i = 0; i < TLB_HASH_TABLE_SIZE; i++) { 195 tlb_init_table_entry(&bond_info->tx_hashtbl[i], 0); 196 } 197 198 _unlock_tx_hashtbl_bh(bond); 199 200 return 0; 201 } 202 203 /* Must be called only after all slaves have been released */ 204 static void tlb_deinitialize(struct bonding *bond) 205 { 206 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 207 208 _lock_tx_hashtbl_bh(bond); 209 210 kfree(bond_info->tx_hashtbl); 211 bond_info->tx_hashtbl = NULL; 212 213 _unlock_tx_hashtbl_bh(bond); 214 } 215 216 static long long compute_gap(struct slave *slave) 217 { 218 return (s64) (slave->speed << 20) - /* Convert to Megabit per sec */ 219 (s64) (SLAVE_TLB_INFO(slave).load << 3); /* Bytes to bits */ 220 } 221 222 /* Caller must hold bond lock for read */ 223 static struct slave *tlb_get_least_loaded_slave(struct bonding *bond) 224 { 225 struct slave *slave, *least_loaded; 226 struct list_head *iter; 227 long long max_gap; 228 229 least_loaded = NULL; 230 max_gap = LLONG_MIN; 231 232 /* Find the slave with the largest gap */ 233 bond_for_each_slave_rcu(bond, slave, iter) { 234 if (SLAVE_IS_OK(slave)) { 235 long long gap = compute_gap(slave); 236 237 if (max_gap < gap) { 238 least_loaded = slave; 239 max_gap = gap; 240 } 241 } 242 } 243 244 return least_loaded; 245 } 246 247 static struct slave *__tlb_choose_channel(struct bonding *bond, u32 hash_index, 248 u32 skb_len) 249 { 250 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 251 struct tlb_client_info *hash_table; 252 struct slave *assigned_slave; 253 254 hash_table = bond_info->tx_hashtbl; 255 assigned_slave = hash_table[hash_index].tx_slave; 256 if (!assigned_slave) { 257 assigned_slave = tlb_get_least_loaded_slave(bond); 258 259 if (assigned_slave) { 260 struct tlb_slave_info *slave_info = 261 &(SLAVE_TLB_INFO(assigned_slave)); 262 u32 next_index = slave_info->head; 263 264 hash_table[hash_index].tx_slave = assigned_slave; 265 hash_table[hash_index].next = next_index; 266 hash_table[hash_index].prev = TLB_NULL_INDEX; 267 268 if (next_index != TLB_NULL_INDEX) { 269 hash_table[next_index].prev = hash_index; 270 } 271 272 slave_info->head = hash_index; 273 slave_info->load += 274 hash_table[hash_index].load_history; 275 } 276 } 277 278 if (assigned_slave) { 279 hash_table[hash_index].tx_bytes += skb_len; 280 } 281 282 return assigned_slave; 283 } 284 285 /* Caller must hold bond lock for read */ 286 static struct slave *tlb_choose_channel(struct bonding *bond, u32 hash_index, 287 u32 skb_len) 288 { 289 struct slave *tx_slave; 290 /* 291 * We don't need to disable softirq here, becase 292 * tlb_choose_channel() is only called by bond_alb_xmit() 293 * which already has softirq disabled. 294 */ 295 _lock_tx_hashtbl(bond); 296 tx_slave = __tlb_choose_channel(bond, hash_index, skb_len); 297 _unlock_tx_hashtbl(bond); 298 return tx_slave; 299 } 300 301 /*********************** rlb specific functions ***************************/ 302 static inline void _lock_rx_hashtbl_bh(struct bonding *bond) 303 { 304 spin_lock_bh(&(BOND_ALB_INFO(bond).rx_hashtbl_lock)); 305 } 306 307 static inline void _unlock_rx_hashtbl_bh(struct bonding *bond) 308 { 309 spin_unlock_bh(&(BOND_ALB_INFO(bond).rx_hashtbl_lock)); 310 } 311 312 static inline void _lock_rx_hashtbl(struct bonding *bond) 313 { 314 spin_lock(&(BOND_ALB_INFO(bond).rx_hashtbl_lock)); 315 } 316 317 static inline void _unlock_rx_hashtbl(struct bonding *bond) 318 { 319 spin_unlock(&(BOND_ALB_INFO(bond).rx_hashtbl_lock)); 320 } 321 322 /* when an ARP REPLY is received from a client update its info 323 * in the rx_hashtbl 324 */ 325 static void rlb_update_entry_from_arp(struct bonding *bond, struct arp_pkt *arp) 326 { 327 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 328 struct rlb_client_info *client_info; 329 u32 hash_index; 330 331 _lock_rx_hashtbl_bh(bond); 332 333 hash_index = _simple_hash((u8*)&(arp->ip_src), sizeof(arp->ip_src)); 334 client_info = &(bond_info->rx_hashtbl[hash_index]); 335 336 if ((client_info->assigned) && 337 (client_info->ip_src == arp->ip_dst) && 338 (client_info->ip_dst == arp->ip_src) && 339 (!ether_addr_equal_64bits(client_info->mac_dst, arp->mac_src))) { 340 /* update the clients MAC address */ 341 memcpy(client_info->mac_dst, arp->mac_src, ETH_ALEN); 342 client_info->ntt = 1; 343 bond_info->rx_ntt = 1; 344 } 345 346 _unlock_rx_hashtbl_bh(bond); 347 } 348 349 static int rlb_arp_recv(const struct sk_buff *skb, struct bonding *bond, 350 struct slave *slave) 351 { 352 struct arp_pkt *arp, _arp; 353 354 if (skb->protocol != cpu_to_be16(ETH_P_ARP)) 355 goto out; 356 357 arp = skb_header_pointer(skb, 0, sizeof(_arp), &_arp); 358 if (!arp) 359 goto out; 360 361 /* We received an ARP from arp->ip_src. 362 * We might have used this IP address previously (on the bonding host 363 * itself or on a system that is bridged together with the bond). 364 * However, if arp->mac_src is different than what is stored in 365 * rx_hashtbl, some other host is now using the IP and we must prevent 366 * sending out client updates with this IP address and the old MAC 367 * address. 368 * Clean up all hash table entries that have this address as ip_src but 369 * have a different mac_src. 370 */ 371 rlb_purge_src_ip(bond, arp); 372 373 if (arp->op_code == htons(ARPOP_REPLY)) { 374 /* update rx hash table for this ARP */ 375 rlb_update_entry_from_arp(bond, arp); 376 pr_debug("Server received an ARP Reply from client\n"); 377 } 378 out: 379 return RX_HANDLER_ANOTHER; 380 } 381 382 /* Caller must hold bond lock for read */ 383 static struct slave *rlb_next_rx_slave(struct bonding *bond) 384 { 385 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 386 struct slave *before = NULL, *rx_slave = NULL, *slave; 387 struct list_head *iter; 388 bool found = false; 389 390 bond_for_each_slave(bond, slave, iter) { 391 if (!SLAVE_IS_OK(slave)) 392 continue; 393 if (!found) { 394 if (!before || before->speed < slave->speed) 395 before = slave; 396 } else { 397 if (!rx_slave || rx_slave->speed < slave->speed) 398 rx_slave = slave; 399 } 400 if (slave == bond_info->rx_slave) 401 found = true; 402 } 403 /* we didn't find anything after the current or we have something 404 * better before and up to the current slave 405 */ 406 if (!rx_slave || (before && rx_slave->speed < before->speed)) 407 rx_slave = before; 408 409 if (rx_slave) 410 bond_info->rx_slave = rx_slave; 411 412 return rx_slave; 413 } 414 415 /* Caller must hold rcu_read_lock() for read */ 416 static struct slave *__rlb_next_rx_slave(struct bonding *bond) 417 { 418 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 419 struct slave *before = NULL, *rx_slave = NULL, *slave; 420 struct list_head *iter; 421 bool found = false; 422 423 bond_for_each_slave_rcu(bond, slave, iter) { 424 if (!SLAVE_IS_OK(slave)) 425 continue; 426 if (!found) { 427 if (!before || before->speed < slave->speed) 428 before = slave; 429 } else { 430 if (!rx_slave || rx_slave->speed < slave->speed) 431 rx_slave = slave; 432 } 433 if (slave == bond_info->rx_slave) 434 found = true; 435 } 436 /* we didn't find anything after the current or we have something 437 * better before and up to the current slave 438 */ 439 if (!rx_slave || (before && rx_slave->speed < before->speed)) 440 rx_slave = before; 441 442 if (rx_slave) 443 bond_info->rx_slave = rx_slave; 444 445 return rx_slave; 446 } 447 448 /* teach the switch the mac of a disabled slave 449 * on the primary for fault tolerance 450 * 451 * Caller must hold bond->curr_slave_lock for write or bond lock for write 452 */ 453 static void rlb_teach_disabled_mac_on_primary(struct bonding *bond, u8 addr[]) 454 { 455 if (!bond->curr_active_slave) { 456 return; 457 } 458 459 if (!bond->alb_info.primary_is_promisc) { 460 if (!dev_set_promiscuity(bond->curr_active_slave->dev, 1)) 461 bond->alb_info.primary_is_promisc = 1; 462 else 463 bond->alb_info.primary_is_promisc = 0; 464 } 465 466 bond->alb_info.rlb_promisc_timeout_counter = 0; 467 468 alb_send_learning_packets(bond->curr_active_slave, addr); 469 } 470 471 /* slave being removed should not be active at this point 472 * 473 * Caller must hold bond lock for read 474 */ 475 static void rlb_clear_slave(struct bonding *bond, struct slave *slave) 476 { 477 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 478 struct rlb_client_info *rx_hash_table; 479 u32 index, next_index; 480 481 /* clear slave from rx_hashtbl */ 482 _lock_rx_hashtbl_bh(bond); 483 484 rx_hash_table = bond_info->rx_hashtbl; 485 index = bond_info->rx_hashtbl_used_head; 486 for (; index != RLB_NULL_INDEX; index = next_index) { 487 next_index = rx_hash_table[index].used_next; 488 if (rx_hash_table[index].slave == slave) { 489 struct slave *assigned_slave = rlb_next_rx_slave(bond); 490 491 if (assigned_slave) { 492 rx_hash_table[index].slave = assigned_slave; 493 if (!ether_addr_equal_64bits(rx_hash_table[index].mac_dst, 494 mac_bcast)) { 495 bond_info->rx_hashtbl[index].ntt = 1; 496 bond_info->rx_ntt = 1; 497 /* A slave has been removed from the 498 * table because it is either disabled 499 * or being released. We must retry the 500 * update to avoid clients from not 501 * being updated & disconnecting when 502 * there is stress 503 */ 504 bond_info->rlb_update_retry_counter = 505 RLB_UPDATE_RETRY; 506 } 507 } else { /* there is no active slave */ 508 rx_hash_table[index].slave = NULL; 509 } 510 } 511 } 512 513 _unlock_rx_hashtbl_bh(bond); 514 515 write_lock_bh(&bond->curr_slave_lock); 516 517 if (slave != bond->curr_active_slave) { 518 rlb_teach_disabled_mac_on_primary(bond, slave->dev->dev_addr); 519 } 520 521 write_unlock_bh(&bond->curr_slave_lock); 522 } 523 524 static void rlb_update_client(struct rlb_client_info *client_info) 525 { 526 int i; 527 528 if (!client_info->slave) { 529 return; 530 } 531 532 for (i = 0; i < RLB_ARP_BURST_SIZE; i++) { 533 struct sk_buff *skb; 534 535 skb = arp_create(ARPOP_REPLY, ETH_P_ARP, 536 client_info->ip_dst, 537 client_info->slave->dev, 538 client_info->ip_src, 539 client_info->mac_dst, 540 client_info->slave->dev->dev_addr, 541 client_info->mac_dst); 542 if (!skb) { 543 pr_err("%s: Error: failed to create an ARP packet\n", 544 client_info->slave->bond->dev->name); 545 continue; 546 } 547 548 skb->dev = client_info->slave->dev; 549 550 if (client_info->vlan_id) { 551 skb = vlan_put_tag(skb, htons(ETH_P_8021Q), client_info->vlan_id); 552 if (!skb) { 553 pr_err("%s: Error: failed to insert VLAN tag\n", 554 client_info->slave->bond->dev->name); 555 continue; 556 } 557 } 558 559 arp_xmit(skb); 560 } 561 } 562 563 /* sends ARP REPLIES that update the clients that need updating */ 564 static void rlb_update_rx_clients(struct bonding *bond) 565 { 566 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 567 struct rlb_client_info *client_info; 568 u32 hash_index; 569 570 _lock_rx_hashtbl_bh(bond); 571 572 hash_index = bond_info->rx_hashtbl_used_head; 573 for (; hash_index != RLB_NULL_INDEX; 574 hash_index = client_info->used_next) { 575 client_info = &(bond_info->rx_hashtbl[hash_index]); 576 if (client_info->ntt) { 577 rlb_update_client(client_info); 578 if (bond_info->rlb_update_retry_counter == 0) { 579 client_info->ntt = 0; 580 } 581 } 582 } 583 584 /* do not update the entries again until this counter is zero so that 585 * not to confuse the clients. 586 */ 587 bond_info->rlb_update_delay_counter = RLB_UPDATE_DELAY; 588 589 _unlock_rx_hashtbl_bh(bond); 590 } 591 592 /* The slave was assigned a new mac address - update the clients */ 593 static void rlb_req_update_slave_clients(struct bonding *bond, struct slave *slave) 594 { 595 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 596 struct rlb_client_info *client_info; 597 int ntt = 0; 598 u32 hash_index; 599 600 _lock_rx_hashtbl_bh(bond); 601 602 hash_index = bond_info->rx_hashtbl_used_head; 603 for (; hash_index != RLB_NULL_INDEX; 604 hash_index = client_info->used_next) { 605 client_info = &(bond_info->rx_hashtbl[hash_index]); 606 607 if ((client_info->slave == slave) && 608 !ether_addr_equal_64bits(client_info->mac_dst, mac_bcast)) { 609 client_info->ntt = 1; 610 ntt = 1; 611 } 612 } 613 614 // update the team's flag only after the whole iteration 615 if (ntt) { 616 bond_info->rx_ntt = 1; 617 //fasten the change 618 bond_info->rlb_update_retry_counter = RLB_UPDATE_RETRY; 619 } 620 621 _unlock_rx_hashtbl_bh(bond); 622 } 623 624 /* mark all clients using src_ip to be updated */ 625 static void rlb_req_update_subnet_clients(struct bonding *bond, __be32 src_ip) 626 { 627 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 628 struct rlb_client_info *client_info; 629 u32 hash_index; 630 631 _lock_rx_hashtbl(bond); 632 633 hash_index = bond_info->rx_hashtbl_used_head; 634 for (; hash_index != RLB_NULL_INDEX; 635 hash_index = client_info->used_next) { 636 client_info = &(bond_info->rx_hashtbl[hash_index]); 637 638 if (!client_info->slave) { 639 pr_err("%s: Error: found a client with no channel in the client's hash table\n", 640 bond->dev->name); 641 continue; 642 } 643 /*update all clients using this src_ip, that are not assigned 644 * to the team's address (curr_active_slave) and have a known 645 * unicast mac address. 646 */ 647 if ((client_info->ip_src == src_ip) && 648 !ether_addr_equal_64bits(client_info->slave->dev->dev_addr, 649 bond->dev->dev_addr) && 650 !ether_addr_equal_64bits(client_info->mac_dst, mac_bcast)) { 651 client_info->ntt = 1; 652 bond_info->rx_ntt = 1; 653 } 654 } 655 656 _unlock_rx_hashtbl(bond); 657 } 658 659 /* Caller must hold both bond and ptr locks for read */ 660 static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bond) 661 { 662 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 663 struct arp_pkt *arp = arp_pkt(skb); 664 struct slave *assigned_slave, *curr_active_slave; 665 struct rlb_client_info *client_info; 666 u32 hash_index = 0; 667 668 _lock_rx_hashtbl(bond); 669 670 curr_active_slave = rcu_dereference(bond->curr_active_slave); 671 672 hash_index = _simple_hash((u8 *)&arp->ip_dst, sizeof(arp->ip_dst)); 673 client_info = &(bond_info->rx_hashtbl[hash_index]); 674 675 if (client_info->assigned) { 676 if ((client_info->ip_src == arp->ip_src) && 677 (client_info->ip_dst == arp->ip_dst)) { 678 /* the entry is already assigned to this client */ 679 if (!ether_addr_equal_64bits(arp->mac_dst, mac_bcast)) { 680 /* update mac address from arp */ 681 memcpy(client_info->mac_dst, arp->mac_dst, ETH_ALEN); 682 } 683 memcpy(client_info->mac_src, arp->mac_src, ETH_ALEN); 684 685 assigned_slave = client_info->slave; 686 if (assigned_slave) { 687 _unlock_rx_hashtbl(bond); 688 return assigned_slave; 689 } 690 } else { 691 /* the entry is already assigned to some other client, 692 * move the old client to primary (curr_active_slave) so 693 * that the new client can be assigned to this entry. 694 */ 695 if (bond->curr_active_slave && 696 client_info->slave != curr_active_slave) { 697 client_info->slave = curr_active_slave; 698 rlb_update_client(client_info); 699 } 700 } 701 } 702 /* assign a new slave */ 703 assigned_slave = __rlb_next_rx_slave(bond); 704 705 if (assigned_slave) { 706 if (!(client_info->assigned && 707 client_info->ip_src == arp->ip_src)) { 708 /* ip_src is going to be updated, 709 * fix the src hash list 710 */ 711 u32 hash_src = _simple_hash((u8 *)&arp->ip_src, 712 sizeof(arp->ip_src)); 713 rlb_src_unlink(bond, hash_index); 714 rlb_src_link(bond, hash_src, hash_index); 715 } 716 717 client_info->ip_src = arp->ip_src; 718 client_info->ip_dst = arp->ip_dst; 719 /* arp->mac_dst is broadcast for arp reqeusts. 720 * will be updated with clients actual unicast mac address 721 * upon receiving an arp reply. 722 */ 723 memcpy(client_info->mac_dst, arp->mac_dst, ETH_ALEN); 724 memcpy(client_info->mac_src, arp->mac_src, ETH_ALEN); 725 client_info->slave = assigned_slave; 726 727 if (!ether_addr_equal_64bits(client_info->mac_dst, mac_bcast)) { 728 client_info->ntt = 1; 729 bond->alb_info.rx_ntt = 1; 730 } else { 731 client_info->ntt = 0; 732 } 733 734 if (!vlan_get_tag(skb, &client_info->vlan_id)) 735 client_info->vlan_id = 0; 736 737 if (!client_info->assigned) { 738 u32 prev_tbl_head = bond_info->rx_hashtbl_used_head; 739 bond_info->rx_hashtbl_used_head = hash_index; 740 client_info->used_next = prev_tbl_head; 741 if (prev_tbl_head != RLB_NULL_INDEX) { 742 bond_info->rx_hashtbl[prev_tbl_head].used_prev = 743 hash_index; 744 } 745 client_info->assigned = 1; 746 } 747 } 748 749 _unlock_rx_hashtbl(bond); 750 751 return assigned_slave; 752 } 753 754 /* chooses (and returns) transmit channel for arp reply 755 * does not choose channel for other arp types since they are 756 * sent on the curr_active_slave 757 */ 758 static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond) 759 { 760 struct arp_pkt *arp = arp_pkt(skb); 761 struct slave *tx_slave = NULL; 762 763 /* Don't modify or load balance ARPs that do not originate locally 764 * (e.g.,arrive via a bridge). 765 */ 766 if (!bond_slave_has_mac_rcu(bond, arp->mac_src)) 767 return NULL; 768 769 if (arp->op_code == htons(ARPOP_REPLY)) { 770 /* the arp must be sent on the selected 771 * rx channel 772 */ 773 tx_slave = rlb_choose_channel(skb, bond); 774 if (tx_slave) { 775 memcpy(arp->mac_src,tx_slave->dev->dev_addr, ETH_ALEN); 776 } 777 pr_debug("Server sent ARP Reply packet\n"); 778 } else if (arp->op_code == htons(ARPOP_REQUEST)) { 779 /* Create an entry in the rx_hashtbl for this client as a 780 * place holder. 781 * When the arp reply is received the entry will be updated 782 * with the correct unicast address of the client. 783 */ 784 rlb_choose_channel(skb, bond); 785 786 /* The ARP reply packets must be delayed so that 787 * they can cancel out the influence of the ARP request. 788 */ 789 bond->alb_info.rlb_update_delay_counter = RLB_UPDATE_DELAY; 790 791 /* arp requests are broadcast and are sent on the primary 792 * the arp request will collapse all clients on the subnet to 793 * the primary slave. We must register these clients to be 794 * updated with their assigned mac. 795 */ 796 rlb_req_update_subnet_clients(bond, arp->ip_src); 797 pr_debug("Server sent ARP Request packet\n"); 798 } 799 800 return tx_slave; 801 } 802 803 /* Caller must hold bond lock for read */ 804 static void rlb_rebalance(struct bonding *bond) 805 { 806 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 807 struct slave *assigned_slave; 808 struct rlb_client_info *client_info; 809 int ntt; 810 u32 hash_index; 811 812 _lock_rx_hashtbl_bh(bond); 813 814 ntt = 0; 815 hash_index = bond_info->rx_hashtbl_used_head; 816 for (; hash_index != RLB_NULL_INDEX; 817 hash_index = client_info->used_next) { 818 client_info = &(bond_info->rx_hashtbl[hash_index]); 819 assigned_slave = rlb_next_rx_slave(bond); 820 if (assigned_slave && (client_info->slave != assigned_slave)) { 821 client_info->slave = assigned_slave; 822 client_info->ntt = 1; 823 ntt = 1; 824 } 825 } 826 827 /* update the team's flag only after the whole iteration */ 828 if (ntt) { 829 bond_info->rx_ntt = 1; 830 } 831 _unlock_rx_hashtbl_bh(bond); 832 } 833 834 /* Caller must hold rx_hashtbl lock */ 835 static void rlb_init_table_entry_dst(struct rlb_client_info *entry) 836 { 837 entry->used_next = RLB_NULL_INDEX; 838 entry->used_prev = RLB_NULL_INDEX; 839 entry->assigned = 0; 840 entry->slave = NULL; 841 entry->vlan_id = 0; 842 } 843 static void rlb_init_table_entry_src(struct rlb_client_info *entry) 844 { 845 entry->src_first = RLB_NULL_INDEX; 846 entry->src_prev = RLB_NULL_INDEX; 847 entry->src_next = RLB_NULL_INDEX; 848 } 849 850 static void rlb_init_table_entry(struct rlb_client_info *entry) 851 { 852 memset(entry, 0, sizeof(struct rlb_client_info)); 853 rlb_init_table_entry_dst(entry); 854 rlb_init_table_entry_src(entry); 855 } 856 857 static void rlb_delete_table_entry_dst(struct bonding *bond, u32 index) 858 { 859 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 860 u32 next_index = bond_info->rx_hashtbl[index].used_next; 861 u32 prev_index = bond_info->rx_hashtbl[index].used_prev; 862 863 if (index == bond_info->rx_hashtbl_used_head) 864 bond_info->rx_hashtbl_used_head = next_index; 865 if (prev_index != RLB_NULL_INDEX) 866 bond_info->rx_hashtbl[prev_index].used_next = next_index; 867 if (next_index != RLB_NULL_INDEX) 868 bond_info->rx_hashtbl[next_index].used_prev = prev_index; 869 } 870 871 /* unlink a rlb hash table entry from the src list */ 872 static void rlb_src_unlink(struct bonding *bond, u32 index) 873 { 874 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 875 u32 next_index = bond_info->rx_hashtbl[index].src_next; 876 u32 prev_index = bond_info->rx_hashtbl[index].src_prev; 877 878 bond_info->rx_hashtbl[index].src_next = RLB_NULL_INDEX; 879 bond_info->rx_hashtbl[index].src_prev = RLB_NULL_INDEX; 880 881 if (next_index != RLB_NULL_INDEX) 882 bond_info->rx_hashtbl[next_index].src_prev = prev_index; 883 884 if (prev_index == RLB_NULL_INDEX) 885 return; 886 887 /* is prev_index pointing to the head of this list? */ 888 if (bond_info->rx_hashtbl[prev_index].src_first == index) 889 bond_info->rx_hashtbl[prev_index].src_first = next_index; 890 else 891 bond_info->rx_hashtbl[prev_index].src_next = next_index; 892 893 } 894 895 static void rlb_delete_table_entry(struct bonding *bond, u32 index) 896 { 897 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 898 struct rlb_client_info *entry = &(bond_info->rx_hashtbl[index]); 899 900 rlb_delete_table_entry_dst(bond, index); 901 rlb_init_table_entry_dst(entry); 902 903 rlb_src_unlink(bond, index); 904 } 905 906 /* add the rx_hashtbl[ip_dst_hash] entry to the list 907 * of entries with identical ip_src_hash 908 */ 909 static void rlb_src_link(struct bonding *bond, u32 ip_src_hash, u32 ip_dst_hash) 910 { 911 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 912 u32 next; 913 914 bond_info->rx_hashtbl[ip_dst_hash].src_prev = ip_src_hash; 915 next = bond_info->rx_hashtbl[ip_src_hash].src_first; 916 bond_info->rx_hashtbl[ip_dst_hash].src_next = next; 917 if (next != RLB_NULL_INDEX) 918 bond_info->rx_hashtbl[next].src_prev = ip_dst_hash; 919 bond_info->rx_hashtbl[ip_src_hash].src_first = ip_dst_hash; 920 } 921 922 /* deletes all rx_hashtbl entries with arp->ip_src if their mac_src does 923 * not match arp->mac_src */ 924 static void rlb_purge_src_ip(struct bonding *bond, struct arp_pkt *arp) 925 { 926 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 927 u32 ip_src_hash = _simple_hash((u8*)&(arp->ip_src), sizeof(arp->ip_src)); 928 u32 index; 929 930 _lock_rx_hashtbl_bh(bond); 931 932 index = bond_info->rx_hashtbl[ip_src_hash].src_first; 933 while (index != RLB_NULL_INDEX) { 934 struct rlb_client_info *entry = &(bond_info->rx_hashtbl[index]); 935 u32 next_index = entry->src_next; 936 if (entry->ip_src == arp->ip_src && 937 !ether_addr_equal_64bits(arp->mac_src, entry->mac_src)) 938 rlb_delete_table_entry(bond, index); 939 index = next_index; 940 } 941 _unlock_rx_hashtbl_bh(bond); 942 } 943 944 static int rlb_initialize(struct bonding *bond) 945 { 946 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 947 struct rlb_client_info *new_hashtbl; 948 int size = RLB_HASH_TABLE_SIZE * sizeof(struct rlb_client_info); 949 int i; 950 951 new_hashtbl = kmalloc(size, GFP_KERNEL); 952 if (!new_hashtbl) 953 return -1; 954 955 _lock_rx_hashtbl_bh(bond); 956 957 bond_info->rx_hashtbl = new_hashtbl; 958 959 bond_info->rx_hashtbl_used_head = RLB_NULL_INDEX; 960 961 for (i = 0; i < RLB_HASH_TABLE_SIZE; i++) { 962 rlb_init_table_entry(bond_info->rx_hashtbl + i); 963 } 964 965 _unlock_rx_hashtbl_bh(bond); 966 967 /* register to receive ARPs */ 968 bond->recv_probe = rlb_arp_recv; 969 970 return 0; 971 } 972 973 static void rlb_deinitialize(struct bonding *bond) 974 { 975 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 976 977 _lock_rx_hashtbl_bh(bond); 978 979 kfree(bond_info->rx_hashtbl); 980 bond_info->rx_hashtbl = NULL; 981 bond_info->rx_hashtbl_used_head = RLB_NULL_INDEX; 982 983 _unlock_rx_hashtbl_bh(bond); 984 } 985 986 static void rlb_clear_vlan(struct bonding *bond, unsigned short vlan_id) 987 { 988 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 989 u32 curr_index; 990 991 _lock_rx_hashtbl_bh(bond); 992 993 curr_index = bond_info->rx_hashtbl_used_head; 994 while (curr_index != RLB_NULL_INDEX) { 995 struct rlb_client_info *curr = &(bond_info->rx_hashtbl[curr_index]); 996 u32 next_index = bond_info->rx_hashtbl[curr_index].used_next; 997 998 if (curr->vlan_id == vlan_id) 999 rlb_delete_table_entry(bond, curr_index); 1000 1001 curr_index = next_index; 1002 } 1003 1004 _unlock_rx_hashtbl_bh(bond); 1005 } 1006 1007 /*********************** tlb/rlb shared functions *********************/ 1008 1009 static void alb_send_lp_vid(struct slave *slave, u8 mac_addr[], 1010 u16 vid) 1011 { 1012 struct learning_pkt pkt; 1013 struct sk_buff *skb; 1014 int size = sizeof(struct learning_pkt); 1015 char *data; 1016 1017 memset(&pkt, 0, size); 1018 memcpy(pkt.mac_dst, mac_addr, ETH_ALEN); 1019 memcpy(pkt.mac_src, mac_addr, ETH_ALEN); 1020 pkt.type = cpu_to_be16(ETH_P_LOOP); 1021 1022 skb = dev_alloc_skb(size); 1023 if (!skb) 1024 return; 1025 1026 data = skb_put(skb, size); 1027 memcpy(data, &pkt, size); 1028 1029 skb_reset_mac_header(skb); 1030 skb->network_header = skb->mac_header + ETH_HLEN; 1031 skb->protocol = pkt.type; 1032 skb->priority = TC_PRIO_CONTROL; 1033 skb->dev = slave->dev; 1034 1035 if (vid) { 1036 skb = vlan_put_tag(skb, htons(ETH_P_8021Q), vid); 1037 if (!skb) { 1038 pr_err("%s: Error: failed to insert VLAN tag\n", 1039 slave->bond->dev->name); 1040 return; 1041 } 1042 } 1043 1044 dev_queue_xmit(skb); 1045 } 1046 1047 1048 static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[]) 1049 { 1050 struct bonding *bond = bond_get_bond_by_slave(slave); 1051 struct net_device *upper; 1052 struct list_head *iter; 1053 1054 /* send untagged */ 1055 alb_send_lp_vid(slave, mac_addr, 0); 1056 1057 /* loop through vlans and send one packet for each */ 1058 rcu_read_lock(); 1059 netdev_for_each_all_upper_dev_rcu(bond->dev, upper, iter) { 1060 if (upper->priv_flags & IFF_802_1Q_VLAN) 1061 alb_send_lp_vid(slave, mac_addr, 1062 vlan_dev_vlan_id(upper)); 1063 } 1064 rcu_read_unlock(); 1065 } 1066 1067 static int alb_set_slave_mac_addr(struct slave *slave, u8 addr[]) 1068 { 1069 struct net_device *dev = slave->dev; 1070 struct sockaddr s_addr; 1071 1072 if (slave->bond->params.mode == BOND_MODE_TLB) { 1073 memcpy(dev->dev_addr, addr, dev->addr_len); 1074 return 0; 1075 } 1076 1077 /* for rlb each slave must have a unique hw mac addresses so that */ 1078 /* each slave will receive packets destined to a different mac */ 1079 memcpy(s_addr.sa_data, addr, dev->addr_len); 1080 s_addr.sa_family = dev->type; 1081 if (dev_set_mac_address(dev, &s_addr)) { 1082 pr_err("%s: Error: dev_set_mac_address of dev %s failed!\n" 1083 "ALB mode requires that the base driver support setting the hw address also when the network device's interface is open\n", 1084 slave->bond->dev->name, dev->name); 1085 return -EOPNOTSUPP; 1086 } 1087 return 0; 1088 } 1089 1090 /* 1091 * Swap MAC addresses between two slaves. 1092 * 1093 * Called with RTNL held, and no other locks. 1094 * 1095 */ 1096 1097 static void alb_swap_mac_addr(struct slave *slave1, struct slave *slave2) 1098 { 1099 u8 tmp_mac_addr[ETH_ALEN]; 1100 1101 memcpy(tmp_mac_addr, slave1->dev->dev_addr, ETH_ALEN); 1102 alb_set_slave_mac_addr(slave1, slave2->dev->dev_addr); 1103 alb_set_slave_mac_addr(slave2, tmp_mac_addr); 1104 1105 } 1106 1107 /* 1108 * Send learning packets after MAC address swap. 1109 * 1110 * Called with RTNL and no other locks 1111 */ 1112 static void alb_fasten_mac_swap(struct bonding *bond, struct slave *slave1, 1113 struct slave *slave2) 1114 { 1115 int slaves_state_differ = (SLAVE_IS_OK(slave1) != SLAVE_IS_OK(slave2)); 1116 struct slave *disabled_slave = NULL; 1117 1118 ASSERT_RTNL(); 1119 1120 /* fasten the change in the switch */ 1121 if (SLAVE_IS_OK(slave1)) { 1122 alb_send_learning_packets(slave1, slave1->dev->dev_addr); 1123 if (bond->alb_info.rlb_enabled) { 1124 /* inform the clients that the mac address 1125 * has changed 1126 */ 1127 rlb_req_update_slave_clients(bond, slave1); 1128 } 1129 } else { 1130 disabled_slave = slave1; 1131 } 1132 1133 if (SLAVE_IS_OK(slave2)) { 1134 alb_send_learning_packets(slave2, slave2->dev->dev_addr); 1135 if (bond->alb_info.rlb_enabled) { 1136 /* inform the clients that the mac address 1137 * has changed 1138 */ 1139 rlb_req_update_slave_clients(bond, slave2); 1140 } 1141 } else { 1142 disabled_slave = slave2; 1143 } 1144 1145 if (bond->alb_info.rlb_enabled && slaves_state_differ) { 1146 /* A disabled slave was assigned an active mac addr */ 1147 rlb_teach_disabled_mac_on_primary(bond, 1148 disabled_slave->dev->dev_addr); 1149 } 1150 } 1151 1152 /** 1153 * alb_change_hw_addr_on_detach 1154 * @bond: bonding we're working on 1155 * @slave: the slave that was just detached 1156 * 1157 * We assume that @slave was already detached from the slave list. 1158 * 1159 * If @slave's permanent hw address is different both from its current 1160 * address and from @bond's address, then somewhere in the bond there's 1161 * a slave that has @slave's permanet address as its current address. 1162 * We'll make sure that that slave no longer uses @slave's permanent address. 1163 * 1164 * Caller must hold RTNL and no other locks 1165 */ 1166 static void alb_change_hw_addr_on_detach(struct bonding *bond, struct slave *slave) 1167 { 1168 int perm_curr_diff; 1169 int perm_bond_diff; 1170 struct slave *found_slave; 1171 1172 perm_curr_diff = !ether_addr_equal_64bits(slave->perm_hwaddr, 1173 slave->dev->dev_addr); 1174 perm_bond_diff = !ether_addr_equal_64bits(slave->perm_hwaddr, 1175 bond->dev->dev_addr); 1176 1177 if (perm_curr_diff && perm_bond_diff) { 1178 found_slave = bond_slave_has_mac(bond, slave->perm_hwaddr); 1179 1180 if (found_slave) { 1181 /* locking: needs RTNL and nothing else */ 1182 alb_swap_mac_addr(slave, found_slave); 1183 alb_fasten_mac_swap(bond, slave, found_slave); 1184 } 1185 } 1186 } 1187 1188 /** 1189 * alb_handle_addr_collision_on_attach 1190 * @bond: bonding we're working on 1191 * @slave: the slave that was just attached 1192 * 1193 * checks uniqueness of slave's mac address and handles the case the 1194 * new slave uses the bonds mac address. 1195 * 1196 * If the permanent hw address of @slave is @bond's hw address, we need to 1197 * find a different hw address to give @slave, that isn't in use by any other 1198 * slave in the bond. This address must be, of course, one of the permanent 1199 * addresses of the other slaves. 1200 * 1201 * We go over the slave list, and for each slave there we compare its 1202 * permanent hw address with the current address of all the other slaves. 1203 * If no match was found, then we've found a slave with a permanent address 1204 * that isn't used by any other slave in the bond, so we can assign it to 1205 * @slave. 1206 * 1207 * assumption: this function is called before @slave is attached to the 1208 * bond slave list. 1209 */ 1210 static int alb_handle_addr_collision_on_attach(struct bonding *bond, struct slave *slave) 1211 { 1212 struct slave *has_bond_addr = bond->curr_active_slave; 1213 struct slave *tmp_slave1, *free_mac_slave = NULL; 1214 struct list_head *iter; 1215 1216 if (!bond_has_slaves(bond)) { 1217 /* this is the first slave */ 1218 return 0; 1219 } 1220 1221 /* if slave's mac address differs from bond's mac address 1222 * check uniqueness of slave's mac address against the other 1223 * slaves in the bond. 1224 */ 1225 if (!ether_addr_equal_64bits(slave->perm_hwaddr, bond->dev->dev_addr)) { 1226 if (!bond_slave_has_mac(bond, slave->dev->dev_addr)) 1227 return 0; 1228 1229 /* Try setting slave mac to bond address and fall-through 1230 to code handling that situation below... */ 1231 alb_set_slave_mac_addr(slave, bond->dev->dev_addr); 1232 } 1233 1234 /* The slave's address is equal to the address of the bond. 1235 * Search for a spare address in the bond for this slave. 1236 */ 1237 bond_for_each_slave(bond, tmp_slave1, iter) { 1238 if (!bond_slave_has_mac(bond, tmp_slave1->perm_hwaddr)) { 1239 /* no slave has tmp_slave1's perm addr 1240 * as its curr addr 1241 */ 1242 free_mac_slave = tmp_slave1; 1243 break; 1244 } 1245 1246 if (!has_bond_addr) { 1247 if (ether_addr_equal_64bits(tmp_slave1->dev->dev_addr, 1248 bond->dev->dev_addr)) { 1249 1250 has_bond_addr = tmp_slave1; 1251 } 1252 } 1253 } 1254 1255 if (free_mac_slave) { 1256 alb_set_slave_mac_addr(slave, free_mac_slave->perm_hwaddr); 1257 1258 pr_warning("%s: Warning: the hw address of slave %s is in use by the bond; giving it the hw address of %s\n", 1259 bond->dev->name, slave->dev->name, 1260 free_mac_slave->dev->name); 1261 1262 } else if (has_bond_addr) { 1263 pr_err("%s: Error: the hw address of slave %s is in use by the bond; couldn't find a slave with a free hw address to give it (this should not have happened)\n", 1264 bond->dev->name, slave->dev->name); 1265 return -EFAULT; 1266 } 1267 1268 return 0; 1269 } 1270 1271 /** 1272 * alb_set_mac_address 1273 * @bond: 1274 * @addr: 1275 * 1276 * In TLB mode all slaves are configured to the bond's hw address, but set 1277 * their dev_addr field to different addresses (based on their permanent hw 1278 * addresses). 1279 * 1280 * For each slave, this function sets the interface to the new address and then 1281 * changes its dev_addr field to its previous value. 1282 * 1283 * Unwinding assumes bond's mac address has not yet changed. 1284 */ 1285 static int alb_set_mac_address(struct bonding *bond, void *addr) 1286 { 1287 struct slave *slave, *rollback_slave; 1288 struct list_head *iter; 1289 struct sockaddr sa; 1290 char tmp_addr[ETH_ALEN]; 1291 int res; 1292 1293 if (bond->alb_info.rlb_enabled) 1294 return 0; 1295 1296 bond_for_each_slave(bond, slave, iter) { 1297 /* save net_device's current hw address */ 1298 memcpy(tmp_addr, slave->dev->dev_addr, ETH_ALEN); 1299 1300 res = dev_set_mac_address(slave->dev, addr); 1301 1302 /* restore net_device's hw address */ 1303 memcpy(slave->dev->dev_addr, tmp_addr, ETH_ALEN); 1304 1305 if (res) 1306 goto unwind; 1307 } 1308 1309 return 0; 1310 1311 unwind: 1312 memcpy(sa.sa_data, bond->dev->dev_addr, bond->dev->addr_len); 1313 sa.sa_family = bond->dev->type; 1314 1315 /* unwind from head to the slave that failed */ 1316 bond_for_each_slave(bond, rollback_slave, iter) { 1317 if (rollback_slave == slave) 1318 break; 1319 memcpy(tmp_addr, rollback_slave->dev->dev_addr, ETH_ALEN); 1320 dev_set_mac_address(rollback_slave->dev, &sa); 1321 memcpy(rollback_slave->dev->dev_addr, tmp_addr, ETH_ALEN); 1322 } 1323 1324 return res; 1325 } 1326 1327 /************************ exported alb funcions ************************/ 1328 1329 int bond_alb_initialize(struct bonding *bond, int rlb_enabled) 1330 { 1331 int res; 1332 1333 res = tlb_initialize(bond); 1334 if (res) { 1335 return res; 1336 } 1337 1338 if (rlb_enabled) { 1339 bond->alb_info.rlb_enabled = 1; 1340 /* initialize rlb */ 1341 res = rlb_initialize(bond); 1342 if (res) { 1343 tlb_deinitialize(bond); 1344 return res; 1345 } 1346 } else { 1347 bond->alb_info.rlb_enabled = 0; 1348 } 1349 1350 return 0; 1351 } 1352 1353 void bond_alb_deinitialize(struct bonding *bond) 1354 { 1355 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 1356 1357 tlb_deinitialize(bond); 1358 1359 if (bond_info->rlb_enabled) { 1360 rlb_deinitialize(bond); 1361 } 1362 } 1363 1364 int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev) 1365 { 1366 struct bonding *bond = netdev_priv(bond_dev); 1367 struct ethhdr *eth_data; 1368 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 1369 struct slave *tx_slave = NULL; 1370 static const __be32 ip_bcast = htonl(0xffffffff); 1371 int hash_size = 0; 1372 int do_tx_balance = 1; 1373 u32 hash_index = 0; 1374 const u8 *hash_start = NULL; 1375 int res = 1; 1376 struct ipv6hdr *ip6hdr; 1377 1378 skb_reset_mac_header(skb); 1379 eth_data = eth_hdr(skb); 1380 1381 switch (ntohs(skb->protocol)) { 1382 case ETH_P_IP: { 1383 const struct iphdr *iph = ip_hdr(skb); 1384 1385 if (ether_addr_equal_64bits(eth_data->h_dest, mac_bcast) || 1386 (iph->daddr == ip_bcast) || 1387 (iph->protocol == IPPROTO_IGMP)) { 1388 do_tx_balance = 0; 1389 break; 1390 } 1391 hash_start = (char *)&(iph->daddr); 1392 hash_size = sizeof(iph->daddr); 1393 } 1394 break; 1395 case ETH_P_IPV6: 1396 /* IPv6 doesn't really use broadcast mac address, but leave 1397 * that here just in case. 1398 */ 1399 if (ether_addr_equal_64bits(eth_data->h_dest, mac_bcast)) { 1400 do_tx_balance = 0; 1401 break; 1402 } 1403 1404 /* IPv6 uses all-nodes multicast as an equivalent to 1405 * broadcasts in IPv4. 1406 */ 1407 if (ether_addr_equal_64bits(eth_data->h_dest, mac_v6_allmcast)) { 1408 do_tx_balance = 0; 1409 break; 1410 } 1411 1412 /* Additianally, DAD probes should not be tx-balanced as that 1413 * will lead to false positives for duplicate addresses and 1414 * prevent address configuration from working. 1415 */ 1416 ip6hdr = ipv6_hdr(skb); 1417 if (ipv6_addr_any(&ip6hdr->saddr)) { 1418 do_tx_balance = 0; 1419 break; 1420 } 1421 1422 hash_start = (char *)&(ipv6_hdr(skb)->daddr); 1423 hash_size = sizeof(ipv6_hdr(skb)->daddr); 1424 break; 1425 case ETH_P_IPX: 1426 if (ipx_hdr(skb)->ipx_checksum != IPX_NO_CHECKSUM) { 1427 /* something is wrong with this packet */ 1428 do_tx_balance = 0; 1429 break; 1430 } 1431 1432 if (ipx_hdr(skb)->ipx_type != IPX_TYPE_NCP) { 1433 /* The only protocol worth balancing in 1434 * this family since it has an "ARP" like 1435 * mechanism 1436 */ 1437 do_tx_balance = 0; 1438 break; 1439 } 1440 1441 hash_start = (char*)eth_data->h_dest; 1442 hash_size = ETH_ALEN; 1443 break; 1444 case ETH_P_ARP: 1445 do_tx_balance = 0; 1446 if (bond_info->rlb_enabled) { 1447 tx_slave = rlb_arp_xmit(skb, bond); 1448 } 1449 break; 1450 default: 1451 do_tx_balance = 0; 1452 break; 1453 } 1454 1455 if (do_tx_balance) { 1456 hash_index = _simple_hash(hash_start, hash_size); 1457 tx_slave = tlb_choose_channel(bond, hash_index, skb->len); 1458 } 1459 1460 if (!tx_slave) { 1461 /* unbalanced or unassigned, send through primary */ 1462 tx_slave = rcu_dereference(bond->curr_active_slave); 1463 bond_info->unbalanced_load += skb->len; 1464 } 1465 1466 if (tx_slave && SLAVE_IS_OK(tx_slave)) { 1467 if (tx_slave != rcu_dereference(bond->curr_active_slave)) { 1468 memcpy(eth_data->h_source, 1469 tx_slave->dev->dev_addr, 1470 ETH_ALEN); 1471 } 1472 1473 res = bond_dev_queue_xmit(bond, skb, tx_slave->dev); 1474 } else { 1475 if (tx_slave) { 1476 _lock_tx_hashtbl(bond); 1477 __tlb_clear_slave(bond, tx_slave, 0); 1478 _unlock_tx_hashtbl(bond); 1479 } 1480 } 1481 1482 if (res) { 1483 /* no suitable interface, frame not sent */ 1484 kfree_skb(skb); 1485 } 1486 1487 return NETDEV_TX_OK; 1488 } 1489 1490 void bond_alb_monitor(struct work_struct *work) 1491 { 1492 struct bonding *bond = container_of(work, struct bonding, 1493 alb_work.work); 1494 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 1495 struct list_head *iter; 1496 struct slave *slave; 1497 1498 read_lock(&bond->lock); 1499 1500 if (!bond_has_slaves(bond)) { 1501 bond_info->tx_rebalance_counter = 0; 1502 bond_info->lp_counter = 0; 1503 goto re_arm; 1504 } 1505 1506 bond_info->tx_rebalance_counter++; 1507 bond_info->lp_counter++; 1508 1509 /* send learning packets */ 1510 if (bond_info->lp_counter >= BOND_ALB_LP_TICKS(bond)) { 1511 /* change of curr_active_slave involves swapping of mac addresses. 1512 * in order to avoid this swapping from happening while 1513 * sending the learning packets, the curr_slave_lock must be held for 1514 * read. 1515 */ 1516 read_lock(&bond->curr_slave_lock); 1517 1518 bond_for_each_slave(bond, slave, iter) 1519 alb_send_learning_packets(slave, slave->dev->dev_addr); 1520 1521 read_unlock(&bond->curr_slave_lock); 1522 1523 bond_info->lp_counter = 0; 1524 } 1525 1526 /* rebalance tx traffic */ 1527 if (bond_info->tx_rebalance_counter >= BOND_TLB_REBALANCE_TICKS) { 1528 1529 read_lock(&bond->curr_slave_lock); 1530 1531 bond_for_each_slave(bond, slave, iter) { 1532 tlb_clear_slave(bond, slave, 1); 1533 if (slave == bond->curr_active_slave) { 1534 SLAVE_TLB_INFO(slave).load = 1535 bond_info->unbalanced_load / 1536 BOND_TLB_REBALANCE_INTERVAL; 1537 bond_info->unbalanced_load = 0; 1538 } 1539 } 1540 1541 read_unlock(&bond->curr_slave_lock); 1542 1543 bond_info->tx_rebalance_counter = 0; 1544 } 1545 1546 /* handle rlb stuff */ 1547 if (bond_info->rlb_enabled) { 1548 if (bond_info->primary_is_promisc && 1549 (++bond_info->rlb_promisc_timeout_counter >= RLB_PROMISC_TIMEOUT)) { 1550 1551 /* 1552 * dev_set_promiscuity requires rtnl and 1553 * nothing else. Avoid race with bond_close. 1554 */ 1555 read_unlock(&bond->lock); 1556 if (!rtnl_trylock()) { 1557 read_lock(&bond->lock); 1558 goto re_arm; 1559 } 1560 1561 bond_info->rlb_promisc_timeout_counter = 0; 1562 1563 /* If the primary was set to promiscuous mode 1564 * because a slave was disabled then 1565 * it can now leave promiscuous mode. 1566 */ 1567 dev_set_promiscuity(bond->curr_active_slave->dev, -1); 1568 bond_info->primary_is_promisc = 0; 1569 1570 rtnl_unlock(); 1571 read_lock(&bond->lock); 1572 } 1573 1574 if (bond_info->rlb_rebalance) { 1575 bond_info->rlb_rebalance = 0; 1576 rlb_rebalance(bond); 1577 } 1578 1579 /* check if clients need updating */ 1580 if (bond_info->rx_ntt) { 1581 if (bond_info->rlb_update_delay_counter) { 1582 --bond_info->rlb_update_delay_counter; 1583 } else { 1584 rlb_update_rx_clients(bond); 1585 if (bond_info->rlb_update_retry_counter) { 1586 --bond_info->rlb_update_retry_counter; 1587 } else { 1588 bond_info->rx_ntt = 0; 1589 } 1590 } 1591 } 1592 } 1593 1594 re_arm: 1595 queue_delayed_work(bond->wq, &bond->alb_work, alb_delta_in_ticks); 1596 1597 read_unlock(&bond->lock); 1598 } 1599 1600 /* assumption: called before the slave is attached to the bond 1601 * and not locked by the bond lock 1602 */ 1603 int bond_alb_init_slave(struct bonding *bond, struct slave *slave) 1604 { 1605 int res; 1606 1607 res = alb_set_slave_mac_addr(slave, slave->perm_hwaddr); 1608 if (res) { 1609 return res; 1610 } 1611 1612 res = alb_handle_addr_collision_on_attach(bond, slave); 1613 if (res) { 1614 return res; 1615 } 1616 1617 tlb_init_slave(slave); 1618 1619 /* order a rebalance ASAP */ 1620 bond->alb_info.tx_rebalance_counter = BOND_TLB_REBALANCE_TICKS; 1621 1622 if (bond->alb_info.rlb_enabled) { 1623 bond->alb_info.rlb_rebalance = 1; 1624 } 1625 1626 return 0; 1627 } 1628 1629 /* 1630 * Remove slave from tlb and rlb hash tables, and fix up MAC addresses 1631 * if necessary. 1632 * 1633 * Caller must hold RTNL and no other locks 1634 */ 1635 void bond_alb_deinit_slave(struct bonding *bond, struct slave *slave) 1636 { 1637 if (bond_has_slaves(bond)) 1638 alb_change_hw_addr_on_detach(bond, slave); 1639 1640 tlb_clear_slave(bond, slave, 0); 1641 1642 if (bond->alb_info.rlb_enabled) { 1643 bond->alb_info.rx_slave = NULL; 1644 rlb_clear_slave(bond, slave); 1645 } 1646 } 1647 1648 /* Caller must hold bond lock for read */ 1649 void bond_alb_handle_link_change(struct bonding *bond, struct slave *slave, char link) 1650 { 1651 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); 1652 1653 if (link == BOND_LINK_DOWN) { 1654 tlb_clear_slave(bond, slave, 0); 1655 if (bond->alb_info.rlb_enabled) { 1656 rlb_clear_slave(bond, slave); 1657 } 1658 } else if (link == BOND_LINK_UP) { 1659 /* order a rebalance ASAP */ 1660 bond_info->tx_rebalance_counter = BOND_TLB_REBALANCE_TICKS; 1661 if (bond->alb_info.rlb_enabled) { 1662 bond->alb_info.rlb_rebalance = 1; 1663 /* If the updelay module parameter is smaller than the 1664 * forwarding delay of the switch the rebalance will 1665 * not work because the rebalance arp replies will 1666 * not be forwarded to the clients.. 1667 */ 1668 } 1669 } 1670 } 1671 1672 /** 1673 * bond_alb_handle_active_change - assign new curr_active_slave 1674 * @bond: our bonding struct 1675 * @new_slave: new slave to assign 1676 * 1677 * Set the bond->curr_active_slave to @new_slave and handle 1678 * mac address swapping and promiscuity changes as needed. 1679 * 1680 * If new_slave is NULL, caller must hold curr_slave_lock or 1681 * bond->lock for write. 1682 * 1683 * If new_slave is not NULL, caller must hold RTNL, bond->lock for 1684 * read and curr_slave_lock for write. Processing here may sleep, so 1685 * no other locks may be held. 1686 */ 1687 void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave) 1688 __releases(&bond->curr_slave_lock) 1689 __releases(&bond->lock) 1690 __acquires(&bond->lock) 1691 __acquires(&bond->curr_slave_lock) 1692 { 1693 struct slave *swap_slave; 1694 1695 if (bond->curr_active_slave == new_slave) 1696 return; 1697 1698 if (bond->curr_active_slave && bond->alb_info.primary_is_promisc) { 1699 dev_set_promiscuity(bond->curr_active_slave->dev, -1); 1700 bond->alb_info.primary_is_promisc = 0; 1701 bond->alb_info.rlb_promisc_timeout_counter = 0; 1702 } 1703 1704 swap_slave = bond->curr_active_slave; 1705 rcu_assign_pointer(bond->curr_active_slave, new_slave); 1706 1707 if (!new_slave || !bond_has_slaves(bond)) 1708 return; 1709 1710 /* set the new curr_active_slave to the bonds mac address 1711 * i.e. swap mac addresses of old curr_active_slave and new curr_active_slave 1712 */ 1713 if (!swap_slave) 1714 swap_slave = bond_slave_has_mac(bond, bond->dev->dev_addr); 1715 1716 /* 1717 * Arrange for swap_slave and new_slave to temporarily be 1718 * ignored so we can mess with their MAC addresses without 1719 * fear of interference from transmit activity. 1720 */ 1721 if (swap_slave) 1722 tlb_clear_slave(bond, swap_slave, 1); 1723 tlb_clear_slave(bond, new_slave, 1); 1724 1725 write_unlock_bh(&bond->curr_slave_lock); 1726 read_unlock(&bond->lock); 1727 1728 ASSERT_RTNL(); 1729 1730 /* in TLB mode, the slave might flip down/up with the old dev_addr, 1731 * and thus filter bond->dev_addr's packets, so force bond's mac 1732 */ 1733 if (bond->params.mode == BOND_MODE_TLB) { 1734 struct sockaddr sa; 1735 u8 tmp_addr[ETH_ALEN]; 1736 1737 memcpy(tmp_addr, new_slave->dev->dev_addr, ETH_ALEN); 1738 1739 memcpy(sa.sa_data, bond->dev->dev_addr, bond->dev->addr_len); 1740 sa.sa_family = bond->dev->type; 1741 /* we don't care if it can't change its mac, best effort */ 1742 dev_set_mac_address(new_slave->dev, &sa); 1743 1744 memcpy(new_slave->dev->dev_addr, tmp_addr, ETH_ALEN); 1745 } 1746 1747 /* curr_active_slave must be set before calling alb_swap_mac_addr */ 1748 if (swap_slave) { 1749 /* swap mac address */ 1750 alb_swap_mac_addr(swap_slave, new_slave); 1751 alb_fasten_mac_swap(bond, swap_slave, new_slave); 1752 read_lock(&bond->lock); 1753 } else { 1754 /* set the new_slave to the bond mac address */ 1755 alb_set_slave_mac_addr(new_slave, bond->dev->dev_addr); 1756 read_lock(&bond->lock); 1757 alb_send_learning_packets(new_slave, bond->dev->dev_addr); 1758 } 1759 1760 write_lock_bh(&bond->curr_slave_lock); 1761 } 1762 1763 /* 1764 * Called with RTNL 1765 */ 1766 int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr) 1767 __acquires(&bond->lock) 1768 __releases(&bond->lock) 1769 { 1770 struct bonding *bond = netdev_priv(bond_dev); 1771 struct sockaddr *sa = addr; 1772 struct slave *swap_slave; 1773 int res; 1774 1775 if (!is_valid_ether_addr(sa->sa_data)) { 1776 return -EADDRNOTAVAIL; 1777 } 1778 1779 res = alb_set_mac_address(bond, addr); 1780 if (res) { 1781 return res; 1782 } 1783 1784 memcpy(bond_dev->dev_addr, sa->sa_data, bond_dev->addr_len); 1785 1786 /* If there is no curr_active_slave there is nothing else to do. 1787 * Otherwise we'll need to pass the new address to it and handle 1788 * duplications. 1789 */ 1790 if (!bond->curr_active_slave) { 1791 return 0; 1792 } 1793 1794 swap_slave = bond_slave_has_mac(bond, bond_dev->dev_addr); 1795 1796 if (swap_slave) { 1797 alb_swap_mac_addr(swap_slave, bond->curr_active_slave); 1798 alb_fasten_mac_swap(bond, swap_slave, bond->curr_active_slave); 1799 } else { 1800 alb_set_slave_mac_addr(bond->curr_active_slave, bond_dev->dev_addr); 1801 1802 read_lock(&bond->lock); 1803 alb_send_learning_packets(bond->curr_active_slave, bond_dev->dev_addr); 1804 if (bond->alb_info.rlb_enabled) { 1805 /* inform clients mac address has changed */ 1806 rlb_req_update_slave_clients(bond, bond->curr_active_slave); 1807 } 1808 read_unlock(&bond->lock); 1809 } 1810 1811 return 0; 1812 } 1813 1814 void bond_alb_clear_vlan(struct bonding *bond, unsigned short vlan_id) 1815 { 1816 if (bond->alb_info.rlb_enabled) { 1817 rlb_clear_vlan(bond, vlan_id); 1818 } 1819 } 1820 1821