Skip to contentSkip to conversation

bridge: forwarding table information for >256 devices

PATCH Applied Stephen Hemminger 2 participants 2 messages May 1, 2008 – May 2, 2008

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 bridge: forwarding table information for >256 devices

The forwarding table binary interface (my bad choice), only exposes the port number of the first 8 bits. The bridge code was limited to 256 ports at the time, but now the kernel supports up 1024 ports, so the upper bits are lost when doing:
brctl showmacs

The fix is to squeeze the extra bits into small hole left in data structure, to maintain binary compatiablity.

include/linux/if_bridge.h +3 -1
@@ -97,7 +97,9 @@ struct __fdb_entry
 	__u8 port_no;
 	__u8 is_local;
 	__u32 ageing_timer_value;
-	__u32 unused;
+	__u8 port_hi;
+	__u8 pad0;
+	__u16 unused;
 };
 
 #ifdef __KERNEL__
net/bridge/br_fdb.c +4 -0
@@ -285,7 +285,11 @@ int br_fdb_fillbuf(struct net_bridge *br
 
 			/* convert from internal format to API */
 			memcpy(fe->mac_addr, f->addr.addr, ETH_ALEN);
+
+			/* due to ABI compat need to split into hi/lo */
 			fe->port_no = f->dst->port_no;
+			fe->port_hi = f->dst->port_no >> 8;
+
 			fe->is_local = f->is_local;
 			if (!f->is_static)
 				fe->ageing_timer_value = jiffies_to_clock_t(jiffies - f->ageing_timer);
maintainer Applied
#1 lore raw

From: Stephen Hemminger <[email protected]>
Date: Thu, 1 May 2008 13:42:09 -0700

Quoted 10 lines

The forwarding table binary interface (my bad choice), only exposes the port number of the first 8 bits. The bridge code was limited to 256 ports at the time, but now the kernel supports up 1024 ports, so the upper bits are lost when doing:
brctl showmacs

The fix is to squeeze the extra bits into small hole left in data structure, to maintain binary compatiablity.

At least you had somewhere to stick the high bits :)

Applied, thanks.