Skip to content

Commit

Permalink
Merge pull request #2639 from c-po/frr-t4020
Browse files Browse the repository at this point in the history
frr: T4020: add option to define number of open file descriptors
  • Loading branch information
sever-sever authored Dec 15, 2023
2 parents e2d9b21 + 892c28c commit 3571232
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 8 deletions.
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

0 comments on commit 3571232

Please sign in to comment.