// 转发数据库
// 1.容量
// net_bridge->hash[BR_HASH_SIZE],其中BR_HASH_SIZE为(1<<8),有256个bucket
// 2.老化机制,
// 2.1 gc函数,到期时会顺序遍历age_list上的转发项,修改gc函数下一次到期时间为age_list中第一个没有过期的转发项的剩余时间。
// 2.2 age_list链表,保存除本机l2地址以外的所有转发项,按照到期时间进行排序,新添加或更新的转发项保存在age_list尾部。
// 网桥转发数据库初始化
// 调用路径:br_init->br_fdb_init
1.1 void __init br_fdb_init(void)
{
//创建转发项的SLAB cache
br_fdb_cache = kmem_cache_create("bridge_fdb_cache",
sizeof(struct net_bridge_fdb_entry),
0,
SLAB_HWCACHE_ALIGN, NULL, NULL);
}
// 查询转发项
// __br_fdb_xxx不会递增net_bridge_fdb_entry的引用计数,br_fdb_xxx会递增net_bridge_fdb_entry的引用计数
// 参数:
// addr,目的l2地址
// 函数主要任务:
// hash l2地址到正确的bucket,遍历bucket查找具有相同l2地址的转发项
2.1 struct net_bridge_fdb_entry *__br_fdb_get(struct net_bridge *br,
const unsigned char *addr)
{
struct hlist_node *h;
struct net_bridge_fdb_entry *fdb;
//ne
网络子系统29_桥接转发数据库
最新推荐文章于 2022-07-19 19:46:27 发布
本文详细介绍了Linux内核网络子系统中的桥接转发数据库,包括其容量(256个bucket)、老化机制以及关键操作如查询、添加转发项的过程。桥接转发数据库用于维护网络中设备的MAC地址映射,通过哈希表和age_list链表进行高效管理,并通过垃圾回收定时器定期清理过期条目。
摘要由CSDN通过智能技术生成