diff --git a/data/templates/frr/pimd.frr.j2 b/data/templates/frr/pimd.frr.j2 index b01fb5ec7..68edf4a5c 100644 --- a/data/templates/frr/pimd.frr.j2 +++ b/data/templates/frr/pimd.frr.j2 @@ -1,95 +1,95 @@ {% if interface is vyos_defined %} {% for iface, iface_config in interface.items() %} ! interface {{ iface }} ip pim {% if iface_config.bfd is vyos_defined %} ip pim bfd {{ 'profile ' ~ iface_config.bfd.profile if iface_config.bfd.profile is vyos_defined }} {% endif %} {% if iface_config.no_bsm is vyos_defined %} no ip pim bsm {% endif %} {% if iface_config.dr_priority is vyos_defined %} ip pim drpriority {{ iface_config.dr_priority }} {% endif %} {% if iface_config.hello is vyos_defined %} ip pim hello {{ iface_config.hello }} {% endif %} {% if iface_config.no_unicast_bsm is vyos_defined %} no ip pim unicast-bsm {% endif %} {% if iface_config.passive is vyos_defined %} ip pim passive {% endif %} {% if iface_config.source_address is vyos_defined %} ip pim use-source {{ iface_config.source_address }} {% endif %} -{% if iface_config.igmp is vyos_defined %} +{% if iface_config.igmp is vyos_defined and iface_config.igmp.disable is not vyos_defined %} ip igmp -{% endif %} -{% if iface_config.igmp.query_interval %} +{% if iface_config.igmp.query_interval %} ip igmp query-interval {{ iface_config.igmp.query_interval }} -{% endif %} -{% if iface_config.igmp.query_max_response_time %} +{% endif %} +{% if iface_config.igmp.query_max_response_time %} ip igmp query-max-response-time {{ iface_config.igmp.query_max_response_time }} -{% endif %} -{% if iface_config.igmp.version is vyos_defined %} +{% endif %} +{% if iface_config.igmp.version is vyos_defined %} ip igmp version {{ iface_config.igmp.version }} -{% endif %} -{% if iface_config.igmp.join is vyos_defined %} -{% for join, join_config in iface_config.igmp.join.items() %} -{% if join_config.source_address is vyos_defined %} -{% for source_address in join_config.source_address %} +{% endif %} +{% if iface_config.igmp.join is vyos_defined %} +{% for join, join_config in iface_config.igmp.join.items() %} +{% if join_config.source_address is vyos_defined %} +{% for source_address in join_config.source_address %} ip igmp join {{ join }} {{ source_address }} -{% endfor %} -{% else %} +{% endfor %} +{% else %} ip igmp join {{ join }} -{% endif %} -{% endfor %} +{% endif %} +{% endfor %} +{% endif %} {% endif %} exit {% endfor %} {% endif %} ! {% if ecmp is vyos_defined %} ip pim ecmp {{ 'rebalance' if ecmp.rebalance is vyos_defined }} {% endif %} {% if join_prune_interval is vyos_defined %} ip pim join-prune-interval {{ join_prune_interval }} {% endif %} {% if keep_alive_timer is vyos_defined %} ip pim keep-alive-timer {{ keep_alive_timer }} {% endif %} {% if packets is vyos_defined %} ip pim packets {{ packets }} {% endif %} {% if register_accept_list.prefix_list is vyos_defined %} ip pim register-accept-list {{ register_accept_list.prefix_list }} {% endif %} {% if register_suppress_time is vyos_defined %} ip pim register-suppress-time {{ register_suppress_time }} {% endif %} {% if rp.address is vyos_defined %} {% for address, address_config in rp.address.items() %} {% for group in address_config.group %} ip pim rp {{ address }} {{ group }} {% endfor %} {% endfor %} {% endif %} {% if rp.keep_alive_timer is vyos_defined %} ip pim rp keep-alive-timer {{ rp.keep_alive_timer }} {% endif %} {% if no_v6_secondary is vyos_defined %} no ip pim send-v6-secondary {% endif %} {% if spt_switchover.infinity_and_beyond is vyos_defined %} ip pim spt-switchover infinity-and-beyond {{ 'prefix-list ' ~ spt_switchover.infinity_and_beyond.prefix_list if spt_switchover.infinity_and_beyond.prefix_list is defined }} {% endif %} {% if ssm.prefix_list is vyos_defined %} ip pim ssm prefix-list {{ ssm.prefix_list }} {% endif %} ! {% if igmp.watermark_warning is vyos_defined %} ip igmp watermark-warn {{ igmp.watermark_warning }} {% endif %} ! diff --git a/interface-definitions/protocols-pim.xml.in b/interface-definitions/protocols-pim.xml.in index bbdb00cae..39188398b 100644 --- a/interface-definitions/protocols-pim.xml.in +++ b/interface-definitions/protocols-pim.xml.in @@ -1,209 +1,210 @@ <?xml version="1.0"?> <!-- Protocol Independent Multicast (PIM) configuration --> <interfaceDefinition> <node name="protocols"> <children> <node name="pim" owner="${vyos_conf_scripts_dir}/protocols_pim.py"> <properties> <help>Protocol Independent Multicast (PIM) and IGMP</help> <priority>400</priority> </properties> <children> <tagNode name="interface"> <properties> <help>PIM interface</help> <completionHelp> <script>${vyos_completion_dir}/list_interfaces</script> </completionHelp> <constraint> #include <include/constraint/interface-name.xml.i> </constraint> </properties> <children> #include <include/bfd/bfd.xml.i> #include <include/pim/bsm.xml.i> #include <include/pim/dr-priority.xml.i> #include <include/pim/hello.xml.i> #include <include/pim/passive.xml.i> #include <include/source-address-ipv4.xml.i> <node name="igmp"> <properties> <help>Internet Group Management Protocol (IGMP) options</help> </properties> <children> + #include <include/generic-disable-node.xml.i> <tagNode name="join"> <properties> <help>IGMP join multicast group</help> <valueHelp> <format>ipv4</format> <description>Multicast group address</description> </valueHelp> <constraint> <validator name="ipv4-address"/> </constraint> </properties> <children> #include <include/source-address-ipv4-multi.xml.i> </children> </tagNode> <leafNode name="query-interval"> <properties> <help>IGMP host query interval</help> <valueHelp> <format>u32:1-1800</format> <description>Query interval in seconds</description> </valueHelp> <constraint> <validator name="numeric" argument="--range 1-1800"/> </constraint> </properties> </leafNode> <leafNode name="query-max-response-time"> <properties> <help>IGMP max query response time</help> <valueHelp> <format>u32:10-250</format> <description>Query response value in deci-seconds</description> </valueHelp> <constraint> <validator name="numeric" argument="--range 10-250"/> </constraint> </properties> </leafNode> <leafNode name="version"> <properties> <help>Interface IGMP version</help> <completionHelp> <list>2 3</list> </completionHelp> <valueHelp> <format>2</format> <description>IGMP version 2</description> </valueHelp> <valueHelp> <format>3</format> <description>IGMP version 3</description> </valueHelp> <constraint> <validator name="numeric" argument="--range 2-3"/> </constraint> </properties> <defaultValue>3</defaultValue> </leafNode> </children> </node> </children> </tagNode> <node name="ecmp"> <properties> <help>Enable PIM ECMP</help> </properties> <children> <leafNode name="rebalance"> <properties> <help>Enable PIM ECMP Rebalance</help> <valueless/> </properties> </leafNode> </children> </node> <node name="igmp"> <properties> <help>Internet Group Management Protocol (IGMP) options</help> </properties> <children> <leafNode name="watermark-warning"> <properties> <help>Configure group limit for watermark warning</help> <valueHelp> <format>u32:1-65535</format> <description>Group count to generate watermark warning</description> </valueHelp> <constraint> <validator name="numeric" argument="--range 1-65535"/> </constraint> </properties> </leafNode> </children> </node> #include <include/pim/join-prune-interval.xml.i> #include <include/pim/keep-alive-timer.xml.i> #include <include/pim/packets.xml.i> #include <include/pim/register-suppress-time.xml.i> <node name="register-accept-list"> <properties> <help>Only accept registers from a specific source prefix list</help> </properties> <children> #include <include/policy/prefix-list.xml.i> </children> </node> <node name="rp"> <properties> <help>Rendezvous Point</help> </properties> <children> <tagNode name="address"> <properties> <help>Rendezvous Point address</help> <valueHelp> <format>ipv4</format> <description>Rendezvous Point address</description> </valueHelp> <constraint> <validator name="ipv4-address"/> </constraint> </properties> <children> <leafNode name="group"> <properties> <help>Group Address range</help> <valueHelp> <format>ipv4net</format> <description>Group Address range RFC 3171</description> </valueHelp> <constraint> <validator name="ip-prefix"/> </constraint> <multi/> </properties> </leafNode> </children> </tagNode> #include <include/pim/keep-alive-timer.xml.i> </children> </node> <leafNode name="no-v6-secondary"> <properties> <help>Disable IPv6 secondary address in hello packets</help> <valueless/> </properties> </leafNode> <node name="spt-switchover"> <properties> <help>Send v6 secondary addresses</help> </properties> <children> <node name="infinity-and-beyond"> <properties> <help>Never switch to SPT Tree</help> </properties> <children> #include <include/policy/prefix-list.xml.i> </children> </node> </children> </node> <node name="ssm"> <properties> <help>Source-Specific Multicast</help> </properties> <children> #include <include/policy/prefix-list.xml.i> </children> </node> </children> </node> </children> </node> </interfaceDefinition>