[Bridge] brctl uses incorrect sysfs path

Malcolm Scott Malcolm.Scott at cl.cam.ac.uk
Mon Jul 30 08:30:39 PDT 2007


Hi,

I noticed that brctl (or more accurately, libbridge) is using the wrong path 
when doing various lookups in sysfs: e.g. /sys/class/net/brXXX/stp_state 
when it should use /sys/class/net/brXXX/bridge/stp_state.  This doesn't 
cause any problems on most systems as it falls back to the ioctl when the 
sysfs attempt fails; however the ioctl method is apparently deprecated.  I 
believe the following patch fixes this:


diff --git a/libbridge/libbridge_devif.c b/libbridge/libbridge_devif.c
index 1decc28..65ea79a 100644
--- a/libbridge/libbridge_devif.c
+++ b/libbridge/libbridge_devif.c
@@ -282,7 +282,7 @@ static int br_set(const char *bridge, const char *name,
         char path[SYSFS_PATH_MAX];
         FILE *f;

-       snprintf(path, SYSFS_PATH_MAX, SYSFS_CLASS_NET "%s/%s", bridge, name);
+       snprintf(path, SYSFS_PATH_MAX, SYSFS_CLASS_NET "%s/bridge/%s", bridge, name);

         f = fopen(path, "w");
         if (f) {
diff --git a/libbridge/libbridge_init.c b/libbridge/libbridge_init.c
index e2eab77..f31addc 100644
--- a/libbridge/libbridge_init.c
+++ b/libbridge/libbridge_init.c
@@ -185,13 +185,18 @@ int br_foreach_port(const char *brname,
         int i, count;
         struct dirent **namelist;
         char path[SYSFS_PATH_MAX];
+       struct stat st;

-       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 (stat(namelist[i]->d_name, &st) == -1)
+                       continue;
+               if (!S_ISLNK(st.st_mode))
+                       continue;
                 if (iterator(brname, namelist[i]->d_name, arg))
                         break;
         }


(Please CC me on any replies as I am not subscribed to this mailing list.)

Best wishes,

-- 
Malcolm Scott
Research Assistant
University of Cambridge Computer Laboratory



More information about the Bridge mailing list