【问题标题】:Is it possible to modify interface index是否可以修改接口索引
【发布时间】:2015-12-27 19:57:01
【问题描述】:

如果内核出于某种原因决定更改接口索引,我们的用户空间代码缓存接口索引不会更新并开始丢弃数据包,因为它们在用户空间中缓存的接口索引与内核中实际存在的接口索引不匹配。

我使用 if_indextoname(index, interfaceName) 来解决这个问题。基本上内核知道哪个索引映射到正确的接口名称。

现在是我的要求:我需要测试我的代码。有没有一种方法可以模拟索引更改以便验证我的代码?我有一种直觉,因为索引是内核非常特殊的东西,因此它只能通过调用(if_nametoindex()/等)访问,但我们无法更改它。那么如何验证我的变更集呢?

【问题讨论】:

    标签: linux linux-kernel network-programming driver network-interface


    【解决方案1】:

    sysctl 无法执行您的建议。

    udev 负责命名接口,即使有一些命名方案,也无需更改索引。

    如果你能阅读代码,请看这里:

    http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20

    【讨论】:

    • @Bodgan 你知道我们可以通过哪些其他方式来更改界面索引
    • 或者是否可以修改界面索引?
    • 我想您可以制作一个包装脚本来重命名接口,但我怀疑您可以更改接口的索引。手动更改接口的名称可以这样完成: ip link set enp5s0 name eth1 当接口处于关闭状态时,当然编写脚本来做到这一点并不难.
    • @Bodgan 我正在考虑,如果我通过“ip link set down”将接口(绑定到节点的接口)关闭,那么一旦接口启动,这是否可以更改接口索引再次。我做了这个实验,但是一旦我关闭接口,我就会失去连接(我通过 SSH 登录到节点)。由于接口关闭,因此 SSH 会话也丢失了。现在把它带回来,我不能通过 SSH 登录。有什么建议吗?
    【解决方案2】:

    如果你可以强制 netdev 注销,它会在重新注册时选择一个新的索引。例如,如果接口是 RNDIS(通过 USB),您可以简单地断开并重新连接 USB。为确保索引已更改,您可以在 netdev 探针中添加打印...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-21
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      相关资源
      最近更新 更多