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

[COPP:Yang-changes] Fix for config replace issues seen with COPP configurations #3473

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
15 changes: 15 additions & 0 deletions scripts/db_migrator.py
Original file line number Diff line number Diff line change
Expand Up @@ -856,6 +856,17 @@ def migrate_aaa(self):
if keys:
self.configDB.delete(self.configDB.CONFIG_DB, authorization_key)

def migrate_config_db_copp_group_trap_action_mandatory_node(self):
"""
Migrate COPP_GROUP table, for 'default' group Yang mandatory node
'trap_action' was missing, so add the same so that Yang validation
will go through
"""
copp_group_def = self.configDB.get_entry('COPP_GROUP', 'default')
if 'trap_action' not in copp_group_def:
copp_group_def['trap_action'] = 'trap'
self.configDB.set_entry('COPP_GROUP', 'default', copp_group_def)

def version_unknown(self):
"""
version_unknown tracks all SONiC versions that doesn't have a version
Expand Down Expand Up @@ -1231,6 +1242,10 @@ def version_202405_01(self):
Version 202405_01.
"""
log.log_info('Handling version_202405_01')

if self.configDB.keys(self.configDB.CONFIG_DB, "COPP_GROUP|default"):
self.migrate_config_db_copp_group_trap_action_mandatory_node()

self.set_version('version_202411_01')
return 'version_202411_01'

Expand Down
118 changes: 118 additions & 0 deletions tests/db_migrator_input/config_db/copp_group_table_expected.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
{
"COPP_GROUP|default": {
"queue": "0",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"600",
"cbs":"600",
"red_action":"drop",
"trap_action":"trap"
},
"COPP_GROUP|queue4_group1": {
"trap_action":"trap",
"trap_priority":"4",
"queue": "4",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"6000",
"cbs":"6000",
"red_action":"drop"
},
"COPP_GROUP|queue4_group2": {
"trap_action":"copy",
"trap_priority":"4",
"queue": "4",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"600",
"cbs":"600",
"red_action":"drop"
},
"COPP_GROUP|queue4_group3": {
"trap_action":"trap",
"trap_priority":"4",
"queue": "4",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"300",
"cbs":"300",
"red_action":"drop"
},
"COPP_GROUP|queue1_group1": {
"trap_action":"trap",
"trap_priority":"1",
"queue": "1",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"6000",
"cbs":"6000",
"red_action":"drop"
},
"COPP_GROUP|queue1_group2": {
"trap_action":"trap",
"trap_priority":"1",
"queue": "1",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"600",
"cbs":"600",
"red_action":"drop"
},
"COPP_GROUP|queue2_group1": {
"cbs": "1000",
"cir": "1000",
"genetlink_mcgrp_name": "packets",
"genetlink_name": "psample",
"meter_type": "packets",
"mode": "sr_tcm",
"queue": "2",
"red_action": "drop",
"trap_action": "trap",
"trap_priority": "1"

},
"COPP_TRAP|bgp": {
"trap_ids": "bgp,bgpv6",
"trap_group": "queue4_group1"
},
"COPP_TRAP|lacp": {
"trap_ids": "lacp",
"trap_group": "queue4_group1",
"always_enabled": "true"
},
"COPP_TRAP|arp": {
"trap_ids": "arp_req,arp_resp,neigh_discovery",
"trap_group": "queue4_group2",
"always_enabled": "true"
},
"COPP_TRAP|lldp": {
"trap_ids": "lldp",
"trap_group": "queue4_group3"
},
"COPP_TRAP|dhcp_relay": {
"trap_ids": "dhcp,dhcpv6",
"trap_group": "queue4_group3"
},
"COPP_TRAP|udld": {
"trap_ids": "udld",
"trap_group": "queue4_group3",
"always_enabled": "true"
},
"COPP_TRAP|ip2me": {
"trap_ids": "ip2me",
"trap_group": "queue1_group1",
"always_enabled": "true"
},
"COPP_TRAP|macsec": {
"trap_ids": "eapol",
"trap_group": "queue4_group1"
},
"COPP_TRAP|nat": {
"trap_ids": "src_nat_miss,dest_nat_miss",
"trap_group": "queue1_group2"
},
"COPP_TRAP|sflow": {
"trap_group": "queue2_group1",
"trap_ids": "sample_packet"
}
}
120 changes: 120 additions & 0 deletions tests/db_migrator_input/config_db/copp_group_table_input.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
{
"COPP_GROUP|default": {
"queue": "0",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"600",
"cbs":"600",
"red_action":"drop"
},
"COPP_GROUP|queue4_group1": {
"trap_action":"trap",
"trap_priority":"4",
"queue": "4",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"6000",
"cbs":"6000",
"red_action":"drop"
},
"COPP_GROUP|queue4_group2": {
"trap_action":"copy",
"trap_priority":"4",
"queue": "4",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"600",
"cbs":"600",
"red_action":"drop"
},
"COPP_GROUP|queue4_group3": {
"trap_action":"trap",
"trap_priority":"4",
"queue": "4",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"300",
"cbs":"300",
"red_action":"drop"
},
"COPP_GROUP|queue1_group1": {
"trap_action":"trap",
"trap_priority":"1",
"queue": "1",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"6000",
"cbs":"6000",
"red_action":"drop"
},
"COPP_GROUP|queue1_group2": {
"trap_action":"trap",
"trap_priority":"1",
"queue": "1",
"meter_type":"packets",
"mode":"sr_tcm",
"cir":"600",
"cbs":"600",
"red_action":"drop"
},
"COPP_GROUP|queue2_group1": {
"cbs": "1000",
"cir": "1000",
"genetlink_mcgrp_name": "packets",
"genetlink_name": "psample",
"meter_type": "packets",
"mode": "sr_tcm",
"queue": "2",
"red_action": "drop",
"trap_action": "trap",
"trap_priority": "1"

},
"COPP_TRAP|bgp": {
"trap_ids": "bgp,bgpv6",
"trap_group": "queue4_group1"
},
"COPP_TRAP|lacp": {
"trap_ids": "lacp",
"trap_group": "queue4_group1",
"always_enabled": "true"
},
"COPP_TRAP|arp": {
"trap_ids": "arp_req,arp_resp,neigh_discovery",
"trap_group": "queue4_group2",
"always_enabled": "true"
},
"COPP_TRAP|lldp": {
"trap_ids": "lldp",
"trap_group": "queue4_group3"
},
"COPP_TRAP|dhcp_relay": {
"trap_ids": "dhcp,dhcpv6",
"trap_group": "queue4_group3"
},
"COPP_TRAP|udld": {
"trap_ids": "udld",
"trap_group": "queue4_group3",
"always_enabled": "true"
},
"COPP_TRAP|ip2me": {
"trap_ids": "ip2me",
"trap_group": "queue1_group1",
"always_enabled": "true"
},
"COPP_TRAP|macsec": {
"trap_ids": "eapol",
"trap_group": "queue4_group1"
},
"COPP_TRAP|nat": {
"trap_ids": "src_nat_miss,dest_nat_miss",
"trap_group": "queue1_group2"
},
"COPP_TRAP|sflow": {
"trap_group": "queue2_group1",
"trap_ids": "sample_packet"
},
"VERSIONS|DATABASE": {
"VERSION": "version_202405_01"
}
}
25 changes: 25 additions & 0 deletions tests/db_migrator_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -1013,3 +1013,28 @@ def test_per_command_aaa(self, test_json):

diff = DeepDiff(resulting_table, expected_table, ignore_order=True)
assert not diff


class TestCoppGroupTrapAction(object):
@classmethod
def setup_class(cls):
os.environ['UTILITIES_UNIT_TESTING'] = "2"

@classmethod
def teardown_class(cls):
os.environ['UTILITIES_UNIT_TESTING'] = "0"
dbconnector.dedicated_dbs['CONFIG_DB'] = None

def test_copp_group_trap_action_migrator(self):
dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'copp_group_table_input')
import db_migrator
dbmgtr = db_migrator.DBMigrator(None)
dbmgtr.migrate()
dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'copp_group_table_expected')
expected_db = Db()

resulting_table = dbmgtr.configDB.get_table('COPP_GROUP')
expected_table = expected_db.cfgdb.get_table('COPP_GROUP')

diff = DeepDiff(resulting_table, expected_table, ignore_order=True)
assert not diff
Loading