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