summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNataliia S. <81954790+natali-rs1985@users.noreply.github.com>2025-02-04 11:33:32 +0200
committerGitHub <noreply@github.com>2025-02-04 11:33:32 +0200
commit9be3a63f700acef43b7a84bd83b9bea0cdd0c481 (patch)
tree1950a83f13711bad6e308c5e0bf0145980433072
parenta445ecb65007ce478527f66b07138ea393de1098 (diff)
parenta649b1adaca050e0ce2c882689239ce286903a9c (diff)
downloadvyos-1x-9be3a63f700acef43b7a84bd83b9bea0cdd0c481.tar.gz
vyos-1x-9be3a63f700acef43b7a84bd83b9bea0cdd0c481.zip
Merge branch 'current' into T7075
-rw-r--r--.github/CODEOWNERS (renamed from CODEOWNERS)0
-rw-r--r--interface-definitions/vpp.xml.in7
-rw-r--r--smoketest/config-tests/vpp48
-rw-r--r--smoketest/configs/vpp121
-rwxr-xr-xsmoketest/scripts/cli/test_vpp.py27
-rwxr-xr-xsrc/conf_mode/vpp.py17
6 files changed, 216 insertions, 4 deletions
diff --git a/CODEOWNERS b/.github/CODEOWNERS
index a744441f6..a744441f6 100644
--- a/CODEOWNERS
+++ b/.github/CODEOWNERS
diff --git a/interface-definitions/vpp.xml.in b/interface-definitions/vpp.xml.in
index 4c25c10f7..77a461242 100644
--- a/interface-definitions/vpp.xml.in
+++ b/interface-definitions/vpp.xml.in
@@ -450,8 +450,11 @@
<format>ethN</format>
<description>Interface name</description>
</valueHelp>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_interfaces --type ethernet</script>
+ </completionHelp>
<constraint>
- <regex>((eth|lan)[0-9]+|(eno|ens|enp|enx).+)</regex>
+ <validator name="ethernet-interface"/>
</constraint>
<constraintErrorMessage>Invalid interface name</constraintErrorMessage>
</properties>
@@ -847,7 +850,7 @@
<tagNode name="kernel-interfaces" owner="${vyos_conf_scripts_dir}/vpp_kernel-interfaces.py">
<properties>
<help>VPP kernel interface settings</help>
- <priority>305</priority>
+ <priority>308</priority>
<valueHelp>
<format>vpptapN</format>
<description>Kernel interface name</description>
diff --git a/smoketest/config-tests/vpp b/smoketest/config-tests/vpp
new file mode 100644
index 000000000..eb6682817
--- /dev/null
+++ b/smoketest/config-tests/vpp
@@ -0,0 +1,48 @@
+set interfaces ethernet eth0 description 'WAN'
+set interfaces ethernet eth0 offload gro
+set interfaces ethernet eth0 offload gso
+set interfaces ethernet eth0 offload sg
+set interfaces ethernet eth0 offload tso
+set interfaces ethernet eth1 address '192.0.2.1/30'
+set interfaces ethernet eth1 address '192.0.2.21/30'
+set interfaces ethernet eth1 description 'WAN'
+set interfaces ethernet eth2
+set interfaces ethernet eth3
+set interfaces ethernet eth4 description 'Bonding'
+set interfaces loopback lo
+set system config-management commit-revisions '100'
+set system console device ttyS0 speed '115200'
+set system host-name 'r16'
+set system login user vyos authentication encrypted-password '$6$rounds=656000$FZBlGpWsmSrV2Rvq$YPNAPtk4k6u99FAMxR6cw4DUPCgOomwCgRZRSO5rAoJK8RlMSCkVAFVF3ozL/3mZMfxcuCnwvd5HX6f9V5KzO.'
+set system name-server '203.0.113.1'
+set system option time-format '24-hour'
+set system syslog global facility all level 'info'
+set system syslog global facility local7 level 'debug'
+set vpp interfaces bonding bond0 hash-policy 'layer2+3'
+set vpp interfaces bonding bond0 member interface 'eth4'
+set vpp interfaces bonding bond0 mode '802.3ad'
+set vpp interfaces gre gre10 description 'Layer-3'
+set vpp interfaces gre gre10 mode 'point-to-point'
+set vpp interfaces gre gre10 remote '192.0.2.2'
+set vpp interfaces gre gre10 source-address '192.0.2.1'
+set vpp interfaces gre gre10 tunnel-type 'l3'
+set vpp interfaces gre gre11 description 'L2-bridge-to-eth2'
+set vpp interfaces gre gre11 remote '192.0.2.123'
+set vpp interfaces gre gre11 source-address '192.0.2.1'
+set vpp interfaces gre gre11 tunnel-type 'teb'
+set vpp interfaces gre gre12 description 'Multipoint'
+set vpp interfaces gre gre12 mode 'point-to-multipoint'
+set vpp interfaces gre gre12 remote '0.0.0.0'
+set vpp interfaces gre gre12 source-address '192.0.2.21'
+set vpp interfaces gre gre12 tunnel-type 'l3'
+set vpp interfaces ipip ipip20 remote '192.0.2.2'
+set vpp interfaces ipip ipip20 source-address '192.0.2.1'
+set vpp interfaces loopback lo12 description 'Loop12'
+set vpp interfaces vxlan vxlan10 remote '192.0.2.2'
+set vpp interfaces vxlan vxlan10 source-address '192.0.2.1'
+set vpp interfaces vxlan vxlan10 vni '10'
+set vpp settings interface eth1 driver 'dpdk'
+set vpp settings interface eth2 driver 'dpdk'
+set vpp settings interface eth3 driver 'dpdk'
+set vpp settings interface eth4 driver 'dpdk'
+set vpp settings unix poll-sleep-usec '12'
diff --git a/smoketest/configs/vpp b/smoketest/configs/vpp
new file mode 100644
index 000000000..e2223bc02
--- /dev/null
+++ b/smoketest/configs/vpp
@@ -0,0 +1,121 @@
+interfaces {
+ ethernet eth0 {
+ description "WAN"
+ offload {
+ gro
+ gso
+ sg
+ tso
+ }
+ }
+ ethernet eth1 {
+ address "192.0.2.1/30"
+ address "192.0.2.21/30"
+ description "WAN"
+ }
+ ethernet eth2 {
+ }
+ ethernet eth3 {
+ }
+ ethernet eth4 {
+ description "Bonding"
+ }
+ loopback lo {
+ }
+}
+system {
+ config-management {
+ commit-revisions "100"
+ }
+ console {
+ device ttyS0 {
+ speed "115200"
+ }
+ }
+ host-name "r16"
+ login {
+ user vyos {
+ authentication {
+ encrypted-password "$6$rounds=656000$FZBlGpWsmSrV2Rvq$YPNAPtk4k6u99FAMxR6cw4DUPCgOomwCgRZRSO5rAoJK8RlMSCkVAFVF3ozL/3mZMfxcuCnwvd5HX6f9V5KzO."
+ }
+ }
+ }
+ name-server "203.0.113.1"
+ option {
+ time-format "24-hour"
+ }
+ syslog {
+ global {
+ facility all {
+ level "info"
+ }
+ facility local7 {
+ level "debug"
+ }
+ }
+ }
+}
+vpp {
+ interfaces {
+ bonding bond0 {
+ hash-policy "layer2+3"
+ member {
+ interface "eth4"
+ }
+ mode "802.3ad"
+ }
+ gre gre10 {
+ description "Layer-3"
+ mode "point-to-point"
+ remote "192.0.2.2"
+ source-address "192.0.2.1"
+ tunnel-type "l3"
+ }
+ gre gre11 {
+ description "L2-bridge-to-eth2"
+ remote "192.0.2.123"
+ source-address "192.0.2.1"
+ tunnel-type "teb"
+ }
+ gre gre12 {
+ description "Multipoint"
+ mode "point-to-multipoint"
+ remote "0.0.0.0"
+ source-address "192.0.2.21"
+ tunnel-type "l3"
+ }
+ ipip ipip20 {
+ remote "192.0.2.2"
+ source-address "192.0.2.1"
+ }
+ loopback lo12 {
+ description "Loop12"
+ }
+ vxlan vxlan10 {
+ remote "192.0.2.2"
+ source-address "192.0.2.1"
+ vni "10"
+ }
+ }
+ settings {
+ interface eth1 {
+ driver "dpdk"
+ }
+ interface eth2 {
+ driver "dpdk"
+ }
+ interface eth3 {
+ driver "dpdk"
+ }
+ interface eth4 {
+ driver "dpdk"
+ }
+ unix {
+ poll-sleep-usec "12"
+ }
+ }
+}
+
+// Warning: Do not remove the following line.
+// vyos-config-version: "bgp@5:broadcast-relay@1:cluster@2:config-management@1:conntrack@5:conntrack-sync@2:container@2:dhcp-relay@2:dhcp-server@11:dhcpv6-server@6:dns-dynamic@4:dns-forwarding@4:firewall@18:flow-accounting@2:https@7:ids@1:interfaces@33:ipoe-server@4:ipsec@13:isis@3:l2tp@9:lldp@2:mdns@1:monitoring@2:nat@8:nat66@3:nhrp@1:ntp@3:openconnect@3:openvpn@4:ospf@2:pim@1:policy@8:pppoe-server@11:pptp@5:qos@3:quagga@12:reverse-proxy@2:rip@1:rpki@2:salt@1:snmp@3:ssh@2:sstp@6:system@28:vpp@1:vrf@3:vrrp@4:vyos-accel-ppp@2:wanloadbalance@3:webproxy@2"
+// Release version: 1.5-rolling-202502030007
diff --git a/smoketest/scripts/cli/test_vpp.py b/smoketest/scripts/cli/test_vpp.py
index ca7689c5e..8f812d520 100755
--- a/smoketest/scripts/cli/test_vpp.py
+++ b/smoketest/scripts/cli/test_vpp.py
@@ -522,6 +522,7 @@ class TestVPP(VyOSUnitTestSHIM.TestCase):
self.cli_set(base_path + ['interfaces', 'loopback', interface_loopback])
self.cli_commit()
+ @unittest.skip("Skipping temporary bonding, sometimes get recursion T7117")
def test_06_vpp_bonding(self):
interface_bond = 'bond23'
interface_kernel = 'vpptun23'
@@ -977,6 +978,32 @@ class TestVPP(VyOSUnitTestSHIM.TestCase):
for option, value in dpdk_options.items():
self.assertIn(f'{option} {value}', config)
+ def test_11_vpp_cpu_settings(self):
+ main_core = '0'
+ workers = '2'
+
+ self.cli_set(base_path + ['settings', 'cpu', 'workers', workers])
+
+ # "cpu workers" reqiures main-core to be set
+ # expect raise ConfigError
+ with self.assertRaises(ConfigSessionError):
+ self.cli_commit()
+
+ self.cli_set(base_path + ['settings', 'cpu', 'main-core', main_core])
+
+ self.cli_commit()
+
+ config_entries = (
+ f'main-core {main_core}',
+ f'workers {workers}',
+ 'dev 0000:00:00.0',
+ )
+
+ # Check configured options
+ config = read_file(VPP_CONF)
+ for config_entry in config_entries:
+ self.assertIn(config_entry, config)
+
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py
index db135c53e..0b2d4cbe8 100755
--- a/src/conf_mode/vpp.py
+++ b/src/conf_mode/vpp.py
@@ -397,10 +397,22 @@ def verify(config):
if 'cpu' in config['settings']:
if (
'corelist_workers' in config['settings']['cpu']
- and 'main_core' not in config['settings']['cpu']
- ):
+ or 'workers' in config['settings']['cpu']
+ ) and 'main_core' not in config['settings']['cpu']:
raise ConfigError('"cpu main-core" is required but not set!')
+ cpus = int(get_core_count())
+ if 'workers' in config['settings']['cpu']:
+ # number of worker threads must be not more than
+ # available CPUs in the system - 2 (1 for main thread and at least 1 for system processes)
+ workers = int(config['settings']['cpu']['workers'])
+ available_workers = cpus - 2
+ if workers > available_workers:
+ raise ConfigError(
+ f'The system does not have enough CPUs for {workers} VPP workers '
+ f'(reduce to {available_workers} or less)'
+ )
+
verify_memory(config['settings'])
# Check if deleted interfaces are not xconnect memebrs
@@ -444,6 +456,7 @@ def generate(config):
def apply(config):
+
# Open persistent config
# It is required for operations with interfaces
persist_config = JSONStorage('vpp_conf')