brctl uses incorrect sysfs path

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

_______________________________________________
Bridge mailing list
Bridge@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/bridge

[Index of Archives]     [Netdev]     [AoE Tools]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux