linux-cp: Add VPP->Linux synchronization 09/33709/14
authorPim van Pelt <pim@ipng.nl>
Thu, 9 Sep 2021 17:53:09 +0000 (17:53 +0000)
committerMatthew Smith <mgsmith@netgate.com>
Tue, 11 Jan 2022 19:31:25 +0000 (19:31 +0000)
commit1705a6baefe205bb6792b547c7376eee3f328a71
treee524c5abb4cc39b735fa55a643475482206b49b9
parent0cef5f5d7171e05389beee0e6b4250b366b2b28e
linux-cp: Add VPP->Linux synchronization

Part 1 -- notes in https://ipng.ch/s/articles/2021/08/13/vpp-2.html
Add the ability for VPP to copy out (sync) its state from the dataplane
to Linux Interface Pairs, when they exist. Gated by a configuration
flag (linux-cp { lcp-sync }), and by a CLI option to toggle on/off,
synchronize the following events:

- Interface state changes
- Interface MTU changes
- Interface IPv4/IPv6 address add/deletion

In VPP, subints can have any link state and MTU, orthogonal to their
phy. In Linux, setting admin-down on a phy forces its children to be
down as well. Also, in Linux, MTU of children must not exceed that of
the phy. Add a state synchronizer which walks over phy+subints to
ensure Linux and VPP end up in the same consistent state.

Part 2 -- notes in https://ipng.ch/s/articles/2021/08/15/vpp-3.html
Add the ability for VPP to autocreate sub-interfaces of existing Linux
Interface pairs. Gated by a configuration flag
(linux-cp { lcp-auto-subint }), and by a CLI option to toggle on/off,
synchronize the following event:

- Sub-interface creation (dot1q, dot1ad, QinQ and QinAD)

A few other changes:
- Add two functions into netlink.[ch] to delete ip4 and ip6 addresses.
- Remove a spurious logline (printing MTU) in netlink.c.
- Resolve a TODO around vnet_sw_interface_supports_addressing()

Type: improvement
Signed-off-by: Pim van Pelt <pim@ipng.nl>
Change-Id: I34fc070e80af4013be58d7a8cbf64296cc760e4e
Signed-off-by: Pim van Pelt <pim@ipng.nl>
src/plugins/linux-cp/CMakeLists.txt
src/plugins/linux-cp/lcp.c
src/plugins/linux-cp/lcp.h
src/plugins/linux-cp/lcp_cli.c
src/plugins/linux-cp/lcp_interface.c
src/plugins/linux-cp/lcp_interface.h
src/plugins/linux-cp/lcp_interface_sync.c [new file with mode: 0644]
src/vnet/devices/netlink.c
src/vnet/devices/netlink.h