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)

你可能感兴趣的:(linux网络协议栈分析笔记3-网桥2)