Jeremy Jackson
2007-Apr-18 17:23 UTC
[Bridge] two fields are missing in brctl output when using /sys
I've noticed for a while that # brctl showstp output is showing 0 for port_no and port_id It seems that somewhere in 2.6 sysfs land the following items got printed in hexadecimal, and brctl code was parsing for decimal only doug:/sys/class/net/eth0/brport# cat port_id 0x8001 doug:/sys/class/net/eth0/brport# cat port_no 0x1 The following patch to bridge-utils (git and 1.2 release) lets it do the right thing: diff -ur bridge-utils-1.2/libbridge/libbridge_devif.c bridge-utils/libbridge/lib bridge_devif.c --- bridge-utils-1.2/libbridge/libbridge_devif.c 2007-04-05 16:02:58.2870 22220 -0400 +++ bridge-utils/libbridge/libbridge_devif.c 2007-04-05 14:51:19.362040447 -0 400 @@ -56,7 +56,7 @@ if (!f) fprintf(stderr, "%s: %s\n", dev, strerror(errno)); else { - fscanf(f, "%i", &value); + fscanf(f, "%d", &value); fclose(f); } return value; Please CC replies as I'm not subscribed. -- Jeremy Jackson jerj@coplanar.net Email/Jabber/Google Talk/MSN (519)489-4903 Coplanar Networks http://www.coplanar.net
Stephen Hemminger
2007-May-08 11:13 UTC
[Bridge] two fields are missing in brctl output when using /sys
On Thu, 05 Apr 2007 16:10:59 -0400 Jeremy Jackson <jerj@coplanar.net> wrote:> I've noticed for a while that > > # brctl showstp > > output is showing 0 for port_no and port_id > > It seems that somewhere in 2.6 sysfs land the following items got > printed in hexadecimal, and brctl code was parsing for decimal only > > doug:/sys/class/net/eth0/brport# cat port_id > 0x8001 > doug:/sys/class/net/eth0/brport# cat port_no > 0x1 > > The following patch to bridge-utils (git and 1.2 release) lets it do the > right thing: > > diff -ur bridge-utils-1.2/libbridge/libbridge_devif.c > bridge-utils/libbridge/lib > bridge_devif.c > --- bridge-utils-1.2/libbridge/libbridge_devif.c 2007-04-05 > 16:02:58.2870 > 22220 -0400 > +++ bridge-utils/libbridge/libbridge_devif.c 2007-04-05 > 14:51:19.362040447 -0 > 400 > @@ -56,7 +56,7 @@ > if (!f) > fprintf(stderr, "%s: %s\n", dev, strerror(errno)); > else { > - fscanf(f, "%i", &value); > + fscanf(f, "%d", &value); > fclose(f); > } > return value; >Applied manually, (your patch was backwards) -- Stephen Hemminger <shemminger@linux-foundation.org>