diff --git a/dockers/docker-dhcp-relay/dhcp-relay.monitors.j2 b/dockers/docker-dhcp-relay/dhcp-relay.monitors.j2
index ae11105ae3ba..0928bac22d4d 100644
--- a/dockers/docker-dhcp-relay/dhcp-relay.monitors.j2
+++ b/dockers/docker-dhcp-relay/dhcp-relay.monitors.j2
@@ -6,7 +6,7 @@ programs=
{% 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 %}
-{% if VLAN and vlan_name in VLAN and 'dhcpv6_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcpv6_servers']|length > 0 %}
+{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
{% set _dummy = monitor_instance.update({'flag': True}) %}
{%- endif %}
{% if monitor_instance.flag %}
@@ -31,7 +31,7 @@ dhcpmon-{{ vlan_name }}
{% endfor %}
{% endif %}
{# Check DHCPv6 agents #}
-{% if VLAN and vlan_name in VLAN and 'dhcpv6_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcpv6_servers']|length > 0 %}
+{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
{% for dhcpv6_server in VLAN[vlan_name]['dhcpv6_servers'] %}
{% if dhcpv6_server | ipv6 %}
{% set _dummy = relay_for_ipv6.update({'flag': True}) %}
@@ -68,7 +68,6 @@ stderr_logfile=syslog
dependent_startup=true
dependent_startup_wait_for=
{%- if relay_for_ipv4.flag %}isc-dhcpv4-relay-{{ vlan_name }}:running {% endif %}
-{% if relay_for_ipv6.flag %}dhcp6relay:running{% endif %}
{% set _dummy = relay_for_ipv4.update({'flag': False}) %}
diff --git a/dockers/docker-dhcp-relay/dhcp-relay.programs.j2 b/dockers/docker-dhcp-relay/dhcp-relay.programs.j2
index 9cb0c03876d6..d539d895a5bb 100644
--- a/dockers/docker-dhcp-relay/dhcp-relay.programs.j2
+++ b/dockers/docker-dhcp-relay/dhcp-relay.programs.j2
@@ -1,5 +1,6 @@
[group:dhcp-relay]
programs=
+{%- set relay_for_ipv6 = { 'flag': False } %}
{%- set add_preceding_comma = { 'flag': False } %}
{% for vlan_name in VLAN_INTERFACE %}
{# Append DHCPv4 agents #}
@@ -8,10 +9,13 @@ programs=
{% set _dummy = add_preceding_comma.update({'flag': True}) %}
isc-dhcpv4-relay-{{ vlan_name }}
{%- endif %}
+{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
+{% set _dummy = relay_for_ipv6.update({'flag': True}) %}
+{%- endif %}
+{% endfor %}
{# Append DHCPv6 agents #}
-{% if VLAN and vlan_name in VLAN and 'dhcpv6_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcpv6_servers']|length > 0 %}
+{% if relay_for_ipv6.flag %}
{% if add_preceding_comma.flag %},{% endif %}
{% set _dummy = add_preceding_comma.update({'flag': True}) %}
dhcp6relay
-{%- endif %}
-{% endfor %}
+{% endif %}
diff --git a/dockers/docker-dhcp-relay/dhcpv6-relay.agents.j2 b/dockers/docker-dhcp-relay/dhcpv6-relay.agents.j2
index 218c95320edc..cca0b1c4b21a 100644
--- a/dockers/docker-dhcp-relay/dhcpv6-relay.agents.j2
+++ b/dockers/docker-dhcp-relay/dhcpv6-relay.agents.j2
@@ -1,15 +1,17 @@
{# Append DHCPv6 agents #}
-{% if VLAN and vlan_name in VLAN and 'dhcpv6_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcpv6_servers']|length > 0 %}
-{% for dhcpv6_server in VLAN[vlan_name]['dhcpv6_servers'] %}
+{% for vlan_name in VLAN_INTERFACE %}
+{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
+{% for dhcpv6_server in DHCP_RELAY[vlan_name]['dhcpv6_servers'] %}
{% if dhcpv6_server | ipv6 %}
{% set _dummy = relay_for_ipv6.update({'flag': True}) %}
{% endif %}
{% endfor %}
+{% endif %}
+{% endfor %}
{% if relay_for_ipv6.flag %}
{% set _dummy = relay_for_ipv6.update({'flag': False}) %}
[program:dhcp6relay]
command=/usr/sbin/dhcp6relay
-
priority=3
autostart=false
autorestart=false
@@ -19,4 +21,3 @@ dependent_startup=true
dependent_startup_wait_for=start:exited
{% endif %}
-{% endif %}
diff --git a/dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2 b/dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2
index 41a13dd496ad..ddd93bb28644 100644
--- a/dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2
+++ b/dockers/docker-dhcp-relay/docker-dhcp-relay.supervisord.conf.j2
@@ -48,7 +48,7 @@ dependent_startup_wait_for=rsyslogd:running
{% if VLAN and vlan_name in VLAN and 'dhcp_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcp_servers']|length > 0 %}
{% set _dummy = ipv4_num_relays.update({'count': ipv4_num_relays.count + 1}) %}
{% endif %}
-{% if VLAN and vlan_name in VLAN and 'dhcpv6_servers' in VLAN[vlan_name] and VLAN[vlan_name]['dhcpv6_servers']|length > 0 %}
+{% if DHCP_RELAY and vlan_name in DHCP_RELAY and DHCP_RELAY[vlan_name]['dhcpv6_servers']|length > 0 %}
{% set _dummy = ipv6_num_relays.update({'count': ipv6_num_relays.count + 1}) %}
{% endif %}
{% endfor %}
@@ -62,9 +62,9 @@ dependent_startup_wait_for=rsyslogd:running
{% set relay_for_ipv6 = { 'flag': False } %}
{% for vlan_name in VLAN_INTERFACE %}
{% include 'dhcpv4-relay.agents.j2' %}
-{% include 'dhcpv6-relay.agents.j2' %}
{% endfor %}
+{% include 'dhcpv6-relay.agents.j2' %}
{% include 'dhcp-relay.monitors.j2' %}
{% endif %}
{% endif %}
diff --git a/src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay-no-ip-helper.supervisord.conf b/src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay-no-ip-helper.supervisord.conf
new file mode 100644
index 000000000000..c36dbe22533b
--- /dev/null
+++ b/src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay-no-ip-helper.supervisord.conf
@@ -0,0 +1,80 @@
+[supervisord]
+logfile_maxbytes=1MB
+logfile_backups=2
+nodaemon=true
+
+[eventlistener:dependent-startup]
+command=python3 -m supervisord_dependent_startup
+autostart=true
+autorestart=unexpected
+startretries=0
+exitcodes=0,3
+events=PROCESS_STATE
+buffer_size=1024
+
+[eventlistener:supervisor-proc-exit-listener]
+command=/usr/bin/supervisor-proc-exit-listener --container-name dhcp_relay
+events=PROCESS_STATE_EXITED,PROCESS_STATE_RUNNING
+autostart=true
+autorestart=unexpected
+buffer_size=1024
+
+[program:rsyslogd]
+command=/usr/sbin/rsyslogd -n -iNONE
+priority=1
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+
+[program:start]
+command=/usr/bin/start.sh
+priority=2
+autostart=false
+autorestart=false
+startsecs=0
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=rsyslogd:running
+
+[group:dhcp-relay]
+programs=isc-dhcpv4-relay-Vlan1000,dhcp6relay
+
+
+[program:isc-dhcpv4-relay-Vlan1000]
+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
+priority=3
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=start:exited
+
+
+[program:dhcp6relay]
+command=/usr/sbin/dhcp6relay
+priority=3
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=start:exited
+
+[group:dhcpmon]
+programs=dhcpmon-Vlan1000
+
+[program:dhcpmon-Vlan1000]
+command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -iu PortChannel01 -im eth0
+priority=4
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running
+
+
diff --git a/src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay.supervisord.conf b/src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay.supervisord.conf
index 407ac2c80bc9..9d4a9d22de47 100644
--- a/src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay.supervisord.conf
+++ b/src/sonic-config-engine/tests/sample_output/py2/docker-dhcp-relay.supervisord.conf
@@ -40,7 +40,8 @@ dependent_startup=true
dependent_startup_wait_for=rsyslogd:running
[group:dhcp-relay]
-programs=isc-dhcpv4-relay-Vlan1000,dhcp6relay
+programs=isc-dhcpv4-relay-Vlan1000,isc-dhcpv4-relay-Vlan2000,dhcp6relay
+
[program:isc-dhcpv4-relay-Vlan1000]
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
dependent_startup=true
dependent_startup_wait_for=start:exited
+[program:isc-dhcpv4-relay-Vlan2000]
+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
+priority=3
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=start:exited
+
+
[program:dhcp6relay]
command=/usr/sbin/dhcp6relay
-
priority=3
autostart=false
autorestart=false
@@ -63,9 +74,8 @@ stderr_logfile=syslog
dependent_startup=true
dependent_startup_wait_for=start:exited
-
[group:dhcpmon]
-programs=dhcpmon-Vlan1000
+programs=dhcpmon-Vlan1000,dhcpmon-Vlan2000
[program:dhcpmon-Vlan1000]
command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -iu PortChannel01 -im eth0
@@ -75,6 +85,16 @@ autorestart=false
stdout_logfile=syslog
stderr_logfile=syslog
dependent_startup=true
-dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running dhcp6relay:running
+dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running
+
+[program:dhcpmon-Vlan2000]
+command=/usr/sbin/dhcpmon -id Vlan2000 -iu Vlan1000 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -iu PortChannel01 -im eth0
+priority=4
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=isc-dhcpv4-relay-Vlan2000:running
diff --git a/src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay-no-ip-helper.supervisord.conf b/src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay-no-ip-helper.supervisord.conf
new file mode 100644
index 000000000000..35ad0c48b82f
--- /dev/null
+++ b/src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay-no-ip-helper.supervisord.conf
@@ -0,0 +1,80 @@
+[supervisord]
+logfile_maxbytes=1MB
+logfile_backups=2
+nodaemon=true
+
+[eventlistener:dependent-startup]
+command=python3 -m supervisord_dependent_startup
+autostart=true
+autorestart=unexpected
+startretries=0
+exitcodes=0,3
+events=PROCESS_STATE
+buffer_size=1024
+
+[eventlistener:supervisor-proc-exit-listener]
+command=/usr/bin/supervisor-proc-exit-listener --container-name dhcp_relay
+events=PROCESS_STATE_EXITED,PROCESS_STATE_RUNNING
+autostart=true
+autorestart=unexpected
+buffer_size=1024
+
+[program:rsyslogd]
+command=/usr/sbin/rsyslogd -n -iNONE
+priority=1
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+
+[program:start]
+command=/usr/bin/start.sh
+priority=2
+autostart=false
+autorestart=false
+startsecs=0
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=rsyslogd:running
+
+[group:dhcp-relay]
+programs=isc-dhcpv4-relay-Vlan1000,dhcp6relay
+
+
+[program:isc-dhcpv4-relay-Vlan1000]
+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
+priority=3
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=start:exited
+
+
+[program:dhcp6relay]
+command=/usr/sbin/dhcp6relay
+priority=3
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=start:exited
+
+[group:dhcpmon]
+programs=dhcpmon-Vlan1000
+
+[program:dhcpmon-Vlan1000]
+command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel01 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -im eth0
+priority=4
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running
+
+
diff --git a/src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay.supervisord.conf b/src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay.supervisord.conf
index 5456409738e6..7ea29dfcd635 100644
--- a/src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay.supervisord.conf
+++ b/src/sonic-config-engine/tests/sample_output/py3/docker-dhcp-relay.supervisord.conf
@@ -40,7 +40,8 @@ dependent_startup=true
dependent_startup_wait_for=rsyslogd:running
[group:dhcp-relay]
-programs=isc-dhcpv4-relay-Vlan1000,dhcp6relay
+programs=isc-dhcpv4-relay-Vlan1000,isc-dhcpv4-relay-Vlan2000,dhcp6relay
+
[program:isc-dhcpv4-relay-Vlan1000]
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
dependent_startup=true
dependent_startup_wait_for=start:exited
+[program:isc-dhcpv4-relay-Vlan2000]
+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
+priority=3
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=start:exited
+
+
[program:dhcp6relay]
command=/usr/sbin/dhcp6relay
-
priority=3
autostart=false
autorestart=false
@@ -63,9 +74,8 @@ stderr_logfile=syslog
dependent_startup=true
dependent_startup_wait_for=start:exited
-
[group:dhcpmon]
-programs=dhcpmon-Vlan1000
+programs=dhcpmon-Vlan1000,dhcpmon-Vlan2000
[program:dhcpmon-Vlan1000]
command=/usr/sbin/dhcpmon -id Vlan1000 -iu Vlan2000 -iu PortChannel01 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -im eth0
@@ -75,6 +85,16 @@ autorestart=false
stdout_logfile=syslog
stderr_logfile=syslog
dependent_startup=true
-dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running dhcp6relay:running
+dependent_startup_wait_for=isc-dhcpv4-relay-Vlan1000:running
+
+[program:dhcpmon-Vlan2000]
+command=/usr/sbin/dhcpmon -id Vlan2000 -iu Vlan1000 -iu PortChannel01 -iu PortChannel02 -iu PortChannel03 -iu PortChannel04 -im eth0
+priority=4
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=isc-dhcpv4-relay-Vlan2000:running
diff --git a/src/sonic-config-engine/tests/t0-sample-graph.xml b/src/sonic-config-engine/tests/t0-sample-graph.xml
index 15fb1dc79210..05db8246ec0a 100644
--- a/src/sonic-config-engine/tests/t0-sample-graph.xml
+++ b/src/sonic-config-engine/tests/t0-sample-graph.xml
@@ -270,7 +270,8 @@
0.0.0.0/0
-
+ 192.0.0.3;192.0.0.4
+ fc02:2000::3;fc02:2000::4
2000
2000
192.168.200.0/27
diff --git a/src/sonic-config-engine/tests/t0-sample-no-ip-helper-graph.xml b/src/sonic-config-engine/tests/t0-sample-no-ip-helper-graph.xml
new file mode 100644
index 000000000000..b02304a49e14
--- /dev/null
+++ b/src/sonic-config-engine/tests/t0-sample-no-ip-helper-graph.xml
@@ -0,0 +1,938 @@
+
+
+
+
+
+ switch-t0
+ 10.1.0.32
+ BGPMonitor
+ 10.20.30.40
+ 30
+ 10
+ 3
+
+
+ false
+ switch-t0
+ 10.0.0.56
+ ARISTA01T1
+ 10.0.0.57
+ 1
+ 180
+ 60
+
+
+ switch-t0
+ FC00::71
+ ARISTA01T1
+ FC00::72
+ 1
+ 180
+ 60
+
+
+ false
+ switch-t0
+ 10.0.0.58
+ ARISTA02T1
+ 10.0.0.59
+ 1
+ 180
+ 60
+
+
+ switch-t0
+ FC00::75
+ ARISTA02T1
+ FC00::76
+ 1
+ 180
+ 60
+
+
+ false
+ switch-t0
+ 10.0.0.60
+ ARISTA03T1
+ 10.0.0.61
+ 1
+ 180
+ 60
+
+
+ switch-t0
+ FC00::79
+ ARISTA03T1
+ FC00::7A
+ 1
+ 180
+ 60
+
+
+ false
+ switch-t0
+ 10.0.0.62
+ ARISTA04T1
+ 10.0.0.63
+ 1
+ 180
+ 60
+
+
+ switch-t0
+ FC00::7D
+ ARISTA04T1
+ FC00::7E
+ 1
+ 180
+ 60
+
+
+
+
+ 1
+
+ BGPMonitor
+
+
+ BGPPeer
+ 10.1.0.32
+
+
+
+
+
+
+
+
+ 65100
+ switch-t0
+
+
+ 10.0.0.57
+
+
+
+
+
+ 10.0.0.59
+
+
+
+
+
+ 10.0.0.61
+
+
+
+
+
+ 10.0.0.63
+
+
+
+
+
+
+
+
+ 64600
+ ARISTA01T1
+
+
+
+ 64600
+ ARISTA02T1
+
+
+
+ 64600
+ ARISTA03T1
+
+
+
+ 64600
+ ARISTA04T1
+
+
+
+
+
+
+
+
+
+ HostIP
+ Loopback0
+
+ 10.1.0.32/32
+
+ 10.1.0.32/32
+
+
+ HostIP1
+ Loopback0
+
+ FC00:1::32/128
+
+ FC00:1::32/128
+
+
+ LoopbackIP1
+ Loopback1
+
+ 10.10.0.99/32
+
+ 10.10.0.99/32
+
+
+ LoopbackIP2
+ Loopback2
+
+ 10.21.0.64/32
+
+ 10.21.0.64/32
+
+
+ LoopbackIP3
+ Loopback3
+
+ 10.21.64.2/32
+
+ 10.21.64.2/32
+
+
+
+
+ HostIP
+ eth0
+
+ 10.0.0.100/24
+
+ 10.0.0.100/24
+
+
+ HostIP
+ eth0
+
+ 2603:10e2:0:2902::8/64
+
+ 2603:10e2:0:2902::8/64
+
+
+
+
+
+
+ switch-t0
+
+
+ PortChannel01
+ fortyGigE0/112
+
+
+
+ PortChannel02
+ fortyGigE0/116
+
+
+
+ PortChannel03
+ fortyGigE0/120
+
+
+
+ PortChannel04
+ fortyGigE0/124
+
+
+
+
+
+ Vlan1000
+ fortyGigE0/4;fortyGigE0/8;fortyGigE0/12;fortyGigE0/16;fortyGigE0/20;fortyGigE0/24;fortyGigE0/28;fortyGigE0/32;fortyGigE0/36;fortyGigE0/40;fortyGigE0/44;fortyGigE0/48;fortyGigE0/52;fortyGigE0/56;fortyGigE0/60;fortyGigE0/64;fortyGigE0/68;fortyGigE0/72;fortyGigE0/76;fortyGigE0/80;fortyGigE0/84;fortyGigE0/88;fortyGigE0/92;fortyGigE0/96
+ False
+ 0.0.0.0/0
+
+
+ 192.0.0.1;192.0.0.2
+ fc02:2000::1;fc02:2000::2
+ 1000
+ 1000
+ 192.168.0.0/27
+
+
+
+
+ Vlan2000
+ fortyGigE0/112;fortyGigE0/116;fortyGigE0/120
+ False
+ 0.0.0.0/0
+
+
+
+
+ 2000
+ 2000
+ 192.168.200.0/27
+
+
+
+
+ Vlan99
+ fortyGigE0/100
+ False
+ 0.0.0.0/0
+
+ UserDefinedL2Vlan
+ 192.0.0.1;192.0.0.2
+ 99
+ 99
+
+
+
+
+
+ Vlan98
+ fortyGigE0/100;PortChannel01;PortChannel03
+ False
+ 0.0.0.0/0
+
+ UserDefinedL2Vlan
+ 192.0.0.1;192.0.0.2
+ 98
+ 98
+
+
+
+
+
+
+
+
+ PortChannel01
+ 10.0.0.56/31
+
+
+
+ PortChannel01
+ FC00::71/126
+
+
+
+ PortChannel02
+ 10.0.0.58/31
+
+
+
+ PortChannel02
+ FC00::75/126
+
+
+
+ PortChannel03
+ 10.0.0.60/31
+
+
+
+ PortChannel03
+ FC00::79/126
+
+
+
+ PortChannel04
+ 10.0.0.62/31
+
+
+
+ PortChannel04
+ FC00::7D/126
+
+
+
+ Vlan1000
+ 192.168.0.1/27
+
+
+
+ Vlan2000
+ 192.168.200.1/27
+
+
+
+
+
+ ERSPAN
+ everflow
+ Everflow
+
+
+ ERSPANv6
+ everflowV6
+ Everflow
+
+
+ EGRESS_ERSPAN
+ everflow_egress
+ Everflow
+
+
+ PortChannel01;PortChannel02;PortChannel03;PortChannel04
+ DataAclIngress
+ DataPlane
+
+
+ PortChannel01;PortChannel02;Vlan98
+ DataAclEgress
+ DataPlane
+
+
+ SNMP
+ SNMP_ACL
+ SNMP
+
+
+ NTP
+ NTP_ACL
+ NTP
+
+
+ SSH
+ SSH_ACL
+ SSH
+
+
+ SSH
+ ROUTER-PROTECT
+ SSH
+
+
+ SNMP
+ ROUTER-PROTECT
+ SNMP
+
+
+ NTP
+ NTP_ACL
+
+
+
+
+
+
+
+
+
+ DeviceInterfaceLink
+ ARISTA01T1
+ Ethernet1/1
+ switch-t0
+ fortyGigE0/112
+
+
+ DeviceInterfaceLink
+ ARISTA02T1
+ Ethernet1/1
+ switch-t0
+ fortyGigE0/116
+
+
+ DeviceInterfaceLink
+ ARISTA03T1
+ Ethernet1/1
+ switch-t0
+ fortyGigE0/120
+
+
+ DeviceInterfaceLink
+ ARISTA04T1
+ Ethernet1/1
+ switch-t0
+ fortyGigE0/124
+ 100000
+
+
+ DeviceInterfaceLink
+ 100000
+ switch-t0
+ fortyGigE0/4
+ true
+ ARISTA05T1
+ Ethernet1/33
+ true
+
+
+ DeviceInterfaceLink
+ Servers0
+ eth0
+ switch-t0
+ fortyGigE0/4
+
+
+ DeviceInterfaceLink
+ Servers100
+ eth0
+ switch-t0
+ fortyGigE0/100
+
+
+
+
+ switch-t0
+ Force10-S6000
+
+
+ ARISTA01T1
+ Arista
+
+
+ ARISTA02T1
+ Arista
+
+
+ ARISTA03T1
+ Arista
+
+
+ ARISTA04T1
+ Arista
+
+
+
+
+
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet0
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet8
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet12
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet16
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet20
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet24
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet28
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet32
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet36
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet40
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet44
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet48
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet52
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet56
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet60
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet64
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet68
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet72
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet76
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet80
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet84
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet88
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet92
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet96
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet100
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet104
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet108
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet112
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet116
+
+ false
+ 0
+ 0
+ 40000
+
+
+ DeviceInterface
+
+ true
+ 1
+ Ethernet120
+
+ false
+ 0
+ 0
+ 40000
+
+
+ Force10-S6000
+
+
+
+
+
+
+ switch-t0
+
+
+ ErspanDestinationIpv4
+
+ 2.2.2.2
+
+
+
+
+
+
+
+
+
+
+
+
+ AutoNegotiation
+
+ True
+
+
+ FECDisabled
+
+ True
+
+
+ ARISTA05T1:Ethernet1/33;switch-t0:fortyGigE0/4
+
+
+
+
+
+ AutoNegotiation
+
+ False
+
+
+ FECDisabled
+
+ True
+
+
+ ARISTA06T1:Ethernet1/34;switch-t0:fortyGigE0/8
+
+
+
+
+
+
+ switch-t0
+
+
+ DeploymentId
+
+ 1
+
+
+
+
+
+
+ switch-t0
+ Force10-S6000
+
diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py
index a13669772133..2d9ac9d8f474 100644
--- a/src/sonic-config-engine/tests/test_j2files.py
+++ b/src/sonic-config-engine/tests/test_j2files.py
@@ -27,6 +27,7 @@ def setUp(self):
self.multi_asic_port_config = os.path.join(self.test_dir, 'multi_npu_data', 'sample_port_config-0.ini')
self.dell9332_t1_minigraph = os.path.join(self.test_dir, 'sample-dell-9332-t1-minigraph.xml')
self.radv_test_minigraph = os.path.join(self.test_dir, 'radv-test-sample-graph.xml')
+ self.no_ip_helper_minigraph = os.path.join(self.test_dir, 't0-sample-no-ip-helper-graph.xml')
self.output_file = os.path.join(self.test_dir, 'output')
os.environ["CFGGEN_UNIT_TESTING"] = "2"
@@ -69,7 +70,13 @@ def test_dhcp_relay(self):
template_path = os.path.join(self.test_dir, '..', '..', '..', 'dockers', 'docker-dhcp-relay', 'docker-dhcp-relay.supervisord.conf.j2')
argument = '-m ' + self.t0_minigraph + ' -p ' + self.t0_port_config + ' -t ' + template_path + ' > ' + self.output_file
self.run_script(argument)
- self.assertTrue(utils.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'docker-dhcp-relay.supervisord.conf'), self.output_file), self.output_file)
+ self.assertTrue(utils.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'docker-dhcp-relay.supervisord.conf'), self.output_file))
+
+ # Test generation of docker-dhcp-relay.supervisord.conf when a vlan is missing ip/ipv6 helpers
+ template_path = os.path.join(self.test_dir, '..', '..', '..', 'dockers', 'docker-dhcp-relay', 'docker-dhcp-relay.supervisord.conf.j2')
+ argument = '-m ' + self.no_ip_helper_minigraph + ' -p ' + self.t0_port_config + ' -t ' + template_path + ' > ' + self.output_file
+ self.run_script(argument)
+ self.assertTrue(utils.cmp(os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, 'docker-dhcp-relay-no-ip-helper.supervisord.conf'), self.output_file))
def test_radv(self):
# Test generation of radvd.conf with multiple ipv6 prefixes