Skip to content

Commit 5171589

Browse files
authored
Add support to generate /e/n/i when there are multiple MGMT_INTERFACE (#11368)
Why I did it Currently interfaces.j2 hardcodes to eth0 even when there are multiple interfaces in MGMT_INTERFACE. This change adds support to generate /e/n/i when there are multiple interfaces in MGMT_INTERFACE. How I did it By removing hardcoded eth0 when looping through MGMT_INTERFACE. How to verify it Verified through unit test. Which release branch to backport (provide reason below if selected) 201811 201911 202006 202012 202106 202111 202205 Description for the changelog Link to config_db schema for YANG module changes A picture of a cute animal (not mandatory but encouraged)
1 parent 8791a32 commit 5171589

File tree

6 files changed

+1123
-7
lines changed

6 files changed

+1123
-7
lines changed

files/image_config/interfaces/interfaces.j2

+10-6
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ iface lo inet loopback
3030
{% block mgmt_interface %}
3131

3232
# The management network interface
33-
auto eth0
3433
{% if (ZTP_DHCP_DISABLED is not defined) and (ZTP is defined) and (ZTP['mode'] is defined and ZTP['mode']['profile'] == 'active') %}
34+
auto eth0
3535

3636

3737
# ZTP out-of-band interface
@@ -64,8 +64,11 @@ iface {{ port }} inet6 dhcp
6464

6565
{% else %}
6666
{% if MGMT_INTERFACE %}
67+
{% for (name, prefix) in MGMT_INTERFACE|pfx_filter|unique(attribute=0) %}
68+
auto {{ name }}
69+
{% endfor %}
6770
{% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
68-
iface eth0 {{ 'inet' if prefix | ipv4 else 'inet6' }} static
71+
iface {{ name }} {{ 'inet' if prefix | ipv4 else 'inet6' }} static
6972
address {{ prefix | ip }}
7073
netmask {{ prefix | netmask if prefix | ipv4 else prefix | prefixlen }}
7174
network {{ prefix | network }}
@@ -77,22 +80,23 @@ iface eth0 {{ 'inet' if prefix | ipv4 else 'inet6' }} static
7780
{% endif %}
7881
########## management network policy routing rules
7982
# management port up rules
80-
up ip {{ '-4' if prefix | ipv4 else '-6' }} route add default via {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} dev eth0 table {{ vrf_table }} metric 201
81-
up ip {{ '-4' if prefix | ipv4 else '-6' }} route add {{ prefix | network }}/{{ prefix | prefixlen }} dev eth0 table {{ vrf_table }}
83+
up ip {{ '-4' if prefix | ipv4 else '-6' }} route add default via {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} dev {{ name }} table {{ vrf_table }} metric 201
84+
up ip {{ '-4' if prefix | ipv4 else '-6' }} route add {{ prefix | network }}/{{ prefix | prefixlen }} dev {{ name }} table {{ vrf_table }}
8285
up ip {{ '-4' if prefix | ipv4 else '-6' }} rule add pref 32765 from {{ prefix | ip }}/{{ '32' if prefix | ipv4 else '128' }} table {{ vrf_table }}
8386
{% for route in MGMT_INTERFACE[(name, prefix)]['forced_mgmt_routes'] %}
8487
up ip rule add pref 32764 to {{ route }} table {{ vrf_table }}
8588
{% endfor %}
8689
# management port down rules
87-
pre-down ip {{ '-4' if prefix | ipv4 else '-6' }} route delete default via {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} dev eth0 table {{ vrf_table }}
88-
pre-down ip {{ '-4' if prefix | ipv4 else '-6' }} route delete {{ prefix | network }}/{{ prefix | prefixlen }} dev eth0 table {{ vrf_table }}
90+
pre-down ip {{ '-4' if prefix | ipv4 else '-6' }} route delete default via {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} dev {{ name }} table {{ vrf_table }}
91+
pre-down ip {{ '-4' if prefix | ipv4 else '-6' }} route delete {{ prefix | network }}/{{ prefix | prefixlen }} dev {{ name }} table {{ vrf_table }}
8992
pre-down ip {{ '-4' if prefix | ipv4 else '-6' }} rule delete pref 32765 from {{ prefix | ip }}/{{ '32' if prefix | ipv4 else '128' }} table {{ vrf_table }}
9093
{% for route in MGMT_INTERFACE[(name, prefix)]['forced_mgmt_routes'] %}
9194
pre-down ip rule delete pref 32764 to {{ route }} table {{ vrf_table }}
9295
{% endfor %}
9396
{# TODO: COPP policy type rules #}
9497
{% endfor %}
9598
{% else %}
99+
auto eth0
96100
iface eth0 inet dhcp
97101
metric 202
98102
{% if (MGMT_VRF_CONFIG) and (MGMT_VRF_CONFIG['vrf_global']['mgmtVrfEnabled'] == "true") %}

src/sonic-config-engine/minigraph.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from lxml import etree as ET
1111
from lxml.etree import QName
1212

13+
from natsort import natsorted, ns as natsortns
1314

1415
from portconfig import get_port_config
1516
from sonic_py_common.interface import backplane_prefix
@@ -1484,7 +1485,8 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
14841485
results['MGMT_INTERFACE'] = {}
14851486
mgmt_intf_count = 0
14861487
mgmt_alias_reverse_mapping = {}
1487-
for key in mgmt_intf:
1488+
sorted_keys = natsorted(mgmt_intf.keys(), alg=natsortns.IGNORECASE, key=lambda x : "|".join(x))
1489+
for key in sorted_keys:
14881490
alias = key[0]
14891491
if alias in mgmt_alias_reverse_mapping:
14901492
name = mgmt_alias_reverse_mapping[alias]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#
2+
# =============== Managed by SONiC Config Engine DO NOT EDIT! ===============
3+
# generated from /usr/share/sonic/templates/interfaces.j2 using sonic-cfggen
4+
# file: /etc/network/interfaces
5+
#
6+
# The loopback network interface
7+
auto lo
8+
iface lo inet loopback
9+
address 127.0.0.1
10+
netmask 255.255.0.0
11+
scope host
12+
post-up ip addr del 127.0.0.1/8 dev lo
13+
14+
# The management network interface
15+
auto eth1
16+
auto eth0
17+
iface eth1 inet static
18+
address 10.0.10.100
19+
netmask 255.255.255.0
20+
network 10.0.10.0
21+
broadcast 10.0.10.255
22+
########## management network policy routing rules
23+
# management port up rules
24+
up ip -4 route add default via 10.0.10.1 dev eth1 table default metric 201
25+
up ip -4 route add 10.0.10.0/24 dev eth1 table default
26+
up ip -4 rule add pref 32765 from 10.0.10.100/32 table default
27+
# management port down rules
28+
pre-down ip -4 route delete default via 10.0.10.1 dev eth1 table default
29+
pre-down ip -4 route delete 10.0.10.0/24 dev eth1 table default
30+
pre-down ip -4 rule delete pref 32765 from 10.0.10.100/32 table default
31+
iface eth0 inet static
32+
address 10.0.0.100
33+
netmask 255.255.255.0
34+
network 10.0.0.0
35+
broadcast 10.0.0.255
36+
########## management network policy routing rules
37+
# management port up rules
38+
up ip -4 route add default via 10.0.0.1 dev eth0 table default metric 201
39+
up ip -4 route add 10.0.0.0/24 dev eth0 table default
40+
up ip -4 rule add pref 32765 from 10.0.0.100/32 table default
41+
# management port down rules
42+
pre-down ip -4 route delete default via 10.0.0.1 dev eth0 table default
43+
pre-down ip -4 route delete 10.0.0.0/24 dev eth0 table default
44+
pre-down ip -4 rule delete pref 32765 from 10.0.0.100/32 table default
45+
iface eth1 inet6 static
46+
address 2603:10e2:0:abcd::8
47+
netmask 64
48+
network 2603:10e2:0:abcd::
49+
broadcast 2603:10e2:0:abcd:ffff:ffff:ffff:ffff
50+
########## management network policy routing rules
51+
# management port up rules
52+
up ip -6 route add default via 2603:10e2:0:abcd::1 dev eth1 table default metric 201
53+
up ip -6 route add 2603:10e2:0:abcd::/64 dev eth1 table default
54+
up ip -6 rule add pref 32765 from 2603:10e2:0:abcd::8/128 table default
55+
# management port down rules
56+
pre-down ip -6 route delete default via 2603:10e2:0:abcd::1 dev eth1 table default
57+
pre-down ip -6 route delete 2603:10e2:0:abcd::/64 dev eth1 table default
58+
pre-down ip -6 rule delete pref 32765 from 2603:10e2:0:abcd::8/128 table default
59+
iface eth0 inet6 static
60+
address 2603:10e2:0:2902::8
61+
netmask 64
62+
network 2603:10e2:0:2902::
63+
broadcast 2603:10e2:0:2902:ffff:ffff:ffff:ffff
64+
########## management network policy routing rules
65+
# management port up rules
66+
up ip -6 route add default via 2603:10e2:0:2902::1 dev eth0 table default metric 201
67+
up ip -6 route add 2603:10e2:0:2902::/64 dev eth0 table default
68+
up ip -6 rule add pref 32765 from 2603:10e2:0:2902::8/128 table default
69+
# management port down rules
70+
pre-down ip -6 route delete default via 2603:10e2:0:2902::1 dev eth0 table default
71+
pre-down ip -6 route delete 2603:10e2:0:2902::/64 dev eth0 table default
72+
pre-down ip -6 rule delete pref 32765 from 2603:10e2:0:2902::8/128 table default
73+
#
74+
source /etc/network/interfaces.d/*
75+
#
76+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#
2+
# =============== Managed by SONiC Config Engine DO NOT EDIT! ===============
3+
# generated from /usr/share/sonic/templates/interfaces.j2 using sonic-cfggen
4+
# file: /etc/network/interfaces
5+
#
6+
# The loopback network interface
7+
auto lo
8+
iface lo inet loopback
9+
address 127.0.0.1
10+
netmask 255.255.0.0
11+
scope host
12+
post-up ip addr del 127.0.0.1/8 dev lo
13+
14+
# The management network interface
15+
auto eth0
16+
auto eth1
17+
iface eth0 inet static
18+
address 10.0.0.100
19+
netmask 255.255.255.0
20+
network 10.0.0.0
21+
broadcast 10.0.0.255
22+
########## management network policy routing rules
23+
# management port up rules
24+
up ip -4 route add default via 10.0.0.1 dev eth0 table default metric 201
25+
up ip -4 route add 10.0.0.0/24 dev eth0 table default
26+
up ip -4 rule add pref 32765 from 10.0.0.100/32 table default
27+
# management port down rules
28+
pre-down ip -4 route delete default via 10.0.0.1 dev eth0 table default
29+
pre-down ip -4 route delete 10.0.0.0/24 dev eth0 table default
30+
pre-down ip -4 rule delete pref 32765 from 10.0.0.100/32 table default
31+
iface eth0 inet6 static
32+
address 2603:10e2:0:2902::8
33+
netmask 64
34+
network 2603:10e2:0:2902::
35+
broadcast 2603:10e2:0:2902:ffff:ffff:ffff:ffff
36+
########## management network policy routing rules
37+
# management port up rules
38+
up ip -6 route add default via 2603:10e2:0:2902::1 dev eth0 table default metric 201
39+
up ip -6 route add 2603:10e2:0:2902::/64 dev eth0 table default
40+
up ip -6 rule add pref 32765 from 2603:10e2:0:2902::8/128 table default
41+
# management port down rules
42+
pre-down ip -6 route delete default via 2603:10e2:0:2902::1 dev eth0 table default
43+
pre-down ip -6 route delete 2603:10e2:0:2902::/64 dev eth0 table default
44+
pre-down ip -6 rule delete pref 32765 from 2603:10e2:0:2902::8/128 table default
45+
iface eth1 inet static
46+
address 10.0.10.100
47+
netmask 255.255.255.0
48+
network 10.0.10.0
49+
broadcast 10.0.10.255
50+
########## management network policy routing rules
51+
# management port up rules
52+
up ip -4 route add default via 10.0.10.1 dev eth1 table default metric 201
53+
up ip -4 route add 10.0.10.0/24 dev eth1 table default
54+
up ip -4 rule add pref 32765 from 10.0.10.100/32 table default
55+
# management port down rules
56+
pre-down ip -4 route delete default via 10.0.10.1 dev eth1 table default
57+
pre-down ip -4 route delete 10.0.10.0/24 dev eth1 table default
58+
pre-down ip -4 rule delete pref 32765 from 10.0.10.100/32 table default
59+
iface eth1 inet6 static
60+
address 2603:10e2:0:abcd::8
61+
netmask 64
62+
network 2603:10e2:0:abcd::
63+
broadcast 2603:10e2:0:abcd:ffff:ffff:ffff:ffff
64+
########## management network policy routing rules
65+
# management port up rules
66+
up ip -6 route add default via 2603:10e2:0:abcd::1 dev eth1 table default metric 201
67+
up ip -6 route add 2603:10e2:0:abcd::/64 dev eth1 table default
68+
up ip -6 rule add pref 32765 from 2603:10e2:0:abcd::8/128 table default
69+
# management port down rules
70+
pre-down ip -6 route delete default via 2603:10e2:0:abcd::1 dev eth1 table default
71+
pre-down ip -6 route delete 2603:10e2:0:abcd::/64 dev eth1 table default
72+
pre-down ip -6 rule delete pref 32765 from 2603:10e2:0:abcd::8/128 table default
73+
#
74+
source /etc/network/interfaces.d/*
75+
#
76+

0 commit comments

Comments
 (0)