aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2008-01-08 08:20:35 -0800
committerStephen Hemminger <stephen.hemminger@vyatta.com>2008-01-08 08:20:35 -0800
commit0c20fa4ec6ba2933ac07008e1f288574a6941e79 (patch)
tree646fb2dbf10221419902d49f34ce7d5881b12e8d
parent6907ae6731516f3fcc508ba8d6dc187604383eb5 (diff)
downloadandroid_external_brctl-0c20fa4ec6ba2933ac07008e1f288574a6941e79.tar.gz
android_external_brctl-0c20fa4ec6ba2933ac07008e1f288574a6941e79.tar.bz2
android_external_brctl-0c20fa4ec6ba2933ac07008e1f288574a6941e79.zip
fix use of sysfs (affects 32/64 bit compat)
I built current git head of bridge-utils. 32-bit binary omn 64-bit kernel doesn't show bridged interfaces: bridge name bridge id STP enabled interfaces br0 8000.000000000000 no can't get port info: Operation not supported It turns out that it uses wrong directory name and falls back to using ioctls. Bridge ioctls seems to be deprecated and 32/64 compat is missing, thus it fails. Attached patch makes brctl use /sys/class/net/br0/brif instead of nonexistent /sys/class/net/br0/brport: /sys/class/net/br0 ... ... ./brif: lrwxrwxrwx 1 root root 0 Jan 8 10:54 eth0 -> ../../../../class/net/eth0/brport Please apply. -- Signed-off-by: Stephen Hemminger <stephen.hemminger@vyatta.com>
-rw-r--r--libbridge/libbridge_init.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/libbridge/libbridge_init.c b/libbridge/libbridge_init.c
index 099cfd8..a7473bd 100644
--- a/libbridge/libbridge_init.c
+++ b/libbridge/libbridge_init.c
@@ -186,12 +186,18 @@ int br_foreach_port(const char *brname,
struct dirent **namelist;
char path[SYSFS_PATH_MAX];
- snprintf(path, SYSFS_PATH_MAX, SYSFS_CLASS_NET "%s/brport", brname);
+ snprintf(path, SYSFS_PATH_MAX, SYSFS_CLASS_NET "%s/brif", brname);
count = scandir(path, &namelist, 0, alphasort);
if (count < 0)
return old_foreach_port(brname, iterator, arg);
for (i = 0; i < count; i++) {
+ if (namelist[i]->d_name[0] == '.'
+ && (namelist[i]->d_name[1] == '\0'
+ || (namelist[i]->d_name[1] == '.'
+ && namelist[i]->d_name[2] == '\0')))
+ continue;
+
if (iterator(brname, namelist[i]->d_name, arg))
break;
}