天天看点

linux网络协议栈分析笔记3-网桥2

转发数据库模块,即二层MAC-端口转发表处理模块 初始化:

->br_fdb_init()   创建 net_bridge_fdb_entry结构的高速缓存

     br_fdb_cache = kmem_cache_create("bridge_fdb_cache",                          sizeof(struct net_bridge_fdb_entry),

                         0,

                         SLAB_HWCACHE_ALIGN, NULL);            struct  net_bridge_fdb_entry

     {

          struct hlist_node          hlist;      

          struct net_bridge_port          *dst;           目的出接口

          struct rcu_head               rcu;

          unsigned long               ageing_timer;      用于判断老化的相关时间戳

          mac_addr               addr;                        MAC地址

          unsigned char               is_local;

          unsigned char               is_static;            是否是静态,不会老化

     };

释放: ->void br_fdb_fini(void)      ->kmem_cache_destroy(br_fdb_cache) 更新: ->br_fdb_update()      ->struct hlist_head *head = &br->hash[br_mac_hash(addr)];  从hash表中获得头节点   addr为报文的源MAC地址      ->fdb = fdb_find(head, addr);    匹配源地址      ->找到:fdb->dst = source;   fdb->ageing_timer = jiffies;   收到该MAC地址的报文,更新时间戳 source为入接口      ->未找到:fdb_create(head, source, addr, 0);  创建一个新的表项 创建: ->fdb_create()      ->fdb = kmem_cache_alloc(br_fdb_cache, GFP_ATOMIC); 申请新的节点        设置表项成员变量 是否老化: ->__br_fdb_get()      ->has_expired(br, fdb)