Page MenuHomeVyOS Platform

VPP: nat44 and cgnat should not use the same interfaces
Closed, ResolvedPublicBUG

Description

VPP nat44 and cgnat should be mutually exclusive (or do not use the same interfaces)
To reproduce:

set interfaces ethernet eth1 address '100.64.0.1/24'
set vpp settings interface eth1
set vpp settings interface eth3

set vpp nat cgnat interface inside 'eth1'
set vpp nat cgnat interface outside 'eth3'
set vpp nat cgnat rule 100 inside-prefix '100.64.0.0/24'
set vpp nat cgnat rule 100 outside-prefix '192.0.2.0/30'
commit

set vpp nat nat44 address-pool translation address 192.0.2.0-1.8.2.1
set vpp nat nat44 interface inside eth1
set vpp nat nat44 interface outside eth3
commit

After the second commit:

vyos@r14# commit
[ vpp nat nat44 ]
Traceback (most recent call last):
  File "/usr/libexec/vyos/services/vyos-configd", line 157, in run_script
    script.apply(c)
  File "/usr/libexec/vyos/conf_mode/vpp_nat_nat44.py", line 456, in apply
    n.add_nat44_address_range(address, twice_nat=False)
  File "/usr/lib/python3/dist-packages/vyos/vpp/nat/nat44.py", line 98, in add_nat44_address_range
    self.vpp.api.nat44_add_del_address_range(
  File "/usr/lib/python3/dist-packages/vpp_papi/vpp_papi.py", line 130, in __call__
    return self._func(**kwargs)
           ^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/vpp_papi/vpp_papi.py", line 565, in f
    return self._call_vpp(i, msg, multipart, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/vpp_papi/vpp_papi.py", line 854, in _call_vpp
    raise VPPIOError(2, "VPP API client: read failed")
vpp_papi.vpp_papi.VPPIOError: [Errno 2] VPP API client: read failed

[[vpp nat nat44]] failed
Commit failed
[edit]
vyos@r14#

Logs:

Mar 09 15:00:08 r14 vyos-configd[800]: Received message: {"type": "node", "last": true, "data": "/usr/libexec/vyos/conf_mode/vpp_nat_nat44.py"}
Mar 09 15:00:08 r14 netplugd[2681]: eth3: state INNING pid 3784 exited status 0
Mar 09 15:00:13 r14 vyos-configd[800]: Traceback (most recent call last):
Mar 09 15:00:13 r14 vyos-configd[800]:   File "/usr/libexec/vyos/services/vyos-configd", line 157, in run_script
Mar 09 15:00:13 r14 vyos-configd[800]:     script.apply(c)
Mar 09 15:00:13 r14 vyos-configd[800]:   File "/usr/libexec/vyos/conf_mode/vpp_nat_nat44.py", line 456, in apply
Mar 09 15:00:13 r14 vyos-configd[800]:     n.add_nat44_address_range(address, twice_nat=False)
Mar 09 15:00:13 r14 vyos-configd[800]:   File "/usr/lib/python3/dist-packages/vyos/vpp/nat/nat44.py", line 98, in add_nat44_address_range
Mar 09 15:00:13 r14 vyos-configd[800]:     self.vpp.api.nat44_add_del_address_range(
Mar 09 15:00:13 r14 vyos-configd[800]:   File "/usr/lib/python3/dist-packages/vpp_papi/vpp_papi.py", line 130, in __call__
Mar 09 15:00:13 r14 vyos-configd[800]:     return self._func(**kwargs)
Mar 09 15:00:13 r14 vyos-configd[800]:            ^^^^^^^^^^^^^^^^^^^^
Mar 09 15:00:13 r14 vyos-configd[800]:   File "/usr/lib/python3/dist-packages/vpp_papi/vpp_papi.py", line 565, in f
Mar 09 15:00:13 r14 vyos-configd[800]:     return self._call_vpp(i, msg, multipart, **kwargs)
Mar 09 15:00:13 r14 vyos-configd[800]:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mar 09 15:00:13 r14 vyos-configd[800]:   File "/usr/lib/python3/dist-packages/vpp_papi/vpp_papi.py", line 854, in _call_vpp
Mar 09 15:00:13 r14 vyos-configd[800]:     raise VPPIOError(2, "VPP API client: read failed")
Mar 09 15:00:13 r14 vyos-configd[800]: vpp_papi.vpp_papi.VPPIOError: [Errno 2] VPP API client: read failed
Mar 09 15:00:18 r14 vyos-configd[800]: [vpp_nat_nat44] Traceback (most recent call last):
Mar 09 15:00:18 r14 vyos-configd[800]:   File "/usr/libexec/vyos/services/vyos-configd", line 157, in run_script
Mar 09 15:00:18 r14 vyos-configd[800]:     script.apply(c)
Mar 09 15:00:18 r14 vyos-configd[800]:   File "/usr/libexec/vyos/conf_mode/vpp_nat_nat44.py", line 456, in apply
Mar 09 15:00:18 r14 vyos-configd[800]:     n.add_nat44_address_range(address, twice_nat=False)
Mar 09 15:00:18 r14 vyos-configd[800]:   File "/usr/lib/python3/dist-packages/vyos/vpp/nat/nat44.py", line 98, in add_nat44_address_range
Mar 09 15:00:18 r14 vyos-configd[800]:     self.vpp.api.nat44_add_del_address_range(
Mar 09 15:00:18 r14 vyos-configd[800]:   File "/usr/lib/python3/dist-packages/vpp_papi/vpp_papi.py", line 130, in __call__
Mar 09 15:00:18 r14 vyos-configd[800]:     return self._func(**kwargs)
Mar 09 15:00:18 r14 vyos-configd[800]:            ^^^^^^^^^^^^^^^^^^^^
Mar 09 15:00:18 r14 vyos-configd[800]:   File "/usr/lib/python3/dist-packages/vpp_papi/vpp_papi.py", line 565, in f
Mar 09 15:00:18 r14 vyos-configd[800]:     return self._call_vpp(i, msg, multipart, **kwargs)
Mar 09 15:00:18 r14 vyos-configd[800]:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mar 09 15:00:18 r14 vyos-configd[800]:   File "/usr/lib/python3/dist-packages/vpp_papi/vpp_papi.py", line 854, in _call_vpp
Mar 09 15:00:18 r14 vyos-configd[800]:     raise VPPIOError(2, "VPP API client: read failed")
Mar 09 15:00:18 r14 vyos-configd[800]: vpp_papi.vpp_papi.VPPIOError: [Errno 2] VPP API client: read failed
Mar 09 15:00:18 r14 vyos-configd[800]: scripts_called: ['vpp_nat_nat44']
Mar 09 15:00:18 r14 vyos-configd[800]: Sending reply: ERROR_COMMIT_APPLY with output

Details

Version
VyOS 2026.03.09-0026-rolling
Is it a breaking change?
Perfectly compatible
Issue type
Bug (incorrect behavior)

Event Timeline

natali-rs1985 triaged this task as High priority.
natali-rs1985 changed Is it a breaking change? from Unspecified (possibly destroys the router) to Perfectly compatible.
natali-rs1985 renamed this task from VPP nat44 and cgnat should be mutually exclusive to VPP nat44 and cgnat should not use the same interfaces.Mar 12 2026, 11:27 AM
Viacheslav moved this task from Need Triage to Completed on the VyOS Rolling board.
dmbaturin renamed this task from VPP nat44 and cgnat should not use the same interfaces to VPP: nat44 and cgnat should not use the same interfaces.Mar 18 2026, 3:22 PM