Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[sub intf] Fix kernel side processing to enslave sub interface to non-default vrf #1521

Merged
merged 102 commits into from
May 24, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
cefc999
Restore eth0 up in post-test clean up
wendani Sep 29, 2020
155da0a
Merge remote-tracking branch 'origin/master'
wendani Oct 22, 2020
b4a10ad
Sub interface inherits parent port mtu changes
wendani Oct 19, 2020
84a5040
Merge remote-tracking branch 'wendani/sub_intf_mtu' into nhg_master
wendani Oct 24, 2020
1481968
ecmp hardware convergence acceleration in the event of parent port op…
wendani Oct 21, 2020
d87226e
Merge remote-tracking branch 'origin/master' into sub_intf_nhg_master
wendani Nov 1, 2020
6345d4d
Remove redundant string
wendani Nov 1, 2020
2898c1f
Merge remote-tracking branch 'origin/master' into sub_intf_nhg_master
wendani Nov 7, 2020
5851e36
Address comment: refactor code to reuse updatePortOperStatus()
wendani Nov 15, 2020
c062f94
Refactor
wendani Nov 15, 2020
f5f8c45
Refactor
wendani Nov 15, 2020
fb28c95
sub interface: alias to hold complete interface name while parentAlias
wendani Nov 15, 2020
71a603c
Update comments
wendani Nov 15, 2020
c3c9e2d
Support sub interface in non-global vrf
wendani Nov 15, 2020
205899d
Init data member
wendani Nov 15, 2020
7c93bbe
vrf extension to test_sub_port_intf_creation
wendani Nov 15, 2020
ccde0be
Get default vrf oid at instantiation
wendani Nov 15, 2020
cede478
vrf extension to test_sub_port_intf_add_ip_addrs
wendani Nov 15, 2020
9c44719
vrf extension to test_sub_port_intf_admin_status_change
wendani Nov 15, 2020
5611112
vrf extension to test_sub_port_intf_remove_ip_addrs
wendani Nov 15, 2020
695c188
vrf extension to test_sub_port_intf_removal
wendani Nov 15, 2020
5c4b86f
vrf extension to test_sub_port_intf_mtu
wendani Nov 15, 2020
2b3e876
vrf bind test for test_sub_port_intf_creation
wendani Nov 16, 2020
390e67a
vrf bind test for test_sub_port_intf_add_ip_addrs
wendani Nov 16, 2020
7763427
vrf bind test for test_sub_port_intf_admin_status_change
wendani Nov 16, 2020
2d52417
vrf bind test for test_sub_port_intf_remove_ip_addrs
wendani Nov 16, 2020
dd3d8d6
vrf bind test for test_sub_port_intf_removal
wendani Nov 16, 2020
9e79d1a
vrf bind test for test_sub_port_intf_mtu
wendani Nov 16, 2020
6f85b63
vrf test for test_sub_port_intf_nhg_accel
wendani Nov 16, 2020
7b95e72
Reorganize vrf bind test
wendani Nov 16, 2020
7e09e72
vrf test for test_sub_port_intf_oper_down_with_pending_neigh_route_tasks
wendani Nov 16, 2020
ad22c2a
Merge branch 'master' into sub_intf_nhg
lguohan Nov 25, 2020
4cf1b56
Merge remote-tracking branch 'wendani/sub_intf_nhg' into sub_intf_nhg…
wendani Nov 28, 2020
de85bd4
Update vrf creation implementation
wendani Nov 28, 2020
4b0776d
Update vrf removal implementation
wendani Nov 28, 2020
72e8322
Update code format
wendani Nov 28, 2020
d280ff9
Check vrf removal
wendani Nov 28, 2020
795dec2
Init proxy_arp data member
wendani Nov 28, 2020
1322f61
Fix name error
wendani Nov 28, 2020
f3ae2de
Merge remote-tracking branch 'origin/master' into sub_intf_vrf_master
wendani Nov 28, 2020
f2bb1cb
Fix syntax error
wendani Nov 28, 2020
148b39f
Fix name error
wendani Nov 28, 2020
0da9a52
Fix run time error
wendani Nov 29, 2020
b02f273
Move port table state update
wendani Nov 29, 2020
c7d713b
Fix run time removal dependency time out
wendani Nov 29, 2020
608d6a4
Revert "Fix name error"
wendani Nov 30, 2020
611df08
Merge remote-tracking branch 'origin/master' into sub_intf_vrf_master
wendani Jan 19, 2021
42ec34b
Merge remote-tracking branch 'origin/master' into sub_intf_vrf_master
wendani Jan 24, 2021
ee81dc3
Merge remote-tracking branch 'origin/master' into sub_intf_vrf_master
wendani Jan 26, 2021
9a94913
Merge remote-tracking branch 'origin/master' into sub_intf_vrf_master
wendani Jan 31, 2021
c18b3b6
Merge remote-tracking branch 'origin/master' into sub_intf_vrf_master
wendani Feb 4, 2021
35dda38
Merge remote-tracking branch 'origin/master' into sub_intf_vrf_master
wendani Feb 7, 2021
45eb55a
Merge remote-tracking branch 'origin/master' into sub_intf_vrf_master
wendani Feb 7, 2021
9faccb9
Merge remote-tracking branch 'origin/master' into sub_intf_vrf_master
wendani Feb 10, 2021
9a4237e
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Feb 16, 2021
026bde6
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Feb 17, 2021
4e35f99
Address comment: Use None as default value for vrf_name of fucntion
wendani Feb 17, 2021
eac82b0
Address commnent: Use None as default for vrf_name
wendani Feb 17, 2021
dc8dd8d
Add debug symbol
wendani Feb 23, 2021
342d990
Add debug symbol
wendani Feb 23, 2021
43438dd
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Feb 23, 2021
eb400b4
Check kernel binding after state db interface table check
wendani Feb 23, 2021
9da4e53
Rename for test purpose
wendani Feb 24, 2021
3a53bd7
Update code format
wendani Feb 24, 2021
86b93f7
Add debug symbol
wendani Feb 24, 2021
d2f9149
Debug
wendani Feb 24, 2021
e96bbbb
Debug
wendani Feb 24, 2021
d5f0da8
Debug
wendani Feb 24, 2021
49d5a3b
Remove debug symbols
wendani Feb 24, 2021
2dc571e
Check docker-sonic-vs.gz md5sum
wendani Feb 24, 2021
65481af
Check swss md5sum
wendani Feb 25, 2021
8dc71b1
Purge swss before install
wendani Feb 25, 2021
dcd881e
Restore
wendani Feb 25, 2021
bbd8fad
Purge swss before install
wendani Feb 25, 2021
7be761a
Rename
wendani Feb 25, 2021
c4cea72
Revert "Check docker-sonic-vs.gz md5sum"
wendani Feb 25, 2021
831ef8c
Revert "Check swss md5sum"
wendani Feb 25, 2021
d3a6430
Merge branch 'ci' into sub_intf_vrf_master
wendani Feb 25, 2021
3a66bb6
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Feb 26, 2021
f1855d4
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Mar 3, 2021
c61b839
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Mar 4, 2021
5e37eb9
Merge commit 'c2cbeb5' into sub_intf_vrf_master
wendani Mar 5, 2021
b6d77db
wait for rif creation in asic db
wendani Mar 6, 2021
9efcf95
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Mar 7, 2021
24dc278
Merge commit '03a0e21' into sub_intf_vrf_master
wendani Mar 7, 2021
baea1fa
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Mar 9, 2021
84ebc0f
Merge commit '9e30abb' into sub_intf_vrf_master
wendani Mar 10, 2021
5488c89
Update for appl_db_proc_seq test
wendani Mar 10, 2021
63167a9
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Mar 20, 2021
d2991b0
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Mar 25, 2021
f36991a
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Mar 26, 2021
54c98f5
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Apr 3, 2021
db921cf
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Apr 13, 2021
822b1a1
removal sequence test
wendani Apr 15, 2021
654680d
Check asic db parent port oid
wendani Apr 16, 2021
ea3ff80
Remove lag
wendani Apr 16, 2021
e62dc55
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Apr 16, 2021
b3c16db
add remove route to from APPL_DB
wendani Apr 18, 2021
8a03864
vrf extension to add remove route
wendani Apr 18, 2021
3305f62
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Apr 20, 2021
a9281f4
Update
wendani Apr 20, 2021
210b63f
Merge remote-tracking branch 'public/master' into sub_intf_vrf_master
wendani Apr 21, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 67 additions & 67 deletions cfgmgr/intfmgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -428,16 +428,15 @@ bool IntfMgr::doIntfGeneralTask(const vector<string>& keys,

string alias(keys[0]);
string vlanId;
string subIntfAlias;
string parentAlias;
size_t found = alias.find(VLAN_SUB_INTERFACE_SEPARATOR);
if (found != string::npos)
{
// This is a sub interface
// subIntfAlias holds the complete sub interface name
// while alias becomes the parent interface
subIntfAlias = alias;
// alias holds the complete sub interface name
// while parentAlias holds the parent port name
vlanId = alias.substr(found + 1);
alias = alias.substr(0, found);
parentAlias = alias.substr(0, found);
}
bool is_lo = !alias.compare(0, strlen(LOOPBACK_PREFIX), LOOPBACK_PREFIX);
string mac = "";
Expand Down Expand Up @@ -482,7 +481,7 @@ bool IntfMgr::doIntfGeneralTask(const vector<string>& keys,

if (op == SET_COMMAND)
{
if (!isIntfStateOk(alias))
if (!isIntfStateOk(parentAlias.empty() ? alias : parentAlias))
{
SWSS_LOG_DEBUG("Interface is not ready, skipping %s", alias.c_str());
return false;
Expand Down Expand Up @@ -520,74 +519,28 @@ bool IntfMgr::doIntfGeneralTask(const vector<string>& keys,
}
}

if (!vrf_name.empty())
{
setIntfVrf(alias, vrf_name);
}

/*Set the mac of interface*/
if (!mac.empty())
{
setIntfMac(alias, mac);
}
else
{
FieldValueTuple fvTuple("mac_addr", MacAddress().to_string());
data.push_back(fvTuple);
}

if (!proxy_arp.empty())
if (!parentAlias.empty())
{
if (!setIntfProxyArp(alias, proxy_arp))
{
SWSS_LOG_ERROR("Failed to set proxy ARP to \"%s\" state for the \"%s\" interface", proxy_arp.c_str(), alias.c_str());
return false;
}

if (!alias.compare(0, strlen(VLAN_PREFIX), VLAN_PREFIX))
{
FieldValueTuple fvTuple("proxy_arp", proxy_arp);
data.push_back(fvTuple);
}
}

if (!grat_arp.empty())
{
if (!setIntfGratArp(alias, grat_arp))
{
SWSS_LOG_ERROR("Failed to set ARP accept to \"%s\" state for the \"%s\" interface", grat_arp.c_str(), alias.c_str());
return false;
}

if (!alias.compare(0, strlen(VLAN_PREFIX), VLAN_PREFIX))
{
FieldValueTuple fvTuple("grat_arp", grat_arp);
data.push_back(fvTuple);
}
}

if (!subIntfAlias.empty())
{
if (m_subIntfList.find(subIntfAlias) == m_subIntfList.end())
if (m_subIntfList.find(alias) == m_subIntfList.end())
{
try
{
addHostSubIntf(alias, subIntfAlias, vlanId);
addHostSubIntf(parentAlias, alias, vlanId);
}
catch (const std::runtime_error &e)
{
SWSS_LOG_NOTICE("Sub interface ip link add failure. Runtime error: %s", e.what());
return false;
}

m_subIntfList.insert(subIntfAlias);
m_subIntfList.insert(alias);
}

if (!mtu.empty())
{
try
{
setHostSubIntfMtu(subIntfAlias, mtu);
setHostSubIntfMtu(alias, mtu);
}
catch (const std::runtime_error &e)
{
Expand All @@ -609,7 +562,7 @@ bool IntfMgr::doIntfGeneralTask(const vector<string>& keys,
}
try
{
setHostSubIntfAdminStatus(subIntfAlias, adminStatus);
setHostSubIntfAdminStatus(alias, adminStatus);
}
catch (const std::runtime_error &e)
{
Expand All @@ -618,10 +571,57 @@ bool IntfMgr::doIntfGeneralTask(const vector<string>& keys,
}

// set STATE_DB port state
setSubIntfStateOk(subIntfAlias);
setSubIntfStateOk(alias);
}
m_appIntfTableProducer.set(subIntfAlias.empty() ? alias : subIntfAlias, data);
m_stateIntfTable.hset(subIntfAlias.empty() ? alias : subIntfAlias, "vrf", vrf_name);

if (!vrf_name.empty())
{
setIntfVrf(alias, vrf_name);
}

/*Set the mac of interface*/
if (!mac.empty())
{
setIntfMac(alias, mac);
}
else
{
FieldValueTuple fvTuple("mac_addr", MacAddress().to_string());
data.push_back(fvTuple);
}

if (!proxy_arp.empty())
{
if (!setIntfProxyArp(alias, proxy_arp))
{
SWSS_LOG_ERROR("Failed to set proxy ARP to \"%s\" state for the \"%s\" interface", proxy_arp.c_str(), alias.c_str());
return false;
}

if (!alias.compare(0, strlen(VLAN_PREFIX), VLAN_PREFIX))
{
FieldValueTuple fvTuple("proxy_arp", proxy_arp);
data.push_back(fvTuple);
}
}

if (!grat_arp.empty())
{
if (!setIntfGratArp(alias, grat_arp))
{
SWSS_LOG_ERROR("Failed to set ARP accept to \"%s\" state for the \"%s\" interface", grat_arp.c_str(), alias.c_str());
return false;
}

if (!alias.compare(0, strlen(VLAN_PREFIX), VLAN_PREFIX))
{
FieldValueTuple fvTuple("grat_arp", grat_arp);
data.push_back(fvTuple);
}
}

m_appIntfTableProducer.set(alias, data);
wendani marked this conversation as resolved.
Show resolved Hide resolved
m_stateIntfTable.hset(alias, "vrf", vrf_name);
}
else if (op == DEL_COMMAND)
{
Expand All @@ -640,16 +640,16 @@ bool IntfMgr::doIntfGeneralTask(const vector<string>& keys,
m_loopbackIntfList.erase(alias);
}

if (!subIntfAlias.empty())
if (!parentAlias.empty())
{
removeHostSubIntf(subIntfAlias);
m_subIntfList.erase(subIntfAlias);
removeHostSubIntf(alias);
m_subIntfList.erase(alias);

removeSubIntfState(subIntfAlias);
removeSubIntfState(alias);
}

m_appIntfTableProducer.del(subIntfAlias.empty() ? alias : subIntfAlias);
m_stateIntfTable.del(subIntfAlias.empty() ? alias : subIntfAlias);
m_appIntfTableProducer.del(alias);
m_stateIntfTable.del(alias);
}
else
{
Expand Down
1 change: 1 addition & 0 deletions orchagent/intfsorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -731,6 +731,7 @@ void IntfsOrch::doTask(Consumer &consumer)
{
IntfsEntry intfs_entry;
intfs_entry.ref_count = 0;
intfs_entry.proxy_arp = false;
intfs_entry.vrf_id = vrf_id;
m_syncdIntfses[alias] = intfs_entry;
m_vrfOrch->increaseVrfRefCount(vrf_id);
Expand Down
9 changes: 6 additions & 3 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -980,16 +980,19 @@ def set_interface_status(self, interface, admin_status):
tbl.set(interface, fvs)
time.sleep(1)

# deps: acl, fdb_update, fdb, mirror_port_erspan, vlan
def add_ip_address(self, interface, ip):
# deps: acl, fdb_update, fdb, mirror_port_erspan, vlan, sub port intf
def add_ip_address(self, interface, ip, vrf_name=None):
if interface.startswith("PortChannel"):
tbl_name = "PORTCHANNEL_INTERFACE"
elif interface.startswith("Vlan"):
tbl_name = "VLAN_INTERFACE"
else:
tbl_name = "INTERFACE"
tbl = swsscommon.Table(self.cdb, tbl_name)
fvs = swsscommon.FieldValuePairs([("NULL", "NULL")])
pairs = [("NULL", "NULL")]
if vrf_name:
pairs = [("vrf_name", vrf_name)]
fvs = swsscommon.FieldValuePairs(pairs)
tbl.set(interface, fvs)
tbl.set(interface + "|" + ip, fvs)
time.sleep(1)
Expand Down
Loading