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