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