Ошибка RTNETLINK «файл существует» при попытке создать интерфейс veth, который ранее был фиктивным

Я не знаю, как выполнить ваш точный запрос, но вместо этого вы можете назначить клавишу «создать» для R -Ctrl с аналогичным результатом.

В Gnome это можно сделать с помощью инструмента -настройки gnome. Я не помню о корице, но я уверен, что есть способ, потому что я тоже использовал его. (Я не уверен в других DE, и -как и вы, -я не очень хорошо говорю с Wayland ).

Затем вы можете ввести R-Ctrl"A, чтобы получить Ä и т. д. Обратите внимание, что это последовательность, а не аккорд :, вы вводите R-Ctrl, , затем ", , затемA.

Это не так удобно и быстро, как ваше предыдущее решение, но оно более гибкое и дает вам доступ к множеству других причудливых символов, таких как ø æ ⋄ → € ° · … ´ ≠

1
29.10.2021, 14:56
1 ответ

Эта проблема воспроизводима, но связана с выбором имени, которое мешает выбору по умолчанию, сделанному ядром.

Если не указано имя для однорангового интерфейса, к vethдобавляется наименьшее возможное целое число для создания имени однорангового узла первым . Это происходит в первую очередь, до создания самого основного интерфейса. Это можно увидеть, если указать имя, которое не может конфликтовать :

.
# ip link add name myveth type veth
# ip link show type veth
17: veth0@myveth: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 2a:93:f8:8e:bc:b6 brd ff:ff:ff:ff:ff:ff
18: myveth@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 8a:c3:1d:82:93:a6 brd ff:ff:ff:ff:ff:ff

имя однорангового узла выбирается обычным способом :создать интерфейс с типом и присоединенным к нему следующим доступным целым числом:veth+0:veth0. Нижний индекс (здесь 17 против 18 )означает, что он создан первым.

Теперь, если указать то самое имя, которое ядро ​​автоматически создает первым, произойдет конфликт, указанный интерфейс не будет создан, и, таким образом, одноранговый интерфейс будет удален. Никаких следов, кроме RTNETLINK answers: File exists. Это хорошо видно при запуске в отдельной оболочкеip link monitor:

корпус 1:

$ ip link monitor

обечайка 2:

# ip link add name veth0 type veth
RTNETLINK answers: File exists

снова оболочка 1:

23: veth0@NONE: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether 72:2d:b8:9f:90:6c brd ff:ff:ff:ff:ff:ff
Deleted 23: veth0@NONE: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether 72:2d:b8:9f:90:6c brd ff:ff:ff:ff:ff:ff

Здесь @NONEозначает, что индекс одноранговой ссылки не связан... пока. Интерфейс vethимеет индекс одноранговой связи :на другой стороне провода виртуального Ethernet. Он должен был преобразовать индекс одноранговой ссылки в следующий только что созданный интерфейс с индексом 24, но тогда этот интерфейс не мог быть создан с именем veth0, потому что он уже существовал (, даже если это произошло из-за его собственного создания ). ]. Это вызывает отмену всей операции и удаление эфемерного veth0, а также сообщения об ошибке, отправленного обратно как File exists, в противном случае не остается никаких следов проблемы.

Заключение :во избежание конфликтов,

  • не указывайте никаких имен и позвольте ядру выбрать их:

    ip link add type veth
    

    получение:

    24: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default 
        link/ether 2a:93:f8:8e:bc:b6 brd ff:ff:ff:ff:ff:ff
    25: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default 
        link/ether 86:70:54:05:0f:75 brd ff:ff:ff:ff:ff:ff
    
  • укажите имя, не соответствующее схеме именования по умолчанию

    ip link add name myveth type veth
    
  • или укажите оба имени,даже если они не в порядке по умолчанию, они будут созданы ядром в его схеме именования по умолчанию (peer как veth0и main какveth1):

    ip link add name veth0 type veth peer name veth1
    
  • не забывайте vethинтерфейсы большую часть времени (но не всегда )бесполезны за пределами среды сетевого пространства имен. При необходимости одноранговый интерфейс можно добавить непосредственно в другом месте :

    .
    ip netns add othernamespace
    ip link add name veth0 type veth peer netns othernamespace
    

    , где одноранговый узел также будет создан как veth0без каких-либо конфликтов.

    # ip link show type veth
    27: veth0@if2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
        link/ether 2a:93:f8:8e:bc:b6 brd ff:ff:ff:ff:ff:ff link-netns othernamespace
    # ip -n othernamespace link show type veth
    2: veth0@if27: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
        link/ether fa:cb:bf:23:fc:a6 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    
0
31.10.2021, 18:22

Теги

Похожие вопросы