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 memset(bond->params.primary, 0, sizeof(bond->params.primary)); 1057 bond_select_active_slave(bond); 1058 goto out; 1059 } 1060 1061 bond_for_each_slave(bond, slave, i) { 1062 if (strncmp(slave->dev->name, ifname, IFNAMSIZ) == 0) { 1063 pr_info("%s: Setting %s as primary slave.\n", 1064 bond->dev->name, slave->dev->name); 1065 bond->primary_slave = slave; 1066 strcpy(bond->params.primary, slave->dev->name); 1067 bond_select_active_slave(bond); 1068 goto out; 1069 } 1070 } 1071 1072 strncpy(bond->params.primary, ifname, IFNAMSIZ); 1073 bond->params.primary[IFNAMSIZ - 1] = 0; 1074 1075 pr_info("%s: Recording %s as primary, " 1076 "but it has not been enslaved to %s yet.\n", 1077 bond->dev->name, ifname, bond->dev->name); 1078 out: 1079 write_unlock_bh(&bond->curr_slave_lock); 1080 read_unlock(&bond->lock); 1081 unblock_netpoll_tx(); 1082 rtnl_unlock(); 1083 1084 return count; 1085 } 1086 static DEVICE_ATTR(primary, S_IRUGO | S_IWUSR, 1087 bonding_show_primary, bonding_store_primary); 1088 1089 /* 1090 * Show and set the primary_reselect flag. 1091 */ 1092 static ssize_t bonding_show_primary_reselect(struct device *d, 1093 struct device_attribute *attr, 1094 char *buf) 1095 { 1096 struct bonding *bond = to_bond(d); 1097 1098 return sprintf(buf, "%s %d\n", 1099 pri_reselect_tbl[bond->params.primary_reselect].modename, 1100 bond->params.primary_reselect); 1101 } 1102 1103 static ssize_t bonding_store_primary_reselect(struct device *d, 1104 struct device_attribute *attr, 1105 const char *buf, size_t count) 1106 { 1107 int new_value, ret = count; 1108 struct bonding *bond = to_bond(d); 1109 1110 if (!rtnl_trylock()) 1111 return restart_syscall(); 1112 1113 new_value = bond_parse_parm(buf, pri_reselect_tbl); 1114 if (new_value < 0) { 1115 pr_err("%s: Ignoring invalid primary_reselect value %.*s.\n", 1116 bond->dev->name, 1117 (int) strlen(buf) - 1, buf); 1118 ret = -EINVAL; 1119 goto out; 1120 } 1121 1122 bond->params.primary_reselect = new_value; 1123 pr_info("%s: setting primary_reselect to %s (%d).\n", 1124 bond->dev->name, pri_reselect_tbl[new_value].modename, 1125 new_value); 1126 1127 block_netpoll_tx(); 1128 read_lock(&bond->lock); 1129 write_lock_bh(&bond->curr_slave_lock); 1130 bond_select_active_slave(bond); 1131 write_unlock_bh(&bond->curr_slave_lock); 1132 read_unlock(&bond->lock); 1133 unblock_netpoll_tx(); 1134 out: 1135 rtnl_unlock(); 1136 return ret; 1137 } 1138 static DEVICE_ATTR(primary_reselect, S_IRUGO | S_IWUSR, 1139 bonding_show_primary_reselect, 1140 bonding_store_primary_reselect); 1141 1142 /* 1143 * Show and set the use_carrier flag. 1144 */ 1145 static ssize_t bonding_show_carrier(struct device *d, 1146 struct device_attribute *attr, 1147 char *buf) 1148 { 1149 struct bonding *bond = to_bond(d); 1150 1151 return sprintf(buf, "%d\n", bond->params.use_carrier); 1152 } 1153 1154 static ssize_t bonding_store_carrier(struct device *d, 1155 struct device_attribute *attr, 1156 const char *buf, size_t count) 1157 { 1158 int new_value, ret = count; 1159 struct bonding *bond = to_bond(d); 1160 1161 1162 if (sscanf(buf, "%d", &new_value) != 1) { 1163 pr_err("%s: no use_carrier value specified.\n", 1164 bond->dev->name); 1165 ret = -EINVAL; 1166 goto out; 1167 } 1168 if ((new_value == 0) || (new_value == 1)) { 1169 bond->params.use_carrier = new_value; 1170 pr_info("%s: Setting use_carrier to %d.\n", 1171 bond->dev->name, new_value); 1172 } else { 1173 pr_info("%s: Ignoring invalid use_carrier value %d.\n", 1174 bond->dev->name, new_value); 1175 } 1176 out: 1177 return ret; 1178 } 1179 static DEVICE_ATTR(use_carrier, S_IRUGO | S_IWUSR, 1180 bonding_show_carrier, bonding_store_carrier); 1181 1182 1183 /* 1184 * Show and set currently active_slave. 1185 */ 1186 static ssize_t bonding_show_active_slave(struct device *d, 1187 struct device_attribute *attr, 1188 char *buf) 1189 { 1190 struct slave *curr; 1191 struct bonding *bond = to_bond(d); 1192 int count = 0; 1193 1194 read_lock(&bond->curr_slave_lock); 1195 curr = bond->curr_active_slave; 1196 read_unlock(&bond->curr_slave_lock); 1197 1198 if (USES_PRIMARY(bond->params.mode) && curr) 1199 count = sprintf(buf, "%s\n", curr->dev->name); 1200 return count; 1201 } 1202 1203 static ssize_t bonding_store_active_slave(struct device *d, 1204 struct device_attribute *attr, 1205 const char *buf, size_t count) 1206 { 1207 int i; 1208 struct slave *slave; 1209 struct slave *old_active = NULL; 1210 struct slave *new_active = NULL; 1211 struct bonding *bond = to_bond(d); 1212 char ifname[IFNAMSIZ]; 1213 1214 if (!rtnl_trylock()) 1215 return restart_syscall(); 1216 1217 block_netpoll_tx(); 1218 read_lock(&bond->lock); 1219 write_lock_bh(&bond->curr_slave_lock); 1220 1221 if (!USES_PRIMARY(bond->params.mode)) { 1222 pr_info("%s: Unable to change active slave; %s is in mode %d\n", 1223 bond->dev->name, bond->dev->name, bond->params.mode); 1224 goto out; 1225 } 1226 1227 sscanf(buf, "%15s", ifname); /* IFNAMSIZ */ 1228 1229 /* check to see if we are clearing active */ 1230 if (!strlen(ifname) || buf[0] == '\n') { 1231 pr_info("%s: Clearing current active slave.\n", 1232 bond->dev->name); 1233 bond->curr_active_slave = NULL; 1234 bond_select_active_slave(bond); 1235 goto out; 1236 } 1237 1238 bond_for_each_slave(bond, slave, i) { 1239 if (strncmp(slave->dev->name, ifname, IFNAMSIZ) == 0) { 1240 old_active = bond->curr_active_slave; 1241 new_active = slave; 1242 if (new_active == old_active) { 1243 /* do nothing */ 1244 pr_info("%s: %s is already the current" 1245 " active slave.\n", 1246 bond->dev->name, 1247 slave->dev->name); 1248 goto out; 1249 } 1250 else { 1251 if ((new_active) && 1252 (old_active) && 1253 (new_active->link == BOND_LINK_UP) && 1254 IS_UP(new_active->dev)) { 1255 pr_info("%s: Setting %s as active" 1256 " slave.\n", 1257 bond->dev->name, 1258 slave->dev->name); 1259 bond_change_active_slave(bond, 1260 new_active); 1261 } 1262 else { 1263 pr_info("%s: Could not set %s as" 1264 " active slave; either %s is" 1265 " down or the link is down.\n", 1266 bond->dev->name, 1267 slave->dev->name, 1268 slave->dev->name); 1269 } 1270 goto out; 1271 } 1272 } 1273 } 1274 1275 pr_info("%s: Unable to set %.*s as active slave.\n", 1276 bond->dev->name, (int)strlen(buf) - 1, buf); 1277 out: 1278 write_unlock_bh(&bond->curr_slave_lock); 1279 read_unlock(&bond->lock); 1280 unblock_netpoll_tx(); 1281 1282 rtnl_unlock(); 1283 1284 return count; 1285 1286 } 1287 static DEVICE_ATTR(active_slave, S_IRUGO | S_IWUSR, 1288 bonding_show_active_slave, bonding_store_active_slave); 1289 1290 1291 /* 1292 * Show link status of the bond interface. 1293 */ 1294 static ssize_t bonding_show_mii_status(struct device *d, 1295 struct device_attribute *attr, 1296 char *buf) 1297 { 1298 struct slave *curr; 1299 struct bonding *bond = to_bond(d); 1300 1301 read_lock(&bond->curr_slave_lock); 1302 curr = bond->curr_active_slave; 1303 read_unlock(&bond->curr_slave_lock); 1304 1305 return sprintf(buf, "%s\n", curr ? "up" : "down"); 1306 } 1307 static DEVICE_ATTR(mii_status, S_IRUGO, bonding_show_mii_status, NULL); 1308 1309 1310 /* 1311 * Show current 802.3ad aggregator ID. 1312 */ 1313 static ssize_t bonding_show_ad_aggregator(struct device *d, 1314 struct device_attribute *attr, 1315 char *buf) 1316 { 1317 int count = 0; 1318 struct bonding *bond = to_bond(d); 1319 1320 if (bond->params.mode == BOND_MODE_8023AD) { 1321 struct ad_info ad_info; 1322 count = sprintf(buf, "%d\n", 1323 (bond_3ad_get_active_agg_info(bond, &ad_info)) 1324 ? 0 : ad_info.aggregator_id); 1325 } 1326 1327 return count; 1328 } 1329 static DEVICE_ATTR(ad_aggregator, S_IRUGO, bonding_show_ad_aggregator, NULL); 1330 1331 1332 /* 1333 * Show number of active 802.3ad ports. 1334 */ 1335 static ssize_t bonding_show_ad_num_ports(struct device *d, 1336 struct device_attribute *attr, 1337 char *buf) 1338 { 1339 int count = 0; 1340 struct bonding *bond = to_bond(d); 1341 1342 if (bond->params.mode == BOND_MODE_8023AD) { 1343 struct ad_info ad_info; 1344 count = sprintf(buf, "%d\n", 1345 (bond_3ad_get_active_agg_info(bond, &ad_info)) 1346 ? 0 : ad_info.ports); 1347 } 1348 1349 return count; 1350 } 1351 static DEVICE_ATTR(ad_num_ports, S_IRUGO, bonding_show_ad_num_ports, NULL); 1352 1353 1354 /* 1355 * Show current 802.3ad actor key. 1356 */ 1357 static ssize_t bonding_show_ad_actor_key(struct device *d, 1358 struct device_attribute *attr, 1359 char *buf) 1360 { 1361 int count = 0; 1362 struct bonding *bond = to_bond(d); 1363 1364 if (bond->params.mode == BOND_MODE_8023AD) { 1365 struct ad_info ad_info; 1366 count = sprintf(buf, "%d\n", 1367 (bond_3ad_get_active_agg_info(bond, &ad_info)) 1368 ? 0 : ad_info.actor_key); 1369 } 1370 1371 return count; 1372 } 1373 static DEVICE_ATTR(ad_actor_key, S_IRUGO, bonding_show_ad_actor_key, NULL); 1374 1375 1376 /* 1377 * Show current 802.3ad partner key. 1378 */ 1379 static ssize_t bonding_show_ad_partner_key(struct device *d, 1380 struct device_attribute *attr, 1381 char *buf) 1382 { 1383 int count = 0; 1384 struct bonding *bond = to_bond(d); 1385 1386 if (bond->params.mode == BOND_MODE_8023AD) { 1387 struct ad_info ad_info; 1388 count = sprintf(buf, "%d\n", 1389 (bond_3ad_get_active_agg_info(bond, &ad_info)) 1390 ? 0 : ad_info.partner_key); 1391 } 1392 1393 return count; 1394 } 1395 static DEVICE_ATTR(ad_partner_key, S_IRUGO, bonding_show_ad_partner_key, NULL); 1396 1397 1398 /* 1399 * Show current 802.3ad partner mac. 1400 */ 1401 static ssize_t bonding_show_ad_partner_mac(struct device *d, 1402 struct device_attribute *attr, 1403 char *buf) 1404 { 1405 int count = 0; 1406 struct bonding *bond = to_bond(d); 1407 1408 if (bond->params.mode == BOND_MODE_8023AD) { 1409 struct ad_info ad_info; 1410 if (!bond_3ad_get_active_agg_info(bond, &ad_info)) 1411 count = sprintf(buf, "%pM\n", ad_info.partner_system); 1412 } 1413 1414 return count; 1415 } 1416 static DEVICE_ATTR(ad_partner_mac, S_IRUGO, bonding_show_ad_partner_mac, NULL); 1417 1418 /* 1419 * Show the queue_ids of the slaves in the current bond. 1420 */ 1421 static ssize_t bonding_show_queue_id(struct device *d, 1422 struct device_attribute *attr, 1423 char *buf) 1424 { 1425 struct slave *slave; 1426 int i, res = 0; 1427 struct bonding *bond = to_bond(d); 1428 1429 if (!rtnl_trylock()) 1430 return restart_syscall(); 1431 1432 read_lock(&bond->lock); 1433 bond_for_each_slave(bond, slave, i) { 1434 if (res > (PAGE_SIZE - IFNAMSIZ - 6)) { 1435 /* not enough space for another interface_name:queue_id pair */ 1436 if ((PAGE_SIZE - res) > 10) 1437 res = PAGE_SIZE - 10; 1438 res += sprintf(buf + res, "++more++ "); 1439 break; 1440 } 1441 res += sprintf(buf + res, "%s:%d ", 1442 slave->dev->name, slave->queue_id); 1443 } 1444 read_unlock(&bond->lock); 1445 if (res) 1446 buf[res-1] = '\n'; /* eat the leftover space */ 1447 rtnl_unlock(); 1448 return res; 1449 } 1450 1451 /* 1452 * Set the queue_ids of the slaves in the current bond. The bond 1453 * interface must be enslaved for this to work. 1454 */ 1455 static ssize_t bonding_store_queue_id(struct device *d, 1456 struct device_attribute *attr, 1457 const char *buffer, size_t count) 1458 { 1459 struct slave *slave, *update_slave; 1460 struct bonding *bond = to_bond(d); 1461 u16 qid; 1462 int i, ret = count; 1463 char *delim; 1464 struct net_device *sdev = NULL; 1465 1466 if (!rtnl_trylock()) 1467 return restart_syscall(); 1468 1469 /* delim will point to queue id if successful */ 1470 delim = strchr(buffer, ':'); 1471 if (!delim) 1472 goto err_no_cmd; 1473 1474 /* 1475 * Terminate string that points to device name and bump it 1476 * up one, so we can read the queue id there. 1477 */ 1478 *delim = '\0'; 1479 if (sscanf(++delim, "%hd\n", &qid) != 1) 1480 goto err_no_cmd; 1481 1482 /* Check buffer length, valid ifname and queue id */ 1483 if (strlen(buffer) > IFNAMSIZ || 1484 !dev_valid_name(buffer) || 1485 qid > bond->dev->real_num_tx_queues) 1486 goto err_no_cmd; 1487 1488 /* Get the pointer to that interface if it exists */ 1489 sdev = __dev_get_by_name(dev_net(bond->dev), buffer); 1490 if (!sdev) 1491 goto err_no_cmd; 1492 1493 read_lock(&bond->lock); 1494 1495 /* Search for thes slave and check for duplicate qids */ 1496 update_slave = NULL; 1497 bond_for_each_slave(bond, slave, i) { 1498 if (sdev == slave->dev) 1499 /* 1500 * We don't need to check the matching 1501 * slave for dups, since we're overwriting it 1502 */ 1503 update_slave = slave; 1504 else if (qid && qid == slave->queue_id) { 1505 goto err_no_cmd_unlock; 1506 } 1507 } 1508 1509 if (!update_slave) 1510 goto err_no_cmd_unlock; 1511 1512 /* Actually set the qids for the slave */ 1513 update_slave->queue_id = qid; 1514 1515 read_unlock(&bond->lock); 1516 out: 1517 rtnl_unlock(); 1518 return ret; 1519 1520 err_no_cmd_unlock: 1521 read_unlock(&bond->lock); 1522 err_no_cmd: 1523 pr_info("invalid input for queue_id set for %s.\n", 1524 bond->dev->name); 1525 ret = -EPERM; 1526 goto out; 1527 } 1528 1529 static DEVICE_ATTR(queue_id, S_IRUGO | S_IWUSR, bonding_show_queue_id, 1530 bonding_store_queue_id); 1531 1532 1533 /* 1534 * Show and set the all_slaves_active flag. 1535 */ 1536 static ssize_t bonding_show_slaves_active(struct device *d, 1537 struct device_attribute *attr, 1538 char *buf) 1539 { 1540 struct bonding *bond = to_bond(d); 1541 1542 return sprintf(buf, "%d\n", bond->params.all_slaves_active); 1543 } 1544 1545 static ssize_t bonding_store_slaves_active(struct device *d, 1546 struct device_attribute *attr, 1547 const char *buf, size_t count) 1548 { 1549 int i, new_value, ret = count; 1550 struct bonding *bond = to_bond(d); 1551 struct slave *slave; 1552 1553 if (sscanf(buf, "%d", &new_value) != 1) { 1554 pr_err("%s: no all_slaves_active value specified.\n", 1555 bond->dev->name); 1556 ret = -EINVAL; 1557 goto out; 1558 } 1559 1560 if (new_value == bond->params.all_slaves_active) 1561 goto out; 1562 1563 if ((new_value == 0) || (new_value == 1)) { 1564 bond->params.all_slaves_active = new_value; 1565 } else { 1566 pr_info("%s: Ignoring invalid all_slaves_active value %d.\n", 1567 bond->dev->name, new_value); 1568 ret = -EINVAL; 1569 goto out; 1570 } 1571 1572 read_lock(&bond->lock); 1573 bond_for_each_slave(bond, slave, i) { 1574 if (!bond_is_active_slave(slave)) { 1575 if (new_value) 1576 slave->inactive = 0; 1577 else 1578 slave->inactive = 1; 1579 } 1580 } 1581 read_unlock(&bond->lock); 1582 out: 1583 return ret; 1584 } 1585 static DEVICE_ATTR(all_slaves_active, S_IRUGO | S_IWUSR, 1586 bonding_show_slaves_active, bonding_store_slaves_active); 1587 1588 /* 1589 * Show and set the number of IGMP membership reports to send on link failure 1590 */ 1591 static ssize_t bonding_show_resend_igmp(struct device *d, 1592 struct device_attribute *attr, 1593 char *buf) 1594 { 1595 struct bonding *bond = to_bond(d); 1596 1597 return sprintf(buf, "%d\n", bond->params.resend_igmp); 1598 } 1599 1600 static ssize_t bonding_store_resend_igmp(struct device *d, 1601 struct device_attribute *attr, 1602 const char *buf, size_t count) 1603 { 1604 int new_value, ret = count; 1605 struct bonding *bond = to_bond(d); 1606 1607 if (sscanf(buf, "%d", &new_value) != 1) { 1608 pr_err("%s: no resend_igmp value specified.\n", 1609 bond->dev->name); 1610 ret = -EINVAL; 1611 goto out; 1612 } 1613 1614 if (new_value < 0 || new_value > 255) { 1615 pr_err("%s: Invalid resend_igmp value %d not in range 0-255; rejected.\n", 1616 bond->dev->name, new_value); 1617 ret = -EINVAL; 1618 goto out; 1619 } 1620 1621 pr_info("%s: Setting resend_igmp to %d.\n", 1622 bond->dev->name, new_value); 1623 bond->params.resend_igmp = new_value; 1624 out: 1625 return ret; 1626 } 1627 1628 static DEVICE_ATTR(resend_igmp, S_IRUGO | S_IWUSR, 1629 bonding_show_resend_igmp, bonding_store_resend_igmp); 1630 1631 static struct attribute *per_bond_attrs[] = { 1632 &dev_attr_slaves.attr, 1633 &dev_attr_mode.attr, 1634 &dev_attr_fail_over_mac.attr, 1635 &dev_attr_arp_validate.attr, 1636 &dev_attr_arp_interval.attr, 1637 &dev_attr_arp_ip_target.attr, 1638 &dev_attr_downdelay.attr, 1639 &dev_attr_updelay.attr, 1640 &dev_attr_lacp_rate.attr, 1641 &dev_attr_ad_select.attr, 1642 &dev_attr_xmit_hash_policy.attr, 1643 &dev_attr_num_grat_arp.attr, 1644 &dev_attr_num_unsol_na.attr, 1645 &dev_attr_miimon.attr, 1646 &dev_attr_primary.attr, 1647 &dev_attr_primary_reselect.attr, 1648 &dev_attr_use_carrier.attr, 1649 &dev_attr_active_slave.attr, 1650 &dev_attr_mii_status.attr, 1651 &dev_attr_ad_aggregator.attr, 1652 &dev_attr_ad_num_ports.attr, 1653 &dev_attr_ad_actor_key.attr, 1654 &dev_attr_ad_partner_key.attr, 1655 &dev_attr_ad_partner_mac.attr, 1656 &dev_attr_queue_id.attr, 1657 &dev_attr_all_slaves_active.attr, 1658 &dev_attr_resend_igmp.attr, 1659 &dev_attr_min_links.attr, 1660 NULL, 1661 }; 1662 1663 static struct attribute_group bonding_group = { 1664 .name = "bonding", 1665 .attrs = per_bond_attrs, 1666 }; 1667 1668 /* 1669 * Initialize sysfs. This sets up the bonding_masters file in 1670 * /sys/class/net. 1671 */ 1672 int bond_create_sysfs(struct bond_net *bn) 1673 { 1674 int ret; 1675 1676 bn->class_attr_bonding_masters = class_attr_bonding_masters; 1677 sysfs_attr_init(&bn->class_attr_bonding_masters.attr); 1678 1679 ret = netdev_class_create_file(&bn->class_attr_bonding_masters); 1680 /* 1681 * Permit multiple loads of the module by ignoring failures to 1682 * create the bonding_masters sysfs file. Bonding devices 1683 * created by second or subsequent loads of the module will 1684 * not be listed in, or controllable by, bonding_masters, but 1685 * will have the usual "bonding" sysfs directory. 1686 * 1687 * This is done to preserve backwards compatibility for 1688 * initscripts/sysconfig, which load bonding multiple times to 1689 * configure multiple bonding devices. 1690 */ 1691 if (ret == -EEXIST) { 1692 /* Is someone being kinky and naming a device bonding_master? */ 1693 if (__dev_get_by_name(bn->net, 1694 class_attr_bonding_masters.attr.name)) 1695 pr_err("network device named %s already exists in sysfs", 1696 class_attr_bonding_masters.attr.name); 1697 ret = 0; 1698 } 1699 1700 return ret; 1701 1702 } 1703 1704 /* 1705 * Remove /sys/class/net/bonding_masters. 1706 */ 1707 void bond_destroy_sysfs(struct bond_net *bn) 1708 { 1709 netdev_class_remove_file(&bn->class_attr_bonding_masters); 1710 } 1711 1712 /* 1713 * Initialize sysfs for each bond. This sets up and registers 1714 * the 'bondctl' directory for each individual bond under /sys/class/net. 1715 */ 1716 void bond_prepare_sysfs_group(struct bonding *bond) 1717 { 1718 bond->dev->sysfs_groups[0] = &bonding_group; 1719 } 1720 1721