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