diff options
author | Pim van Pelt <pim@ipng.nl> | 2021-08-12 21:35:06 +0200 |
---|---|---|
committer | Matthew Smith <mgsmith@netgate.com> | 2021-09-09 13:02:34 +0000 |
commit | b89c1ddcb3b4f9138ca3ebefb2115f896ff3e1bd (patch) | |
tree | 2f828c4be47a5fe3a46d052875f8197f524ba5bd /src/plugins/linux-cp/lcp.rst | |
parent | 7b46e4bc574e6dfa7f5a454a696476744625c55f (diff) |
linux-cp: Complete interface creation logic
Linux Control Plane interface creation logic is currently only able to
create untagged interfaces, and dot1q VLAN sub-interfaces. This change
makes it possible to create dot1ad VLAN sub-ints, and Q-in-AD as well
as Q-in-Q sub-interfaces as well.
It makes the plugin a bit more robust by catching a few common errors,
such as creating an lcp on a sub-interface without its parent having
one, and creating an lcp on a sub-interface that is not exact-match.
This change has a bunch of smaller improvemnets as well. I documented
my work in this post:
https://ipng.ch/s/articles/2021/08/12/vpp-1.html
It shows that after the change is merged, all VPP interface types now
create and operate cleanly as LCP interfaces as well.
Type: improvement
Signed-off-by: Pim van Pelt <pim@ipng.nl>
Change-Id: I322669f7316d44c227090b83d6a574fb9c00e76a
Diffstat (limited to 'src/plugins/linux-cp/lcp.rst')
-rw-r--r-- | src/plugins/linux-cp/lcp.rst | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/plugins/linux-cp/lcp.rst b/src/plugins/linux-cp/lcp.rst index 6d81901cf7b..f19981297a6 100644 --- a/src/plugins/linux-cp/lcp.rst +++ b/src/plugins/linux-cp/lcp.rst @@ -8,9 +8,9 @@ Linux Control Plane Integration Overview ________ -This plugin allows VPP to integrate with the Linux. The +This plugin allows VPP to integrate with the Linux kernel. The general model is that Linux is the network stack, i.e. it has the -control plane protocols, like ARP, IPv6 ND/MLD, Ping, etc, and VPP +control plane protocols, like ARP, IPv6 ND/MLD, ping, etc, and VPP provides a SW based ASIC for forwarding. Interfaces @@ -20,16 +20,17 @@ VPP owns the interfaces in the system; physical (.e.g PCI), quasi physical (e.g. vhost), or virtual (e.g. tunnel). However, for the Linux networking stack to function it needs a representation of these interfaces; it needs a mirror image in the kernel. For this -mirror we use a Tap interface, if the VPP interface is multi-point, a -Tun if it's point-to-point. A physical and its mirror form an +mirror we use a TAP interface, if the VPP interface is multi-point, a +TUN if it's point-to-point. A physical and its mirror form an interface 'pair'. -The host interface has two identities; the sw_if_index of the Tap and -the virtual interface index in the kernel. It may be in a Linux namespace. +The host interface has two identities; the sw_if_index of the TAP and +the virtual interface index in the kernel. It may be in a Linux network +namespace. The creation of the interface pairs is required from the control plane. It can be statically configured in the VPP startup -configuration file. The intent here was to make the pair creation +configuration file. The intent here is to make the pair creation explicit, rather than have VPP guess which of the interfaces it owns require a mirror. @@ -46,22 +47,21 @@ achieved in various ways, for example by listening to the netlink messages and applying the config. As a result all e.g. routes programmed in Linux, will also be present in VPP's FIB. -Linux will own the [ARP/ND] nieghbor tables (which will be copied via +Linux will own the [ARP/ND] neighbor tables (which will be copied via netlink to VPP also). This means that Linux will send packets with the peer's MAC address in the rewrite to VPP. The receiving TAP interface must therefore be in promiscuous mode. - Forwarding __________ The basic principle is to x-connect traffic from a Linux host interface -(received on the Tap/Tun) to its paired the physical, and vice-versa. +(received on the tap/tun) to its paired the physical, and vice-versa. Host to Physical ^^^^^^^^^^^^^^^^ -All packets sent by the host, and received by VPP on a Tap/Tun should +All packets sent by the host, and received by VPP on a tap/tun should be sent to its paired physical interface. However, they should be sent with the same consequences as if they had originated from VPP, i.e. they should be subject to all output features on the physical @@ -73,17 +73,18 @@ adjacency that VPP would have used to send this packet; this adjacency is stored in the buffer's meta data so that it is available to all output features. Then the packet is sent through the physical interface's IP output feature arc. + All ARP packets are x-connected from the tap to the physical. Physical to Host ^^^^^^^^^^^^^^^^ All ARP packets received on the physical are sent to the paired -Tap. This allows the Linux network stack to build the nieghbour table. +tap. This allows the Linux network stack to build the neighbor table. IP packets that are punted are sent to the host. They are sent on the tap that is paired with the physical on which they were originally -received. The packet is sent on the Tap/Tun 'exactly' as it was +received. The packet is sent on the tap/tun 'exactly' as it was received (i.e. with the L2 rewrite) but post any translations that input features may have made. @@ -92,5 +93,4 @@ Recommendations ^^^^^^^^^^^^^^^ When using this plugin disable the ARP, ND, IGMP plugins; this is the -task for Linux. -Disable ping plugin, since Linux will now respond. +task for Linux. Disable ping plugin, since Linux will now respond. |