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

[202211][voq][chassis] Remove created ports from the default vlan. #2664

Open
wants to merge 1 commit into
base: 202211
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 7 additions & 0 deletions orchagent/portsorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2679,6 +2679,13 @@ bool PortsOrch::addPort(const set<int> &lane_set, uint32_t speed, int an, string
m_portListLaneMap[lane_set] = port_id;
m_portCount++;

// newly created ports might be put in the default vlan so remove all ports from
// the default vlan.
if (gMySwitchType == "voq") {
removeDefaultVlanMembers();
removeDefaultBridgePorts();
}

SWSS_LOG_NOTICE("Create port %" PRIx64 " with the speed %u", port_id, speed);

return true;
Expand Down
60 changes: 60 additions & 0 deletions tests/test_virtual_chassis.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from dvslib.dvs_database import DVSDatabase
import ast
import time
import buffer_model

class TestVirtualChassis(object):

Expand Down Expand Up @@ -845,6 +846,65 @@ def test_chassis_system_lag_id_allocator_del_id(self, vct):
assert len(lagmemberkeys) == 0, "Stale system lag member entries in asic db"

break

def test_chassis_add_remove_ports(self, vct):
"""Test removing and adding a port in a VOQ chassis.
Test validates that when a port is created the port is removed from the default vlan.
"""
dvss = vct.dvss
for name in dvss.keys():
dvs = dvss[name]
buffer_model.enable_dynamic_buffer(dvs.get_config_db(), dvs.runcmd)

config_db = dvs.get_config_db()
app_db = dvs.get_app_db()
asic_db = dvs.get_asic_db()
metatbl = config_db.get_entry("DEVICE_METADATA", "localhost")
cfg_switch_type = metatbl.get("switch_type")

if cfg_switch_type == "voq":
num_ports = len(asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_PORT"))
# Get the port info we'll flap
port = config_db.get_keys('PORT')[0]
port_info = config_db.get_entry("PORT", port)

# Remove port's other configs
pgs = config_db.get_keys('BUFFER_PG')
queues = config_db.get_keys('BUFFER_QUEUE')
for key in pgs:
if port in key:
config_db.delete_entry('BUFFER_PG', key)
app_db.wait_for_deleted_entry('BUFFER_PG_TABLE', key)

for key in queues:
if port in key:
config_db.delete_entry('BUFFER_QUEUE', key)
app_db.wait_for_deleted_entry('BUFFER_QUEUE_TABLE', key)

# Remove port
config_db.delete_entry('PORT', port)
app_db.wait_for_deleted_entry('PORT_TABLE', port)
num = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_PORT",
num_ports-1)
assert len(num) == num_ports-1

marker = dvs.add_log_marker()

# Create port
config_db.update_entry("PORT", port, port_info)
app_db.wait_for_entry("PORT_TABLE", port)
num = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_PORT",
num_ports)
assert len(num) == num_ports

# Check that we see the logs for removing default vlan
matching_log = "removeDefaultVlanMembers: Remove 0 VLAN members from default VLAN"
_, logSeen = dvs.runcmd( [ "sh", "-c",
"awk '/{}/,ENDFILE {{print;}}' /var/log/syslog | grep '{}' | wc -l".format( marker, matching_log ) ] )
assert logSeen.strip() == "1"

buffer_model.disable_dynamic_buffer(dvs.get_config_db(), dvs.runcmd)


# Add Dummy always-pass test at end as workaroud
# for issue when Flaky fail on final test it invokes module tear-down before retrying
Expand Down