1

Если ядро ​​решает изменить индекс интерфейса по какой-либо причине, наш индекс кэшированного кода кода пользовательского пространства не обновляется, и он начинает отбрасывать пакет, потому что это несовпадение между индексом интерфейса, кэшированным в пользовательском пространстве и что действительно присутствует в ядре.Можно ли изменить индекс интерфейса

Я использовал if_indextoname (index, interfaceName), чтобы решить эту проблему. В основном ядро ​​знает, какой индекс отображает правильное имя интерфейса.

Теперь приходит мое требование: Мне нужно проверить мой код. Есть ли способ, с помощью которого можно смоделировать изменение индекса, чтобы я мог проверить свой код? У меня возникает ощущение, что поскольку индекс - это то, что очень важно для ядра, к нему можно обращаться только вызовами (if_nametoindex()/etc.), Но мы не можем его изменить. Итак, как я могу проверить свой набор изменений?

ответ

1

sysctl не может делать то, что вы предлагаете.

udev заботится об именовании интерфейсов, и хотя существует несколько схем именования, изменить индекс нечего.

Если вы можете прочитать код, посмотрите здесь:

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

+0

@Bodgan Знаете ли вы о других способах изменения индекса интерфейса – vikas

+0

или вообще можно изменить индекс интерфейса? – vikas

+0

Я предполагаю, что вы можете сделать скрипт-оболочку для переименования интерфейсов, но я сомневаюсь, что вы можете изменить индекс интерфейсов. Вручную изменить имя интерфейса можно следующим образом: ** ip link set enp5s0 name eth1 **, в то время как интерфейс находится в выключенном состоянии, и, конечно, нетрудно сделать скрипт для этого. – Bogdan

0

Если вы можете заставить NETDEV отменить регистрацию, он будет выбирать новый индекс, когда он заново регистрируется. Например, если интерфейс RNDIS (через USB), вы можете просто отключить и снова подключить USB. Чтобы убедиться, что индекс изменен, вы можете добавить печать в зонде netdev ...

Смежные вопросы