2021-09-30 03:33:02 -05:00
|
|
|
[group:dhcpmon]
|
|
|
|
programs=
|
|
|
|
{%- set add_preceding_comma = { 'flag': False } %}
|
|
|
|
{% set monitor_instance = { 'flag': False } %}
|
|
|
|
{% for vlan_name in VLAN_INTERFACE %}
|
|
|
|
{% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcp_servers']|length > 0 %}
|
|
|
|
{% set _dummy = monitor_instance.update({'flag': True}) %}
|
|
|
|
{%- endif %}
|
2022-08-24 21:53:11 -05:00
|
|
|
{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
|
2021-09-30 03:33:02 -05:00
|
|
|
{% set _dummy = monitor_instance.update({'flag': True}) %}
|
|
|
|
{%- endif %}
|
|
|
|
{% if monitor_instance.flag %}
|
|
|
|
{% if add_preceding_comma.flag %},{% endif %}
|
|
|
|
{% set _dummy = add_preceding_comma.update({'flag': True}) %}
|
|
|
|
dhcpmon-{{ vlan_name }}
|
|
|
|
{%- set _dummy = monitor_instance.update({'flag': False}) %}
|
|
|
|
{%- endif %}
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
|
|
|
|
{# Create a program entry for each DHCP MONitor instance #}
|
|
|
|
{% set relay_for_ipv4 = { 'flag': False } %}
|
|
|
|
{% set relay_for_ipv6 = { 'flag': False } %}
|
|
|
|
{% for vlan_name in VLAN_INTERFACE %}
|
|
|
|
{# Check DHCPv4 agents #}
|
|
|
|
{% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcp_servers']|length > 0 %}
|
|
|
|
{% for dhcp_server in VLAN[vlan_name]['dhcp_servers'] %}
|
|
|
|
{% if dhcp_server | ipv4 %}
|
|
|
|
{% set _dummy = relay_for_ipv4.update({'flag': True}) %}
|
|
|
|
{% endif %}
|
|
|
|
{% endfor %}
|
|
|
|
{% endif %}
|
|
|
|
{# Check DHCPv6 agents #}
|
2022-08-24 21:53:11 -05:00
|
|
|
{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
|
2021-09-30 03:33:02 -05:00
|
|
|
{% for dhcpv6_server in VLAN[vlan_name]['dhcpv6_servers'] %}
|
|
|
|
{% if dhcpv6_server | ipv6 %}
|
|
|
|
{% set _dummy = relay_for_ipv6.update({'flag': True}) %}
|
|
|
|
{% endif %}
|
|
|
|
{% endfor %}
|
|
|
|
{% endif %}
|
|
|
|
{% if relay_for_ipv4.flag or relay_for_ipv6.flag %}
|
|
|
|
[program:dhcpmon-{{ vlan_name }}]
|
|
|
|
{# We treat this VLAN as a downstream interface (-id), as we only want to listen for requests #}
|
|
|
|
command=/usr/sbin/dhcpmon -id {{ vlan_name }}
|
|
|
|
{#- Dual ToR Option #}
|
|
|
|
{% if 'subtype' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['subtype'] == 'DualToR' %} -u Loopback0{% endif -%}
|
|
|
|
{#- We treat all other interfaces as upstream interfaces (-iu), as we only want to listen for replies #}
|
|
|
|
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
|
|
|
|
{% if prefix | ipv4 and name != vlan_name %} -iu {{ name }}{% endif -%}
|
|
|
|
{% endfor %}
|
|
|
|
{% for (name, prefix) in INTERFACE|pfx_filter %}
|
|
|
|
{% if prefix | ipv4 %} -iu {{ name }}{% endif -%}
|
|
|
|
{% endfor %}
|
|
|
|
{% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %}
|
|
|
|
{% if prefix | ipv4 %} -iu {{ name }}{% endif -%}
|
|
|
|
{% endfor %}
|
|
|
|
{% if MGMT_INTERFACE %}
|
|
|
|
{% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
|
|
|
|
{% if prefix | ipv4 %} -im {{ name }}{% endif -%}
|
|
|
|
{% endfor %}
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
priority=4
|
|
|
|
autostart=false
|
|
|
|
autorestart=false
|
|
|
|
stdout_logfile=syslog
|
|
|
|
stderr_logfile=syslog
|
|
|
|
dependent_startup=true
|
|
|
|
dependent_startup_wait_for=
|
|
|
|
{%- if relay_for_ipv4.flag %}isc-dhcpv4-relay-{{ vlan_name }}:running {% endif %}
|
|
|
|
|
|
|
|
|
|
|
|
{% set _dummy = relay_for_ipv4.update({'flag': False}) %}
|
|
|
|
{% set _dummy = relay_for_ipv6.update({'flag': False}) %}
|
|
|
|
{% endif %}
|
|
|
|
{% endfor %}
|