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: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
920e37f76b
commit
ae4f8fca40
|
@ -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__
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue