interface de rede fictícia no Linux

1

Quando eu crio uma interface de rede fictícia e, em seguida, a lanço, ela aparece no estado DESCONHECIDO:

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:#

Alguém sabe por quê? Tentei atribuir um endereço IP a ele, mas isso não resolveu o problema.

Eu testei isso na seguinte máquina:

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:#

Atualização:

Portanto, parece que isso não torna a interface inoperante. Depois de alguns Googling servil, me deparei com esta informação

    
por gyre 18.09.2014 / 23:45

1 resposta

3

Olhando para os drivers / net / dummy.c e include / linux / netdevice.h , parece que o driver da interface de rede fictícia implementa apenas um pequeno subconjunto de operações do dispositivo de rede:

Da linha 112 do drivers / net /dummy.c aprendemos que:

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,
};

Ao olhar para include / linux /netdevice.h , onde struct net_device_ops está definido, parece haver (na linha 1057 para ser exato):

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

Onde isso nos deixa em termos de dar uma resposta à sua pergunta, em vez de apenas colocar uma parede de texto aqui e esperar marcar +10? Bem, a resposta é sim ou não.

A fonte revela que sim, o estado DESCONHECIDO é o comportamento esperado porque não há nada que possa definir o estado, portanto, definitivamente deve ser DESCONHECIDO. Por outro lado, é razoável esperar que um usuário que traz uma interface fictícia para cima veja o estado mudar. Um exemplo clássico de expectativas razoáveis da perspectiva do usuário não atendidas por uma parte do kernel.

A próxima pergunta pode ser: Isso é um bug? Deve ser consertado? Isso está além do escopo se essa resposta, embora certamente seja possível consertar isso, se alguém desejar fazê-lo. No entanto, pode ser interessante notar que a interface fictícia está no kernel há algum tempo, 20 anos para ser exata. Em 1994, apresentar um estado de link correto para a interface fictícia para a área de usuário não era uma prioridade, eu acho.

    
por 19.09.2014 / 12:53