def test_SetReadOnlyAttribute(self, dvs, testlog): db = swsscommon.DBConnector(swsscommon.ASIC_DB, dvs.redis_sock, 0) tbl = swsscommon.Table(db, "ASIC_STATE:SAI_OBJECT_TYPE_SWITCH") keys = tbl.getKeys() assert len(keys) == 1 swVid = keys[0] r = redis.Redis(unix_socket_path=dvs.redis_sock, db=swsscommon.ASIC_DB) swRid = r.hget("VIDTORID", swVid) assert swRid is not None ntf = swsscommon.NotificationProducer(db, "SAI_VS_UNITTEST_CHANNEL") fvp = swsscommon.FieldValuePairs() ntf.send("enable_unittests", "true", fvp) fvp = swsscommon.FieldValuePairs([('SAI_SWITCH_ATTR_PORT_MAX_MTU', '42')]) key = "SAI_OBJECT_TYPE_SWITCH:" + swRid print key ntf.send("set_ro", key, fvp)
def update_bfd_session_state(self, dvs, session, state): bfd_sai_state = { "Admin_Down": "SAI_BFD_SESSION_STATE_ADMIN_DOWN", "Down": "SAI_BFD_SESSION_STATE_DOWN", "Init": "SAI_BFD_SESSION_STATE_INIT", "Up": "SAI_BFD_SESSION_STATE_UP" } ntf = swsscommon.NotificationProducer(dvs.adb, "NOTIFICATIONS") fvp = swsscommon.FieldValuePairs() ntf_data = "[{\"bfd_session_id\":\"" + session + "\",\"session_state\":\"" + bfd_sai_state[ state] + "\"}]" ntf.send("bfd_session_state_change", ntf_data, fvp)
def set_counter(self, dvs, obj_type, obj_id, attr, val): db = swsscommon.DBConnector(swsscommon.ASIC_DB, dvs.redis_sock, 0) ntf = swsscommon.NotificationProducer(db, "SAI_VS_UNITTEST_CHANNEL") r = redis.Redis(unix_socket_path=dvs.redis_sock, db=swsscommon.ASIC_DB) rid = r.hget("VIDTORID", obj_id) assert rid is not None fvp = swsscommon.FieldValuePairs([(attr, val)]) key = rid ntf.send("set_stats", key, fvp)
def test_Notification(): db = swsscommon.DBConnector("APPL_DB", 0, True) ntfc = swsscommon.NotificationConsumer(db, "testntf") sel = swsscommon.Select() sel.addSelectable(ntfc) fvs = swsscommon.FieldValuePairs([('a', 'b')]) ntfp = swsscommon.NotificationProducer(db, "testntf") ntfp.send("aaa", "bbb", fvs) (state, c) = sel.select() assert state == swsscommon.Select.OBJECT (op, data, cfvs) = ntfc.pop() assert op == "aaa" assert data == "bbb" assert len(cfvs) == 1 assert cfvs[0] == ('a', 'b')
def set_counter(self, dvs, obj_type, obj_id, attr, val): db = swsscommon.DBConnector(swsscommon.ASIC_DB, dvs.redis_sock, 0) ntf = swsscommon.NotificationProducer(db, "SAI_VS_UNITTEST_CHANNEL") r = redis.Redis(unix_socket_path=dvs.redis_sock, db=swsscommon.ASIC_DB, encoding="utf-8", decode_responses=True) rid = r.hget("VIDTORID", obj_id) assert rid is not None fvp = swsscommon.FieldValuePairs([(attr, val)]) key = rid # explicit convert unicode string to str for python2 ntf.send("set_stats", str(key), fvp)
def setReadOnlyAttr(self, obj, attr, val): db = swsscommon.DBConnector(swsscommon.ASIC_DB, self.redis_sock, 0) tbl = swsscommon.Table(db, "ASIC_STATE:{0}".format(obj)) keys = tbl.getKeys() assert len(keys) == 1 swVid = keys[0] r = redis.Redis(unix_socket_path=self.redis_sock, db=swsscommon.ASIC_DB) swRid = r.hget("VIDTORID", swVid) assert swRid is not None ntf = swsscommon.NotificationProducer(db, "SAI_VS_UNITTEST_CHANNEL") fvp = swsscommon.FieldValuePairs() ntf.send("enable_unittests", "true", fvp) fvp = swsscommon.FieldValuePairs([(attr, val)]) key = "SAI_OBJECT_TYPE_SWITCH:" + swRid ntf.send("set_ro", key, fvp)
def enable_unittests(self, dvs, status): db = swsscommon.DBConnector(swsscommon.ASIC_DB, dvs.redis_sock, 0) ntf = swsscommon.NotificationProducer(db, "SAI_VS_UNITTEST_CHANNEL") fvp = swsscommon.FieldValuePairs() ntf.send("enable_unittests", status, fvp)
def test_evpnFdbP2MP(dvs, testlog): vxlan_obj = VxlanTunnel() helper = VxlanEvpnHelper() dvs.setup_db() dvs.clear_fdb() time.sleep(2) #Find switch_id switch_id = dvs.getSwitchOid() print("Switch_id=" + str(switch_id)) vlan_before = helper.how_many_entries_exist( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN") # create vlan print("Creating Vlan3") dvs.create_vlan("3") time.sleep(2) vlan_after = helper.how_many_entries_exist( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN") assert vlan_after - vlan_before == 1, "The Vlan3 wasn't created" print("Vlan3 is created") # Find the vlan_oid to be used in DB communications vlan_oid_3 = dvs.getVlanOid("3") assert vlan_oid_3 is not None, "Could not find Vlan_oid" print("Vlan-3 vlan_oid=" + str(vlan_oid_3)) bp_before = helper.how_many_entries_exist( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT") vm_before = helper.how_many_entries_exist( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN_MEMBER") print("Making Ethernet0 as a member of Vlan3") dvs.create_vlan_member("3", "Ethernet0") time.sleep(2) # check that the vlan information was propagated bp_after = helper.how_many_entries_exist( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT") vm_after = helper.how_many_entries_exist( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN_MEMBER") assert bp_after - bp_before == 1, "The bridge port wasn't created" assert vm_after - vm_before == 1, "The vlan member wasn't added" print("Ethernet0 is a member of Vlan3") # Get mapping between interface name and its bridge port_id iface_2_bridge_port_id = dvs.get_map_iface_bridge_port_id(dvs.adb) #create SIP side of tunnel source_tnl_name = "source_vtep_name" source_tnl_ip = "7.7.7.7" vxlan_obj.create_vxlan_tunnel(dvs, source_tnl_name, source_tnl_ip) time.sleep(1) nvo_name = "evpn_nvo" vxlan_obj.create_evpn_nvo(dvs, nvo_name, source_tnl_name) time.sleep(1) map_name_vlan_3 = "map_3_3" vxlan_obj.create_vxlan_tunnel_map(dvs, source_tnl_name, map_name_vlan_3, "3", "Vlan3") time.sleep(1) remote_ip_6 = "6.6.6.6" vxlan_obj.create_evpn_remote_vni(dvs, "Vlan3", remote_ip_6, "3") remote_ip_8 = "8.8.8.8" vxlan_obj.create_evpn_remote_vni(dvs, "Vlan3", remote_ip_8, "3") time.sleep(1) #UT-1 Evpn Mac add from remote when tunnels are already created mac = "52:54:00:25:06:E9" print("Creating Evpn FDB Vlan3:" + mac.lower() + ":6.6.6.6 in APP-DB") helper.create_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower(), [("remote_vtep", remote_ip_6), ("type", "dynamic"), ("vni", "3")]) time.sleep(1) tnl_bp_oid_6 = get_vxlan_p2mp_tunnel_bp(dvs.adb, source_tnl_ip) # check that the FDB entry is inserted into ASIC DB ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac), ("bvid", vlan_oid_3)], [ ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"), ("SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE", "true"), ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_6), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_6)), ]) assert ok == True, str(extra) print("EVPN FDB Vlan3:" + mac.lower() + ":" + remote_ip_6 + " is created in ASIC-DB") time.sleep(1) #UT-2 Evpn Mac del from remote mac = "52:54:00:25:06:E9" print("Deleting Evpn FDB Vlan3:" + mac.lower() + ":6.6.6.6 in APP-DB") helper.delete_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower()) time.sleep(1) # check that the FDB entry is deleted from ASIC DB ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac), ("bvid", vlan_oid_3)], [ ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"), ("SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE", "true"), ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_6), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_6)), ]) assert ok == False, str(extra) print("EVPN FDB Vlan3:" + mac.lower() + ":" + remote_ip_6 + " is deleted from ASIC-DB") time.sleep(1) #UT-3 Evpn Mac add from remote when local mac is already present mac = "52:54:00:25:06:E9" print("Creating Local dynamic FDB Vlan3:" + mac.lower() + ":Ethernet0 in APP-DB") # Create Dynamic MAC entry in APP DB helper.create_entry_pst(dvs.pdb, "FDB_TABLE", "Vlan3:" + mac.lower(), [ ("port", "Ethernet0"), ("type", "dynamic"), ]) time.sleep(1) # check that the FDB entry was added in ASIC DB ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac), ("bvid", vlan_oid_3)], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", iface_2_bridge_port_id["Ethernet0"])]) assert ok, str(extra) print("Dynamic FDB Vlan3:" + mac.lower() + ":Ethernet0 is created in Asic-DB") # check that the FDB entry was added in STATE DB mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE", "Vlan3:" + mac.lower(), [ ("port", "Ethernet0"), ("type", "dynamic"), ]) assert mac1_found, str(extra) print("FDB Vlan3:" + mac + ":Ethernet0 is created in STATE-DB") print("Creating Evpn FDB Vlan3:" + mac.lower() + ":6.6.6.6 in APP-DB") helper.create_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower(), [("remote_vtep", remote_ip_6), ("type", "dynamic"), ("vni", "3")]) time.sleep(1) # check that the FDB entry is inserted into ASIC DB ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac), ("bvid", str(dvs.getVlanOid("3")))], [ ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"), ("SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE", "true"), ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_6), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_6)), ]) assert ok, str(extra) print("EVPN FDB Vlan3:" + mac.lower() + ":" + remote_ip_6 + " is created in ASIC-DB") # check that the Local FDB entry is deleted from STATE DB mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE", "Vlan3:" + mac.lower(), [ ("port", "Ethernet0"), ("type", "dynamic"), ]) assert mac1_found == False, str(extra) print("FDB Vlan3:" + mac + ":Ethernet0 is deleted from STATE-DB") time.sleep(1) #UT-4 Evpn Sticky Mac add from remote mac = "52:54:00:25:06:E9" print("Creating Evpn Sticky FDB Vlan3:" + mac.lower() + ":6.6.6.6 in APP-DB") helper.create_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower(), [("remote_vtep", remote_ip_6), ("type", "static"), ("vni", "3")]) time.sleep(1) # check that the FDB entry is inserted into ASIC DB ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac), ("bvid", str(dvs.getVlanOid("3")))], [ ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"), ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_6), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_6)), ]) assert ok, str(extra) print("EVPN Sticky FDB Vlan3:" + mac.lower() + ":" + remote_ip_6 + " is created in ASIC-DB") #UT-8 Evpn Mac add from remote when tunnels are already created mac = "52:54:00:25:06:E9" print("Creating Evpn FDB Vlan3:" + mac.lower() + ":6.6.6.6 in APP-DB") helper.create_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower(), [("remote_vtep", remote_ip_6), ("type", "dynamic"), ("vni", "3")]) time.sleep(1) # check that the FDB entry is inserted into ASIC DB ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac), ("bvid", vlan_oid_3)], [ ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"), ("SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE", "true"), ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_6), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_6)), ]) assert ok == True, str(extra) print("EVPN FDB Vlan3:" + mac.lower() + ":" + remote_ip_6 + " is created in ASIC-DB") time.sleep(1) tnl_bp_oid_8 = get_vxlan_p2mp_tunnel_bp(dvs.adb, source_tnl_ip) print("Creating Evpn FDB Vlan3:" + mac.lower() + ":8.8.8.8 in APP-DB") helper.create_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower(), [("remote_vtep", remote_ip_8), ("type", "dynamic"), ("vni", "3")]) time.sleep(1) # check that the FDB entry is inserted into ASIC DB ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac), ("bvid", vlan_oid_3)], [ ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"), ("SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE", "true"), ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_8), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_8)), ]) assert ok == True, str(extra) print("EVPN FDB Vlan3:" + mac.lower() + ":" + remote_ip_8 + " is created in ASIC-DB") time.sleep(1) #UT-9 Local mac move (delete and learn) when remote is already added mac = "52:54:00:25:06:E9" print("Deleting FDB Vlan3:52-54-00-25-06-E9:8.8.8.8 in ASIC-DB") helper.delete_entry_tbl( dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" + vlan_oid_3 + "\",\"mac\":\"" + mac + "\",\"switch_id\":\"" + switch_id + "\"}") ntf = swsscommon.NotificationProducer(dvs.adb, "NOTIFICATIONS") fvp = swsscommon.FieldValuePairs() ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_3 + "\\\",\\\"mac\\\":\\\"" + mac + "\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_AGED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + str( tnl_bp_oid_8) + "\"}]}]" ntf.send("fdb_event", ntf_data, fvp) time.sleep(2) print("Creating FDB Vlan3:52-54-00-25-06-E9:Ethernet0 in ASIC-DB") helper.create_entry_tbl( dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" + vlan_oid_3 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" + switch_id + "\"}", [ ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", iface_2_bridge_port_id["Ethernet0"]), ]) ntf = swsscommon.NotificationProducer(dvs.adb, "NOTIFICATIONS") fvp = swsscommon.FieldValuePairs() ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_3 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_LEARNED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + iface_2_bridge_port_id[ "Ethernet0"] + "\"}]}]" ntf.send("fdb_event", ntf_data, fvp) time.sleep(2) # check that the FDB entry was added in ASIC DB ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_3)], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", iface_2_bridge_port_id["Ethernet0"])]) assert ok, str(extra) print("FDB Vlan3:52-54-00-25-06-E9:Ethernet0 is created in ASIC-DB") # check that the FDB entry was added in STATE DB mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE", "Vlan3:52:54:00:25:06:e9", [ ("port", "Ethernet0"), ("type", "dynamic"), ]) assert mac1_found, str(extra) print("FDB Vlan3:52-54-00-25-06-E9:Ethernet0 is created in STATE-DB") dvs.remove_vlan_member("3", "Ethernet0") dvs.remove_vlan("3")
def test_negativeFDB(dvs, testlog): dvs.setup_db() #dvs.runcmd("sonic-clear fdb all") time.sleep(2) #Find switch_id switch_id = dvs.getSwitchOid() print("Switch_id=" + str(switch_id)) vlan_before = how_many_entries_exist(dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN") bp_before = how_many_entries_exist( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT") vm_before = how_many_entries_exist( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN_MEMBER") # create vlan dvs.create_vlan("2") dvs.create_vlan_member("2", "Ethernet0") dvs.create_vlan_member("2", "Ethernet4") # Find the vlan_oid_2 to be used in DB communications vlan_oid_2 = dvs.getVlanOid("2") assert vlan_oid_2 is not None, "Could not find Vlan_oid" print("VLan-2 vlan_oid=" + str(vlan_oid_2)) # create vlan dvs.create_vlan("4") dvs.create_vlan_member("4", "Ethernet8") # Find the vlan_oid_4 to be used in DB communications vlan_oid_4 = dvs.getVlanOid("4") assert vlan_oid_4 is not None, "Could not find Vlan_oid" print("VLan-4 vlan_oid=" + str(vlan_oid_4)) dvs.create_vlan("10") dvs.create_vlan_member("10", "Ethernet12") # Find the vlan_oid_10 to be used in DB communications vlan_oid_10 = dvs.getVlanOid("10") assert vlan_oid_10 is not None, "Could not find Vlan_oid" print("VLan-10 vlan_oid=" + str(vlan_oid_10)) # check that the vlan information was propagated vlan_after = how_many_entries_exist(dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN") bp_after = how_many_entries_exist( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT") vm_after = how_many_entries_exist( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN_MEMBER") assert vlan_after - vlan_before == 3, "The Vlan2/Vlan4 wasn't created" assert bp_after - bp_before == 4, "The bridge port wasn't created" assert vm_after - vm_before == 4, "The vlan member wasn't added" # Get mapping between interface name and its bridge port_id iface_2_bridge_port_id = dvs.get_map_iface_bridge_port_id(dvs.adb) #dvs.runcmd("swssloglevel -l DEBUG -c orchagent") #dvs.runcmd("swssloglevel -l DEBUG -c vlanmgrd") print("NEG1 - Add MAC address to an out of range vlan and later delete it") mac = "52:54:00:25:06:E9" #dvs.runcmd("config mac add " + mac.lower() + " 3 Ethernet0") print("ACTION: Creating static FDB Vlan33333|" + mac.lower() + "|Ethernet0 in CONFIG-DB") create_entry_tbl(dvs.cdb, "FDB", "Vlan33333|" + mac.lower(), [ ("port", "Ethernet0"), ]) time.sleep(2) # check that the FDB entry was added in Config DB print("CHECK: Static FDB Vlan33333:" + mac.lower() + ":Ethernet0 is created in Config-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB", "Vlan33333\|" + mac.lower(), [("port", "Ethernet0")]) assert mac1_found, str(extra) print("CONFIRM: Static FDB Vlan33333:" + mac.lower() + ":Ethernet0 is created in Config-DB") # check that the FDB entry was not added in APP DB print("CHECK: Static FDB Vlan33333:" + mac.lower() + ":Ethernet0 is not created in APP-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE", "Vlan33333:" + mac.lower(), [ ("port", "Ethernet0"), ("type", "static"), ]) assert mac1_found == False, str(extra) print("CONFIRM: Static FDB Vlan33333:" + mac.lower() + ":Ethernet0 is not created in APP-DB") print("ACTION: Deleting Static FDB Vlan33333:" + mac.lower() + ":Ethernet0") remove_entry_tbl(dvs.cdb, "FDB", "Vlan33333|" + mac.lower()) time.sleep(2) #Check the mac is removed from config-db print("CHECK: Static FDB Vlan33333:" + mac.lower() + ":Ethernet0 is deleted from Config-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB", "Vlan33333\|" + mac.lower(), [("port", "Ethernet0")]) assert mac1_found == False, str(extra) print("CONFIRM: Static FDB Vlan33333:" + mac.lower() + ":Ethernet0 is deleted from Config-DB") print( "NEG2 - Add MAC address to a vlan which does not exist and later delete it" ) mac = "52:54:00:25:06:E9" #dvs.runcmd("config mac add " + mac.lower() + " 3 Ethernet0") print("ACTION: Creating static FDB Vlan3:" + mac.lower() + ":Ethernet0 in CONFIG-DB") create_entry_tbl(dvs.cdb, "FDB", "Vlan3|" + mac.lower(), [ ("port", "Ethernet0"), ]) time.sleep(2) # check that the FDB entry was added in Config DB print("CHECK: Static FDB Vlan3:" + mac.lower() + ":Ethernet0 is created in Config-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB", "Vlan3\|" + mac.lower(), [("port", "Ethernet0")]) assert mac1_found, str(extra) print("CONFIRM: Static FDB Vlan3:" + mac.lower() + ":Ethernet0 is created in Config-DB") # check that the FDB entry was added in APP DB print("CHECK: Static FDB Vlan3:" + mac.lower() + ":Ethernet0 is created in APP-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE", "Vlan3:" + mac.lower(), [ ("port", "Ethernet0"), ("type", "static"), ]) assert mac1_found, str(extra) print("CONFIRM: Static FDB Vlan3:" + mac.lower() + ":Ethernet0 is created in APP-DB") # check that the FDB entry is not inserted into ASIC DB print("CHECK: Static FDB Vlan3:" + mac.lower() + ":Ethernet0 is not created in ASIC-DB") ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac.lower())], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC")]) assert ok == False, str(extra) print("CONFIRM: Static FDB Vlan3:" + mac.lower() + ":Ethernet0 is not created in ASIC-DB") print("ACTION: Deleting Static FDB Vlan3:" + mac.lower() + "Ethernet0") remove_entry_tbl(dvs.cdb, "FDB", "Vlan3|" + mac.lower()) time.sleep(2) #Check the mac is removed from config-db print("CHECK: Static FDB Vlan3:" + mac.lower() + ":Ethernet0 is deleted from Config-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB", "Vlan3\|" + mac.lower(), [("port", "Ethernet0")]) assert mac1_found == False, str(extra) print("CONFIRM: Static FDB Vlan3:" + mac.lower() + ":Ethernet0 is deleted from Config-DB") # check that the FDB entry is removed from APP DB print("CHECK: Static FDB Vlan3:" + mac.lower() + ":Ethernet0 is deleted from APP-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE", "Vlan3:" + mac.lower(), [ ("port", "Ethernet0"), ("type", "static"), ]) assert mac1_found == False, str(extra) print("CONFIRM: Static FDB Vlan3:" + mac.lower() + ":Ethernet0 is deleted from APP-DB") print( "NEG3 - Add MAC address to an invalid port which does not exist and later delete it" ) mac = "52:54:00:25:06:E9" #dvs.runcmd("config mac add " + mac.lower() + " 3 Ethernet0") print("ACTION: Creating static FDB Vlan2:" + mac.lower() + ":Port0 in CONFIG-DB") create_entry_tbl(dvs.cdb, "FDB", "Vlan2|" + mac.lower(), [ ("port", "Port0"), ]) time.sleep(2) # check that the FDB entry was added in Config DB print("CHECK: Static FDB Vlan2:" + mac.lower() + ":Port0 is created in Config-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB", "Vlan2\|" + mac.lower(), [("port", "Port0")]) assert mac1_found, str(extra) print("CONFIRM: Static FDB Vlan2:" + mac.lower() + ":Port0 is created in Config-DB") # check that the FDB entry was added in APP DB print("CHECK: Static FDB Vlan2:" + mac.lower() + ":Port0 is created in APP-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE", "Vlan2:" + mac.lower(), [ ("port", "Port0"), ("type", "static"), ]) assert mac1_found, str(extra) print("CONFIRM: Static FDB Vlan2:" + mac.lower() + "Port0 is created in APP-DB") # check that the FDB entry is not inserted into ASIC DB print("CHECK: Static FDB Vlan2:" + mac.lower() + ":Port0 is not created in ASIC-DB") ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac.lower())], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC")]) assert ok == False, str(extra) print("CONFIRM: Static FDB Vlan2:" + mac.lower() + ":Port0 is not created in ASIC-DB") print("ACTION: Removing static FDB Vlan2:" + mac.lower() + ":Port0 from CONFIG-DB") remove_entry_tbl(dvs.cdb, "FDB", "Vlan2|" + mac.lower()) time.sleep(2) #Check the mac is removed from config-db print("CHECK: Static FDB Vlan2:" + mac.lower() + ":Port0 is deleted from Config-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB", "Vlan2\|" + mac.lower(), [("port", "Port0")]) assert mac1_found == False, str(extra) print("CONFIRM: Static FDB Vlan2:" + mac.lower() + ":Port0 is deleted from Config-DB") # check that the FDB entry is removed from APP DB print("CHECK: Static FDB Vlan2:" + mac.lower() + ":Port0 is deleted from APP-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE", "Vlan2:" + mac.lower(), [ ("port", "Port0"), ("type", "static"), ]) assert mac1_found == False, str(extra) print("CONFIRM: Static FDB Vlan2:" + mac.lower() + ":Port0 is deleted from APP-DB") print( "NEG4 - simulate mac learn event for a port which is not part of vlan") bp_eth8 = iface_2_bridge_port_id["Ethernet8"] dvs.remove_vlan_member("4", "Ethernet8") print("ACTION Creating FDB Vlan4:52-54-00-25-06-E9:Ethernet8 in ASIC-DB") create_entry_tbl( dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" + vlan_oid_4 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" + switch_id + "\"}", [ ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth8), ]) ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS") fvp = swsscommon.FieldValuePairs() ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_4 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_LEARNED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth8 + "\"}]}]" ntf.send("fdb_event", ntf_data, fvp) time.sleep(2) # check that the FDB entry was added in ASIC DB print("CHECK: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is created in ASIC-DB") ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_4)], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth8)]) assert ok, str(extra) print( "CONFIRM: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is created in ASIC-DB") # check that the FDB entry was not added in STATE DB print( "CHECK: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not created in STATE-DB" ) mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE", "Vlan4:52:54:00:25:06:e9", [ ("port", "Ethernet8"), ("type", "dynamic"), ]) assert mac1_found == False, str(extra) print( "CONFIRM: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not created in STATE-DB" ) print("NEG5 - simulate mac learn event for a vlan which does not exist") bp_eth12 = iface_2_bridge_port_id["Ethernet12"] dvs.remove_vlan_member("10", "Ethernet12") dvs.remove_vlan("10") print( "ACTION: Creating FDB Vlan10:52-54-00-25-06-E9:Ethernet12 in ASIC-DB") create_entry_tbl( dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" + vlan_oid_10 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" + switch_id + "\"}", [ ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth12), ]) ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS") fvp = swsscommon.FieldValuePairs() ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_10 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_LEARNED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth12 + "\"}]}]" ntf.send("fdb_event", ntf_data, fvp) time.sleep(2) # check that the FDB entry was added in ASIC DB print( "CHECK: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is created in ASIC-DB") ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_10)], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth12)]) assert ok, str(extra) print( "CONFIRM: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is created in ASIC-DB" ) # check that the FDB entry was not added in STATE DB print( "CHECK: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not created in STATE-DB" ) mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE", "Vlan10:52:54:00:25:06:e9", [ ("port", "Ethernet12"), ("type", "dynamic"), ]) assert mac1_found == False, str(extra) print( "CONFIRM: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not created in STATE-DB" ) print("NEG6 - simulate mac age event for a vlan which does not exist") print( "ACTION: Deleting FDB Vlan10:52-54-00-25-06-E9:Ethernet12 from ASIC-DB" ) remove_entry_tbl( dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" + vlan_oid_10 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" + switch_id + "\"}") ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS") fvp = swsscommon.FieldValuePairs() ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_10 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_AGED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth12 + "\"}]}]" ntf.send("fdb_event", ntf_data, fvp) time.sleep(2) # check that the FDB entry is not present ASIC DB print( "CHECK: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not found in ASIC-DB" ) ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_10)], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth12)]) assert ok == False, str(extra) print( "CONFIRM: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not found in ASIC-DB" ) # check that the FDB entry was not found in STATE DB print( "CHECK: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not found in STATE-DB" ) mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE", "Vlan10:52:54:00:25:06:e9", [ ("port", "Ethernet12"), ("type", "dynamic"), ]) assert mac1_found == False, str(extra) print( "CONFIRM: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not found in STATE-DB" ) print("NEG7 - simulate mac age event for a port which is not part of vlan") print( "ACTION: Deleting FDB Vlan4:52-54-00-25-06-E9:Ethernet8 from ASIC-DB") remove_entry_tbl( dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" + vlan_oid_4 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" + switch_id + "\"}") ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS") fvp = swsscommon.FieldValuePairs() ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_4 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_AGED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth8 + "\"}]}]" ntf.send("fdb_event", ntf_data, fvp) time.sleep(2) # check that the FDB entry is not present ASIC DB print( "CHECK: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not found in ASIC-DB") ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_4)], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth8)]) assert ok == False, str(extra) print( "CONFIRM: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not found in ASIC-DB" ) # check that the FDB entry was not found in STATE DB print( "CHECK: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not found in STATE-DB" ) mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE", "Vlan4:52:54:00:25:06:e9", [ ("port", "Ethernet8"), ("type", "dynamic"), ]) assert mac1_found == False, str(extra) print( "CONFIRM: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not found in STATE-DB" ) print("NEG8 - simulate mac age event for a mac which does not exist") bp_eth0 = iface_2_bridge_port_id["Ethernet0"] print( "ACTION: Deleting FDB Vlan2:52-54-00-25-06-E9:Ethernet0 from ASIC-DB") remove_entry_tbl( dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" + vlan_oid_2 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" + switch_id + "\"}") ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS") fvp = swsscommon.FieldValuePairs() ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_2 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_AGED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth0 + "\"}]}]" ntf.send("fdb_event", ntf_data, fvp) time.sleep(2) # check that the FDB entry is not present ASIC DB print( "CHECK: FDB Vlan2:52-54-00-25-06-E9:Ethernet0 is not found in ASIC-DB") ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_2)], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth0)]) assert ok == False, str(extra) print( "CONFIRM: FDB Vlan2:52-54-00-25-06-E9:Ethernet0 is not found in ASIC-DB" ) # check that the FDB entry was not found in STATE DB print( "CHECK: FDB Vlan2:52-54-00-25-06-E9:Ethernet0 is not found in STATE-DB" ) mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE", "Vlan2:52:54:00:25:06:e9", [ ("port", "Ethernet0"), ("type", "dynamic"), ]) assert mac1_found == False, str(extra) print( "CONFIRM: FDB Vlan2:52-54-00-25-06-E9:Ethernet0 is not found in STATE-DB" ) print( "NEG9 - Add Static MAC M1 to Vlan V1 and Port P1; create V1; assign V1 to P1; remove V1 from P1; remove V1" ) mac = "52:54:00:25:06:EF" #dvs.runcmd("config mac add " + mac.lower() + " 10 Ethernet12") print("ACTION: Creating static FDB Vlan10|" + mac.lower() + "|Ethernet12 in CONFIG-DB") create_entry_tbl(dvs.cdb, "FDB", "Vlan10|" + mac.lower(), [ ("port", "Ethernet12"), ]) time.sleep(5) # check that the FDB entry was added in Config DB print("CHECK: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is created in Config-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB", "Vlan10\|" + mac.lower(), [("port", "Ethernet12")]) assert mac1_found, str(extra) print("CONFIRM: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is created in Config-DB") # check that the FDB entry was added in APP DB print("CHECK: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is created in APP-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE", "Vlan10:" + mac.lower(), [("port", "Ethernet12"), ("type", "static")]) assert mac1_found, str(extra) print("CONFIRM: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is created in APP-DB") # check that the FDB entry is not inserted into ASIC DB print("CHECK: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is not created in ASIC-DB") ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac.lower())], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC")]) assert ok == False, str(extra) print("CONFIRM: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is not created in ASIC-DB") dvs.create_vlan("10") time.sleep(1) dvs.create_vlan_member("10", "Ethernet12") time.sleep(1) # Find the vlan_oid_10 to be used in DB communications vlan_oid_10 = dvs.getVlanOid("10") assert vlan_oid_10 is not None, "Could not find Vlan_oid" print("VLan-10 vlan_oid=" + str(vlan_oid_10)) iface_2_bridge_port_id = dvs.get_map_iface_bridge_port_id(dvs.adb) bp_eth12 = iface_2_bridge_port_id["Ethernet12"] print("bp_eth12=" + str(bp_eth12)) print("CHECK: Static FDB Vlan10:" + mac + ":Ethernet12 is created in ASIC-DB") ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac), ("bvid", str(vlan_oid_10))], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth12)]) assert ok, str(extra) print("CONFIRM: Static FDB Vlan10:" + mac + ":Ethernet12 is created in ASIC-DB") # check that the FDB entry was added in STATE DB print("CHECK: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is created in STATE-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE", "Vlan10:" + mac.lower(), [ ("port", "Ethernet12"), ("type", "static"), ]) assert mac1_found, str(extra) print("CONFIRM: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is created in STATE-DB") print("ACTION: Remove vlan member Ethernet12") dvs.remove_vlan_member("10", "Ethernet12") time.sleep(2) print("CHECK: Static FDB Vlan10:" + mac + ":Ethernet12 is deleted from ASIC-DB") ok, extra = dvs.is_fdb_entry_exists( dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY", [("mac", mac), ("bvid", str(vlan_oid_10))], [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth12)]) assert ok == False, str(extra) print("CONFIRM: Static FDB Vlan10:" + mac + ":Ethernet12 is deleted from ASIC-DB") # check that the FDB entry was deleted from STATE DB print("CHECK: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is deleted from STATE-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE", "Vlan10:" + mac.lower(), [ ("port", "Ethernet12"), ("type", "static"), ]) assert mac1_found == False, str(extra) print("CONFIRM: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is deleted from STATE-DB") print("ACTION: Remove vlan Vlan10") dvs.remove_vlan("10") time.sleep(2) print("ACTION: Remove FDB Vlan10|" + mac.lower() + " from Config DB") remove_entry_tbl(dvs.cdb, "FDB", "Vlan10|" + mac.lower()) time.sleep(2) #Check the mac is removed from config-db print("CHECK: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is deleted from Config-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB", "Vlan10\|" + mac.lower(), [("port", "Ethernet12")]) assert mac1_found == False, str(extra) print("CONFIRM: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is deleted from Config-DB") # check that the FDB entry is removed from APP DB print("CHECK: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is deleted from APP-DB") mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE", "Vlan10:" + mac.lower(), [ ("port", "Ethernet12"), ("type", "static"), ]) assert mac1_found == False, str(extra) print("CONFIRM: Static FDB Vlan10:" + mac.lower() + ":Ethernet12 is deleted from APP-DB") print("NEG10 - Received move event with invalid bridge-port") # Move a FDB entry in ASIC DB print("Action: Creating FDB Vlan2:52-54-00-25-06-EB:Ethernet0 in ASIC-DB") create_entry_tbl( dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" + vlan_oid_2 + "\",\"mac\":\"52:54:00:25:06:EB\",\"switch_id\":\"" + switch_id + "\"}", [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"), ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", iface_2_bridge_port_id["Ethernet0"])]) ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS") fvp = swsscommon.FieldValuePairs() ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_2 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:EB\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_LEARNED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + iface_2_bridge_port_id[ "Ethernet0"] + "\"}]}]" ntf.send("fdb_event", ntf_data, fvp) time.sleep(2) print( "Action: Moving FDB Vlan2:52-54-00-25-06-EB:Ethernet0 to non-existing bridge-port Ethernet12" ) ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS") fvp = swsscommon.FieldValuePairs() ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_2 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:EB\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_MOVE\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth12 + "\"}]}]" ntf.send("fdb_event", ntf_data, fvp) time.sleep(2) print("CHECK: FDB Vlan2:52-54-00-25-06-EB is not Moved in STATE-DB") # check that the FDB entry was not moved in STATE DB mac2_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE", "Vlan2:52:54:00:25:06:eb", [ ("port", "Ethernet0"), ("type", "dynamic"), ]) assert mac2_found, str(extra) print("CONFIRM: FDB Vlan2:52-54-00-25-06-EB is not Moved in STATE-DB") #raw_input("Check at the end") dvs.runcmd("sonic-clear fdb all") time.sleep(10) dvs.remove_vlan_member("2", "Ethernet0") dvs.remove_vlan_member("2", "Ethernet4") dvs.remove_vlan("2") dvs.remove_vlan("4")