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