Skip to content

Commit f437f9f

Browse files
author
Shuotian Cheng
authored
[test]: Enforce fake port-channel interfaces carrier up (sonic-net#905)
After switching to FRR, routes cannot be inserted if the interface is not connected, or 'carrier down'. Thus, it is mandatory to force the interface carrier up. Signed-off-by: Shu0T1an ChenG <[email protected]>
1 parent 2e3b946 commit f437f9f

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

tests/test_mirror.py

+31-25
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def setup_db(self, dvs):
1515
self.cdb = swsscommon.DBConnector(4, dvs.redis_sock, 0)
1616
self.sdb = swsscommon.DBConnector(6, dvs.redis_sock, 0)
1717

18-
def set_interface_status(self, interface, admin_status):
18+
def set_interface_status(self, dvs, interface, admin_status):
1919
if interface.startswith("PortChannel"):
2020
tbl_name = "PORTCHANNEL"
2121
elif interface.startswith("Vlan"):
@@ -27,6 +27,12 @@ def set_interface_status(self, interface, admin_status):
2727
tbl.set(interface, fvs)
2828
time.sleep(1)
2929

30+
# when using FRR, route cannot be inserted if the neighbor is not
31+
# connected. thus it is mandatory to force the interface up manually
32+
if interface.startswith("PortChannel"):
33+
dvs.runcmd("bash -c 'echo " + ("1" if admin_status == "up" else "0") +\
34+
" > /sys/class/net/" + interface + "/carrier'")
35+
3036
def add_ip_address(self, interface, ip):
3137
if interface.startswith("PortChannel"):
3238
tbl_name = "PORTCHANNEL_INTERFACE"
@@ -118,7 +124,7 @@ def test_MirrorAddRemove(self, dvs, testlog):
118124
assert self.get_mirror_session_state(session)["status"] == "inactive"
119125

120126
# bring up Ethernet16
121-
self.set_interface_status("Ethernet16", "up")
127+
self.set_interface_status(dvs, "Ethernet16", "up")
122128
assert self.get_mirror_session_state(session)["status"] == "inactive"
123129

124130
# add IP address to Ethernet16
@@ -183,7 +189,7 @@ def test_MirrorAddRemove(self, dvs, testlog):
183189
assert self.get_mirror_session_state(session)["status"] == "inactive"
184190

185191
# bring down Ethernet16
186-
self.set_interface_status("Ethernet16", "down")
192+
self.set_interface_status(dvs, "Ethernet16", "down")
187193
assert self.get_mirror_session_state(session)["status"] == "inactive"
188194

189195
# remove mirror session
@@ -253,8 +259,8 @@ def test_MirrorToVlanAddRemove(self, dvs, testlog):
253259
self.create_vlan_member("6", "Ethernet4")
254260

255261
# bring up vlan and member
256-
self.set_interface_status("Vlan6", "up")
257-
self.set_interface_status("Ethernet4", "up")
262+
self.set_interface_status(dvs, "Vlan6", "up")
263+
self.set_interface_status(dvs, "Ethernet4", "up")
258264

259265
# add ip address to vlan 6
260266
self.add_ip_address("Vlan6", "6.6.6.0/24")
@@ -325,8 +331,8 @@ def test_MirrorToVlanAddRemove(self, dvs, testlog):
325331
assert self.get_mirror_session_state(session)["status"] == "inactive"
326332

327333
# bring down vlan and member
328-
self.set_interface_status("Ethernet4", "down")
329-
self.set_interface_status("Vlan6", "down")
334+
self.set_interface_status(dvs, "Ethernet4", "down")
335+
self.set_interface_status(dvs, "Vlan6", "down")
330336

331337
# remove vlan member; remove vlan
332338
self.remove_vlan_member("6", "Ethernet4")
@@ -390,8 +396,8 @@ def test_MirrorToLagAddRemove(self, dvs, testlog):
390396
self.create_port_channel_member("008", "Ethernet88")
391397

392398
# bring up port channel and port channel member
393-
self.set_interface_status("PortChannel008", "up")
394-
self.set_interface_status("Ethernet88", "up")
399+
self.set_interface_status(dvs, "PortChannel008", "up")
400+
self.set_interface_status(dvs, "Ethernet88", "up")
395401

396402
# add ip address to port channel 008
397403
self.add_ip_address("PortChannel008", "11.11.11.0/24")
@@ -422,8 +428,8 @@ def test_MirrorToLagAddRemove(self, dvs, testlog):
422428
assert self.get_mirror_session_state(session)["status"] == "inactive"
423429

424430
# bring down port channel and port channel member
425-
self.set_interface_status("PortChannel008", "down")
426-
self.set_interface_status("Ethernet88", "down")
431+
self.set_interface_status(dvs, "PortChannel008", "down")
432+
self.set_interface_status(dvs, "Ethernet88", "down")
427433

428434
# remove port channel member; remove port channel
429435
self.remove_port_channel_member("008", "Ethernet88")
@@ -458,7 +464,7 @@ def test_MirrorDestMoveVlan(self, dvs, testlog):
458464
assert self.get_mirror_session_state(session)["status"] == "inactive"
459465

460466
# bring up port; add ip; add neighbor; add route
461-
self.set_interface_status("Ethernet32", "up")
467+
self.set_interface_status(dvs, "Ethernet32", "up")
462468
self.add_ip_address("Ethernet32", "80.0.0.0/31")
463469
self.add_neighbor("Ethernet32", "80.0.0.1", "02:04:06:08:10:12")
464470
self.add_route(dvs, "8.8.0.0/16", "80.0.0.1")
@@ -479,8 +485,8 @@ def test_MirrorDestMoveVlan(self, dvs, testlog):
479485
# create vlan; create vlan member; bring up vlan and member
480486
self.create_vlan(dvs, "9")
481487
self.create_vlan_member("9", "Ethernet48")
482-
self.set_interface_status("Vlan9", "up")
483-
self.set_interface_status("Ethernet48", "up")
488+
self.set_interface_status(dvs, "Vlan9", "up")
489+
self.set_interface_status(dvs, "Ethernet48", "up")
484490
assert self.get_mirror_session_state(session)["status"] == "active"
485491

486492
# add ip address to vlan 9
@@ -539,16 +545,16 @@ def test_MirrorDestMoveVlan(self, dvs, testlog):
539545
assert fv[1] == "false"
540546

541547
# bring down vlan and member; remove vlan member; remove vlan
542-
self.set_interface_status("Ethernet48", "down")
543-
self.set_interface_status("Vlan9", "down")
548+
self.set_interface_status(dvs, "Ethernet48", "down")
549+
self.set_interface_status(dvs, "Vlan9", "down")
544550
self.remove_vlan_member("9", "Ethernet48")
545551
self.remove_vlan("9")
546552

547553
# remove route; remove neighbor; remove ip; bring down port
548554
self.remove_route(dvs, "8.8.8.0/24")
549555
self.remove_neighbor("Ethernet32", "80.0.0.1")
550556
self.remove_ip_address("Ethernet32", "80.0.0.0/31")
551-
self.set_interface_status("Ethernet32", "down")
557+
self.set_interface_status(dvs, "Ethernet32", "down")
552558

553559
# remove mirror session
554560
self.remove_mirror_session(session)
@@ -576,7 +582,7 @@ def test_MirrorDestMoveLag(self, dvs, testlog):
576582
assert self.get_mirror_session_state(session)["status"] == "inactive"
577583

578584
# bring up port; add ip; add neighbor; add route
579-
self.set_interface_status("Ethernet64", "up")
585+
self.set_interface_status(dvs, "Ethernet64", "up")
580586
self.add_ip_address("Ethernet64", "100.0.0.0/31")
581587
self.add_neighbor("Ethernet64", "100.0.0.1", "02:04:06:08:10:12")
582588
self.add_route(dvs, "13.13.0.0/16", "100.0.0.1")
@@ -597,8 +603,8 @@ def test_MirrorDestMoveLag(self, dvs, testlog):
597603
# create port channel; create port channel member; bring up
598604
self.create_port_channel(dvs, "080")
599605
self.create_port_channel_member("080", "Ethernet32")
600-
self.set_interface_status("PortChannel080", "up")
601-
self.set_interface_status("Ethernet32", "up")
606+
self.set_interface_status(dvs, "PortChannel080", "up")
607+
self.set_interface_status(dvs, "Ethernet32", "up")
602608

603609
# add ip address to port channel 080; create neighbor to port channel 080
604610
self.add_ip_address("PortChannel080", "200.0.0.0/31")
@@ -663,8 +669,8 @@ def test_MirrorDestMoveLag(self, dvs, testlog):
663669
self.remove_ip_address("PortChannel080", "200.0.0.0/31")
664670

665671
# bring down; remove port channel member; remove port channel
666-
self.set_interface_status("Ethernet32", "down")
667-
self.set_interface_status("PortChannel080", "down")
672+
self.set_interface_status(dvs, "Ethernet32", "down")
673+
self.set_interface_status(dvs, "PortChannel080", "down")
668674
self.remove_port_channel_member("080", "Ethernet32")
669675
self.remove_port_channel(dvs, "080")
670676
assert self.get_mirror_session_state(session)["status"] == "active"
@@ -673,7 +679,7 @@ def test_MirrorDestMoveLag(self, dvs, testlog):
673679
self.remove_route(dvs, "13.13.0.0/16")
674680
self.remove_neighbor("Ethernet64", "100.0.0.1")
675681
self.remove_ip_address("Ethernet64", "100.0.0.0/31")
676-
self.set_interface_status("Ethernet64", "down")
682+
self.set_interface_status(dvs, "Ethernet64", "down")
677683
assert self.get_mirror_session_state(session)["status"] == "inactive"
678684

679685
# remove mirror session
@@ -719,7 +725,7 @@ def test_AclBindMirror(self, dvs, testlog):
719725
acl_rule = "MIRROR_RULE"
720726

721727
# bring up port; assign ip; create neighbor; create route
722-
self.set_interface_status("Ethernet32", "up")
728+
self.set_interface_status(dvs, "Ethernet32", "up")
723729
self.add_ip_address("Ethernet32", "20.0.0.0/31")
724730
self.add_neighbor("Ethernet32", "20.0.0.1", "02:04:06:08:10:12")
725731
self.add_route(dvs, "4.4.4.4", "20.0.0.1")
@@ -788,4 +794,4 @@ def test_AclBindMirror(self, dvs, testlog):
788794
self.remove_route(dvs, "4.4.4.4")
789795
self.remove_neighbor("Ethernet32", "20.0.0.1")
790796
self.remove_ip_address("Ethernet32", "20.0.0.0/31")
791-
self.set_interface_status("Ethernet32", "down")
797+
self.set_interface_status(dvs, "Ethernet32", "down")

0 commit comments

Comments
 (0)