@@ -42,125 +42,29 @@ dependent_startup_wait_for=rsyslogd:running
42
42
{# If our configuration has VLANs... #}
43
43
{% if VLAN_INTERFACE %}
44
44
{# Count how many VLANs require a DHCP relay agent... #}
45
- {% set num_relays = { 'count' : 0 } %}
45
+ {% set ipv 4_num_relays = { 'count' : 0 } %}
46
+ {% set ipv 6_num_relays = { 'count' : 0 } %}
46
47
{% for vlan_name in VLAN_INTERFACE %}
47
48
{% 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
+ {% set _dummy = ipv 4_num_relays .update ({'count' : ipv 4_num_relays .count + 1}) %}
50
+ {% endif %}
51
+ {% if VLAN and vlan_name in VLAN and 'dhcpv6_servers' in VLAN [vlan_name ] and VLAN [vlan_name ]['dhcpv6_servers' ]|length > 0 %}
52
+ {% set _dummy = ipv 6_num_relays .update ({'count' : ipv 6_num_relays .count + 1}) %}
49
53
{% endif %}
50
54
{% endfor %}
51
55
{# 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 %}
56
+ {% if ipv 4_num_relays .count > 0 or ipv 6_num_relays .count > 0 %}
57
+ {% include 'dhcp-relay.programs.j2' %}
63
58
64
59
65
60
{# Create a program entry for each DHCP relay agent instance #}
66
61
{% set relay_for_ipv 4 = { 'flag' : False } %}
62
+ {% set relay_for_ipv 6 = { 'flag' : False } %}
67
63
{% 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
- {#- Dual ToR Option #}
80
- {% if 'subtype' in DEVICE_METADATA ['localhost' ] and DEVICE_METADATA ['localhost' ]['subtype' ] == 'DualToR' %} -U Loopback0 -dt{% endif -%}
81
- {#- si option to use intf addr in relay #}
82
- {% if DEVICE_METADATA ['localhost' ]['deployment_id' ] == '8' %} -si{% endif -%}
83
- {#- We treat all other interfaces as upstream interfaces (-iu), as we only want to listen for replies #}
84
- {% for (name , prefix ) in VLAN_INTERFACE |pfx_filter %}
85
- {% if prefix | ipv 4 and name != vlan_name %} -iu {{ name }}{% endif -%}
86
- {% endfor %}
87
- {% for (name , prefix ) in INTERFACE |pfx_filter %}
88
- {% if prefix | ipv 4 %} -iu {{ name }}{% endif -%}
89
- {% endfor %}
90
- {% for (name , prefix ) in PORTCHANNEL_INTERFACE |pfx_filter %}
91
- {% if prefix | ipv 4 %} -iu {{ name }}{% endif -%}
92
- {% endfor %}
93
- {% for dhcp_server in VLAN [vlan_name ]['dhcp_servers' ] %}
94
- {% - if dhcp_server | ipv 4 %} {{ dhcp_server }}{% endif -%}
95
- {% endfor %}
96
-
97
- priority=3
98
- autostart=false
99
- autorestart=false
100
- stdout_logfile=syslog
101
- stderr_logfile=syslog
102
- dependent_startup=true
103
- dependent_startup_wait_for=start:exited
104
-
105
- {% endif %}
106
- {% endif %}
107
- {% endfor %}
108
-
109
- [group:dhcpmon]
110
- programs=
111
- {% - set add_preceding_comma = { 'flag' : False } %}
112
- {% for vlan_name in VLAN_INTERFACE %}
113
- {% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN [vlan_name ] and VLAN [vlan_name ]['dhcp_servers' ]|length > 0 %}
114
- {% if add_preceding_comma .flag %} ,{% endif %}
115
- {% set _dummy = add_preceding_comma .update ({'flag' : True }) %}
116
- dhcpmon-{{ vlan_name }}
117
- {% - endif %}
118
- {% endfor %}
119
-
120
-
121
- {# Create a program entry for each DHCP MONitor instance #}
122
- {% set relay_for_ipv 4 = { 'flag' : False } %}
123
- {% for vlan_name in VLAN_INTERFACE %}
124
- {% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN [vlan_name ] and VLAN [vlan_name ]['dhcp_servers' ]|length > 0 %}
125
- {% for dhcp_server in VLAN [vlan_name ]['dhcp_servers' ] %}
126
- {% if dhcp_server | ipv 4 %}
127
- {% set _dummy = relay_for_ipv 4.update ({'flag' : True }) %}
128
- {% endif %}
129
- {% endfor %}
130
- {% if relay_for_ipv 4.flag %}
131
- {% set _dummy = relay_for_ipv 4.update ({'flag' : False }) %}
132
- [program:dhcpmon-{{ vlan_name }}]
133
- {# We treat this VLAN as a downstream interface (-id), as we only want to listen for requests #}
134
- command=/usr/sbin/dhcpmon -id {{ vlan_name }}
135
- {#- Dual ToR Option #}
136
- {% if 'subtype' in DEVICE_METADATA ['localhost' ] and DEVICE_METADATA ['localhost' ]['subtype' ] == 'DualToR' %} -u Loopback0{% endif -%}
137
- {#- We treat all other interfaces as upstream interfaces (-iu), as we only want to listen for replies #}
138
- {% for (name , prefix ) in VLAN_INTERFACE |pfx_filter %}
139
- {% if prefix | ipv 4 and name != vlan_name %} -iu {{ name }}{% endif -%}
140
- {% endfor %}
141
- {% for (name , prefix ) in INTERFACE |pfx_filter %}
142
- {% if prefix | ipv 4 %} -iu {{ name }}{% endif -%}
143
- {% endfor %}
144
- {% for (name , prefix ) in PORTCHANNEL_INTERFACE |pfx_filter %}
145
- {% if prefix | ipv 4 %} -iu {{ name }}{% endif -%}
146
- {% endfor %}
147
- {% if MGMT_INTERFACE %}
148
- {% for (name , prefix ) in MGMT_INTERFACE |pfx_filter %}
149
- {% if prefix | ipv 4 %} -im {{ name }}{% endif -%}
150
- {% endfor %}
151
- {% endif %}
152
-
153
- priority=4
154
- autostart=false
155
- autorestart=false
156
- stdout_logfile=syslog
157
- stderr_logfile=syslog
158
- dependent_startup=true
159
- dependent_startup_wait_for=isc-dhcp-relay-{{ vlan_name }}:running
160
-
161
- {% endif %}
162
- {% endif %}
64
+ {% include 'dhcpv4-relay.agents.j2' %}
65
+ {% include 'dhcpv6-relay.agents.j2' %}
163
66
{% endfor %}
164
67
68
+ {% include 'dhcpv6-relay.monitors.j2' %}
165
69
{% endif %}
166
70
{% endif %}
0 commit comments