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:
Stephen Hemminger 2008-05-02 16:53:33 -07:00 committed by David S. Miller
parent 920e37f76b
commit ae4f8fca40
2 changed files with 7 additions and 1 deletions

View File

@ -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__

View File

@ -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);