@@ -41,122 +41,27 @@ dependent_startup_wait_for=rsyslogd:running
4141
4242{# If our configuration has VLANs... #}
4343{% if VLAN_INTERFACE %}
44- {# Count how many VLANs require a DHCP relay agent... # }
45- {% set num_relays = { 'count' : 0 } %}
44+ {% set ipv 4 _num_relays = { 'count' : 0 } % }
45+ {% set ipv 6 _num_relays = { 'count' : 0 } %}
4646{% for vlan_name in VLAN_INTERFACE %}
4747{% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN [vlan_name ] and VLAN [vlan_name ]['dhcp_servers' ]|length > 0 %}
48- {% set _dummy = num_relays .update ({'count' : num_relays .count + 1}) %}
49- {% endif %}
50- {% endfor %}
51- {# If one or more of the VLANs require a DHCP relay agent... #}
52- {% if num_relays .count > 0 %}
53- [group:isc-dhcp-relay]
54- programs=
55- {% - set add_preceding_comma = { 'flag' : False } %}
56- {% for vlan_name in VLAN_INTERFACE %}
57- {% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN [vlan_name ] and VLAN [vlan_name ]['dhcp_servers' ]|length > 0 %}
58- {% if add_preceding_comma .flag %} ,{% endif %}
59- {% set _dummy = add_preceding_comma .update ({'flag' : True }) %}
60- isc-dhcp-relay-{{ vlan_name }}
61- {% - endif %}
62- {% endfor %}
63-
64-
65- {# Create a program entry for each DHCP relay agent instance #}
66- {% set relay_for_ipv 4 = { 'flag' : False } %}
67- {% for vlan_name in VLAN_INTERFACE %}
68- {% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN [vlan_name ] and VLAN [vlan_name ]['dhcp_servers' ]|length > 0 %}
69- {% for dhcp_server in VLAN [vlan_name ]['dhcp_servers' ] %}
70- {% if dhcp_server | ipv 4 %}
71- {% set _dummy = relay_for_ipv 4.update ({'flag' : True }) %}
72- {% endif %}
73- {% endfor %}
74- {% if relay_for_ipv 4.flag %}
75- {% set _dummy = relay_for_ipv 4.update ({'flag' : False }) %}
76- [program:isc-dhcp-relay-{{ vlan_name }}]
77- {# We treat this VLAN as a downstream interface (-id), as we only want to listen for requests #}
78- command=/usr/sbin/dhcrelay -d -m discard -a %%h:%%p %%P --name-alias-map-file /tmp/port-name-alias-map.txt -id {{ vlan_name }}
79- {#- si option to use intf addr in relay #}
80- {% if DEVICE_METADATA ['localhost' ]['deployment_id' ] == '8' %} -si{% endif -%}
81- {#- We treat all other interfaces as upstream interfaces (-iu), as we only want to listen for replies #}
82- {% for (name , prefix ) in VLAN_INTERFACE |pfx_filter %}
83- {% if prefix | ipv 4 and name != vlan_name %} -iu {{ name }}{% endif -%}
84- {% endfor %}
85- {% for (name , prefix ) in INTERFACE |pfx_filter %}
86- {% if prefix | ipv 4 %} -iu {{ name }}{% endif -%}
87- {% endfor %}
88- {% for (name , prefix ) in PORTCHANNEL_INTERFACE |pfx_filter %}
89- {% if prefix | ipv 4 %} -iu {{ name }}{% endif -%}
90- {% endfor %}
91- {% for dhcp_server in VLAN [vlan_name ]['dhcp_servers' ] %}
92- {% - if dhcp_server | ipv 4 %} {{ dhcp_server }}{% endif -%}
93- {% endfor %}
94-
95- priority=3
96- autostart=false
97- autorestart=false
98- stdout_logfile=syslog
99- stderr_logfile=syslog
100- dependent_startup=true
101- dependent_startup_wait_for=start:exited
102-
48+ {% set _dummy = ipv 4_num_relays .update ({'count' : ipv 4_num_relays .count + 1}) %}
10349{% endif %}
50+ {% if DHCP_RELAY and vlan_name in DHCP_RELAY and 'dhcpv6_servers' in DHCP_RELAY [vlan_name ] %}
51+ {% set _dummy = ipv 6_num_relays .update ({'count' : ipv 6_num_relays .count + 1}) %}
10452{% endif %}
10553{% endfor %}
54+ {# If one or more of the VLANs require a DHCP relay agent... #}
55+ {% if ipv 4_num_relays .count > 0 or ipv 6_num_relays .count > 0 %}
56+ {% include 'dhcp-relay.programs.j2' %}
10657
107- [group:dhcpmon]
108- programs=
109- {% - set add_preceding_comma = { 'flag' : False } %}
110- {% for vlan_name in VLAN_INTERFACE %}
111- {% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN [vlan_name ] and VLAN [vlan_name ]['dhcp_servers' ]|length > 0 %}
112- {% if add_preceding_comma .flag %} ,{% endif %}
113- {% set _dummy = add_preceding_comma .update ({'flag' : True }) %}
114- dhcpmon-{{ vlan_name }}
115- {% - endif %}
116- {% endfor %}
117-
118-
119- {# Create a program entry for each DHCP MONitor instance #}
12058{% set relay_for_ipv 4 = { 'flag' : False } %}
59+ {% set relay_for_ipv 6 = { 'flag' : False } %}
12160{% for vlan_name in VLAN_INTERFACE %}
122- {% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN [vlan_name ] and VLAN [vlan_name ]['dhcp_servers' ]|length > 0 %}
123- {% for dhcp_server in VLAN [vlan_name ]['dhcp_servers' ] %}
124- {% if dhcp_server | ipv 4 %}
125- {% set _dummy = relay_for_ipv 4.update ({'flag' : True }) %}
126- {% endif %}
127- {% endfor %}
128- {% if relay_for_ipv 4.flag %}
129- {% set _dummy = relay_for_ipv 4.update ({'flag' : False }) %}
130- [program:dhcpmon-{{ vlan_name }}]
131- {# We treat this VLAN as a downstream interface (-id), as we only want to listen for requests #}
132- command=/usr/sbin/dhcpmon -id {{ vlan_name }}
133- {#- We treat all other interfaces as upstream interfaces (-iu), as we only want to listen for replies #}
134- {% for (name , prefix ) in VLAN_INTERFACE |pfx_filter %}
135- {% if prefix | ipv 4 and name != vlan_name %} -iu {{ name }}{% endif -%}
136- {% endfor %}
137- {% for (name , prefix ) in INTERFACE |pfx_filter %}
138- {% if prefix | ipv 4 %} -iu {{ name }}{% endif -%}
139- {% endfor %}
140- {% for (name , prefix ) in PORTCHANNEL_INTERFACE |pfx_filter %}
141- {% if prefix | ipv 4 %} -iu {{ name }}{% endif -%}
142- {% endfor %}
143- {% if MGMT_INTERFACE %}
144- {% for (name , prefix ) in MGMT_INTERFACE |pfx_filter %}
145- {% if prefix | ipv 4 %} -im {{ name }}{% endif -%}
146- {% endfor %}
147- {% endif %}
148-
149- priority=4
150- autostart=false
151- autorestart=false
152- stdout_logfile=syslog
153- stderr_logfile=syslog
154- dependent_startup=true
155- dependent_startup_wait_for=isc-dhcp-relay-{{ vlan_name }}:running
156-
157- {% endif %}
158- {% endif %}
61+ {% include 'dhcpv4-relay.agents.j2' %}
15962{% endfor %}
16063
64+ {% include 'dhcpv6-relay.agents.j2' %}
65+ {% include 'dhcp-relay.monitors.j2' %}
16166{% endif %}
16267{% endif %}
0 commit comments