[Bridge] libbridge<->sysfs interface - some bugs

Uri Simchoni UriS at sofaware.com
Sun Dec 31 23:30:36 PST 2006


Hi,
 
I think I detected some bugs in libbridge 1.2. Probably none detected
them so far because of the fallback to ioctl() whenever anything fails.
On my system (user 32 bits, kernel 64 bits) the fallback doesn't work.

It would be nice BTW to have a compile time option that leaves the ioctl
fallback out...

Here's what I've found (first patch is a compilation patch I posted last
week):

diff -ru --strip-trailing-cr bridge-utils-1.2/libbridge/Makefile.in
/Arrow75/CN3XXX-SDK/linux/embedded_rootfs/build/bridge-utils-1.2/libbrid
ge/Makefile.in
--- bridge-utils-1.2/libbridge/Makefile.in	2006-09-09
09:30:32.000000000 +0300
+++
/Arrow75/CN3XXX-SDK/linux/embedded_rootfs/build/bridge-utils-1.2/libbrid
ge/Makefile.in	2006-12-31 10:21:01.584005800 +0200
@@ -5,7 +5,8 @@
 RANLIB=@RANLIB@
 
 CC=@CC@
-CFLAGS = -Wall -g $(KERNEL_HEADERS)
+CFLAGS = -Wall @CFLAGS@
+INCLUDE=$(KERNEL_HEADERS)
 
 prefix=@prefix@
 exec_prefix=@exec_prefix@
diff -ru --strip-trailing-cr
bridge-utils-1.2/libbridge/libbridge_devif.c
/Arrow75/CN3XXX-SDK/linux/embedded_rootfs/build/bridge-utils-1.2/libbrid
ge/libbridge_devif.c
--- bridge-utils-1.2/libbridge/libbridge_devif.c	2006-09-09
09:30:32.000000000 +0300
+++
/Arrow75/CN3XXX-SDK/linux/embedded_rootfs/build/bridge-utils-1.2/libbrid
ge/libbridge_devif.c	2007-01-01 08:22:29.063200300 +0200
@@ -56,7 +56,7 @@
 	if (!f) 
 		fprintf(stderr, "%s: %s\n", dev, strerror(errno));
 	else {
-		fscanf(f, "%d", &value);
+		fscanf(f, "%i", &value);
 		fclose(f);
 	}
 	return value;
@@ -282,7 +282,7 @@
 	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 -ru --strip-trailing-cr bridge-utils-1.2/libbridge/libbridge_init.c
/Arrow75/CN3XXX-SDK/linux/embedded_rootfs/build/bridge-utils-1.2/libbrid
ge/libbridge_init.c
--- bridge-utils-1.2/libbridge/libbridge_init.c	2006-09-09
09:30:32.000000000 +0300
+++
/Arrow75/CN3XXX-SDK/linux/embedded_rootfs/build/bridge-utils-1.2/libbrid
ge/libbridge_init.c	2007-01-01 07:35:25.610075300 +0200
@@ -186,7 +186,7 @@
 	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);




More information about the Bridge mailing list