Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

frr: T4020: add option to define number of open file descriptors #2639

Merged
merged 1 commit into from
Dec 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions data/templates/frr/daemons.frr.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@ valgrind_enable=no

frr_profile="traditional"

#MAX_FDS=1024
MAX_FDS={{ descriptors }}

#FRR_NO_ROOT="yes"

14 changes: 14 additions & 0 deletions interface-definitions/system-frr.xml.in
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,20 @@
<valueless/>
</properties>
</leafNode>
<leafNode name="descriptors">
<properties>
<help>Number of open file descriptors a process is allowed to use</help>
<valueHelp>
<format>u32:1024-8192</format>
<description>Number of file descriptors</description>
</valueHelp>
<constraint>
<validator name="numeric" argument="--range 1024-8192"/>
</constraint>
<constraintErrorMessage>Port number must be in range 1024 to 8192</constraintErrorMessage>
</properties>
<defaultValue>1024</defaultValue>
</leafNode>
<leafNode name="irdp">
<properties>
<help>Enable ICMP Router Discovery Protocol support</help>
Expand Down
26 changes: 21 additions & 5 deletions smoketest/scripts/cli/test_system_frr.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
# Copyright (C) 2019-2020 VyOS maintainers and contributors
# Copyright (C) 2021-2023 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
Expand All @@ -16,13 +16,13 @@

import re
import unittest

from base_vyostest_shim import VyOSUnitTestSHIM
from vyos.utils.file import read_file

config_file = '/etc/frr/daemons'
base_path = ['system', 'frr']


def daemons_config_parse(daemons_config):
# create regex for parsing daemons options
regex_daemon_config = re.compile(
Expand All @@ -33,13 +33,20 @@ def daemons_config_parse(daemons_config):
for daemon in regex_daemon_config.finditer(daemons_config):
daemon_name = daemon.group('daemon_name')
daemon_options = daemon.group('daemon_options')
daemons_config_dict[daemon_name] = daemon_options
daemons_config_dict[daemon_name] = daemon_options.lstrip()

# return daemons config
return (daemons_config_dict)


class TestSystemFRR(VyOSUnitTestSHIM.TestCase):
@classmethod
def setUpClass(cls):
super(TestSystemFRR, cls).setUpClass()

# ensure we can also run this test on a live system - so lets clean
# out the current configuration :)
cls.cli_delete(cls, base_path)

def tearDown(self):
self.cli_delete(base_path)
Expand All @@ -64,7 +71,7 @@ def test_frr_snmp_multipledaemons(self):
else:
self.assertFalse(snmp_enabled)

def test_frr_snmp_addandremove(self):
def test_frr_snmp_add_remove(self):
# test enabling and disabling of SNMP integration
test_daemon_names = ['ospfd', 'bgpd']
for test_daemon_name in test_daemon_names:
Expand Down Expand Up @@ -124,7 +131,7 @@ def test_frr_irdp(self):
irdp_enabled = regex_irdp.match(daemons_config_dict['zebra'])
self.assertTrue(irdp_enabled)

def test_frr_bmpandsnmp(self):
def test_frr_bmp_and_snmp(self):
# test empty config section
self.cli_set(base_path + ['bmp'])
self.cli_set(base_path + ['snmp', 'bgpd'])
Expand All @@ -141,6 +148,15 @@ def test_frr_bmpandsnmp(self):
self.assertTrue(bmp_enabled)
self.assertTrue(snmp_enabled)

def test_frr_file_descriptors(self):
file_descriptors = '4096'

self.cli_set(base_path + ['descriptors', file_descriptors])
self.cli_commit()

# read the config file and check content
daemons_config = read_file(config_file)
self.assertIn(f'MAX_FDS={file_descriptors}', daemons_config)

if __name__ == '__main__':
unittest.main(verbosity=2)
4 changes: 3 additions & 1 deletion src/conf_mode/system_frr.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ def get_config(config=None):
conf = Config()

base = ['system', 'frr']
frr_config = conf.get_config_dict(base, get_first_key=True)
frr_config = conf.get_config_dict(base, key_mangling=('-', '_'),
get_first_key=True,
with_recursive_defaults=True)

return frr_config

Expand Down
Loading