Linux内核桥关于mac地址表的两个数据结构:

struct net_bridge
{
	struct hlist_head    hash[BR_HASH_SIZE];
	...
}
struct net_bridge_fdb_entry
{
	struct hlist_node    hlist;
	struct net_bridge_port   *dst;
	mac_addr   addr;
	...
}

这里写图片描述

进行地址学习时调用
br_fdb_update(br, p, eth_hdr(skb)->h_source, vid);
将源mac地址传入,更新转发表。

查找转发表时调用
const unsigned char *dest = eth_hdr(skb)->h_dest
dst = __br_fdb_get(br, dest, vid)
判断目的mac地址表项是否存在。

Logo

更多推荐