diff --git a/orchagent/mirrororch.cpp b/orchagent/mirrororch.cpp index 668786194d7..c2c78c7601e 100644 --- a/orchagent/mirrororch.cpp +++ b/orchagent/mirrororch.cpp @@ -479,10 +479,6 @@ task_process_status MirrorOrch::deleteEntry(const string& name) if (session.status) { - if (session.type != MIRROR_SESSION_SPAN) - { - m_routeOrch->detach(this, session.dstIp); - } if (!deactivateSession(name, session)) { SWSS_LOG_ERROR("Failed to remove mirror session %s", name.c_str()); @@ -490,6 +486,11 @@ task_process_status MirrorOrch::deleteEntry(const string& name) } } + if (session.type != MIRROR_SESSION_SPAN) + { + m_routeOrch->detach(this, session.dstIp); + } + if (!session.policer.empty()) { m_policerOrch->decreaseRefCount(session.policer); diff --git a/tests/test_mirror.py b/tests/test_mirror.py index 472d33fef2c..73cfc02ccfa 100644 --- a/tests/test_mirror.py +++ b/tests/test_mirror.py @@ -103,6 +103,9 @@ def get_mirror_session_state(self, name): assert len(fvs) > 0 return { fv[0]: fv[1] for fv in fvs } + def check_syslog(self, dvs, marker, log, expected_cnt): + (ec, out) = dvs.runcmd(['sh', '-c', "awk \'/%s/,ENDFILE {print;}\' /var/log/syslog | grep \'%s\' | wc -l" % (marker, log)]) + assert out.strip() == str(expected_cnt) def test_MirrorAddRemove(self, dvs, testlog): """ @@ -120,9 +123,11 @@ def test_MirrorAddRemove(self, dvs, testlog): session = "TEST_SESSION" + marker = dvs.add_log_marker() # create mirror session self.create_mirror_session(session, "1.1.1.1", "2.2.2.2", "0x6558", "8", "100", "0") assert self.get_mirror_session_state(session)["status"] == "inactive" + self.check_syslog(dvs, marker, "Attached next hop observer .* for destination IP 2.2.2.2", 1) # bring up Ethernet16 self.set_interface_status(dvs, "Ethernet16", "up") @@ -193,8 +198,10 @@ def test_MirrorAddRemove(self, dvs, testlog): self.set_interface_status(dvs, "Ethernet16", "down") assert self.get_mirror_session_state(session)["status"] == "inactive" + marker = dvs.add_log_marker() # remove mirror session self.remove_mirror_session(session) + self.check_syslog(dvs, marker, "Detached next hop observer for destination IP 2.2.2.2", 1) def create_vlan(self, dvs, vlan): #dvs.runcmd("ip link del Bridge") @@ -251,9 +258,11 @@ def test_MirrorToVlanAddRemove(self, dvs, testlog): session = "TEST_SESSION" + marker = dvs.add_log_marker() # create mirror session self.create_mirror_session(session, "5.5.5.5", "6.6.6.6", "0x6558", "8", "100", "0") assert self.get_mirror_session_state(session)["status"] == "inactive" + self.check_syslog(dvs, marker, "Attached next hop observer .* for destination IP 6.6.6.6", 1) # create vlan; create vlan member self.create_vlan(dvs, "6") @@ -339,8 +348,10 @@ def test_MirrorToVlanAddRemove(self, dvs, testlog): self.remove_vlan_member("6", "Ethernet4") self.remove_vlan("6") + marker = dvs.add_log_marker() # remove mirror session self.remove_mirror_session(session) + self.check_syslog(dvs, marker, "Detached next hop observer for destination IP 6.6.6.6", 1) def create_port_channel(self, dvs, channel): tbl = swsscommon.ProducerStateTable(self.pdb, "LAG_TABLE") @@ -388,9 +399,11 @@ def test_MirrorToLagAddRemove(self, dvs, testlog): session = "TEST_SESSION" + marker = dvs.add_log_marker() # create mirror session self.create_mirror_session(session, "10.10.10.10", "11.11.11.11", "0x6558", "8", "100", "0") assert self.get_mirror_session_state(session)["status"] == "inactive" + self.check_syslog(dvs, marker, "Attached next hop observer .* for destination IP 11.11.11.11", 1) # create port channel; create port channel member self.create_port_channel(dvs, "008") @@ -436,8 +449,10 @@ def test_MirrorToLagAddRemove(self, dvs, testlog): self.remove_port_channel_member("008", "Ethernet88") self.remove_port_channel(dvs, "008") + marker = dvs.add_log_marker() # remove mirror session self.remove_mirror_session(session) + self.check_syslog(dvs, marker, "Detached next hop observer for destination IP 11.11.11.11", 1) # Ignore testcase in Debian Jessie