Skip to content

Commit 281ede9

Browse files
kellyyehyxieca
authored andcommitted
[dhcp_relay] Add "vlan missing ip helper" dhcp relay unittest (#10654)
1 parent 612326d commit 281ede9

11 files changed

+1174
-24
lines changed

dockers/docker-dhcp-relay/dhcp-relay.monitors.j2

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ programs=
66
{% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcp_servers']|length > 0 %}
77
{% set _dummy = monitor_instance.update({'flag': True}) %}
88
{%- endif %}
9-
{% if VLAN and vlan_name in VLAN and 'dhcpv6_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcpv6_servers']|length > 0 %}
9+
{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
1010
{% set _dummy = monitor_instance.update({'flag': True}) %}
1111
{%- endif %}
1212
{% if monitor_instance.flag %}
@@ -31,7 +31,7 @@ dhcpmon-{{ vlan_name }}
3131
{% endfor %}
3232
{% endif %}
3333
{# Check DHCPv6 agents #}
34-
{% if VLAN and vlan_name in VLAN and 'dhcpv6_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcpv6_servers']|length > 0 %}
34+
{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
3535
{% for dhcpv6_server in VLAN[vlan_name]['dhcpv6_servers'] %}
3636
{% if dhcpv6_server | ipv6 %}
3737
{% set _dummy = relay_for_ipv6.update({'flag': True}) %}
@@ -68,7 +68,6 @@ stderr_logfile=syslog
6868
dependent_startup=true
6969
dependent_startup_wait_for=
7070
{%- if relay_for_ipv4.flag %}isc-dhcpv4-relay-{{ vlan_name }}:running {% endif %}
71-
{% if relay_for_ipv6.flag %}dhcp6relay:running{% endif %}
7271

7372

7473
{% set _dummy = relay_for_ipv4.update({'flag': False}) %}
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[group:dhcp-relay]
22
programs=
3+
{%- set relay_for_ipv6 = { 'flag': False } %}
34
{%- set add_preceding_comma = { 'flag': False } %}
45
{% for vlan_name in VLAN_INTERFACE %}
56
{# Append DHCPv4 agents #}
@@ -8,10 +9,13 @@ programs=
89
{% set _dummy = add_preceding_comma.update({'flag': True}) %}
910
isc-dhcpv4-relay-{{ vlan_name }}
1011
{%- endif %}
12+
{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
13+
{% set _dummy = relay_for_ipv6.update({'flag': True}) %}
14+
{%- endif %}
15+
{% endfor %}
1116
{# Append DHCPv6 agents #}
12-
{% if VLAN and vlan_name in VLAN and 'dhcpv6_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcpv6_servers']|length > 0 %}
17+
{% if relay_for_ipv6.flag %}
1318
{% if add_preceding_comma.flag %},{% endif %}
1419
{% set _dummy = add_preceding_comma.update({'flag': True}) %}
1520
dhcp6relay
16-
{%- endif %}
17-
{% endfor %}
21+
{% endif %}

dockers/docker-dhcp-relay/dhcpv6-relay.agents.j2

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
{# Append DHCPv6 agents #}
2-
{% if VLAN and vlan_name in VLAN and 'dhcpv6_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcpv6_servers']|length > 0 %}
3-
{% for dhcpv6_server in VLAN[vlan_name]['dhcpv6_servers'] %}
2+
{% for vlan_name in VLAN_INTERFACE %}
3+
{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
4+
{% for dhcpv6_server in DHCP_RELAY[vlan_name]['dhcpv6_servers'] %}
45
{% if dhcpv6_server | ipv6 %}
56
{% set _dummy = relay_for_ipv6.update({'flag': True}) %}
67
{% endif %}
78
{% endfor %}
9+
{% endif %}
10+
{% endfor %}
811
{% if relay_for_ipv6.flag %}
912
{% set _dummy = relay_for_ipv6.update({'flag': False}) %}
1013
[program:dhcp6relay]
1114
command=/usr/sbin/dhcp6relay
12-
1315
priority=3
1416
autostart=false
1517
autorestart=false
@@ -19,4 +21,3 @@ dependent_startup=true
1921
dependent_startup_wait_for=start:exited
2022

2123
{% endif %}
22-
{% endif %}

dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ dependent_startup_wait_for=rsyslogd:running
4848
{% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcp_servers']|length > 0 %}
4949
{% set _dummy = ipv4_num_relays.update({'count': ipv4_num_relays.count + 1}) %}
5050
{% endif %}
51-
{% if VLAN and vlan_name in VLAN and 'dhcpv6_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcpv6_servers']|length > 0 %}
51+
{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
5252
{% set _dummy = ipv6_num_relays.update({'count': ipv6_num_relays.count + 1}) %}
5353
{% endif %}
5454
{% endfor %}
@@ -62,9 +62,9 @@ dependent_startup_wait_for=rsyslogd:running
6262
{% set relay_for_ipv6 = { 'flag': False } %}
6363
{% for vlan_name in VLAN_INTERFACE %}
6464
{% include 'dhcpv4-relay.agents.j2' %}
65-
{% include 'dhcpv6-relay.agents.j2' %}
6665
{% endfor %}
6766

67+
{% include 'dhcpv6-relay.agents.j2' %}
6868
{% include 'dhcp-relay.monitors.j2' %}
6969
{% endif %}
7070
{% endif %}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
[supervisord]
2+
logfile_maxbytes=1MB
3+
logfile_backups=2
4+
nodaemon=true
5+
6+
[eventlistener:dependent-startup]
7+
command=python3 -m supervisord_dependent_startup
8+
autostart=true
9+
autorestart=unexpected
10+
startretries=0
11+
exitcodes=0,3
12+
events=PROCESS_STATE
13+
buffer_size=1024
14+
15+
[eventlistener:supervisor-proc-exit-listener]
16+
command=/usr/bin/supervisor-proc-exit-listener --container-name dhcp_relay
17+
events=PROCESS_STATE_EXITED,PROCESS_STATE_RUNNING
18+
autostart=true
19+
autorestart=unexpected
20+
buffer_size=1024
21+
22+
[program:rsyslogd]
23+
command=/usr/sbin/rsyslogd -n -iNONE
24+
priority=1
25+
autostart=false
26+
autorestart=false
27+
stdout_logfile=syslog
28+
stderr_logfile=syslog
29+
dependent_startup=true
30+
31+
[program:start]
32+
command=/usr/bin/start.sh
33+
priority=2
34+
autostart=false
35+
autorestart=false
36+
startsecs=0
37+
stdout_logfile=syslog
38+
stderr_logfile=syslog
39+
dependent_startup=true
40+
dependent_startup_wait_for=rsyslogd:running
41+
42+
[group:dhcp-relay]
43+
programs=isc-dhcpv4-relay-Vlan1000,dhcp6relay
44+
45+
46+
[program:isc-dhcpv4-relay-Vlan1000]
47+
command=/usr/sbin/dhcrelay -d -m discard -a %%h:%%p %%P --name-alias-map-file /tmp/port-name-alias-map.txt -id Vlan1000 -iu Vlan2000 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -iu PortChannel01 192.0.0.1 192.0.0.2
48+
priority=3
49+
autostart=false
50+
autorestart=false
51+
stdout_logfile=syslog
52+
stderr_logfile=syslog
53+
dependent_startup=true
54+
dependent_startup_wait_for=start:exited
55+
56+
57+
[program:dhcp6relay]
58+
command=/usr/sbin/dhcp6relay
59+
priority=3
60+
autostart=false
61+
autorestart=false
62+
stdout_logfile=syslog
63+
stderr_logfile=syslog
64+
dependent_startup=true
65+
dependent_startup_wait_for=start:exited
66+
67+
[group:dhcpmon]
68+
programs=dhcpmon-Vlan1000
69+
70+
[program:dhcpmon-Vlan1000]
71+
command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -iu PortChannel01 -im eth0
72+
priority=4
73+
autostart=false
74+
autorestart=false
75+
stdout_logfile=syslog
76+
stderr_logfile=syslog
77+
dependent_startup=true
78+
dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running
79+
80+

src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay.supervisord.conf

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ dependent_startup=true
4040
dependent_startup_wait_for=rsyslogd:running
4141

4242
[group:dhcp-relay]
43-
programs=isc-dhcpv4-relay-Vlan1000,dhcp6relay
43+
programs=isc-dhcpv4-relay-Vlan1000,isc-dhcpv4-relay-Vlan2000,dhcp6relay
44+
4445

4546
[program:isc-dhcpv4-relay-Vlan1000]
4647
command=/usr/sbin/dhcrelay -d -m discard -a %%h:%%p %%P --name-alias-map-file /tmp/port-name-alias-map.txt -id Vlan1000 -iu Vlan2000 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -iu PortChannel01 192.0.0.1 192.0.0.2
@@ -52,9 +53,19 @@ stderr_logfile=syslog
5253
dependent_startup=true
5354
dependent_startup_wait_for=start:exited
5455

56+
[program:isc-dhcpv4-relay-Vlan2000]
57+
command=/usr/sbin/dhcrelay -d -m discard -a %%h:%%p %%P --name-alias-map-file /tmp/port-name-alias-map.txt -id Vlan2000 -iu Vlan1000 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -iu PortChannel01 192.0.0.3 192.0.0.4
58+
priority=3
59+
autostart=false
60+
autorestart=false
61+
stdout_logfile=syslog
62+
stderr_logfile=syslog
63+
dependent_startup=true
64+
dependent_startup_wait_for=start:exited
65+
66+
5567
[program:dhcp6relay]
5668
command=/usr/sbin/dhcp6relay
57-
5869
priority=3
5970
autostart=false
6071
autorestart=false
@@ -63,9 +74,8 @@ stderr_logfile=syslog
6374
dependent_startup=true
6475
dependent_startup_wait_for=start:exited
6576

66-
6777
[group:dhcpmon]
68-
programs=dhcpmon-Vlan1000
78+
programs=dhcpmon-Vlan1000,dhcpmon-Vlan2000
6979

7080
[program:dhcpmon-Vlan1000]
7181
command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -iu PortChannel01 -im eth0
@@ -75,6 +85,16 @@ autorestart=false
7585
stdout_logfile=syslog
7686
stderr_logfile=syslog
7787
dependent_startup=true
78-
dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running dhcp6relay:running
88+
dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running
89+
90+
[program:dhcpmon-Vlan2000]
91+
command=/usr/sbin/dhcpmon -id Vlan2000 -iu Vlan1000 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -iu PortChannel01 -im eth0
92+
priority=4
93+
autostart=false
94+
autorestart=false
95+
stdout_logfile=syslog
96+
stderr_logfile=syslog
97+
dependent_startup=true
98+
dependent_startup_wait_for=isc-dhcpv4-relay-Vlan2000:running
7999

80100

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
[supervisord]
2+
logfile_maxbytes=1MB
3+
logfile_backups=2
4+
nodaemon=true
5+
6+
[eventlistener:dependent-startup]
7+
command=python3 -m supervisord_dependent_startup
8+
autostart=true
9+
autorestart=unexpected
10+
startretries=0
11+
exitcodes=0,3
12+
events=PROCESS_STATE
13+
buffer_size=1024
14+
15+
[eventlistener:supervisor-proc-exit-listener]
16+
command=/usr/bin/supervisor-proc-exit-listener --container-name dhcp_relay
17+
events=PROCESS_STATE_EXITED,PROCESS_STATE_RUNNING
18+
autostart=true
19+
autorestart=unexpected
20+
buffer_size=1024
21+
22+
[program:rsyslogd]
23+
command=/usr/sbin/rsyslogd -n -iNONE
24+
priority=1
25+
autostart=false
26+
autorestart=false
27+
stdout_logfile=syslog
28+
stderr_logfile=syslog
29+
dependent_startup=true
30+
31+
[program:start]
32+
command=/usr/bin/start.sh
33+
priority=2
34+
autostart=false
35+
autorestart=false
36+
startsecs=0
37+
stdout_logfile=syslog
38+
stderr_logfile=syslog
39+
dependent_startup=true
40+
dependent_startup_wait_for=rsyslogd:running
41+
42+
[group:dhcp-relay]
43+
programs=isc-dhcpv4-relay-Vlan1000,dhcp6relay
44+
45+
46+
[program:isc-dhcpv4-relay-Vlan1000]
47+
command=/usr/sbin/dhcrelay -d -m discard -a %%h:%%p %%P --name-alias-map-file /tmp/port-name-alias-map.txt -id Vlan1000 -iu Vlan2000 -iu PortChannel01 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 192.0.0.1 192.0.0.2
48+
priority=3
49+
autostart=false
50+
autorestart=false
51+
stdout_logfile=syslog
52+
stderr_logfile=syslog
53+
dependent_startup=true
54+
dependent_startup_wait_for=start:exited
55+
56+
57+
[program:dhcp6relay]
58+
command=/usr/sbin/dhcp6relay
59+
priority=3
60+
autostart=false
61+
autorestart=false
62+
stdout_logfile=syslog
63+
stderr_logfile=syslog
64+
dependent_startup=true
65+
dependent_startup_wait_for=start:exited
66+
67+
[group:dhcpmon]
68+
programs=dhcpmon-Vlan1000
69+
70+
[program:dhcpmon-Vlan1000]
71+
command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel01 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -im eth0
72+
priority=4
73+
autostart=false
74+
autorestart=false
75+
stdout_logfile=syslog
76+
stderr_logfile=syslog
77+
dependent_startup=true
78+
dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running
79+
80+

src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay.supervisord.conf

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ dependent_startup=true
4040
dependent_startup_wait_for=rsyslogd:running
4141

4242
[group:dhcp-relay]
43-
programs=isc-dhcpv4-relay-Vlan1000,dhcp6relay
43+
programs=isc-dhcpv4-relay-Vlan1000,isc-dhcpv4-relay-Vlan2000,dhcp6relay
44+
4445

4546
[program:isc-dhcpv4-relay-Vlan1000]
4647
command=/usr/sbin/dhcrelay -d -m discard -a %%h:%%p %%P --name-alias-map-file /tmp/port-name-alias-map.txt -id Vlan1000 -iu Vlan2000 -iu PortChannel01 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 192.0.0.1 192.0.0.2
@@ -52,9 +53,19 @@ stderr_logfile=syslog
5253
dependent_startup=true
5354
dependent_startup_wait_for=start:exited
5455

56+
[program:isc-dhcpv4-relay-Vlan2000]
57+
command=/usr/sbin/dhcrelay -d -m discard -a %%h:%%p %%P --name-alias-map-file /tmp/port-name-alias-map.txt -id Vlan2000 -iu Vlan1000 -iu PortChannel01 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 192.0.0.3 192.0.0.4
58+
priority=3
59+
autostart=false
60+
autorestart=false
61+
stdout_logfile=syslog
62+
stderr_logfile=syslog
63+
dependent_startup=true
64+
dependent_startup_wait_for=start:exited
65+
66+
5567
[program:dhcp6relay]
5668
command=/usr/sbin/dhcp6relay
57-
5869
priority=3
5970
autostart=false
6071
autorestart=false
@@ -63,9 +74,8 @@ stderr_logfile=syslog
6374
dependent_startup=true
6475
dependent_startup_wait_for=start:exited
6576

66-
6777
[group:dhcpmon]
68-
programs=dhcpmon-Vlan1000
78+
programs=dhcpmon-Vlan1000,dhcpmon-Vlan2000
6979

7080
[program:dhcpmon-Vlan1000]
7181
command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel01 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -im eth0
@@ -75,6 +85,16 @@ autorestart=false
7585
stdout_logfile=syslog
7686
stderr_logfile=syslog
7787
dependent_startup=true
78-
dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running dhcp6relay:running
88+
dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running
89+
90+
[program:dhcpmon-Vlan2000]
91+
command=/usr/sbin/dhcpmon -id Vlan2000 -iu Vlan1000 -iu PortChannel01 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -im eth0
92+
priority=4
93+
autostart=false
94+
autorestart=false
95+
stdout_logfile=syslog
96+
stderr_logfile=syslog
97+
dependent_startup=true
98+
dependent_startup_wait_for=isc-dhcpv4-relay-Vlan2000:running
7999

80100

src/sonic-config-engine/tests/t0-sample-graph.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,8 @@
270270
<StaticDHCPRelay>0.0.0.0/0</StaticDHCPRelay>
271271
<FhrpProtoType i:nil="true"/>
272272
<Type i:nil="true"/>
273-
<DhcpRelays></DhcpRelays>
273+
<DhcpRelays>192.0.0.3;192.0.0.4</DhcpRelays>
274+
<Dhcpv6Relays>fc02:2000::3;fc02:2000::4</Dhcpv6Relays>
274275
<VlanID>2000</VlanID>
275276
<Tag>2000</Tag>
276277
<Subnets>192.168.200.0/27</Subnets>

0 commit comments

Comments
 (0)