Когда я создаю фиктивный сетевой интерфейс, а затем вызываю его, он оказывается в НЕИЗВЕСТНОМ состоянии:
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 году представление правильного состояния связи для фиктивного интерфейса с пользовательской средой не было большой задачей.