Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae4f8fca authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller
Browse files

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.

Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 920e37f7
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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__
+4 −0
Original line number Diff line number Diff line
@@ -285,7 +285,11 @@ int br_fdb_fillbuf(struct net_bridge *br, void *buf,

			/* 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);