c8a00eda95
Fix Azure/SONiC#551 When eth0 IP address is configured, an ip rule is getting added for eth0 IP address through the interfaces.j2 template. This eth0 ip rule creates an issue when VRF (data VRF or management VRF) is also created in the system. When any VRF (data VRF or management VRF) is created, a new rule is getting added automatically by kernel as "1000: from all lookup [l3mdev-table]". This l3mdev IP rule is never getting deleted even if VRF is deleted. Once if this l3mdev IP rule is added, if user configures IP address for the eth0 interface, interfaces.j2 adds an eth0 IP rule as "1000:from 100.104.47.74 lookup default ". Priority 1000 is automatically chosen by kernel and hence this rule gets higher priority than the already existing rule "1001:from all lookup local ". This results in an issue "ping from console to eth0 IP does not work once if VRF is created" as explained in Issue 551. More details and possible solutions are explained as comments in the Issue551. This PR is to resolve the issue by always fixing the low priority 32765 for the IP rule that is created for the eth0 IP address. Tested with various combinations of VRF creation, deletion and IP address configuration along with ping from console to eth0 IP address. Co-authored-by: Kannan KVS <kannan_kvs@dell.com>
109 lines
4.0 KiB
Django/Jinja
109 lines
4.0 KiB
Django/Jinja
#
|
|
{% block banner %}
|
|
# =============== Managed by SONiC Config Engine DO NOT EDIT! ===============
|
|
# generated from /usr/share/sonic/templates/interfaces.j2 using sonic-cfggen
|
|
# file: /etc/network/interfaces
|
|
#
|
|
{% endblock banner %}
|
|
{% block mgmt_vrf %}
|
|
{% if (MGMT_VRF_CONFIG) and (MGMT_VRF_CONFIG['vrf_global']['mgmtVrfEnabled'] == "true") %}
|
|
auto mgmt
|
|
iface mgmt
|
|
vrf-table 5000
|
|
# The loopback network interface for mgmt VRF that is required for applications like NTP
|
|
up ip link add lo-m type dummy
|
|
up ip link set dev lo-m master mgmt
|
|
up ip addr add 127.0.0.1/16 dev lo-m
|
|
up ip link set lo-m up
|
|
down ip link delete dev lo-m
|
|
{% endif %}
|
|
{% endblock mgmt_vrf %}
|
|
{% block loopback %}
|
|
# The loopback network interface
|
|
auto lo
|
|
iface lo inet loopback
|
|
address 127.0.0.1
|
|
netmask 255.255.0.0
|
|
post-up ip addr del 127.0.0.1/8 dev lo
|
|
{% endblock loopback %}
|
|
{% block mgmt_interface %}
|
|
|
|
# The management network interface
|
|
auto eth0
|
|
{% if (ZTP_DHCP_DISABLED is not defined) and (ZTP is defined) and (ZTP['mode'] is defined and ZTP['mode']['profile'] == 'active') %}
|
|
|
|
|
|
# ZTP out-of-band interface
|
|
allow-hotplug eth0
|
|
{% if ZTP['mode']['ipv4'] == 'true' %}
|
|
iface eth0 inet dhcp
|
|
{% endif %}
|
|
{% if ZTP['mode']['ipv6'] == 'true' %}
|
|
iface eth0 inet6 dhcp
|
|
up sysctl net.ipv6.conf.eth0.accept_ra=1
|
|
down sysctl net.ipv6.conf.eth0.accept_ra=0
|
|
{% endif %}
|
|
|
|
{% if ZTP['mode']['inband'] == 'true' %}
|
|
{% for port in PORT %}
|
|
|
|
# ZTP in-band interface {{ port }}
|
|
auto {{ port }}
|
|
allow-hotplug {{ port }}
|
|
{% if PORT_DATA['PORT_TABLE:'+port] is defined and PORT_DATA['PORT_TABLE:'+port]['value']['oper_status'] == 'up' %}
|
|
{% if ZTP['mode']['ipv4'] == 'true' %}
|
|
iface {{ port }} inet dhcp
|
|
{% endif %}
|
|
{% if ZTP['mode']['ipv6'] == 'true' %}
|
|
iface {{ port }} inet6 dhcp
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endif %}
|
|
|
|
{% else %}
|
|
{% if MGMT_INTERFACE %}
|
|
{% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
|
|
iface eth0 {{ 'inet' if prefix | ipv4 else 'inet6' }} static
|
|
address {{ prefix | ip }}
|
|
netmask {{ prefix | netmask if prefix | ipv4 else prefix | prefixlen }}
|
|
network {{ prefix | network }}
|
|
broadcast {{ prefix | broadcast }}
|
|
{% set vrf_table = 'default' %}
|
|
{% if (MGMT_VRF_CONFIG) and (MGMT_VRF_CONFIG['vrf_global']['mgmtVrfEnabled'] == "true") %}
|
|
{% set vrf_table = '5000' %}
|
|
vrf mgmt
|
|
{% endif %}
|
|
########## management network policy routing rules
|
|
# management port up rules
|
|
up ip {{ '-4' if prefix | ipv4 else '-6' }} route add default via {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} dev eth0 table {{ vrf_table }} metric 201
|
|
up ip {{ '-4' if prefix | ipv4 else '-6' }} route add {{ prefix | network }}/{{ prefix | prefixlen }} dev eth0 table {{ vrf_table }}
|
|
up ip {{ '-4' if prefix | ipv4 else '-6' }} rule add pref 32765 from {{ prefix | ip }}/{{ '32' if prefix | ipv4 else '128' }} table {{ vrf_table }}
|
|
{% for route in MGMT_INTERFACE[(name, prefix)]['forced_mgmt_routes'] %}
|
|
up ip rule add to {{ route }} table {{ vrf_table }}
|
|
{% endfor %}
|
|
# management port down rules
|
|
pre-down ip {{ '-4' if prefix | ipv4 else '-6' }} route delete default via {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} dev eth0 table {{ vrf_table }}
|
|
pre-down ip {{ '-4' if prefix | ipv4 else '-6' }} route delete {{ prefix | network }}/{{ prefix | prefixlen }} dev eth0 table {{ vrf_table }}
|
|
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 }}
|
|
{% for route in MGMT_INTERFACE[(name, prefix)]['forced_mgmt_routes'] %}
|
|
pre-down ip rule delete to {{ route }} table {{ vrf_table }}
|
|
{% endfor %}
|
|
{# TODO: COPP policy type rules #}
|
|
{% endfor %}
|
|
{% else %}
|
|
iface eth0 inet dhcp
|
|
metric 202
|
|
{% if (MGMT_VRF_CONFIG) and (MGMT_VRF_CONFIG['vrf_global']['mgmtVrfEnabled'] == "true") %}
|
|
vrf mgmt
|
|
{% endif %}
|
|
iface eth0 inet6 dhcp
|
|
up sysctl net.ipv6.conf.eth0.accept_ra=1
|
|
down sysctl net.ipv6.conf.eth0.accept_ra=0
|
|
{% endif %}
|
|
{% endif %}
|
|
#
|
|
source /etc/network/interfaces.d/*
|
|
#
|
|
{% endblock mgmt_interface %}
|