Skip to content

Commit c274be2

Browse files
authored
Fix IPV6 forced-mgmt-route not work issue (#17299)
ix IPV6 forced-mgmt-route not work issue Why I did it IPV6 forced-mgmt-route not work When add a IPV6 route, should use 'ip -6 rule add pref 32764 address' command, but currently in the template the '-6' parameter are missing, so the IPV6 route been add to IPV4 route table. Also this PR depends on #17281 , which will fix the IPV6 'default' route table missing in IPV6 route lookup issue. Microsoft ADO (number only):24719238
1 parent 91d77fe commit c274be2

File tree

5 files changed

+43
-13
lines changed

5 files changed

+43
-13
lines changed

files/image_config/interfaces/interfaces.j2

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ iface {{ name }} {{ 'inet' if prefix | ipv4 else 'inet6' }} static
8686
up ip {{ '-4' if prefix | ipv4 else '-6' }} route add {{ prefix | network }}/{{ prefix | prefixlen }} dev {{ name }} table {{ vrf_table }}
8787
up ip {{ '-4' if prefix | ipv4 else '-6' }} rule add pref {{ force_mgmt_route_priority + 1 }} from {{ prefix | ip }}/{{ '32' if prefix | ipv4 else '128' }} table {{ vrf_table }}
8888
{% for route in MGMT_INTERFACE[(name, prefix)]['forced_mgmt_routes'] %}
89-
up ip rule add pref {{ force_mgmt_route_priority }} to {{ route }} table {{ vrf_table }}
89+
up ip {{ '-4' if prefix | ipv4 else '-6' }} rule add pref {{ force_mgmt_route_priority }} to {{ route }} table {{ vrf_table }}
9090
{% endfor %}
9191
{% if prefix | ipv6 and vrf_table == 'default'%}
9292
# IPV6 default table not add to lookup by default, management server need this to access IPV6 address when BGP shutdown
@@ -97,7 +97,7 @@ iface {{ name }} {{ 'inet' if prefix | ipv4 else 'inet6' }} static
9797
pre-down ip {{ '-4' if prefix | ipv4 else '-6' }} route delete {{ prefix | network }}/{{ prefix | prefixlen }} dev {{ name }} table {{ vrf_table }}
9898
pre-down ip {{ '-4' if prefix | ipv4 else '-6' }} rule delete pref {{ force_mgmt_route_priority + 1 }} from {{ prefix | ip }}/{{ '32' if prefix | ipv4 else '128' }} table {{ vrf_table }}
9999
{% for route in MGMT_INTERFACE[(name, prefix)]['forced_mgmt_routes'] %}
100-
pre-down ip rule delete pref {{ force_mgmt_route_priority }} to {{ route }} table {{ vrf_table }}
100+
pre-down ip {{ '-4' if route | ipv4 else '-6' }} rule delete pref {{ force_mgmt_route_priority }} to {{ route }} table {{ vrf_table }}
101101
{% endfor %}
102102
{% if prefix | ipv6 and vrf_table == 'default'%}
103103
pre-down ip -6 rule delete pref {{ force_mgmt_route_priority + 3 }} lookup {{ vrf_table }}

src/sonic-config-engine/minigraph.py

+28-2
Original file line numberDiff line numberDiff line change
@@ -1459,6 +1459,33 @@ def select_mmu_profiles(profile, platform, hwsku):
14591459
base_file = os.path.join(path, file_item)
14601460
exec_cmd(["sudo", "cp", file_in_dir, base_file])
14611461

1462+
def address_type(address):
1463+
# encode and decode to unicode, because when address is bytes type, ip_network will throw AddressValueError
1464+
# set strict to False because address may set host bit, for example 192.168.0.1/24
1465+
return type(ipaddress.ip_network(UNICODE_TYPE(address), False))
1466+
1467+
def update_forced_mgmt_route(mgmt_intf, mgmt_routes):
1468+
for mgmt_intf_key in mgmt_intf.keys():
1469+
forced_mgmt_routes = []
1470+
1471+
try:
1472+
# get mgmt interface type
1473+
mgmt_intf_addr = mgmt_intf_key[1]
1474+
mgmt_iftype = address_type(mgmt_intf_addr)
1475+
1476+
# add mgmt route to different mgmt interface by address type
1477+
for mgmt_route in mgmt_routes:
1478+
route_iftype = address_type(mgmt_route)
1479+
if mgmt_iftype == route_iftype:
1480+
forced_mgmt_routes.append(mgmt_route)
1481+
except ValueError as e:
1482+
print("Warning: invalid management routes in minigraph, exception: {}".format(e), file=sys.stderr)
1483+
continue
1484+
1485+
# forced_mgmt_routes yang model not support empty list
1486+
if len(forced_mgmt_routes) > 0:
1487+
mgmt_intf[mgmt_intf_key]['forced_mgmt_routes'] = forced_mgmt_routes
1488+
14621489
###############################################################################
14631490
#
14641491
# Main functions
@@ -1700,8 +1727,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
17001727
results['BGP_VOQ_CHASSIS_NEIGHBOR'] = bgp_voq_chassis_sessions
17011728
results['BGP_SENTINELS'] = bgp_sentinel_sessions
17021729
if mgmt_routes:
1703-
# TODO: differentiate v4 and v6
1704-
next(iter(mgmt_intf.values()))['forced_mgmt_routes'] = mgmt_routes
1730+
update_forced_mgmt_route(mgmt_intf, mgmt_routes)
17051731
results['MGMT_PORT'] = {}
17061732
results['MGMT_INTERFACE'] = {}
17071733
mgmt_intf_count = 0

src/sonic-config-engine/tests/sample_output/py2/mvrf_interfaces

+6-4
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ iface eth0 inet static
3434
up ip -4 route add default via 10.0.0.1 dev eth0 table 5000 metric 201
3535
up ip -4 route add 10.0.0.0/24 dev eth0 table 5000
3636
up ip -4 rule add pref 32765 from 10.0.0.100/32 table 5000
37-
up ip rule add pref 32764 to 11.11.11.11 table 5000
38-
up ip rule add pref 32764 to 22.22.22.0/23 table 5000
37+
up ip -4 rule add pref 32764 to 11.11.11.11 table 5000
38+
up ip -4 rule add pref 32764 to 22.22.22.0/23 table 5000
3939
# management port down rules
4040
pre-down ip -4 route delete default via 10.0.0.1 dev eth0 table 5000
4141
pre-down ip -4 route delete 10.0.0.0/24 dev eth0 table 5000
4242
pre-down ip -4 rule delete pref 32765 from 10.0.0.100/32 table 5000
43-
pre-down ip rule delete pref 32764 to 11.11.11.11 table 5000
44-
pre-down ip rule delete pref 32764 to 22.22.22.0/23 table 5000
43+
pre-down ip -4 rule delete pref 32764 to 11.11.11.11 table 5000
44+
pre-down ip -4 rule delete pref 32764 to 22.22.22.0/23 table 5000
4545
iface eth0 inet6 static
4646
address 2603:10e2:0:2902::8
4747
netmask 64
@@ -53,10 +53,12 @@ iface eth0 inet6 static
5353
up ip -6 route add default via 2603:10e2:0:2902::1 dev eth0 table 5000 metric 201
5454
up ip -6 route add 2603:10e2:0:2902::/64 dev eth0 table 5000
5555
up ip -6 rule add pref 32765 from 2603:10e2:0:2902::8/128 table 5000
56+
up ip -6 rule add pref 32764 to 33:33:33::0/64 table 5000
5657
# management port down rules
5758
pre-down ip -6 route delete default via 2603:10e2:0:2902::1 dev eth0 table 5000
5859
pre-down ip -6 route delete 2603:10e2:0:2902::/64 dev eth0 table 5000
5960
pre-down ip -6 rule delete pref 32765 from 2603:10e2:0:2902::8/128 table 5000
61+
pre-down ip -6 rule delete pref 32764 to 33:33:33::0/64 table 5000
6062
#
6163
source /etc/network/interfaces.d/*
6264
#

src/sonic-config-engine/tests/sample_output/py3/mvrf_interfaces

+6-4
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ iface eth0 inet static
3434
up ip -4 route add default via 10.0.0.1 dev eth0 table 5000 metric 201
3535
up ip -4 route add 10.0.0.0/24 dev eth0 table 5000
3636
up ip -4 rule add pref 32765 from 10.0.0.100/32 table 5000
37-
up ip rule add pref 32764 to 11.11.11.11 table 5000
38-
up ip rule add pref 32764 to 22.22.22.0/23 table 5000
37+
up ip -4 rule add pref 32764 to 11.11.11.11 table 5000
38+
up ip -4 rule add pref 32764 to 22.22.22.0/23 table 5000
3939
# management port down rules
4040
pre-down ip -4 route delete default via 10.0.0.1 dev eth0 table 5000
4141
pre-down ip -4 route delete 10.0.0.0/24 dev eth0 table 5000
4242
pre-down ip -4 rule delete pref 32765 from 10.0.0.100/32 table 5000
43-
pre-down ip rule delete pref 32764 to 11.11.11.11 table 5000
44-
pre-down ip rule delete pref 32764 to 22.22.22.0/23 table 5000
43+
pre-down ip -4 rule delete pref 32764 to 11.11.11.11 table 5000
44+
pre-down ip -4 rule delete pref 32764 to 22.22.22.0/23 table 5000
4545
iface eth0 inet6 static
4646
address 2603:10e2:0:2902::8
4747
netmask 64
@@ -53,10 +53,12 @@ iface eth0 inet6 static
5353
up ip -6 route add default via 2603:10e2:0:2902::1 dev eth0 table 5000 metric 201
5454
up ip -6 route add 2603:10e2:0:2902::/64 dev eth0 table 5000
5555
up ip -6 rule add pref 32765 from 2603:10e2:0:2902::8/128 table 5000
56+
up ip -6 rule add pref 32764 to 33:33:33::0/64 table 5000
5657
# management port down rules
5758
pre-down ip -6 route delete default via 2603:10e2:0:2902::1 dev eth0 table 5000
5859
pre-down ip -6 route delete 2603:10e2:0:2902::/64 dev eth0 table 5000
5960
pre-down ip -6 rule delete pref 32765 from 2603:10e2:0:2902::8/128 table 5000
61+
pre-down ip -6 rule delete pref 32764 to 33:33:33::0/64 table 5000
6062
#
6163
source /etc/network/interfaces.d/*
6264
#

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -787,7 +787,7 @@
787787
<a:DeviceProperty>
788788
<a:Name>ForcedMgmtRoutes</a:Name>
789789
<a:Reference i:nil="true"/>
790-
<a:Value>11.11.11.11;22.22.22.0/23</a:Value>
790+
<a:Value>11.11.11.11;22.22.22.0/23;33:33:33::0/64</a:Value>
791791
</a:DeviceProperty>
792792
<a:DeviceProperty>
793793
<a:Name>ErspanDestinationIpv4</a:Name>

0 commit comments

Comments
 (0)