summaryrefslogtreecommitdiff
path: root/src/conf_mode
diff options
context:
space:
mode:
authorViacheslav Hletenko <v.gletenko@vyos.io>2025-02-06 04:11:10 +0200
committerGitHub <noreply@github.com>2025-02-06 04:11:10 +0200
commitaa244309c5ff0c436cd24476367d8bc5b61bbccf (patch)
treeb8ac61261db949699c748645a8569e4b6c8d7187 /src/conf_mode
parentc8d325d503bf7f8fc112c51031c99cf1e8fc3e8f (diff)
parentfda4a216cb64384f270f25f26afef78e25ef562b (diff)
downloadvyos-1x-aa244309c5ff0c436cd24476367d8bc5b61bbccf.tar.gz
vyos-1x-aa244309c5ff0c436cd24476367d8bc5b61bbccf.zip
Merge pull request #8 from natali-rs1985/T7069
T7069: VPP check for CPU main core
Diffstat (limited to 'src/conf_mode')
-rwxr-xr-xsrc/conf_mode/vpp.py46
1 files changed, 25 insertions, 21 deletions
diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py
index 0b2d4cbe8..421556d07 100755
--- a/src/conf_mode/vpp.py
+++ b/src/conf_mode/vpp.py
@@ -27,7 +27,7 @@ from vyos.base import Warning
from vyos.config import Config, config_dict_merge
from vyos.configdep import set_dependents, call_dependents
from vyos.configdict import node_changed, leaf_node_changed
-from vyos.utils.cpu import get_core_count
+from vyos.utils.cpu import get_core_count, get_available_cpus
from vyos.ifconfig import Section
from vyos.template import render
from vyos.utils.boot import boot_configuration_complete
@@ -303,25 +303,6 @@ def verify(config):
if 'settings' not in config:
raise ConfigError('"settings interface" is required but not set!')
- # CPU main-core must be not included to corelist-workers
- if config.get('settings').get('cpu', {}).get('main_core') and config.get(
- 'settings'
- ).get('cpu', {}).get('corelist_workers'):
- corelist_workers = config['settings']['cpu']['corelist_workers']
- main_core = int(config['settings']['cpu']['main_core'])
-
- all_core_numbers = []
- for worker_range in corelist_workers:
- core_numbers = worker_range.split('-')
- all_core_numbers.extend(
- range(int(core_numbers[0]), int(core_numbers[-1]) + 1)
- )
-
- if main_core in all_core_numbers:
- raise ConfigError(
- f'"cpu main-core {main_core}" must not be included in the corelist-workers!'
- )
-
if 'interface' not in config['settings']:
raise ConfigError('"settings interface" is required but not set!')
@@ -413,6 +394,30 @@ def verify(config):
f'(reduce to {available_workers} or less)'
)
+ cpus_available = list(map(lambda el: el['cpu'], get_available_cpus()))
+
+ if 'main_core' in config['settings']['cpu']:
+ main_core = int(config['settings']['cpu']['main_core'])
+
+ if main_core not in cpus_available:
+ raise ConfigError(f'"cpu main-core {main_core}" is not available!')
+
+ # CPU main-core must be not included to corelist-workers
+ if config.get('settings').get('cpu', {}).get('corelist_workers'):
+ corelist_workers = config['settings']['cpu']['corelist_workers']
+
+ all_core_numbers = []
+ for worker_range in corelist_workers:
+ core_numbers = worker_range.split('-')
+ all_core_numbers.extend(
+ range(int(core_numbers[0]), int(core_numbers[-1]) + 1)
+ )
+
+ if main_core in all_core_numbers:
+ raise ConfigError(
+ f'"cpu main-core {main_core}" must not be included in the corelist-workers!'
+ )
+
verify_memory(config['settings'])
# Check if deleted interfaces are not xconnect memebrs
@@ -456,7 +461,6 @@ def generate(config):
def apply(config):
-
# Open persistent config
# It is required for operations with interfaces
persist_config = JSONStorage('vpp_conf')