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 | |
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
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | brctl/brctl_cmd.c | 88 | ||||
-rw-r--r-- | configure.in | 11 |
3 files changed, 71 insertions, 35 deletions
@@ -1,3 +1,10 @@ +2005-03-16 Stephen Hemminger <shemminger@osdl.org> + + * Released bridge-utils 1.0.6 + * Fix for libsys detection (for FC) + * Update autoconf usage + * Allow multiple interfaces for addif,delif + 2004-12-02 Stephen Hemminger <shemminger@osdl.org> * Released bridge-utils 1.0.5 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) diff --git a/configure.in b/configure.in index fe2e729..f79ea5c 100644 --- a/configure.in +++ b/configure.in @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(brctl/brctl.c) AC_CONFIG_HEADER(libbridge/config.h) -AM_INIT_AUTOMAKE(bridge-utils,1.0.5) +AM_INIT_AUTOMAKE(bridge-utils,1.0.6) AC_ARG_WITH( linux-headers, [ --with-linux-headers Location of the linux headers to use], KERNEL_HEADERS=$withval, KERNEL_HEADERS="/usr/src/linux/include") @@ -24,7 +24,14 @@ AC_PROG_GCC_TRADITIONAL AC_FUNC_MEMCMP AC_CHECK_FUNCS(gethostname socket strdup uname) AC_CHECK_FUNCS(if_nametoindex if_indextoname) -AC_CHECK_LIB(sysfs, sysfs_open_directory) + +dnl Check for libsysfs +libsysfs_found=0 +AC_CHECK_HEADER(sysfs/libsysfs.h, + [AC_CHECK_LIB(sysfs, sysfs_open_directory, libsysfs_found=1)]) +if test $libsysfs_found != 1; then + AC_MSG_WARN([Compiling without libsysfs support!]) +fi AC_SUBST(KERNEL_HEADERS) |