From 1af618103f288d83c51dee3d20e49f06e02b1ac7 Mon Sep 17 00:00:00 2001 From: zsdc Date: Tue, 7 Dec 2021 13:25:42 +0200 Subject: FRR: T4020: Updated CLI options processing for FRR daemons Instead of analyzing options for each daemon now we use a single template for the whole configuration file. This makes logic a bit less flexible, but much easier. Removed unnecessary check for returned by the `conf.get_config_dict(base)` config. Also, added the ability to disable `strip()` of file content while using `read_file()` what is necessary for proper comparing with updated content. --- data/templates/frr/daemons.frr.tmpl | 50 +++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 data/templates/frr/daemons.frr.tmpl (limited to 'data/templates/frr') diff --git a/data/templates/frr/daemons.frr.tmpl b/data/templates/frr/daemons.frr.tmpl new file mode 100644 index 000000000..089cdae3b --- /dev/null +++ b/data/templates/frr/daemons.frr.tmpl @@ -0,0 +1,50 @@ +zebra=yes +bgpd=yes +ospfd=yes +ospf6d=yes +ripd=yes +ripngd=yes +isisd=yes +pimd=no +ldpd=yes +nhrpd=no +eigrpd=no +babeld=no +sharpd=no +pbrd=no +bfdd=yes +staticd=yes + +vtysh_enable=yes +zebra_options=" -s 90000000 --daemon -A 127.0.0.1 +{%- if irdp is defined %} -M irdp{% endif -%} +{%- if snmp is defined and snmp.zebra is defined %} -M snmp{% endif -%} +" +bgpd_options=" --daemon -A 127.0.0.1 +{%- if bmp is defined %} -M bmp{% endif -%} +{%- if snmp is defined and snmp.bgpd is defined %} -M snmp{% endif -%} +" +ospfd_options=" --daemon -A 127.0.0.1 +{%- if snmp is defined and snmp.ospfd is defined %} -M snmp{% endif -%} +" +ospf6d_options=" --daemon -A ::1 +{%- if snmp is defined and snmp.ospf6d is defined %} -M snmp{% endif -%} +" +ripd_options=" --daemon -A 127.0.0.1 +{%- if snmp is defined and snmp.ripd is defined %} -M snmp{% endif -%} +" +ripngd_options=" --daemon -A ::1" +isisd_options=" --daemon -A 127.0.0.1" +pimd_options=" --daemon -A 127.0.0.1" +ldpd_options=" --daemon -A 127.0.0.1" +nhrpd_options=" --daemon -A 127.0.0.1" +eigrpd_options=" --daemon -A 127.0.0.1" +babeld_options=" --daemon -A 127.0.0.1" +sharpd_options=" --daemon -A 127.0.0.1" +pbrd_options=" --daemon -A 127.0.0.1" +staticd_options=" --daemon -A 127.0.0.1" +bfdd_options=" --daemon -A 127.0.0.1" + +watchfrr_enable=no +valgrind_enable=no + -- cgit v1.2.3 From 373132a899cd53eaebedd23bd44702d245ce8165 Mon Sep 17 00:00:00 2001 From: zsdc Date: Wed, 29 Dec 2021 17:57:38 +0200 Subject: FRR: T4020: Updated CLI options processing for FRR daemons - Reverted changes from `python/vyos/util.py`. This may lead to unnecessary FRR restart during each boot, depending on a default file content and template, but makes this changeset cleaner. - Fixed typos in node names (extra `>` characters). - Added SNMP module for `isisd` and `ldpd`, since they have it compiled now. --- data/templates/frr/daemons.frr.tmpl | 8 ++++++-- interface-definitions/system-frr.xml.in | 27 +++++++++++++++++++-------- python/vyos/util.py | 12 ++++-------- src/conf_mode/snmp.py | 8 ++++++-- src/conf_mode/system_frr.py | 2 +- 5 files changed, 36 insertions(+), 21 deletions(-) (limited to 'data/templates/frr') diff --git a/data/templates/frr/daemons.frr.tmpl b/data/templates/frr/daemons.frr.tmpl index 089cdae3b..ab7b14d6b 100644 --- a/data/templates/frr/daemons.frr.tmpl +++ b/data/templates/frr/daemons.frr.tmpl @@ -34,9 +34,13 @@ ripd_options=" --daemon -A 127.0.0.1 {%- if snmp is defined and snmp.ripd is defined %} -M snmp{% endif -%} " ripngd_options=" --daemon -A ::1" -isisd_options=" --daemon -A 127.0.0.1" +isisd_options=" --daemon -A 127.0.0.1 +{%- if snmp is defined and snmp.isisd is defined %} -M snmp{% endif -%} +" pimd_options=" --daemon -A 127.0.0.1" -ldpd_options=" --daemon -A 127.0.0.1" +ldpd_options=" --daemon -A 127.0.0.1 +{%- if snmp is defined and snmp.ldpd is defined %} -M snmp{% endif -%} +" nhrpd_options=" --daemon -A 127.0.0.1" eigrpd_options=" --daemon -A 127.0.0.1" babeld_options=" --daemon -A 127.0.0.1" diff --git a/interface-definitions/system-frr.xml.in b/interface-definitions/system-frr.xml.in index e8b447f58..9fe23ed75 100644 --- a/interface-definitions/system-frr.xml.in +++ b/interface-definitions/system-frr.xml.in @@ -11,13 +11,13 @@ - >Enable BGP Monitoring Protocol support + Enable BGP Monitoring Protocol support - >Enable ICMP Router Discovery Protocol support + Enable ICMP Router Discovery Protocol support @@ -28,31 +28,43 @@ - >BGP + BGP + + + + + + IS-IS + + + + + + LDP - >OSPFv3 + OSPFv3 - >OSPFv2 + OSPFv2 - >RIP + RIP - >Zebra (IP routing manager) + Zebra (IP routing manager) @@ -63,4 +75,3 @@ - diff --git a/python/vyos/util.py b/python/vyos/util.py index ce5dc51f5..d8e83ab8d 100644 --- a/python/vyos/util.py +++ b/python/vyos/util.py @@ -182,20 +182,16 @@ def call(command, flag='', shell=None, input=None, timeout=None, env=None, return code -def read_file(fname, defaultonfailure=None, strip_end=True): +def read_file(fname, defaultonfailure=None): """ - read the content of a file, optionally stripping any end characters (space, newlines) + read the content of a file, stripping any end characters (space, newlines) should defaultonfailure be not None, it is returned on failure to read """ try: """ Read a file to string """ with open(fname, 'r') as f: - data = f.read() - - if strip_end: - return data.strip() - else: - return data + data = f.read().strip() + return data except Exception as e: if defaultonfailure is not None: return defaultonfailure diff --git a/src/conf_mode/snmp.py b/src/conf_mode/snmp.py index 25dcdf7c6..6c6367045 100755 --- a/src/conf_mode/snmp.py +++ b/src/conf_mode/snmp.py @@ -583,9 +583,13 @@ def apply(snmp): # Enable AgentX in FRR # This should be done for each daemon individually because common command # works only if all the daemons started with SNMP support - frr_daemons_list = ['bgpd', 'ospf6d', 'ospfd', 'ripd', 'zebra'] + frr_daemons_list = [ + 'bgpd', 'ospf6d', 'ospfd', 'ripd', 'ripngd', 'isisd', 'ldpd', 'zebra' + ] for frr_daemon in frr_daemons_list: - call(f'vtysh -c "configure terminal" -d {frr_daemon} -c "agentx" >/dev/null') + call( + f'vtysh -c "configure terminal" -d {frr_daemon} -c "agentx" >/dev/null' + ) return None diff --git a/src/conf_mode/system_frr.py b/src/conf_mode/system_frr.py index 0d0b37e00..1af0055f6 100755 --- a/src/conf_mode/system_frr.py +++ b/src/conf_mode/system_frr.py @@ -51,7 +51,7 @@ def verify(frr_config): def generate(frr_config): # read daemons config file - daemons_config_current = read_file(config_file, strip_end=False) + daemons_config_current = read_file(config_file) # generate new config file daemons_config_new = render_to_string('frr/daemons.frr.tmpl', frr_config) # update configuration file if this is necessary -- cgit v1.2.3