Is it possible to create a VIF on a bond/LACP interface running in VPP mode

Is it possible to create a VLAN interface on top of a LACP interface (bonded) running on top of VPP?

Here is the VPP configuration

VPP Configuration
 interfaces {
     bonding bond0 {
         member {
             interface eth2
             interface eth3
         }
         mode 802.3ad
     }
 }
 settings {
     interface eth2 {
         driver dpdk
     }
     interface eth3 {
         driver dpdk
     }
 }

Interface configuration

Summary
 bonding bond0 {
     member {
         interface eth2
         interface eth3
     }
     vif 2932 {
         address xxx.xxx.6.99/29
         vrf Gwan
     }
 }
 dummy dum1 {
     address xxx.xxx.0.6/32
     vrf Gwan
 }
 ethernet eth0 {
     address xxx.xxx.10.23/24
     hw-id xx:xx:xx:xx:xx:cc
     offload {
         gro
         gso
         sg
         tso
     }
     vrf management
 }
 ethernet eth1 {
     hw-id xx:xx:xx:xx:xx:cd
     offload {
         gro
         gso
         sg
         tso
     }
 }
 ethernet eth2 {
     hw-id xx:xx:xx:xx:xx:00
     mtu 9000
 }
 ethernet eth3 {
     hw-id xx:xx:xx:xx:xx:01
     mtu 9000
 }
 loopback lo {
 }

I’m trying to ping .97 from .99 that is within the same subnet as vif2932. This works without VPP but not if the interface is configured in VPP mode (DPDK).

The bond interface shows up in the vpp interfaces list, but not the vif-interface and there is no tap-interface for the Vyos machine to use.

show vpp interfaces
$ show vpp interfaces
Kernel    Dataplane      Type    IP Address    MAC                  MTU  State
--------  -------------  ------  ------------  -----------------  -----  -------
          BondEthernet0  bond                  xx:xx:xx:xx:xx:00   9000  up
          eth2           dpdk                  xx:xx:xx:xx:xx:11   1500  up
          eth3           dpdk                  xx:xx:xx:xx:xx:11   1500  up
          local0         local                 xx:xx:xx:xx:xx:00      0  down
eth2      tap4096        virtio                xx:xx:xx:xx:xx:a5   9000  up
eth3      tap4097        virtio                xx:xx:xx:xx:xx:b3   9000  up

show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface    IP Address       MAC                VRF           MTU  S/L    Description
-----------  ---------------  -----------------  ----------  -----  -----  -------------
bond0        -                xx:xx:xx:xx:xx:11  default      1500  u/u
bond0.2932   xxx.xxx.6.99/29   xx:xx:xx:xx:xx:11  Gwan         1500  u/u
dum1         xxx.xxx.0.6/32    xx:xx:xx:xx:xx:d0  Gwan         1500  u/u
eth0         xxx.xxx.10.23/24  xx:xx:xx:xx:xx:cc  management   1500  u/u
eth1         -                xx:xx:xx:xx:xx:cd  default      1500  u/u
eth2         -                xx:xx:xx:xx:xx:11  default      1500  u/u
eth3         -                xx:xx:xx:xx:xx:11  default      1500  u/u
lo           xxx.xxx.0.1/8      xx:xx:xx:xx:xx:00  default     65536  u/u
             ::1/128

Am I doing something wrong or is this unsupported?

Version: VyOS 2025.04.21-0020-rolling
NIC: Mellanox Connect-X 4

Thanks!

  1. VPP does not support VRF
  2. If you use bonding in the VPP you have not use Bonding in non-VPP mode

Example

set vpp settings interface eth1 driver 'dpdk'
set vpp settings interface eth2 driver 'dpdk'

set vpp interfaces bonding bond0 member interface 'eth1'
set vpp interfaces bonding bond0 member interface 'eth2'
set vpp interfaces bonding bond0 kernel-interface 'vpptun0'

set vpp kernel-interfaces vpptun0 vif 10 description 'bar'

Check:

vyos@r14# run show vpp interfaces 
Kernel      Dataplane         Type    IP Address    MAC                  MTU  State
----------  ----------------  ------  ------------  -----------------  -----  -------
            BondEthernet0     bond                  02:fe:b8:7b:ec:75   9000  up
            BondEthernet0.10  bond                  00:00:00:00:00:00   9000  up
            eth1              dpdk                  52:54:00:28:23:f1   1500  up
            eth2              dpdk                  52:54:00:28:23:f1   1500  down
            local0            local                 00:00:00:00:00:00      0  down
eth1        tap4096           virtio                02:fe:c3:48:ba:b5   9000  up
eth2        tap4097           virtio                02:fe:af:da:6f:81   9000  up
vpptun0     tap4098           virtio                02:fe:73:a9:2b:f0   9000  up
vpptun0.10  tap4098.10        virtio                00:00:00:00:00:00      0  up
[edit]
vyos@r14# 

That VRF thingy is that a limit of VPP or DPDK?

Or just that VyOS didnt implement it yet?

Not implemented in VyOS

So there is still hope then :slight_smile:

Just found out that VPP uses “fib table” as separated routing tables which will be equal to VRF the Linux way:

https://fdio-vpp.readthedocs.io/en/latest/gettingstarted/developers/fib20/routes.html

Im saying the Linux way because VRF in lets say a regular router such as an Arista L3-switch/router also (in the background) includes netns (network namespace) to also separate the mac-address tables between the interfaces.

That is the VRF in a regular router have a higher degree of separation and segmentation than VRF the Linux way currently have.

Linux VRF is just as if you would use a subinterface meaning if you can manipulate a packet you can reach devices in the other VRF, which isnt possible on a Arista (or Cisco etc) box when dealing with VRF’s.

Ill note this for the future in case VRF/NETNS support will be added in VyOS and VPP edition of VyOS:

Thanks for the quick responses. Let’s hope VyOS gets VRF support in VPP, as that’s a requirement for us :slight_smile:

Add a feature request on the forge https://vyos.dev/
Or contact our sales if it is critical for you.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.