桥mac学习老化时间

时间:2014-02-18 02:33:25

标签: c linux-kernel

通过将“/ sys / class / net / br0 / bridge / ageing_time”修改为最大值来设置老化时间。

# brctl showstp br0
br0
 bridge id      8000.001018000000
 designated root    8000.001018000000
....
 ageing time        4294314.45
....

但学习的桌子会同时陈旧。

检查代码,我在br_fdb.c中看到了一些溢出的东西

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

fdb->updated + hold_time(br)将溢出,然后学习的表将被视为超时。

这是一个错误吗?

1 个答案:

答案 0 :(得分:0)

我想是的。但不应该是一个错误,只是一个不适当的地方。

如果您希望您的非静态FDB条目永不过期,但似乎此溢出会导致has_expired()返回TRUE。

在32位机器上,通常jiffies会每50天换一次。这也会造成一些麻烦。但我猜有时候某些功能没有经过长时间的测试。

在32位机器上,将time_before_eq()替换为time_before_eq64(),并使一些变量定义从“unsigned long”到“u64”应该有效。当然,在64位机器上,每件事都没问题。