When Linux changes link on a master interface, all of its children also change. This is not true in VPP, where bringing down a phy while its sub-ints are up will not change link on the sub-ints. We are forced to undo that change by walking the sub-interfaces of a phy and syncing their state back into linux. For simplicity, just walk all interfaces, as others will be a no-op. The approach may have to be revisited once netlink messages are consumed, to ensure there is not an oscillation where netlink sets a link, which forces all links to be reset, generating more netlink messages, etc. Care should be taken when netlink consumption comes into play! DBGvpp# create sub TenGigabitEthernet3/0/0 1 DBGvpp# lcp create TenGigabitEthernet3/0/0 host-if e0 DBGvpp# lcp create TenGigabitEthernet3/0/0.1 host-if e0.1 593: e0: <BROADCAST,MULTICAST> mtu 9000 qdisc mq state DOWN mode DEFAULT group default qlen 1000 594: e0.1@e0: <BROADCAST,MULTICAST,M-DOWN> mtu 9000 qdisc noop state DOWN mode DEFAULT group default qlen 1000 DBGvpp# set int state TenGigabitEthernet3/0/0 up 593: e0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UNKNOWN mode DEFAULT group default qlen 1000 594: e0.1@e0: <BROADCAST,MULTICAST> mtu 9000 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000 DBGvpp# set int state TenGigabitEthernet3/0/0.1 up 593: e0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UNKNOWN mode DEFAULT group default qlen 1000 594: e0.1@e0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP mode DEFAULT group default qlen 1000 DBGvpp# set int state TenGigabitEthernet3/0/0 down 593: e0: <BROADCAST,MULTICAST> mtu 9000 qdisc mq state DOWN mode DEFAULT group default qlen 1000 594: e0.1@e0: <BROADCAST,MULTICAST,M-DOWN> mtu 9000 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000 DBGvpp# set int state TenGigabitEthernet3/0/0 up DBGvpp# set int state TenGigabitEthernet3/0/0.1 down 593: e0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP mode DEFAULT group default qlen 1000 594: e0.1@e0: <BROADCAST,MULTICAST> mtu 9000 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000 DBGvpp# set int state TenGigabitEthernet3/0/0 down 593: e0: <BROADCAST,MULTICAST> mtu 9000 qdisc mq state DOWN mode DEFAULT group default qlen 1000 594: e0.1@e0: <BROADCAST,MULTICAST,M-DOWN> mtu 9000 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
3.1 KiB
3.1 KiB