summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2026-02-19 16:16:46 +0100
committerGitHub <noreply@github.com>2026-02-19 16:16:46 +0100
commit388fecf3cfb7729dbd18162a19f84b08afea4afd (patch)
treea82f01805b3e3e298b5d5933907305ec5dc7de4d
parentc386550aa8dd07026eba25bf40323c8d2439b6e2 (diff)
parenta9070f1d5770241a46c4632528fef86edaba8392 (diff)
downloadvyos-1x-388fecf3cfb7729dbd18162a19f84b08afea4afd.tar.gz
vyos-1x-388fecf3cfb7729dbd18162a19f84b08afea4afd.zip
Merge pull request #4997 from natali-rs1985/T8261
vpp: T8261: Refactor resource settings into 'resource-allocation' section
-rw-r--r--data/templates/vpp/startup.conf.j285
-rw-r--r--interface-definitions/vpp.xml.in279
-rw-r--r--python/vyos/vpp/config_resource_checks/memory.py29
-rw-r--r--python/vyos/vpp/config_resource_checks/resource_defaults.py2
-rw-r--r--python/vyos/vpp/config_verify.py16
-rwxr-xr-xsmoketest/scripts/cli/test_vpp.py31
-rwxr-xr-xsrc/conf_mode/vpp.py13
-rw-r--r--src/migration-scripts/vpp/7-to-857
8 files changed, 259 insertions, 253 deletions
diff --git a/data/templates/vpp/startup.conf.j2 b/data/templates/vpp/startup.conf.j2
index d49896336..481261786 100644
--- a/data/templates/vpp/startup.conf.j2
+++ b/data/templates/vpp/startup.conf.j2
@@ -27,36 +27,34 @@ cpu {
}
{% endif %}
-{% if buffers is vyos_defined %}
+{% if resource_allocation.buffers is vyos_defined %}
buffers {
-{% if buffers.buffers_per_numa is vyos_defined %}
- buffers-per-numa {{ buffers.buffers_per_numa }}
+{% if resource_allocation.buffers.buffers_per_numa is vyos_defined %}
+ buffers-per-numa {{ resource_allocation.buffers.buffers_per_numa }}
{% endif %}
-{% if buffers.data_size is vyos_defined %}
- default data-size {{ buffers.data_size }}
+{% if resource_allocation.buffers.data_size is vyos_defined %}
+ default data-size {{ resource_allocation.buffers.data_size }}
{% endif %}
-{% if buffers.page_size is vyos_defined %}
- page-size {{ buffers.page_size }}
+{% if resource_allocation.buffers.page_size is vyos_defined %}
+ page-size {{ resource_allocation.buffers.page_size }}
{% endif %}
}
{% endif %}
-{% if ipv6 is vyos_defined %}
+{% if resource_allocation.ipv6 is vyos_defined %}
ip6 {
-{% if ipv6.hash_buckets is vyos_defined %}
- hash-buckets {{ ipv6.hash_buckets }}
+{% if resource_allocation.ipv6.hash_buckets is vyos_defined %}
+ hash-buckets {{ resource_allocation.ipv6.hash_buckets }}
{% endif %}
-{% if ipv6.heap_size is vyos_defined %}
- heap-size {{ ipv6.heap_size }}
+{% if resource_allocation.ipv6.heap_size is vyos_defined %}
+ heap-size {{ resource_allocation.ipv6.heap_size }}
{% endif %}
}
{% endif %}
-{% if l2learn is vyos_defined %}
+{% if resource_allocation.mac_limit is vyos_defined %}
l2learn {
-{% if l2learn.limit is vyos_defined %}
- limit {{ l2learn.limit }}
-{% endif %}
+ limit {{ resource_allocation.mac_limit }}
}
{% endif %}
@@ -69,11 +67,9 @@ logging {
}
{% endif %}
-{% if physmem is vyos_defined %}
+{% if resource_allocation.memory.physmem_max_size is vyos_defined %}
physmem {
-{% if physmem.max_size is vyos_defined %}
- max-size {{ physmem.max_size }}
-{% endif %}
+ max-size {{ resource_allocation.memory.physmem_max_size }}
}
{% endif %}
@@ -126,46 +122,37 @@ crypto-engines {
linux-cp {
lcp-sync
lcp-auto-subint
-{% if lcp.ignore_kernel_routes is not vyos_defined %}
+{% if resource_allocation.ignore_kernel_routes is not vyos_defined %}
route-no-paths
{% endif %}
}
-{% if lcp.netlink is vyos_defined %}
+{% set netlink_rx_buffers = 268435456 %}
linux-nl {
-{% if lcp.netlink.rx_buffer_size is vyos_defined %}
- nl-rx-buffer-size {{ lcp.netlink.rx_buffer_size }}
-{% endif %}
-{% if lcp.netlink.batch_size is vyos_defined %}
- nl-batch-size {{ lcp.netlink.batch_size }}
-{% endif %}
-{% if lcp.netlink.batch_delay_ms is vyos_defined %}
- nl-batch-delay-ms {{ lcp.netlink.batch_delay_ms }}
-{% endif %}
+ nl-rx-buffer-size {{ netlink_rx_buffers }}
}
-{% endif %}
-{% if statseg is vyos_defined %}
+{% if resource_allocation.memory.stats is vyos_defined %}
statseg {
-{% if statseg.size is vyos_defined %}
- size {{ statseg.size }}
+{% if resource_allocation.memory.stats.size is vyos_defined %}
+ size {{ resource_allocation.memory.stats.size }}
{% endif %}
-{% if statseg.page_size is vyos_defined %}
- page-size {{ statseg.page_size }}
+{% if resource_allocation.memory.stats.page_size is vyos_defined %}
+ page-size {{ resource_allocation.memory.stats.page_size }}
{% endif %}
}
{% endif %}
-{% if memory is vyos_defined %}
+{% if resource_allocation.memory is vyos_defined %}
memory {
-{% if memory.main_heap_size is vyos_defined %}
- main-heap-size {{ memory.main_heap_size }}
+{% if resource_allocation.memory.main_heap_size is vyos_defined %}
+ main-heap-size {{ resource_allocation.memory.main_heap_size }}
{% endif %}
-{% if memory.main_heap_page_size is vyos_defined %}
- main-heap-page-size {{ memory.main_heap_page_size }}
+{% if resource_allocation.memory.main_heap_page_size is vyos_defined %}
+ main-heap-page-size {{ resource_allocation.memory.main_heap_page_size }}
{% endif %}
-{% if buffers.page_size != '4K' %}
- default-hugepage-size {{ buffers.page_size }}
+{% if resource_allocation.buffers.page_size != '4K' %}
+ default-hugepage-size {{ resource_allocation.buffers.page_size }}
{% endif %}
}
{% endif %}
@@ -200,15 +187,7 @@ dpdk {
linux-xfrm-nl {
enable-route-mode-ipsec
interface ipsec
-{% if lcp.netlink.batch_delay_ms is vyos_defined %}
- nl-batch-delay-ms {{ lcp.netlink.batch_delay_ms }}
-{% endif %}
-{% if lcp.netlink.batch_size is vyos_defined %}
- nl-batch-size {{ lcp.netlink.batch_size }}
-{% endif %}
-{% if lcp.netlink.rx_buffer_size is vyos_defined %}
- nl-rx-buffer-size {{ lcp.netlink.rx_buffer_size }}
-{% endif %}
+ nl-rx-buffer-size {{ netlink_rx_buffers }}
}
{% endif %}
diff --git a/interface-definitions/vpp.xml.in b/interface-definitions/vpp.xml.in
index abe88b3db..86568c1e9 100644
--- a/interface-definitions/vpp.xml.in
+++ b/interface-definitions/vpp.xml.in
@@ -545,51 +545,148 @@
</properties>
<defaultValue>1</defaultValue>
</leafNode>
- </children>
- </node>
- <node name="buffers">
- <properties>
- <help>Buffer settings</help>
- </properties>
- <children>
- <leafNode name="buffers-per-numa">
+ <node name="buffers">
<properties>
- <help>Number of buffers per numa node</help>
- <valueHelp>
- <format>u32:16384-4294967295</format>
- <description>Number of buffers</description>
- </valueHelp>
- <valueHelp>
- <format>auto</format>
- <description>Auto calculate number of buffers per numa node</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 16384-4294967295"/>
- <regex>(auto)</regex>
- </constraint>
+ <help>Buffer settings</help>
</properties>
- <defaultValue>auto</defaultValue>
- </leafNode>
- <leafNode name="data-size">
+ <children>
+ <leafNode name="buffers-per-numa">
+ <properties>
+ <help>Number of buffers per numa node</help>
+ <completionHelp>
+ <list>auto</list>
+ </completionHelp>
+ <valueHelp>
+ <format>u32:16384-4294967295</format>
+ <description>Number of buffers</description>
+ </valueHelp>
+ <valueHelp>
+ <format>auto</format>
+ <description>Auto calculate number of buffers per numa node</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 16384-4294967295"/>
+ <regex>(auto)</regex>
+ </constraint>
+ </properties>
+ <defaultValue>auto</defaultValue>
+ </leafNode>
+ <leafNode name="data-size">
+ <properties>
+ <help>Size of buffer data area</help>
+ <valueHelp>
+ <format>u32</format>
+ <description>Size of buffer data area</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 0-4294967295"/>
+ </constraint>
+ </properties>
+ <defaultValue>2048</defaultValue>
+ </leafNode>
+ <leafNode name="page-size">
+ <properties>
+ <help>Set the page-size for buffer allocation</help>
+ #include <include/unformat_log2_page_size.xml.i>
+ </properties>
+ <defaultValue>2M</defaultValue>
+ </leafNode>
+ </children>
+ </node>
+ <node name="ipv6">
+ <properties>
+ <help>IPv6 settings</help>
+ </properties>
+ <children>
+ <leafNode name="heap-size">
+ <properties>
+ <help>IPv6 heap size</help>
+ #include <include/unformat_memory_size.xml.i>
+ </properties>
+ <defaultValue>32M</defaultValue>
+ </leafNode>
+ <leafNode name="hash-buckets">
+ <properties>
+ <help>IPv6 forwarding table hash buckets</help>
+ <valueHelp>
+ <format>u32:1-4294967295</format>
+ <description>IPv6 forwarding table hash buckets</description>
+ </valueHelp>
+ <constraint>
+ <validator name="numeric" argument="--range 1-4294967295"/>
+ </constraint>
+ </properties>
+ <defaultValue>65536</defaultValue>
+ </leafNode>
+ </children>
+ </node>
+ <leafNode name="mac-limit">
<properties>
- <help>Size of buffer data area</help>
+ <help>Number of MAC addresses in the L2 FIB</help>
<valueHelp>
- <format>u32:0-4294967295</format>
- <description>Size of buffer data area</description>
+ <format>u32:1-4294967295</format>
+ <description>Number of MAC addresses in the L2 FIB</description>
</valueHelp>
<constraint>
- <validator name="numeric" argument="--range 0-4294967295"/>
+ <validator name="numeric" argument="--range 1-4294967295"/>
</constraint>
</properties>
- <defaultValue>2048</defaultValue>
+ <defaultValue>4194304</defaultValue>
</leafNode>
- <leafNode name="page-size">
+ <leafNode name="ignore-kernel-routes">
<properties>
- <help>Set the page-size for buffer allocation</help>
- #include <include/unformat_log2_page_size.xml.i>
+ <help>Ignore kernel routes</help>
+ <valueless/>
</properties>
- <defaultValue>2M</defaultValue>
</leafNode>
+ <node name="memory">
+ <properties>
+ <help>Memory settings</help>
+ </properties>
+ <children>
+ <leafNode name="main-heap-size">
+ <properties>
+ <help>Main heap size</help>
+ #include <include/unformat_memory_size.xml.i>
+ </properties>
+ <defaultValue>3G</defaultValue>
+ </leafNode>
+ <leafNode name="main-heap-page-size">
+ <properties>
+ <help>Main heap page size</help>
+ #include <include/unformat_log2_page_size.xml.i>
+ </properties>
+ <defaultValue>2M</defaultValue>
+ </leafNode>
+ <leafNode name="physmem-max-size">
+ <properties>
+ <help>Memory size for protectable memory allocator (pmalloc) memory space</help>
+ #include <include/unformat_memory_size.xml.i>
+ </properties>
+ </leafNode>
+ <node name="stats">
+ <properties>
+ <help>Stats settings</help>
+ </properties>
+ <children>
+ <leafNode name="size">
+ <properties>
+ <help>Size of stats segment</help>
+ #include <include/unformat_memory_size.xml.i>
+ </properties>
+ <defaultValue>128M</defaultValue>
+ </leafNode>
+ <leafNode name="page-size">
+ <properties>
+ <help>Stats page size</help>
+ #include <include/unformat_log2_page_size.xml.i>
+ </properties>
+ <defaultValue>2M</defaultValue>
+ </leafNode>
+ </children>
+ </node>
+ </children>
+ </node>
</children>
</node>
<tagNode name="interface">
@@ -660,73 +757,12 @@
</leafNode>
</children>
</tagNode>
- <node name="ipv6">
- <properties>
- <help>IPv6 settings</help>
- </properties>
- <children>
- <leafNode name="heap-size">
- <properties>
- <help>IPv6 heap size</help>
- #include <include/unformat_memory_size.xml.i>
- </properties>
- <defaultValue>32M</defaultValue>
- </leafNode>
- <leafNode name="hash-buckets">
- <properties>
- <help>IPv6 forwarding table hash buckets</help>
- <valueHelp>
- <format>u32:1-4294967295</format>
- <description>IPv6 forwarding table hash buckets</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-4294967295"/>
- </constraint>
- </properties>
- <defaultValue>65536</defaultValue>
- </leafNode>
- </children>
- </node>
<leafNode name="ipsec-acceleration">
<properties>
<help>Enable IPsec acceleration</help>
<valueless/>
</properties>
</leafNode>
- <node name="l2learn">
- <properties>
- <help>Level 2 MAC address learning settings</help>
- </properties>
- <children>
- <leafNode name="limit">
- <properties>
- <help>Number of MAC addresses in the L2 FIB</help>
- <valueHelp>
- <format>u32:1-4294967295</format>
- <description>Number of concurent entries</description>
- </valueHelp>
- <constraint>
- <validator name="numeric" argument="--range 1-4294967295"/>
- </constraint>
- </properties>
- <defaultValue>4194304</defaultValue>
- </leafNode>
- </children>
- </node>
- <node name="lcp">
- <properties>
- <help>Linux control plane setting</help>
- </properties>
- <children>
- #include <include/vpp/netlink.xml.i>
- <leafNode name="ignore-kernel-routes">
- <properties>
- <help>Ignore kernel routes</help>
- <valueless/>
- </properties>
- </leafNode>
- </children>
- </node>
<node name="logging">
<properties>
<help>Logging settings</help>
@@ -781,61 +817,6 @@
</leafNode>
</children>
</node>
- <node name="memory">
- <properties>
- <help>Memory settings</help>
- </properties>
- <children>
- <leafNode name="main-heap-size">
- <properties>
- <help>Main heap size</help>
- #include <include/unformat_memory_size.xml.i>
- </properties>
- <defaultValue>3G</defaultValue>
- </leafNode>
- <leafNode name="main-heap-page-size">
- <properties>
- <help>Main heap page size</help>
- #include <include/unformat_log2_page_size.xml.i>
- </properties>
- <defaultValue>2M</defaultValue>
- </leafNode>
- </children>
- </node>
- <node name="physmem">
- <properties>
- <help>Physical memory settings</help>
- </properties>
- <children>
- <leafNode name="max-size">
- <properties>
- <help>Set memory size for protectable memory allocator (pmalloc) memory space</help>
- #include <include/unformat_memory_size.xml.i>
- </properties>
- </leafNode>
- </children>
- </node>
- <node name="statseg">
- <properties>
- <help>Stats settings</help>
- </properties>
- <children>
- <leafNode name="size">
- <properties>
- <help>Size of stats segment</help>
- #include <include/unformat_memory_size.xml.i>
- </properties>
- <defaultValue>128M</defaultValue>
- </leafNode>
- <leafNode name="page-size">
- <properties>
- <help>Stats page size</help>
- #include <include/unformat_log2_page_size.xml.i>
- </properties>
- <defaultValue>2M</defaultValue>
- </leafNode>
- </children>
- </node>
<leafNode name="poll-sleep-usec">
<properties>
<help>Add a fixed-sleep between main loop poll</help>
diff --git a/python/vyos/vpp/config_resource_checks/memory.py b/python/vyos/vpp/config_resource_checks/memory.py
index e28a04873..c8073f64b 100644
--- a/python/vyos/vpp/config_resource_checks/memory.py
+++ b/python/vyos/vpp/config_resource_checks/memory.py
@@ -91,30 +91,32 @@ def get_numa_count():
def buffer_page_size(settings: dict) -> int:
- page_size = settings.get('buffers', {}).get('page_size')
+ page_size = settings['resource_allocation']['buffers']['page_size']
return human_memory_to_bytes(page_size)
def buffer_size(settings: dict) -> int:
numa_count = get_numa_count()
- buffers_per_numa = int(settings.get('buffers').get('buffers_per_numa'))
- data_size = int(settings.get('buffers').get('data_size'))
+ buffers_per_numa = int(
+ settings['resource_allocation']['buffers']['buffers_per_numa']
+ )
+ data_size = int(settings['resource_allocation']['buffers']['data_size'])
buffers_memory = buffers_per_numa * data_size * numa_count
return buffers_memory
def main_heap_page_size(settings: dict) -> int:
- heap_page_size = settings.get('memory').get('main_heap_page_size')
+ heap_page_size = settings['resource_allocation']['memory']['main_heap_page_size']
return human_memory_to_bytes(heap_page_size)
def memory_main_heap(settings: dict) -> int:
- heap_size = settings.get('memory').get('main_heap_size')
+ heap_size = settings['resource_allocation']['memory']['main_heap_size']
return human_memory_to_bytes(heap_size)
def ipv6_heap_size(settings: dict) -> int:
- heap_size = settings.get('ipv6').get('heap_size')
+ heap_size = settings['resource_allocation']['ipv6']['heap_size']
return human_memory_to_bytes(heap_size)
@@ -123,12 +125,12 @@ def total_heap_size(heap_size: int, heap_page_size: int) -> int:
def statseg_size(settings: dict) -> int:
- statseg_memory = settings.get('statseg').get('size')
+ statseg_memory = settings['resource_allocation']['memory']['stats']['size']
return human_memory_to_bytes(statseg_memory)
def statseg_page_size(settings: dict) -> int:
- page_size = settings.get('statseg').get('page_size')
+ page_size = settings['resource_allocation']['memory']['stats']['page_size']
return human_memory_to_bytes(page_size)
@@ -141,16 +143,7 @@ def total_memory_required(settings: dict) -> dict:
mem_stats = {
'memory_buffers': (buffer_size(settings), buffer_page_size(settings)),
- 'netlink_buffer_size': (
- int(
- settings.get('lcp', {})
- .get('netlink', {})
- .get(
- 'rx_buffer_size', default_resource_map.get('netlink_rx_buffer_size')
- )
- ),
- 0,
- ),
+ 'netlink_buffer_size': (default_resource_map.get('netlink_rx_buffer_size'), 0),
'heap_size': (
total_heap_size(
heap_size=memory_main_heap(settings),
diff --git a/python/vyos/vpp/config_resource_checks/resource_defaults.py b/python/vyos/vpp/config_resource_checks/resource_defaults.py
index 71a98703e..aa1c9a8a0 100644
--- a/python/vyos/vpp/config_resource_checks/resource_defaults.py
+++ b/python/vyos/vpp/config_resource_checks/resource_defaults.py
@@ -19,7 +19,7 @@
default_resource_map = {
# Default size of buffers transferred via netlink
- 'netlink_rx_buffer_size': 212992,
+ 'netlink_rx_buffer_size': 268435456,
# Minimal amount of memory required to start VPP
'min_memory': '8G',
# Minimal number of physical CPU cores required to start VPP
diff --git a/python/vyos/vpp/config_verify.py b/python/vyos/vpp/config_verify.py
index f8bfb214a..1e56457da 100644
--- a/python/vyos/vpp/config_verify.py
+++ b/python/vyos/vpp/config_verify.py
@@ -335,16 +335,16 @@ def verify_vpp_cpu_cores(cpu_cores: int):
def verify_vpp_statseg_size(settings: dict):
statseg_size = mem_checks.statseg_size(settings)
- if 'size' in settings.get('statseg'):
+ if 'size' in settings['resource_allocation']['memory']['stats']:
if statseg_size < 128 << 20:
- raise ConfigError('The statseg size must be greater than or equal to 128M')
+ raise ConfigError('The "stats size" must be greater than or equal to 128M')
- if 'page_size' in settings['statseg']:
+ if 'page_size' in settings['resource_allocation']['memory']['stats']:
statseg_page_size = mem_checks.statseg_page_size(settings)
if statseg_page_size > statseg_size:
readable_statseg_page = bytes_to_human_memory(statseg_page_size, 'K')
raise ConfigError(
- f'The statseg size must be greater than or equal to page-size ({readable_statseg_page})'
+ f'The "stats size" must be greater than or equal to page-size ({readable_statseg_page})'
)
@@ -370,9 +370,9 @@ def verify_routes_count(settings: dict):
bytes = 16 # each counter consumes 16 bytes
statseg_scale = 2
cpu_cores = int(settings['resource_allocation']['cpu_cores'])
- statseg_size = settings['statseg']['size']
+ statseg_size = settings['resource_allocation']['memory']['stats']['size']
statseg_size_in_bytes = human_memory_to_bytes(statseg_size)
- main_heap = settings['memory']['main_heap_size']
+ main_heap = settings['resource_allocation']['memory']['main_heap_size']
main_heap_in_gb = human_memory_to_bytes(main_heap) >> 30
formula = cpu_cores * counters * bytes * statseg_scale
@@ -389,7 +389,9 @@ def verify_routes_count(settings: dict):
def verify_vpp_buffers(settings: dict):
- buffers_configured = int(settings['buffers']['buffers_per_numa'])
+ buffers_configured = int(
+ settings['resource_allocation']['buffers']['buffers_per_numa']
+ )
buffers_required = mem_checks.buffers_required(settings)
diff --git a/smoketest/scripts/cli/test_vpp.py b/smoketest/scripts/cli/test_vpp.py
index 1e079b2ca..a7bb19882 100755
--- a/smoketest/scripts/cli/test_vpp.py
+++ b/smoketest/scripts/cli/test_vpp.py
@@ -39,6 +39,7 @@ from vyos.vpp.config_resource_checks.resource_defaults import default_resource_m
PROCESS_NAME = 'vpp_main'
VPP_CONF = '/run/vpp/vpp.conf'
base_path = ['vpp']
+resource_path = base_path + ['settings', 'resource-allocation']
interface = 'eth1'
@@ -158,7 +159,7 @@ class TestVPP(VyOSUnitTestSHIM.TestCase):
required_str = 'lcp route-no-paths on'
self.assertIn(required_str, out)
- self.cli_set(base_path + ['settings', 'lcp', 'ignore-kernel-routes'])
+ self.cli_set(resource_path + ['ignore-kernel-routes'])
self.cli_commit()
# check disabled 'route no path'
@@ -1146,9 +1147,7 @@ class TestVPP(VyOSUnitTestSHIM.TestCase):
with self.assertRaises(ConfigSessionError):
self.cli_commit()
- self.cli_set(
- base_path + ['settings', 'resource-allocation', 'cpu-cores', cpu_cores]
- )
+ self.cli_set(resource_path + ['cpu-cores', cpu_cores])
# # DPDK driver expect only dpdk-options and not xdp-options to be set
# # expect raise ConfigError
@@ -1174,13 +1173,11 @@ class TestVPP(VyOSUnitTestSHIM.TestCase):
# verify 'cpu-cores' are set not correctly
# expect raise ConfigError
- self.cli_set(base_path + ['settings', 'resource-allocation', 'cpu-cores', '99'])
+ self.cli_set(resource_path + ['cpu-cores', '99'])
with self.assertRaises(ConfigSessionError):
self.cli_commit()
- self.cli_set(
- base_path + ['settings', 'resource-allocation', 'cpu-cores', cpu_cores]
- )
+ self.cli_set(resource_path + ['cpu-cores', cpu_cores])
self.cli_commit()
config_entries = (
@@ -1198,7 +1195,7 @@ class TestVPP(VyOSUnitTestSHIM.TestCase):
def test_12_1_buffer_page_size(self):
sizes = ['4K', '2M']
for size in sizes:
- self.cli_set(base_path + ['settings', 'buffers', 'page-size', size])
+ self.cli_set(resource_path + ['buffers', 'page-size', size])
self.cli_commit()
conf = get_vpp_config()
@@ -1207,7 +1204,7 @@ class TestVPP(VyOSUnitTestSHIM.TestCase):
def test_12_2_statseg_page_size(self):
sizes = ['4K', '2M']
for size in sizes:
- self.cli_set(base_path + ['settings', 'statseg', 'page-size', size])
+ self.cli_set(resource_path + ['memory', 'stats', 'page-size', size])
self.cli_commit()
conf = get_vpp_config()
@@ -1216,32 +1213,22 @@ class TestVPP(VyOSUnitTestSHIM.TestCase):
def test_12_3_mem_page_size(self):
sizes = ['4K', '2M']
for size in sizes:
- self.cli_set(
- base_path + ['settings', 'memory', 'main-heap-page-size', size]
- )
+ self.cli_set(resource_path + ['memory', 'main-heap-page-size', size])
self.cli_commit()
conf = get_vpp_config()
self.assertEqual(conf['memory']['main-heap-page-size'], size)
def test_13_vpp_ipsec_xfrm_nl(self):
- base_lcp = base_path + ['settings', 'lcp']
- batch_delay = '250'
- batch_size = '150'
- rx_buffer_zise = '1024'
+ rx_buffer_zise = default_resource_map.get('netlink_rx_buffer_size')
self.cli_set(base_path + ['settings', 'ipsec-acceleration'])
- self.cli_set(base_lcp + ['netlink', 'batch-delay-ms', batch_delay])
- self.cli_set(base_lcp + ['netlink', 'batch-size', batch_size])
- self.cli_set(base_lcp + ['netlink', 'rx-buffer-size', rx_buffer_zise])
self.cli_commit()
config_entries = (
'linux-xfrm-nl',
'enable-route-mode-ipsec',
'interface ipsec',
- f'nl-batch-delay-ms {batch_delay}',
- f'nl-batch-size {batch_size}',
f'nl-rx-buffer-size {rx_buffer_zise}',
)
diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py
index d436fbe6b..b02c809ec 100755
--- a/src/conf_mode/vpp.py
+++ b/src/conf_mode/vpp.py
@@ -170,9 +170,14 @@ def _configure_vpp_cpu_settings(config: dict):
def _normalize_buffers(config: dict):
"""Replace 'auto' buffers_per_numa with calculated value"""
- if config['settings']['buffers']['buffers_per_numa'] == 'auto':
+ if (
+ config['settings']['resource_allocation']['buffers']['buffers_per_numa']
+ == 'auto'
+ ):
buffers = memory.buffers_required(config['settings'])
- config['settings']['buffers']['buffers_per_numa'] = str(buffers)
+ config['settings']['resource_allocation']['buffers']['buffers_per_numa'] = str(
+ buffers
+ )
def _get_max_xdp_rx_queues(config: dict):
@@ -770,7 +775,9 @@ def apply(config):
vpp_control = VPPControl()
# preconfigure LCP plugin
- if 'ignore_kernel_routes' in config.get('settings', {}).get('lcp', {}):
+ if 'ignore_kernel_routes' in config['settings'].get(
+ 'resource_allocation', {}
+ ):
vpp_control.cli_cmd('lcp param route-no-paths off')
else:
vpp_control.cli_cmd('lcp param route-no-paths on')
diff --git a/src/migration-scripts/vpp/7-to-8 b/src/migration-scripts/vpp/7-to-8
index 54a1a7c43..22d5e6d31 100644
--- a/src/migration-scripts/vpp/7-to-8
+++ b/src/migration-scripts/vpp/7-to-8
@@ -31,6 +31,8 @@
# - `vpp settings interface <ethN> num-*`
# and delete `vpp settings interface <ethN> dpdk-options promisc` (T8274)
#
+# Migrate all resource settings into 'resource-allocation' section (T8261)
+#
from vyos.configtree import ConfigTree
@@ -188,6 +190,60 @@ def _migrate_vpp_dpdk_options(config: ConfigTree) -> None:
config.delete(promisc_path)
+def _migrate_vpp_resources(config: ConfigTree) -> None:
+ base = ['vpp', 'settings']
+ new_base = ['vpp', 'settings', 'resource-allocation']
+
+ if not config.exists(new_base):
+ config.set(new_base)
+
+ if config.exists(base + ['buffers']):
+ # copy "settings buffers" to "settings resource-allocation buffers"
+ config.copy(base + ['buffers'], new_base + ['buffers'])
+ config.delete(base + ['buffers'])
+
+ if config.exists(base + ['memory']):
+ # copy "settings memory" to "settings resource-allocation memory"
+ config.copy(base + ['memory'], new_base + ['memory'])
+ config.delete(base + ['memory'])
+
+ if config.exists(base + ['statseg']):
+ # copy "settings statseg" to "settings resource-allocation memory stats"
+ if not config.exists(new_base + ['memory']):
+ config.set(new_base + ['memory'])
+ config.copy(base + ['statseg'], new_base + ['memory', 'stats'])
+ config.delete(base + ['statseg'])
+
+ if config.exists(base + ['ipv6']):
+ # copy "settings ipv6" to "settings resource-allocation ipv6"
+ config.copy(base + ['ipv6'], new_base + ['ipv6'])
+ config.delete(base + ['ipv6'])
+
+ if config.exists(base + ['lcp']):
+ # move "settings lcp ignore-kernel-routes" to "settings resource-allocation ignore-kernel-routes"
+ # and remove "settings lcp netlink" node
+ if config.exists(base + ['lcp', 'ignore-kernel-routes']):
+ config.set(new_base + ['ignore-kernel-routes'])
+ config.delete(base + ['lcp'])
+
+ if config.exists(base + ['l2learn']):
+ # move "settings l2learn limit" to "settings resource-allocation mac-limit"
+ if config.exists(base + ['l2learn', 'limit']):
+ tmp = config.return_value(base + ['l2learn', 'limit'])
+ config.set(new_base + ['mac-limit'], value=tmp)
+ config.delete(base + ['l2learn'])
+
+ if config.exists(base + ['physmem']):
+ # move "settings physmem max-size" to "settings resource-allocation memory physmem-max-size"
+ if config.exists(base + ['physmem', 'max-size']):
+ tmp = config.return_value(base + ['physmem', 'max-size'])
+ config.set(new_base + ['memory', 'physmem-max-size'], value=tmp)
+ config.delete(base + ['physmem'])
+
+ if len(config.list_nodes(new_base)) == 0:
+ config.delete(new_base)
+
+
def migrate(config: ConfigTree) -> None:
if not config.exists(['vpp']):
# Nothing to do
@@ -200,3 +256,4 @@ def migrate(config: ConfigTree) -> None:
_migrate_vpp_cpu(config)
_migrate_vpp_interface_rx_mode(config)
_migrate_vpp_dpdk_options(config)
+ _migrate_vpp_resources(config)