1 /* 2 * Copyright(c) 2004-2005 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/kernel.h> 26 #include <linux/module.h> 27 #include <linux/device.h> 28 #include <linux/sched.h> 29 #include <linux/fs.h> 30 #include <linux/types.h> 31 #include <linux/string.h> 32 #include <linux/netdevice.h> 33 #include <linux/inetdevice.h> 34 #include <linux/in.h> 35 #include <linux/sysfs.h> 36 #include <linux/ctype.h> 37 #include <linux/inet.h> 38 #include <linux/rtnetlink.h> 39 #include <linux/etherdevice.h> 40 #include <net/net_namespace.h> 41 #include <net/netns/generic.h> 42 #include <linux/nsproxy.h> 43 44 #include "bonding.h" 45 46 #define to_dev(obj) container_of(obj, struct device, kobj) 47 #define to_bond(cd) ((struct bonding *)(netdev_priv(to_net_dev(cd)))) 48 49 /* 50 * "show" function for the bond_masters attribute. 51 * The class parameter is ignored. 52 */ 53 static ssize_t bonding_show_bonds(struct class *cls, 54 struct class_attribute *attr, 55 char *buf) 56 { 57 struct bond_net *bn = 58 container_of(attr, struct bond_net, class_attr_bonding_masters); 59 int res = 0; 60 struct bonding *bond; 61 62 rtnl_lock(); 63 64 list_for_each_entry(bond, &bn->dev_list, bond_list) { 65 if (res > (PAGE_SIZE - IFNAMSIZ)) { 66 /* not enough space for another interface name */ 67 if ((PAGE_SIZE - res) > 10) 68 res = PAGE_SIZE - 10; 69 res += sprintf(buf + res, "++more++ "); 70 break; 71 } 72 res += sprintf(buf + res, "%s ", bond->dev->name); 73 } 74 if (res) 75 buf[res-1] = '\n'; /* eat the leftover space */ 76 77 rtnl_unlock(); 78 return res; 79 } 80 81 static struct net_device *bond_get_by_name(struct bond_net *bn, const char *ifname) 82 { 83 struct bonding *bond; 84 85 list_for_each_entry(bond, &bn->dev_list, bond_list) { 86 if (strncmp(bond->dev->name, ifname, IFNAMSIZ) == 0) 87 return bond->dev; 88 } 89 return NULL; 90 } 91 92 /* 93 * "store" function for the bond_masters attribute. This is what 94 * creates and deletes entire bonds. 95 * 96 * The class parameter is ignored. 97 * 98 */ 99 100 static ssize_t bonding_store_bonds(struct class *cls, 101 struct class_attribute *attr, 102 const char *buffer, size_t count) 103 { 104 struct bond_net *bn = 105 container_of(attr, struct bond_net, class_attr_bonding_masters); 106 char command[IFNAMSIZ + 1] = {0, }; 107 char *ifname; 108 int rv, res = count; 109 110 sscanf(buffer, "%16s", command); /* IFNAMSIZ*/ 111 ifname = command + 1; 112 if ((strlen(command) <= 1) || 113 !dev_valid_name(ifname)) 114 goto err_no_cmd; 115 116 if (command[0] == '+') { 117 pr_info("%s is being created...\n", ifname); 118 rv = bond_create(bn->net, ifname); 119 if (rv) { 120 if (rv == -EEXIST) 121 pr_info("%s already exists.\n", ifname); 122 else 123 pr_info("%s creation failed.\n", ifname); 124 res = rv; 125 } 126 } else if (command[0] == '-') { 127 struct net_device *bond_dev; 128 129 rtnl_lock(); 130 bond_dev = bond_get_by_name(bn, ifname); 131 if (bond_dev) { 132 pr_info("%s is being deleted...\n", ifname); 133 unregister_netdevice(bond_dev); 134 } else { 135 pr_err("unable to delete non-existent %s\n", ifname); 136 res = -ENODEV; 137 } 138 rtnl_unlock(); 139 } else 140 goto err_no_cmd; 141 142 /* Always return either count or an error. If you return 0, you'll 143 * get called forever, which is bad. 144 */ 145 return res; 146 147 err_no_cmd: 148 pr_err("no command found in bonding_masters. Use +ifname or -ifname.\n"); 149 return -EPERM; 150 } 151 152 static const void *bonding_namespace(struct class *cls, 153 const struct class_attribute *attr) 154 { 155 const struct bond_net *bn = 156 container_of(attr, struct bond_net, class_attr_bonding_masters); 157 return bn->net; 158 } 159 160 /* class attribute for bond_masters file. This ends up in /sys/class/net */ 161 static const struct class_attribute class_attr_bonding_masters = { 162 .attr = { 163 .name = "bonding_masters", 164 .mode = S_IWUSR | S_IRUGO, 165 }, 166 .show = bonding_show_bonds, 167 .store = bonding_store_bonds, 168 .namespace = bonding_namespace, 169 }; 170 171 int bond_create_slave_symlinks(struct net_device *master, 172 struct net_device *slave) 173 { 174 char linkname[IFNAMSIZ+7]; 175 int ret = 0; 176 177 /* first, create a link from the slave back to the master */ 178 ret = sysfs_create_link(&(slave->dev.kobj), &(master->dev.kobj), 179 "master"); 180 if (ret) 181 return ret; 182 /* next, create a link from the master to the slave */ 183 sprintf(linkname, "slave_%s", slave->name); 184 ret = sysfs_create_link(&(master->dev.kobj), &(slave->dev.kobj), 185 linkname); 186 187 /* free the master link created earlier in case of error */ 188 if (ret) 189 sysfs_remove_link(&(slave->dev.kobj), "master"); 190 191 return ret; 192 193 } 194 195 void bond_destroy_slave_symlinks(struct net_device *master, 196 struct net_device *slave) 197 { 198 char linkname[IFNAMSIZ+7]; 199 200 sysfs_remove_link(&(slave->dev.kobj), "master"); 201 sprintf(linkname, "slave_%s", slave->name); 202 sysfs_remove_link(&(master->dev.kobj), linkname); 203 } 204 205 206 /* 207 * Show the slaves in the current bond. 208 */ 209 static ssize_t bonding_show_slaves(struct device *d, 210 struct device_attribute *attr, char *buf) 211 { 212 struct slave *slave; 213 int i, res = 0; 214 struct bonding *bond = to_bond(d); 215 216 read_lock(&bond->lock); 217 bond_for_each_slave(bond, slave, i) { 218 if (res > (PAGE_SIZE - IFNAMSIZ)) { 219 /* not enough space for another interface name */ 220 if ((PAGE_SIZE - res) > 10) 221 res = PAGE_SIZE - 10; 222 res += sprintf(buf + res, "++more++ "); 223 break; 224 } 225 res += sprintf(buf + res, "%s ", slave->dev->name); 226 } 227 read_unlock(&bond->lock); 228 if (res) 229 buf[res-1] = '\n'; /* eat the leftover space */ 230 return res; 231 } 232 233 /* 234 * Set the slaves in the current bond. 235 * This is supposed to be only thin wrapper for bond_enslave and bond_release. 236 * All hard work should be done there. 237 */ 238 static ssize_t bonding_store_slaves(struct device *d, 239 struct device_attribute *attr, 240 const char *buffer, size_t count) 241 { 242 char command[IFNAMSIZ + 1] = { 0, }; 243 char *ifname; 244 int res, ret = count; 245 struct net_device *dev; 246 struct bonding *bond = to_bond(d); 247 248 if (!rtnl_trylock()) 249 return restart_syscall(); 250 251 sscanf(buffer, "%16s", command); /* IFNAMSIZ*/ 252 ifname = command + 1; 253 if ((strlen(command) <= 1) || 254 !dev_valid_name(ifname)) 255 goto err_no_cmd; 256 257 dev = __dev_get_by_name(dev_net(bond->dev), ifname); 258 if (!dev) { 259 pr_info("%s: Interface %s does not exist!\n", 260 bond->dev->name, ifname); 261 ret = -ENODEV; 262 goto out; 263 } 264 265 switch (command[0]) { 266 case '+': 267 pr_info("%s: Adding slave %s.\n", bond->dev->name, dev->name); 268 res = bond_enslave(bond->dev, dev); 269 break; 270 271 case '-': 272 pr_info("%s: Removing slave %s.\n", bond->dev->name, dev->name); 273 res = bond_release(bond->dev, dev); 274 break; 275 276 default: 277 goto err_no_cmd; 278 } 279 280 if (res) 281 ret = res; 282 goto out; 283 284 err_no_cmd: 285 pr_err("no command found in slaves file for bond %s. Use +ifname or -ifname.\n", 286 bond->dev->name); 287 ret = -EPERM; 288 289 out: 290 rtnl_unlock(); 291 return ret; 292 } 293 294 static DEVICE_ATTR(slaves, S_IRUGO | S_IWUSR, bonding_show_slaves, 295 bonding_store_slaves); 296 297 /* 298 * Show and set the bonding mode. The bond interface must be down to 299 * change the mode. 300 */ 301 static ssize_t bonding_show_mode(struct device *d, 302 struct device_attribute *attr, char *buf) 303 { 304 struct bonding *bond = to_bond(d); 305 306 return sprintf(buf, "%s %d\n", 307 bond_mode_tbl[bond->params.mode].modename, 308 bond->params.mode); 309 } 310 311 static ssize_t bonding_store_mode(struct device *d, 312 struct device_attribute *attr, 313 const char *buf, size_t count) 314 { 315 int new_value, ret = count; 316 struct bonding *bond = to_bond(d); 317 318 if (!rtnl_trylock()) 319 return restart_syscall(); 320 321 if (bond->dev->flags & IFF_UP) { 322 pr_err("unable to update mode of %s because interface is up.\n", 323 bond->dev->name); 324 ret = -EPERM; 325 goto out; 326 } 327 328 if (bond->slave_cnt > 0) { 329 pr_err("unable to update mode of %s because it has slaves.\n", 330 bond->dev->name); 331 ret = -EPERM; 332 goto out; 333 } 334 335 new_value = bond_parse_parm(buf, bond_mode_tbl); 336 if (new_value < 0) { 337 pr_err("%s: Ignoring invalid mode value %.*s.\n", 338 bond->dev->name, (int)strlen(buf) - 1, buf); 339 ret = -EINVAL; 340 goto out; 341 } 342 if ((new_value == BOND_MODE_ALB || 343 new_value == BOND_MODE_TLB) && 344 bond->params.arp_interval) { 345 pr_err("%s: %s mode is incompatible with arp monitoring.\n", 346 bond->dev->name, bond_mode_tbl[new_value].modename); 347 ret = -EINVAL; 348 goto out; 349 } 350 351 bond->params.mode = new_value; 352 bond_set_mode_ops(bond, bond->params.mode); 353 pr_info("%s: setting mode to %s (%d).\n", 354 bond->dev->name, bond_mode_tbl[new_value].modename, 355 new_value); 356 out: 357 rtnl_unlock(); 358 return ret; 359 } 360 static DEVICE_ATTR(mode, S_IRUGO | S_IWUSR, 361 bonding_show_mode, bonding_store_mode); 362 363 /* 364 * Show and set the bonding transmit hash method. 365 */ 366 static ssize_t bonding_show_xmit_hash(struct device *d, 367 struct device_attribute *attr, 368 char *buf) 369 { 370 struct bonding *bond = to_bond(d); 371 372 return sprintf(buf, "%s %d\n", 373 xmit_hashtype_tbl[bond->params.xmit_policy].modename, 374 bond->params.xmit_policy); 375 } 376 377 static ssize_t bonding_store_xmit_hash(struct device *d, 378 struct device_attribute *attr, 379 const char *buf, size_t count) 380 { 381 int new_value, ret = count; 382 struct bonding *bond = to_bond(d); 383 384 new_value = bond_parse_parm(buf, xmit_hashtype_tbl); 385 if (new_value < 0) { 386 pr_err("%s: Ignoring invalid xmit hash policy value %.*s.\n", 387 bond->dev->name, 388 (int)strlen(buf) - 1, buf); 389 ret = -EINVAL; 390 } else { 391 bond->params.xmit_policy = new_value; 392 bond_set_mode_ops(bond, bond->params.mode); 393 pr_info("%s: setting xmit hash policy to %s (%d).\n", 394 bond->dev->name, 395 xmit_hashtype_tbl[new_value].modename, new_value); 396 } 397 398 return ret; 399 } 400 static DEVICE_ATTR(xmit_hash_policy, S_IRUGO | S_IWUSR, 401 bonding_show_xmit_hash, bonding_store_xmit_hash); 402 403 /* 404 * Show and set arp_validate. 405 */ 406 static ssize_t bonding_show_arp_validate(struct device *d, 407 struct device_attribute *attr, 408 char *buf) 409 { 410 struct bonding *bond = to_bond(d); 411 412 return sprintf(buf, "%s %d\n", 413 arp_validate_tbl[bond->params.arp_validate].modename, 414 bond->params.arp_validate); 415 } 416 417 static ssize_t bonding_store_arp_validate(struct device *d, 418 struct device_attribute *attr, 419 const char *buf, size_t count) 420 { 421 int new_value; 422 struct bonding *bond = to_bond(d); 423 424 new_value = bond_parse_parm(buf, arp_validate_tbl); 425 if (new_value < 0) { 426 pr_err("%s: Ignoring invalid arp_validate value %s\n", 427 bond->dev->name, buf); 428 return -EINVAL; 429 } 430 if (new_value && (bond->params.mode != BOND_MODE_ACTIVEBACKUP)) { 431 pr_err("%s: arp_validate only supported in active-backup mode.\n", 432 bond->dev->name); 433 return -EINVAL; 434 } 435 pr_info("%s: setting arp_validate to %s (%d).\n", 436 bond->dev->name, arp_validate_tbl[new_value].modename, 437 new_value); 438 439 bond->params.arp_validate = new_value; 440 441 return count; 442 } 443 444 static DEVICE_ATTR(arp_validate, S_IRUGO | S_IWUSR, bonding_show_arp_validate, 445 bonding_store_arp_validate); 446 /* 447 * Show and set arp_all_targets. 448 */ 449 static ssize_t bonding_show_arp_all_targets(struct device *d, 450 struct device_attribute *attr, 451 char *buf) 452 { 453 struct bonding *bond = to_bond(d); 454 int value = bond->params.arp_all_targets; 455 456 return sprintf(buf, "%s %d\n", arp_all_targets_tbl[value].modename, 457 value); 458 } 459 460 static ssize_t bonding_store_arp_all_targets(struct device *d, 461 struct device_attribute *attr, 462 const char *buf, size_t count) 463 { 464 struct bonding *bond = to_bond(d); 465 int new_value; 466 467 new_value = bond_parse_parm(buf, arp_all_targets_tbl); 468 if (new_value < 0) { 469 pr_err("%s: Ignoring invalid arp_all_targets value %s\n", 470 bond->dev->name, buf); 471 return -EINVAL; 472 } 473 pr_info("%s: setting arp_all_targets to %s (%d).\n", 474 bond->dev->name, arp_all_targets_tbl[new_value].modename, 475 new_value); 476 477 bond->params.arp_all_targets = new_value; 478 479 return count; 480 } 481 482 static DEVICE_ATTR(arp_all_targets, S_IRUGO | S_IWUSR, 483 bonding_show_arp_all_targets, bonding_store_arp_all_targets); 484 485 /* 486 * Show and store fail_over_mac. User only allowed to change the 487 * value when there are no slaves. 488 */ 489 static ssize_t bonding_show_fail_over_mac(struct device *d, 490 struct device_attribute *attr, 491 char *buf) 492 { 493 struct bonding *bond = to_bond(d); 494 495 return sprintf(buf, "%s %d\n", 496 fail_over_mac_tbl[bond->params.fail_over_mac].modename, 497 bond->params.fail_over_mac); 498 } 499 500 static ssize_t bonding_store_fail_over_mac(struct device *d, 501 struct device_attribute *attr, 502 const char *buf, size_t count) 503 { 504 int new_value; 505 struct bonding *bond = to_bond(d); 506 507 if (bond->slave_cnt != 0) { 508 pr_err("%s: Can't alter fail_over_mac with slaves in bond.\n", 509 bond->dev->name); 510 return -EPERM; 511 } 512 513 new_value = bond_parse_parm(buf, fail_over_mac_tbl); 514 if (new_value < 0) { 515 pr_err("%s: Ignoring invalid fail_over_mac value %s.\n", 516 bond->dev->name, buf); 517 return -EINVAL; 518 } 519 520 bond->params.fail_over_mac = new_value; 521 pr_info("%s: Setting fail_over_mac to %s (%d).\n", 522 bond->dev->name, fail_over_mac_tbl[new_value].modename, 523 new_value); 524 525 return count; 526 } 527 528 static DEVICE_ATTR(fail_over_mac, S_IRUGO | S_IWUSR, 529 bonding_show_fail_over_mac, bonding_store_fail_over_mac); 530 531 /* 532 * Show and set the arp timer interval. There are two tricky bits 533 * here. First, if ARP monitoring is activated, then we must disable 534 * MII monitoring. Second, if the ARP timer isn't running, we must 535 * start it. 536 */ 537 static ssize_t bonding_show_arp_interval(struct device *d, 538 struct device_attribute *attr, 539 char *buf) 540 { 541 struct bonding *bond = to_bond(d); 542 543 return sprintf(buf, "%d\n", bond->params.arp_interval); 544 } 545 546 static ssize_t bonding_store_arp_interval(struct device *d, 547 struct device_attribute *attr, 548 const char *buf, size_t count) 549 { 550 int new_value, ret = count; 551 struct bonding *bond = to_bond(d); 552 553 if (!rtnl_trylock()) 554 return restart_syscall(); 555 if (sscanf(buf, "%d", &new_value) != 1) { 556 pr_err("%s: no arp_interval value specified.\n", 557 bond->dev->name); 558 ret = -EINVAL; 559 goto out; 560 } 561 if (new_value < 0) { 562 pr_err("%s: Invalid arp_interval value %d not in range 0-%d; rejected.\n", 563 bond->dev->name, new_value, INT_MAX); 564 ret = -EINVAL; 565 goto out; 566 } 567 if (bond->params.mode == BOND_MODE_ALB || 568 bond->params.mode == BOND_MODE_TLB) { 569 pr_info("%s: ARP monitoring cannot be used with ALB/TLB. Only MII monitoring is supported on %s.\n", 570 bond->dev->name, bond->dev->name); 571 ret = -EINVAL; 572 goto out; 573 } 574 pr_info("%s: Setting ARP monitoring interval to %d.\n", 575 bond->dev->name, new_value); 576 bond->params.arp_interval = new_value; 577 if (new_value) { 578 if (bond->params.miimon) { 579 pr_info("%s: ARP monitoring cannot be used with MII monitoring. %s Disabling MII monitoring.\n", 580 bond->dev->name, bond->dev->name); 581 bond->params.miimon = 0; 582 } 583 if (!bond->params.arp_targets[0]) 584 pr_info("%s: ARP monitoring has been set up, but no ARP targets have been specified.\n", 585 bond->dev->name); 586 } 587 if (bond->dev->flags & IFF_UP) { 588 /* If the interface is up, we may need to fire off 589 * the ARP timer. If the interface is down, the 590 * timer will get fired off when the open function 591 * is called. 592 */ 593 if (!new_value) { 594 cancel_delayed_work_sync(&bond->arp_work); 595 } else { 596 cancel_delayed_work_sync(&bond->mii_work); 597 queue_delayed_work(bond->wq, &bond->arp_work, 0); 598 } 599 } 600 out: 601 rtnl_unlock(); 602 return ret; 603 } 604 static DEVICE_ATTR(arp_interval, S_IRUGO | S_IWUSR, 605 bonding_show_arp_interval, bonding_store_arp_interval); 606 607 /* 608 * Show and set the arp targets. 609 */ 610 static ssize_t bonding_show_arp_targets(struct device *d, 611 struct device_attribute *attr, 612 char *buf) 613 { 614 int i, res = 0; 615 struct bonding *bond = to_bond(d); 616 617 for (i = 0; i < BOND_MAX_ARP_TARGETS; i++) { 618 if (bond->params.arp_targets[i]) 619 res += sprintf(buf + res, "%pI4 ", 620 &bond->params.arp_targets[i]); 621 } 622 if (res) 623 buf[res-1] = '\n'; /* eat the leftover space */ 624 return res; 625 } 626 627 static ssize_t bonding_store_arp_targets(struct device *d, 628 struct device_attribute *attr, 629 const char *buf, size_t count) 630 { 631 struct bonding *bond = to_bond(d); 632 struct slave *slave; 633 __be32 newtarget, *targets; 634 unsigned long *targets_rx; 635 int ind, i, j, ret = -EINVAL; 636 637 targets = bond->params.arp_targets; 638 newtarget = in_aton(buf + 1); 639 /* look for adds */ 640 if (buf[0] == '+') { 641 if ((newtarget == 0) || (newtarget == htonl(INADDR_BROADCAST))) { 642 pr_err("%s: invalid ARP target %pI4 specified for addition\n", 643 bond->dev->name, &newtarget); 644 goto out; 645 } 646 647 if (bond_get_targets_ip(targets, newtarget) != -1) { /* dup */ 648 pr_err("%s: ARP target %pI4 is already present\n", 649 bond->dev->name, &newtarget); 650 goto out; 651 } 652 653 ind = bond_get_targets_ip(targets, 0); /* first free slot */ 654 if (ind == -1) { 655 pr_err("%s: ARP target table is full!\n", 656 bond->dev->name); 657 goto out; 658 } 659 660 pr_info("%s: adding ARP target %pI4.\n", bond->dev->name, 661 &newtarget); 662 /* not to race with bond_arp_rcv */ 663 write_lock_bh(&bond->lock); 664 bond_for_each_slave(bond, slave, i) 665 slave->target_last_arp_rx[ind] = jiffies; 666 targets[ind] = newtarget; 667 write_unlock_bh(&bond->lock); 668 } else if (buf[0] == '-') { 669 if ((newtarget == 0) || (newtarget == htonl(INADDR_BROADCAST))) { 670 pr_err("%s: invalid ARP target %pI4 specified for removal\n", 671 bond->dev->name, &newtarget); 672 goto out; 673 } 674 675 ind = bond_get_targets_ip(targets, newtarget); 676 if (ind == -1) { 677 pr_err("%s: unable to remove nonexistent ARP target %pI4.\n", 678 bond->dev->name, &newtarget); 679 goto out; 680 } 681 682 if (ind == 0 && !targets[1] && bond->params.arp_interval) 683 pr_warn("%s: removing last arp target with arp_interval on\n", 684 bond->dev->name); 685 686 pr_info("%s: removing ARP target %pI4.\n", bond->dev->name, 687 &newtarget); 688 689 write_lock_bh(&bond->lock); 690 bond_for_each_slave(bond, slave, i) { 691 targets_rx = slave->target_last_arp_rx; 692 j = ind; 693 for (; (j < BOND_MAX_ARP_TARGETS-1) && targets[j+1]; j++) 694 targets_rx[j] = targets_rx[j+1]; 695 targets_rx[j] = 0; 696 } 697 for (i = ind; (i < BOND_MAX_ARP_TARGETS-1) && targets[i+1]; i++) 698 targets[i] = targets[i+1]; 699 targets[i] = 0; 700 write_unlock_bh(&bond->lock); 701 } else { 702 pr_err("no command found in arp_ip_targets file for bond %s. Use +<addr> or -<addr>.\n", 703 bond->dev->name); 704 ret = -EPERM; 705 goto out; 706 } 707 708 ret = count; 709 out: 710 return ret; 711 } 712 static DEVICE_ATTR(arp_ip_target, S_IRUGO | S_IWUSR , bonding_show_arp_targets, bonding_store_arp_targets); 713 714 /* 715 * Show and set the up and down delays. These must be multiples of the 716 * MII monitoring value, and are stored internally as the multiplier. 717 * Thus, we must translate to MS for the real world. 718 */ 719 static ssize_t bonding_show_downdelay(struct device *d, 720 struct device_attribute *attr, 721 char *buf) 722 { 723 struct bonding *bond = to_bond(d); 724 725 return sprintf(buf, "%d\n", bond->params.downdelay * bond->params.miimon); 726 } 727 728 static ssize_t bonding_store_downdelay(struct device *d, 729 struct device_attribute *attr, 730 const char *buf, size_t count) 731 { 732 int new_value, ret = count; 733 struct bonding *bond = to_bond(d); 734 735 if (!(bond->params.miimon)) { 736 pr_err("%s: Unable to set down delay as MII monitoring is disabled\n", 737 bond->dev->name); 738 ret = -EPERM; 739 goto out; 740 } 741 742 if (sscanf(buf, "%d", &new_value) != 1) { 743 pr_err("%s: no down delay value specified.\n", bond->dev->name); 744 ret = -EINVAL; 745 goto out; 746 } 747 if (new_value < 0) { 748 pr_err("%s: Invalid down delay value %d not in range %d-%d; rejected.\n", 749 bond->dev->name, new_value, 0, INT_MAX); 750 ret = -EINVAL; 751 goto out; 752 } else { 753 if ((new_value % bond->params.miimon) != 0) { 754 pr_warning("%s: Warning: down delay (%d) is not a multiple of miimon (%d), delay rounded to %d ms\n", 755 bond->dev->name, new_value, 756 bond->params.miimon, 757 (new_value / bond->params.miimon) * 758 bond->params.miimon); 759 } 760 bond->params.downdelay = new_value / bond->params.miimon; 761 pr_info("%s: Setting down delay to %d.\n", 762 bond->dev->name, 763 bond->params.downdelay * bond->params.miimon); 764 765 } 766 767 out: 768 return ret; 769 } 770 static DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR, 771 bonding_show_downdelay, bonding_store_downdelay); 772 773 static ssize_t bonding_show_updelay(struct device *d, 774 struct device_attribute *attr, 775 char *buf) 776 { 777 struct bonding *bond = to_bond(d); 778 779 return sprintf(buf, "%d\n", bond->params.updelay * bond->params.miimon); 780 781 } 782 783 static ssize_t bonding_store_updelay(struct device *d, 784 struct device_attribute *attr, 785 const char *buf, size_t count) 786 { 787 int new_value, ret = count; 788 struct bonding *bond = to_bond(d); 789 790 if (!(bond->params.miimon)) { 791 pr_err("%s: Unable to set up delay as MII monitoring is disabled\n", 792 bond->dev->name); 793 ret = -EPERM; 794 goto out; 795 } 796 797 if (sscanf(buf, "%d", &new_value) != 1) { 798 pr_err("%s: no up delay value specified.\n", 799 bond->dev->name); 800 ret = -EINVAL; 801 goto out; 802 } 803 if (new_value < 0) { 804 pr_err("%s: Invalid up delay value %d not in range %d-%d; rejected.\n", 805 bond->dev->name, new_value, 0, INT_MAX); 806 ret = -EINVAL; 807 goto out; 808 } else { 809 if ((new_value % bond->params.miimon) != 0) { 810 pr_warning("%s: Warning: up delay (%d) is not a multiple of miimon (%d), updelay rounded to %d ms\n", 811 bond->dev->name, new_value, 812 bond->params.miimon, 813 (new_value / bond->params.miimon) * 814 bond->params.miimon); 815 } 816 bond->params.updelay = new_value / bond->params.miimon; 817 pr_info("%s: Setting up delay to %d.\n", 818 bond->dev->name, 819 bond->params.updelay * bond->params.miimon); 820 } 821 822 out: 823 return ret; 824 } 825 static DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR, 826 bonding_show_updelay, bonding_store_updelay); 827 828 /* 829 * Show and set the LACP interval. Interface must be down, and the mode 830 * must be set to 802.3ad mode. 831 */ 832 static ssize_t bonding_show_lacp(struct device *d, 833 struct device_attribute *attr, 834 char *buf) 835 { 836 struct bonding *bond = to_bond(d); 837 838 return sprintf(buf, "%s %d\n", 839 bond_lacp_tbl[bond->params.lacp_fast].modename, 840 bond->params.lacp_fast); 841 } 842 843 static ssize_t bonding_store_lacp(struct device *d, 844 struct device_attribute *attr, 845 const char *buf, size_t count) 846 { 847 int new_value, ret = count; 848 struct bonding *bond = to_bond(d); 849 850 if (bond->dev->flags & IFF_UP) { 851 pr_err("%s: Unable to update LACP rate because interface is up.\n", 852 bond->dev->name); 853 ret = -EPERM; 854 goto out; 855 } 856 857 if (bond->params.mode != BOND_MODE_8023AD) { 858 pr_err("%s: Unable to update LACP rate because bond is not in 802.3ad mode.\n", 859 bond->dev->name); 860 ret = -EPERM; 861 goto out; 862 } 863 864 new_value = bond_parse_parm(buf, bond_lacp_tbl); 865 866 if ((new_value == 1) || (new_value == 0)) { 867 bond->params.lacp_fast = new_value; 868 bond_3ad_update_lacp_rate(bond); 869 pr_info("%s: Setting LACP rate to %s (%d).\n", 870 bond->dev->name, bond_lacp_tbl[new_value].modename, 871 new_value); 872 } else { 873 pr_err("%s: Ignoring invalid LACP rate value %.*s.\n", 874 bond->dev->name, (int)strlen(buf) - 1, buf); 875 ret = -EINVAL; 876 } 877 out: 878 return ret; 879 } 880 static DEVICE_ATTR(lacp_rate, S_IRUGO | S_IWUSR, 881 bonding_show_lacp, bonding_store_lacp); 882 883 static ssize_t bonding_show_min_links(struct device *d, 884 struct device_attribute *attr, 885 char *buf) 886 { 887 struct bonding *bond = to_bond(d); 888 889 return sprintf(buf, "%d\n", bond->params.min_links); 890 } 891 892 static ssize_t bonding_store_min_links(struct device *d, 893 struct device_attribute *attr, 894 const char *buf, size_t count) 895 { 896 struct bonding *bond = to_bond(d); 897 int ret; 898 unsigned int new_value; 899 900 ret = kstrtouint(buf, 0, &new_value); 901 if (ret < 0) { 902 pr_err("%s: Ignoring invalid min links value %s.\n", 903 bond->dev->name, buf); 904 return ret; 905 } 906 907 pr_info("%s: Setting min links value to %u\n", 908 bond->dev->name, new_value); 909 bond->params.min_links = new_value; 910 return count; 911 } 912 static DEVICE_ATTR(min_links, S_IRUGO | S_IWUSR, 913 bonding_show_min_links, bonding_store_min_links); 914 915 static ssize_t bonding_show_ad_select(struct device *d, 916 struct device_attribute *attr, 917 char *buf) 918 { 919 struct bonding *bond = to_bond(d); 920 921 return sprintf(buf, "%s %d\n", 922 ad_select_tbl[bond->params.ad_select].modename, 923 bond->params.ad_select); 924 } 925 926 927 static ssize_t bonding_store_ad_select(struct device *d, 928 struct device_attribute *attr, 929 const char *buf, size_t count) 930 { 931 int new_value, ret = count; 932 struct bonding *bond = to_bond(d); 933 934 if (bond->dev->flags & IFF_UP) { 935 pr_err("%s: Unable to update ad_select because interface is up.\n", 936 bond->dev->name); 937 ret = -EPERM; 938 goto out; 939 } 940 941 new_value = bond_parse_parm(buf, ad_select_tbl); 942 943 if (new_value != -1) { 944 bond->params.ad_select = new_value; 945 pr_info("%s: Setting ad_select to %s (%d).\n", 946 bond->dev->name, ad_select_tbl[new_value].modename, 947 new_value); 948 } else { 949 pr_err("%s: Ignoring invalid ad_select value %.*s.\n", 950 bond->dev->name, (int)strlen(buf) - 1, buf); 951 ret = -EINVAL; 952 } 953 out: 954 return ret; 955 } 956 static DEVICE_ATTR(ad_select, S_IRUGO | S_IWUSR, 957 bonding_show_ad_select, bonding_store_ad_select); 958 959 /* 960 * Show and set the number of peer notifications to send after a failover event. 961 */ 962 static ssize_t bonding_show_num_peer_notif(struct device *d, 963 struct device_attribute *attr, 964 char *buf) 965 { 966 struct bonding *bond = to_bond(d); 967 return sprintf(buf, "%d\n", bond->params.num_peer_notif); 968 } 969 970 static ssize_t bonding_store_num_peer_notif(struct device *d, 971 struct device_attribute *attr, 972 const char *buf, size_t count) 973 { 974 struct bonding *bond = to_bond(d); 975 int err = kstrtou8(buf, 10, &bond->params.num_peer_notif); 976 return err ? err : count; 977 } 978 static DEVICE_ATTR(num_grat_arp, S_IRUGO | S_IWUSR, 979 bonding_show_num_peer_notif, bonding_store_num_peer_notif); 980 static DEVICE_ATTR(num_unsol_na, S_IRUGO | S_IWUSR, 981 bonding_show_num_peer_notif, bonding_store_num_peer_notif); 982 983 /* 984 * Show and set the MII monitor interval. There are two tricky bits 985 * here. First, if MII monitoring is activated, then we must disable 986 * ARP monitoring. Second, if the timer isn't running, we must 987 * start it. 988 */ 989 static ssize_t bonding_show_miimon(struct device *d, 990 struct device_attribute *attr, 991 char *buf) 992 { 993 struct bonding *bond = to_bond(d); 994 995 return sprintf(buf, "%d\n", bond->params.miimon); 996 } 997 998 static ssize_t bonding_store_miimon(struct device *d, 999 struct device_attribute *attr, 1000 const char *buf, size_t count) 1001 { 1002 int new_value, ret = count; 1003 struct bonding *bond = to_bond(d); 1004 1005 if (!rtnl_trylock()) 1006 return restart_syscall(); 1007 if (sscanf(buf, "%d", &new_value) != 1) { 1008 pr_err("%s: no miimon value specified.\n", 1009 bond->dev->name); 1010 ret = -EINVAL; 1011 goto out; 1012 } 1013 if (new_value < 0) { 1014 pr_err("%s: Invalid miimon value %d not in range %d-%d; rejected.\n", 1015 bond->dev->name, new_value, 0, INT_MAX); 1016 ret = -EINVAL; 1017 goto out; 1018 } 1019 pr_info("%s: Setting MII monitoring interval to %d.\n", 1020 bond->dev->name, new_value); 1021 bond->params.miimon = new_value; 1022 if (bond->params.updelay) 1023 pr_info("%s: Note: Updating updelay (to %d) since it is a multiple of the miimon value.\n", 1024 bond->dev->name, 1025 bond->params.updelay * bond->params.miimon); 1026 if (bond->params.downdelay) 1027 pr_info("%s: Note: Updating downdelay (to %d) since it is a multiple of the miimon value.\n", 1028 bond->dev->name, 1029 bond->params.downdelay * bond->params.miimon); 1030 if (new_value && bond->params.arp_interval) { 1031 pr_info("%s: MII monitoring cannot be used with ARP monitoring. Disabling ARP monitoring...\n", 1032 bond->dev->name); 1033 bond->params.arp_interval = 0; 1034 if (bond->params.arp_validate) 1035 bond->params.arp_validate = BOND_ARP_VALIDATE_NONE; 1036 } 1037 if (bond->dev->flags & IFF_UP) { 1038 /* If the interface is up, we may need to fire off 1039 * the MII timer. If the interface is down, the 1040 * timer will get fired off when the open function 1041 * is called. 1042 */ 1043 if (!new_value) { 1044 cancel_delayed_work_sync(&bond->mii_work); 1045 } else { 1046 cancel_delayed_work_sync(&bond->arp_work); 1047 queue_delayed_work(bond->wq, &bond->mii_work, 0); 1048 } 1049 } 1050 out: 1051 rtnl_unlock(); 1052 return ret; 1053 } 1054 static DEVICE_ATTR(miimon, S_IRUGO | S_IWUSR, 1055 bonding_show_miimon, bonding_store_miimon); 1056 1057 /* 1058 * Show and set the primary slave. The store function is much 1059 * simpler than bonding_store_slaves function because it only needs to 1060 * handle one interface name. 1061 * The bond must be a mode that supports a primary for this be 1062 * set. 1063 */ 1064 static ssize_t bonding_show_primary(struct device *d, 1065 struct device_attribute *attr, 1066 char *buf) 1067 { 1068 int count = 0; 1069 struct bonding *bond = to_bond(d); 1070 1071 if (bond->primary_slave) 1072 count = sprintf(buf, "%s\n", bond->primary_slave->dev->name); 1073 1074 return count; 1075 } 1076 1077 static ssize_t bonding_store_primary(struct device *d, 1078 struct device_attribute *attr, 1079 const char *buf, size_t count) 1080 { 1081 int i; 1082 struct slave *slave; 1083 struct bonding *bond = to_bond(d); 1084 char ifname[IFNAMSIZ]; 1085 1086 if (!rtnl_trylock()) 1087 return restart_syscall(); 1088 block_netpoll_tx(); 1089 read_lock(&bond->lock); 1090 write_lock_bh(&bond->curr_slave_lock); 1091 1092 if (!USES_PRIMARY(bond->params.mode)) { 1093 pr_info("%s: Unable to set primary slave; %s is in mode %d\n", 1094 bond->dev->name, bond->dev->name, bond->params.mode); 1095 goto out; 1096 } 1097 1098 sscanf(buf, "%15s", ifname); /* IFNAMSIZ */ 1099 1100 /* check to see if we are clearing primary */ 1101 if (!strlen(ifname) || buf[0] == '\n') { 1102 pr_info("%s: Setting primary slave to None.\n", 1103 bond->dev->name); 1104 bond->primary_slave = NULL; 1105 memset(bond->params.primary, 0, sizeof(bond->params.primary)); 1106 bond_select_active_slave(bond); 1107 goto out; 1108 } 1109 1110 bond_for_each_slave(bond, slave, i) { 1111 if (strncmp(slave->dev->name, ifname, IFNAMSIZ) == 0) { 1112 pr_info("%s: Setting %s as primary slave.\n", 1113 bond->dev->name, slave->dev->name); 1114 bond->primary_slave = slave; 1115 strcpy(bond->params.primary, slave->dev->name); 1116 bond_select_active_slave(bond); 1117 goto out; 1118 } 1119 } 1120 1121 strncpy(bond->params.primary, ifname, IFNAMSIZ); 1122 bond->params.primary[IFNAMSIZ - 1] = 0; 1123 1124 pr_info("%s: Recording %s as primary, " 1125 "but it has not been enslaved to %s yet.\n", 1126 bond->dev->name, ifname, bond->dev->name); 1127 out: 1128 write_unlock_bh(&bond->curr_slave_lock); 1129 read_unlock(&bond->lock); 1130 unblock_netpoll_tx(); 1131 rtnl_unlock(); 1132 1133 return count; 1134 } 1135 static DEVICE_ATTR(primary, S_IRUGO | S_IWUSR, 1136 bonding_show_primary, bonding_store_primary); 1137 1138 /* 1139 * Show and set the primary_reselect flag. 1140 */ 1141 static ssize_t bonding_show_primary_reselect(struct device *d, 1142 struct device_attribute *attr, 1143 char *buf) 1144 { 1145 struct bonding *bond = to_bond(d); 1146 1147 return sprintf(buf, "%s %d\n", 1148 pri_reselect_tbl[bond->params.primary_reselect].modename, 1149 bond->params.primary_reselect); 1150 } 1151 1152 static ssize_t bonding_store_primary_reselect(struct device *d, 1153 struct device_attribute *attr, 1154 const char *buf, size_t count) 1155 { 1156 int new_value, ret = count; 1157 struct bonding *bond = to_bond(d); 1158 1159 if (!rtnl_trylock()) 1160 return restart_syscall(); 1161 1162 new_value = bond_parse_parm(buf, pri_reselect_tbl); 1163 if (new_value < 0) { 1164 pr_err("%s: Ignoring invalid primary_reselect value %.*s.\n", 1165 bond->dev->name, 1166 (int) strlen(buf) - 1, buf); 1167 ret = -EINVAL; 1168 goto out; 1169 } 1170 1171 bond->params.primary_reselect = new_value; 1172 pr_info("%s: setting primary_reselect to %s (%d).\n", 1173 bond->dev->name, pri_reselect_tbl[new_value].modename, 1174 new_value); 1175 1176 block_netpoll_tx(); 1177 read_lock(&bond->lock); 1178 write_lock_bh(&bond->curr_slave_lock); 1179 bond_select_active_slave(bond); 1180 write_unlock_bh(&bond->curr_slave_lock); 1181 read_unlock(&bond->lock); 1182 unblock_netpoll_tx(); 1183 out: 1184 rtnl_unlock(); 1185 return ret; 1186 } 1187 static DEVICE_ATTR(primary_reselect, S_IRUGO | S_IWUSR, 1188 bonding_show_primary_reselect, 1189 bonding_store_primary_reselect); 1190 1191 /* 1192 * Show and set the use_carrier flag. 1193 */ 1194 static ssize_t bonding_show_carrier(struct device *d, 1195 struct device_attribute *attr, 1196 char *buf) 1197 { 1198 struct bonding *bond = to_bond(d); 1199 1200 return sprintf(buf, "%d\n", bond->params.use_carrier); 1201 } 1202 1203 static ssize_t bonding_store_carrier(struct device *d, 1204 struct device_attribute *attr, 1205 const char *buf, size_t count) 1206 { 1207 int new_value, ret = count; 1208 struct bonding *bond = to_bond(d); 1209 1210 1211 if (sscanf(buf, "%d", &new_value) != 1) { 1212 pr_err("%s: no use_carrier value specified.\n", 1213 bond->dev->name); 1214 ret = -EINVAL; 1215 goto out; 1216 } 1217 if ((new_value == 0) || (new_value == 1)) { 1218 bond->params.use_carrier = new_value; 1219 pr_info("%s: Setting use_carrier to %d.\n", 1220 bond->dev->name, new_value); 1221 } else { 1222 pr_info("%s: Ignoring invalid use_carrier value %d.\n", 1223 bond->dev->name, new_value); 1224 } 1225 out: 1226 return ret; 1227 } 1228 static DEVICE_ATTR(use_carrier, S_IRUGO | S_IWUSR, 1229 bonding_show_carrier, bonding_store_carrier); 1230 1231 1232 /* 1233 * Show and set currently active_slave. 1234 */ 1235 static ssize_t bonding_show_active_slave(struct device *d, 1236 struct device_attribute *attr, 1237 char *buf) 1238 { 1239 struct slave *curr; 1240 struct bonding *bond = to_bond(d); 1241 int count = 0; 1242 1243 read_lock(&bond->curr_slave_lock); 1244 curr = bond->curr_active_slave; 1245 read_unlock(&bond->curr_slave_lock); 1246 1247 if (USES_PRIMARY(bond->params.mode) && curr) 1248 count = sprintf(buf, "%s\n", curr->dev->name); 1249 return count; 1250 } 1251 1252 static ssize_t bonding_store_active_slave(struct device *d, 1253 struct device_attribute *attr, 1254 const char *buf, size_t count) 1255 { 1256 int i; 1257 struct slave *slave; 1258 struct slave *old_active = NULL; 1259 struct slave *new_active = NULL; 1260 struct bonding *bond = to_bond(d); 1261 char ifname[IFNAMSIZ]; 1262 1263 if (!rtnl_trylock()) 1264 return restart_syscall(); 1265 1266 block_netpoll_tx(); 1267 read_lock(&bond->lock); 1268 write_lock_bh(&bond->curr_slave_lock); 1269 1270 if (!USES_PRIMARY(bond->params.mode)) { 1271 pr_info("%s: Unable to change active slave; %s is in mode %d\n", 1272 bond->dev->name, bond->dev->name, bond->params.mode); 1273 goto out; 1274 } 1275 1276 sscanf(buf, "%15s", ifname); /* IFNAMSIZ */ 1277 1278 /* check to see if we are clearing active */ 1279 if (!strlen(ifname) || buf[0] == '\n') { 1280 pr_info("%s: Clearing current active slave.\n", 1281 bond->dev->name); 1282 bond->curr_active_slave = NULL; 1283 bond_select_active_slave(bond); 1284 goto out; 1285 } 1286 1287 bond_for_each_slave(bond, slave, i) { 1288 if (strncmp(slave->dev->name, ifname, IFNAMSIZ) == 0) { 1289 old_active = bond->curr_active_slave; 1290 new_active = slave; 1291 if (new_active == old_active) { 1292 /* do nothing */ 1293 pr_info("%s: %s is already the current" 1294 " active slave.\n", 1295 bond->dev->name, 1296 slave->dev->name); 1297 goto out; 1298 } 1299 else { 1300 if ((new_active) && 1301 (old_active) && 1302 (new_active->link == BOND_LINK_UP) && 1303 IS_UP(new_active->dev)) { 1304 pr_info("%s: Setting %s as active" 1305 " slave.\n", 1306 bond->dev->name, 1307 slave->dev->name); 1308 bond_change_active_slave(bond, 1309 new_active); 1310 } 1311 else { 1312 pr_info("%s: Could not set %s as" 1313 " active slave; either %s is" 1314 " down or the link is down.\n", 1315 bond->dev->name, 1316 slave->dev->name, 1317 slave->dev->name); 1318 } 1319 goto out; 1320 } 1321 } 1322 } 1323 1324 pr_info("%s: Unable to set %.*s as active slave.\n", 1325 bond->dev->name, (int)strlen(buf) - 1, buf); 1326 out: 1327 write_unlock_bh(&bond->curr_slave_lock); 1328 read_unlock(&bond->lock); 1329 unblock_netpoll_tx(); 1330 1331 rtnl_unlock(); 1332 1333 return count; 1334 1335 } 1336 static DEVICE_ATTR(active_slave, S_IRUGO | S_IWUSR, 1337 bonding_show_active_slave, bonding_store_active_slave); 1338 1339 1340 /* 1341 * Show link status of the bond interface. 1342 */ 1343 static ssize_t bonding_show_mii_status(struct device *d, 1344 struct device_attribute *attr, 1345 char *buf) 1346 { 1347 struct slave *curr; 1348 struct bonding *bond = to_bond(d); 1349 1350 read_lock(&bond->curr_slave_lock); 1351 curr = bond->curr_active_slave; 1352 read_unlock(&bond->curr_slave_lock); 1353 1354 return sprintf(buf, "%s\n", curr ? "up" : "down"); 1355 } 1356 static DEVICE_ATTR(mii_status, S_IRUGO, bonding_show_mii_status, NULL); 1357 1358 /* 1359 * Show current 802.3ad aggregator ID. 1360 */ 1361 static ssize_t bonding_show_ad_aggregator(struct device *d, 1362 struct device_attribute *attr, 1363 char *buf) 1364 { 1365 int count = 0; 1366 struct bonding *bond = to_bond(d); 1367 1368 if (bond->params.mode == BOND_MODE_8023AD) { 1369 struct ad_info ad_info; 1370 count = sprintf(buf, "%d\n", 1371 bond_3ad_get_active_agg_info(bond, &ad_info) 1372 ? 0 : ad_info.aggregator_id); 1373 } 1374 1375 return count; 1376 } 1377 static DEVICE_ATTR(ad_aggregator, S_IRUGO, bonding_show_ad_aggregator, NULL); 1378 1379 1380 /* 1381 * Show number of active 802.3ad ports. 1382 */ 1383 static ssize_t bonding_show_ad_num_ports(struct device *d, 1384 struct device_attribute *attr, 1385 char *buf) 1386 { 1387 int count = 0; 1388 struct bonding *bond = to_bond(d); 1389 1390 if (bond->params.mode == BOND_MODE_8023AD) { 1391 struct ad_info ad_info; 1392 count = sprintf(buf, "%d\n", 1393 bond_3ad_get_active_agg_info(bond, &ad_info) 1394 ? 0 : ad_info.ports); 1395 } 1396 1397 return count; 1398 } 1399 static DEVICE_ATTR(ad_num_ports, S_IRUGO, bonding_show_ad_num_ports, NULL); 1400 1401 1402 /* 1403 * Show current 802.3ad actor key. 1404 */ 1405 static ssize_t bonding_show_ad_actor_key(struct device *d, 1406 struct device_attribute *attr, 1407 char *buf) 1408 { 1409 int count = 0; 1410 struct bonding *bond = to_bond(d); 1411 1412 if (bond->params.mode == BOND_MODE_8023AD) { 1413 struct ad_info ad_info; 1414 count = sprintf(buf, "%d\n", 1415 bond_3ad_get_active_agg_info(bond, &ad_info) 1416 ? 0 : ad_info.actor_key); 1417 } 1418 1419 return count; 1420 } 1421 static DEVICE_ATTR(ad_actor_key, S_IRUGO, bonding_show_ad_actor_key, NULL); 1422 1423 1424 /* 1425 * Show current 802.3ad partner key. 1426 */ 1427 static ssize_t bonding_show_ad_partner_key(struct device *d, 1428 struct device_attribute *attr, 1429 char *buf) 1430 { 1431 int count = 0; 1432 struct bonding *bond = to_bond(d); 1433 1434 if (bond->params.mode == BOND_MODE_8023AD) { 1435 struct ad_info ad_info; 1436 count = sprintf(buf, "%d\n", 1437 bond_3ad_get_active_agg_info(bond, &ad_info) 1438 ? 0 : ad_info.partner_key); 1439 } 1440 1441 return count; 1442 } 1443 static DEVICE_ATTR(ad_partner_key, S_IRUGO, bonding_show_ad_partner_key, NULL); 1444 1445 1446 /* 1447 * Show current 802.3ad partner mac. 1448 */ 1449 static ssize_t bonding_show_ad_partner_mac(struct device *d, 1450 struct device_attribute *attr, 1451 char *buf) 1452 { 1453 int count = 0; 1454 struct bonding *bond = to_bond(d); 1455 1456 if (bond->params.mode == BOND_MODE_8023AD) { 1457 struct ad_info ad_info; 1458 if (!bond_3ad_get_active_agg_info(bond, &ad_info)) 1459 count = sprintf(buf, "%pM\n", ad_info.partner_system); 1460 } 1461 1462 return count; 1463 } 1464 static DEVICE_ATTR(ad_partner_mac, S_IRUGO, bonding_show_ad_partner_mac, NULL); 1465 1466 /* 1467 * Show the queue_ids of the slaves in the current bond. 1468 */ 1469 static ssize_t bonding_show_queue_id(struct device *d, 1470 struct device_attribute *attr, 1471 char *buf) 1472 { 1473 struct slave *slave; 1474 int i, res = 0; 1475 struct bonding *bond = to_bond(d); 1476 1477 if (!rtnl_trylock()) 1478 return restart_syscall(); 1479 1480 read_lock(&bond->lock); 1481 bond_for_each_slave(bond, slave, i) { 1482 if (res > (PAGE_SIZE - IFNAMSIZ - 6)) { 1483 /* not enough space for another interface_name:queue_id pair */ 1484 if ((PAGE_SIZE - res) > 10) 1485 res = PAGE_SIZE - 10; 1486 res += sprintf(buf + res, "++more++ "); 1487 break; 1488 } 1489 res += sprintf(buf + res, "%s:%d ", 1490 slave->dev->name, slave->queue_id); 1491 } 1492 read_unlock(&bond->lock); 1493 if (res) 1494 buf[res-1] = '\n'; /* eat the leftover space */ 1495 rtnl_unlock(); 1496 return res; 1497 } 1498 1499 /* 1500 * Set the queue_ids of the slaves in the current bond. The bond 1501 * interface must be enslaved for this to work. 1502 */ 1503 static ssize_t bonding_store_queue_id(struct device *d, 1504 struct device_attribute *attr, 1505 const char *buffer, size_t count) 1506 { 1507 struct slave *slave, *update_slave; 1508 struct bonding *bond = to_bond(d); 1509 u16 qid; 1510 int i, ret = count; 1511 char *delim; 1512 struct net_device *sdev = NULL; 1513 1514 if (!rtnl_trylock()) 1515 return restart_syscall(); 1516 1517 /* delim will point to queue id if successful */ 1518 delim = strchr(buffer, ':'); 1519 if (!delim) 1520 goto err_no_cmd; 1521 1522 /* 1523 * Terminate string that points to device name and bump it 1524 * up one, so we can read the queue id there. 1525 */ 1526 *delim = '\0'; 1527 if (sscanf(++delim, "%hd\n", &qid) != 1) 1528 goto err_no_cmd; 1529 1530 /* Check buffer length, valid ifname and queue id */ 1531 if (strlen(buffer) > IFNAMSIZ || 1532 !dev_valid_name(buffer) || 1533 qid > bond->dev->real_num_tx_queues) 1534 goto err_no_cmd; 1535 1536 /* Get the pointer to that interface if it exists */ 1537 sdev = __dev_get_by_name(dev_net(bond->dev), buffer); 1538 if (!sdev) 1539 goto err_no_cmd; 1540 1541 read_lock(&bond->lock); 1542 1543 /* Search for thes slave and check for duplicate qids */ 1544 update_slave = NULL; 1545 bond_for_each_slave(bond, slave, i) { 1546 if (sdev == slave->dev) 1547 /* 1548 * We don't need to check the matching 1549 * slave for dups, since we're overwriting it 1550 */ 1551 update_slave = slave; 1552 else if (qid && qid == slave->queue_id) { 1553 goto err_no_cmd_unlock; 1554 } 1555 } 1556 1557 if (!update_slave) 1558 goto err_no_cmd_unlock; 1559 1560 /* Actually set the qids for the slave */ 1561 update_slave->queue_id = qid; 1562 1563 read_unlock(&bond->lock); 1564 out: 1565 rtnl_unlock(); 1566 return ret; 1567 1568 err_no_cmd_unlock: 1569 read_unlock(&bond->lock); 1570 err_no_cmd: 1571 pr_info("invalid input for queue_id set for %s.\n", 1572 bond->dev->name); 1573 ret = -EPERM; 1574 goto out; 1575 } 1576 1577 static DEVICE_ATTR(queue_id, S_IRUGO | S_IWUSR, bonding_show_queue_id, 1578 bonding_store_queue_id); 1579 1580 1581 /* 1582 * Show and set the all_slaves_active flag. 1583 */ 1584 static ssize_t bonding_show_slaves_active(struct device *d, 1585 struct device_attribute *attr, 1586 char *buf) 1587 { 1588 struct bonding *bond = to_bond(d); 1589 1590 return sprintf(buf, "%d\n", bond->params.all_slaves_active); 1591 } 1592 1593 static ssize_t bonding_store_slaves_active(struct device *d, 1594 struct device_attribute *attr, 1595 const char *buf, size_t count) 1596 { 1597 int i, new_value, ret = count; 1598 struct bonding *bond = to_bond(d); 1599 struct slave *slave; 1600 1601 if (sscanf(buf, "%d", &new_value) != 1) { 1602 pr_err("%s: no all_slaves_active value specified.\n", 1603 bond->dev->name); 1604 ret = -EINVAL; 1605 goto out; 1606 } 1607 1608 if (new_value == bond->params.all_slaves_active) 1609 goto out; 1610 1611 if ((new_value == 0) || (new_value == 1)) { 1612 bond->params.all_slaves_active = new_value; 1613 } else { 1614 pr_info("%s: Ignoring invalid all_slaves_active value %d.\n", 1615 bond->dev->name, new_value); 1616 ret = -EINVAL; 1617 goto out; 1618 } 1619 1620 read_lock(&bond->lock); 1621 bond_for_each_slave(bond, slave, i) { 1622 if (!bond_is_active_slave(slave)) { 1623 if (new_value) 1624 slave->inactive = 0; 1625 else 1626 slave->inactive = 1; 1627 } 1628 } 1629 read_unlock(&bond->lock); 1630 out: 1631 return ret; 1632 } 1633 static DEVICE_ATTR(all_slaves_active, S_IRUGO | S_IWUSR, 1634 bonding_show_slaves_active, bonding_store_slaves_active); 1635 1636 /* 1637 * Show and set the number of IGMP membership reports to send on link failure 1638 */ 1639 static ssize_t bonding_show_resend_igmp(struct device *d, 1640 struct device_attribute *attr, 1641 char *buf) 1642 { 1643 struct bonding *bond = to_bond(d); 1644 1645 return sprintf(buf, "%d\n", bond->params.resend_igmp); 1646 } 1647 1648 static ssize_t bonding_store_resend_igmp(struct device *d, 1649 struct device_attribute *attr, 1650 const char *buf, size_t count) 1651 { 1652 int new_value, ret = count; 1653 struct bonding *bond = to_bond(d); 1654 1655 if (sscanf(buf, "%d", &new_value) != 1) { 1656 pr_err("%s: no resend_igmp value specified.\n", 1657 bond->dev->name); 1658 ret = -EINVAL; 1659 goto out; 1660 } 1661 1662 if (new_value < 0 || new_value > 255) { 1663 pr_err("%s: Invalid resend_igmp value %d not in range 0-255; rejected.\n", 1664 bond->dev->name, new_value); 1665 ret = -EINVAL; 1666 goto out; 1667 } 1668 1669 pr_info("%s: Setting resend_igmp to %d.\n", 1670 bond->dev->name, new_value); 1671 bond->params.resend_igmp = new_value; 1672 out: 1673 return ret; 1674 } 1675 1676 static DEVICE_ATTR(resend_igmp, S_IRUGO | S_IWUSR, 1677 bonding_show_resend_igmp, bonding_store_resend_igmp); 1678 1679 static struct attribute *per_bond_attrs[] = { 1680 &dev_attr_slaves.attr, 1681 &dev_attr_mode.attr, 1682 &dev_attr_fail_over_mac.attr, 1683 &dev_attr_arp_validate.attr, 1684 &dev_attr_arp_all_targets.attr, 1685 &dev_attr_arp_interval.attr, 1686 &dev_attr_arp_ip_target.attr, 1687 &dev_attr_downdelay.attr, 1688 &dev_attr_updelay.attr, 1689 &dev_attr_lacp_rate.attr, 1690 &dev_attr_ad_select.attr, 1691 &dev_attr_xmit_hash_policy.attr, 1692 &dev_attr_num_grat_arp.attr, 1693 &dev_attr_num_unsol_na.attr, 1694 &dev_attr_miimon.attr, 1695 &dev_attr_primary.attr, 1696 &dev_attr_primary_reselect.attr, 1697 &dev_attr_use_carrier.attr, 1698 &dev_attr_active_slave.attr, 1699 &dev_attr_mii_status.attr, 1700 &dev_attr_ad_aggregator.attr, 1701 &dev_attr_ad_num_ports.attr, 1702 &dev_attr_ad_actor_key.attr, 1703 &dev_attr_ad_partner_key.attr, 1704 &dev_attr_ad_partner_mac.attr, 1705 &dev_attr_queue_id.attr, 1706 &dev_attr_all_slaves_active.attr, 1707 &dev_attr_resend_igmp.attr, 1708 &dev_attr_min_links.attr, 1709 NULL, 1710 }; 1711 1712 static struct attribute_group bonding_group = { 1713 .name = "bonding", 1714 .attrs = per_bond_attrs, 1715 }; 1716 1717 /* 1718 * Initialize sysfs. This sets up the bonding_masters file in 1719 * /sys/class/net. 1720 */ 1721 int bond_create_sysfs(struct bond_net *bn) 1722 { 1723 int ret; 1724 1725 bn->class_attr_bonding_masters = class_attr_bonding_masters; 1726 sysfs_attr_init(&bn->class_attr_bonding_masters.attr); 1727 1728 ret = netdev_class_create_file(&bn->class_attr_bonding_masters); 1729 /* 1730 * Permit multiple loads of the module by ignoring failures to 1731 * create the bonding_masters sysfs file. Bonding devices 1732 * created by second or subsequent loads of the module will 1733 * not be listed in, or controllable by, bonding_masters, but 1734 * will have the usual "bonding" sysfs directory. 1735 * 1736 * This is done to preserve backwards compatibility for 1737 * initscripts/sysconfig, which load bonding multiple times to 1738 * configure multiple bonding devices. 1739 */ 1740 if (ret == -EEXIST) { 1741 /* Is someone being kinky and naming a device bonding_master? */ 1742 if (__dev_get_by_name(bn->net, 1743 class_attr_bonding_masters.attr.name)) 1744 pr_err("network device named %s already exists in sysfs", 1745 class_attr_bonding_masters.attr.name); 1746 ret = 0; 1747 } 1748 1749 return ret; 1750 1751 } 1752 1753 /* 1754 * Remove /sys/class/net/bonding_masters. 1755 */ 1756 void bond_destroy_sysfs(struct bond_net *bn) 1757 { 1758 netdev_class_remove_file(&bn->class_attr_bonding_masters); 1759 } 1760 1761 /* 1762 * Initialize sysfs for each bond. This sets up and registers 1763 * the 'bondctl' directory for each individual bond under /sys/class/net. 1764 */ 1765 void bond_prepare_sysfs_group(struct bonding *bond) 1766 { 1767 bond->dev->sysfs_groups[0] = &bonding_group; 1768 } 1769 1770