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