diff options
author | shemminger <shemminger> | 2005-03-16 19:18:32 +0000 |
---|---|---|
committer | shemminger <shemminger> | 2005-03-16 19:18:32 +0000 |
commit | 749cca9d9ef372de3fc886b6d8c3a726da07d188 (patch) | |
tree | 574a8ba371db1b261505fa95e3342706c4b66ca6 /brctl | |
parent | f7f02257d155d61db5d99c265bff7a8d1f90b6ef (diff) | |
download | android_external_brctl-749cca9d9ef372de3fc886b6d8c3a726da07d188.tar.gz android_external_brctl-749cca9d9ef372de3fc886b6d8c3a726da07d188.tar.bz2 android_external_brctl-749cca9d9ef372de3fc886b6d8c3a726da07d188.zip |
1,0.6 fix sysfs detection and allow multiple interfaces for add/del
Diffstat (limited to 'brctl')
-rw-r--r-- | brctl/brctl_cmd.c | 88 |
1 files changed, 55 insertions, 33 deletions
diff --git a/brctl/brctl_cmd.c b/brctl/brctl_cmd.c index f135282..6d0785e 100644 --- a/brctl/brctl_cmd.c +++ b/brctl/brctl_cmd.c @@ -81,55 +81,77 @@ static int br_cmd_delbr(int argc, char*const* argv) static int br_cmd_addif(int argc, char *const* argv) { + const char *brname; int err; - switch (err = br_add_interface(argv[1], argv[2])) { - case 0: - return 0; - case ENODEV: - fprintf(stderr, "interface %s does not exist!\n", argv[2]); - return 1; + argc -= 2; + brname = *++argv; - case EBUSY: - fprintf(stderr, "device %s is already a member of a bridge; " - "can't enslave it to bridge %s.\n", argv[2], - argv[1]); - return 1; + while (argc-- > 0) { + const char *ifname = *++argv; + err = br_add_interface(brname, ifname); - case ELOOP: - fprintf(stderr, "device %s is a bridge device itself; " - "can't enslave a bridge device to a bridge device.\n", - argv[2]); - return 1; + switch(err) { + case 0: + continue; - default: - fprintf(stderr, "can't add %s to bridge %s: %s\n", - argv[2], argv[1], strerror(err)); + case ENODEV: + fprintf(stderr, "interface %s does not exist!\n", ifname); + break; + + case EBUSY: + fprintf(stderr, "device %s is already a member of a bridge; " + "can't enslave it to bridge %s.\n", ifname, + brname); + break; + + case ELOOP: + fprintf(stderr, "device %s is a bridge device itself; " + "can't enslave a bridge device to a bridge device.\n", + ifname); + break; + + default: + fprintf(stderr, "can't add %s to bridge %s: %s\n", + ifname, brname, strerror(err)); + } return 1; } + return 0; } static int br_cmd_delif(int argc, char *const* argv) { + const char *brname; int err; - switch (err = br_del_interface(argv[1], argv[2])) { - case 0: - return 0; - case ENODEV: - fprintf(stderr, "interface %s does not exist!\n", argv[2]); - return 1; + argc -= 2; + brname = *++argv; - case EINVAL: - fprintf(stderr, "device %s is not a slave of %s\n", - argv[2], argv[1]); - return 1; + while (argc-- > 0) { + const char *ifname = *++argv; + err = br_del_interface(brname, ifname); + switch (err) { + case 0: + continue; - default: - fprintf(stderr, "can't delete %s from %s: %s\n", - argv[2], argv[1], strerror(err)); + case ENODEV: + fprintf(stderr, "interface %s does not exist!\n", + ifname); + break; + + case EINVAL: + fprintf(stderr, "device %s is not a slave of %s\n", + ifname, brname); + break; + + default: + fprintf(stderr, "can't delete %s from %s: %s\n", + ifname, brname, strerror(err)); + } return 1; } + return 0; } static int br_cmd_setageing(int argc, char *const* argv) @@ -395,7 +417,7 @@ static const struct command commands[] = { { 1, "showstp", br_cmd_showstp, "<bridge>\t\tshow bridge stp info"}, { 2, "stp", br_cmd_stp, - "<bridge> <state>\tturn stp on/off" }, + "<bridge> {on|off}\tturn stp on/off" }, }; const struct command *command_lookup(const char *cmd) |