bridge: forwarding table information for >256 devices
Subsystems (3)
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);
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 showmacsThe fix is to squeeze the extra bits into small hole left in data structure, to maintain binary compatiablity.
Signed-off-by Stephen Hemminger <[email protected]>
At least you had somewhere to stick the high bits :)
Applied, thanks.