aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshemminger <shemminger>2005-03-16 19:18:32 +0000
committershemminger <shemminger>2005-03-16 19:18:32 +0000
commit749cca9d9ef372de3fc886b6d8c3a726da07d188 (patch)
tree574a8ba371db1b261505fa95e3342706c4b66ca6
parentf7f02257d155d61db5d99c265bff7a8d1f90b6ef (diff)
downloadandroid_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--ChangeLog7
-rw-r--r--brctl/brctl_cmd.c88
-rw-r--r--configure.in11
3 files changed, 71 insertions, 35 deletions
diff --git a/ChangeLog b/ChangeLog
index 8b2edd8..e5d9733 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)