网桥fdb与物理接口状态变化

网桥子系统 专栏收录该内容
17 篇文章 0 订阅

Linux网桥代码中并没有检测物理接口up/down变化的代码,所以在接口down掉后,并不能马上清除与此接口关联的MAC转发表项(可通过brctl showmacs命令查看)。内核中有两种方式处理这些表项。


超时处理

这些残留的表项会通过fdb的超时处理清除。默认超时时间为300秒,可通过命令brctl setageing修改。


static inline int has_expired(const struct net_bridge *br,
                  const struct net_bridge_fdb_entry *fdb)
{
    return !fdb->is_static && !fdb->added_by_external_learn &&
        time_before_eq(fdb->updated + hold_time(br), jiffies);
}


接口切换更新

一个客户端在桥下的多个物理口之间来回切换,而且在超时时间之内,在往fdb表插入新表项时,会发现已经存在一个MAC地址相同、出接口不同的表项,此时直接更新为正确的出接口(fdb->dst = source),更新表项时间。


void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
           const unsigned char *addr, u16 vid, bool added_by_user)
{
    fdb = fdb_find_rcu(head, addr, vid);
    if (likely(fdb)) {
        /* fastpath: update of existing entry */
        if (unlikely(source != fdb->dst)) {
            fdb->dst = source;
        }
        if (now != fdb->updated)
            fdb->updated = now;
    }
} 


内核版本

linux-4.14.4



  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值