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