Назад | Перейти на главную страницу

фиктивный сетевой интерфейс в Linux

Когда я создаю фиктивный сетевой интерфейс, а затем вызываю его, он оказывается в НЕИЗВЕСТНОМ состоянии:

root@5b8dd2855a9c:# ip l a boom type dummy
root@5b8dd2855a9c:# ip l show boom
58: boom: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT
    link/ether 1e:f6:4b:60:ff:1a brd ff:ff:ff:ff:ff:ff
root@5b8dd2855a9c:# ip l set boom up
root@5b8dd2855a9c:# ip l show boom
58: boom: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state **UNKNOWN** mode DEFAULT
    link/ether 1e:f6:4b:60:ff:1a brd ff:ff:ff:ff:ff:ff
root@5b8dd2855a9c:#

Кто-нибудь знает почему? Я попытался назначить ему IP-адрес, но это не помогло.

Я тестировал это на следующей машине:

root@5b8dd2855a9c:# uname -a
Linux 5b8dd2855a9c 3.16.1-tinycore64 #1 SMP Fri Aug 22 05:53:09 UTC 2014 x86_64 GNU/Linux
root@5b8dd2855a9c:#

Обновить:

Так что вроде не делает интерфейс неработоспособным. После нескольких рабских поисков в Google я наткнулся на эта информация

Глядя на драйверы / net / dummy.c и включить / linux / netdevice.h, кажется, что фиктивный драйвер сетевого интерфейса реализует лишь небольшой набор операций с сетевым устройством:

Со строки 112 из драйверы / net / dummy.c мы узнаем, что:

static const struct net_device_ops dummy_netdev_ops = {
    .ndo_init       = dummy_dev_init,
    .ndo_uninit     = dummy_dev_uninit,
    .ndo_start_xmit     = dummy_xmit,
    .ndo_validate_addr  = eth_validate_addr,
    .ndo_set_rx_mode    = set_multicast_list,
    .ndo_set_mac_address    = eth_mac_addr,
    .ndo_get_stats64    = dummy_get_stats64,
    .ndo_change_carrier = dummy_change_carrier,
};

Когда глядя на включить / linux / netdevice.h, где struct net_device_ops определено, похоже (точнее, в строке 1057):

int         (*ndo_set_vf_link_state)(struct net_device *dev,
                         int vf, int link_state);

Что это дает нам с точки зрения ответа на ваш вопрос, вместо того, чтобы просто поставить здесь стену текста и надеяться набрать +10? Что ж, ответ вроде бы да и нет.

Источник показывает, что да, состояние UNKNOWN является ожидаемым поведением, потому что нет ничего, что могло бы когда-либо установить состояние, поэтому оно определенно должно быть UNKNOWN. С другой стороны, разумно ожидать, что пользователь, запускающий фиктивный интерфейс, увидит, что состояние изменилось. Классический пример разумных ожиданий с точки зрения пользователя, которые не оправдываются частью ядра.

Тогда может возникнуть следующий вопрос: это ошибка? Следует ли это исправить? Это выходит за рамки этого ответа, хотя это, безусловно, можно исправить, если кто-то пожелает. Однако стоит отметить, что фиктивный интерфейс находится в ядре довольно давно, точнее 20 лет. Думаю, еще в 1994 году представление правильного состояния связи для фиктивного интерфейса с пользовательской средой не было большой задачей.