c - Bridge mac 学习老化时间

标签 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)会溢出,那么学习表会被认为超时。

这是一个错误吗?

最佳答案

我想是的。但应该不是bug,只是一个不合适的地方。

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

在 32 位计算机上,jiffies 通常每 50 天循环一次。这也会带来一些麻烦。但我想有时有些功能没有测试那么长时间。

在32位机器上,将time_before_eq()替换为time_before_eq64(),并将一些变量定义从“unsigned long”到“u64”应该可以工作。当然,在 64 位机器上,一切都会好起来的。

关于c - Bridge mac 学习老化时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21843258/

相关文章:

Ubuntu一次又一次地询问密码

linux - sigprocmask 在汇编中返回 -22

linux-kernel - 谁以及何时分配 PCI/PCIe 设备 BAR 基址?

c - 打破平局以四舍五入到 c 中最接近的可表示 float ?

c - Linux设备驱动程序中的多重定义错误

c - 如何调用使内核模块调用或禁用中断?

c - 如何将浮点值准确写入bin文件

c - 时区文件到 POSIX 时区字符串

C 库函数检查键盘按键(在 linux 中)

c - 如何将结构数组的每个元素传递给函数?