@@ -598,46 +598,84 @@ def test_RouteAddRemoveMplsRouteMixedNHG(self, dvs, testlog):
598
598
599
599
self .teardown_mpls (dvs )
600
600
601
- def test_RouteUnresolvedMplsRouteSwap (self , dvs , testlog ):
602
- self .setup_mpls (dvs , False )
601
+ def test_RouteAddRemoveMplsRouteResolveNeigh (self , dvs , testlog ):
602
+ if not self .mpls_appdb_mode ():
603
+ dvs .runcmd ("modprobe mpls_router" )
604
+ dvs .runcmd ("modprobe mpls_iptunnel" )
605
+ dvs .runcmd ("sysctl -w net.mpls.platform_labels=1000" )
603
606
604
- # add route entry
605
- label = "200"
607
+ self .setup_db (dvs )
608
+
609
+ self .clear_srv_config (dvs )
610
+
611
+ # create mpls interface
612
+ self .create_mpls_intf ("Ethernet0" )
613
+ self .create_mpls_intf ("Ethernet4" )
614
+
615
+ # set ip address
616
+ self .add_ip_address ("Ethernet0" , "10.0.0.0/31" )
617
+ self .add_ip_address ("Ethernet4" , "10.0.0.2/31" )
618
+
619
+ # bring up interface
620
+ self .set_admin_status ("Ethernet0" , "up" )
621
+ self .set_admin_status ("Ethernet4" , "up" )
622
+
623
+ # set ip address and default route
624
+ dvs .servers [0 ].runcmd ("ip address add 10.0.0.1/31 dev eth0" )
625
+ dvs .servers [0 ].runcmd ("ip route add default via 10.0.0.0" )
626
+
627
+ dvs .servers [1 ].runcmd ("ip address add 10.0.0.3/31 dev eth0" )
628
+ dvs .servers [1 ].runcmd ("ip route add default via 10.0.0.2" )
629
+ time .sleep (2 )
630
+
631
+ # add route entries. The neighbor entries for 10.0.0.1 and 10.0.0.3 are not yet resolved, so will trigger an ARP request
632
+ label = "100"
633
+ label2 = "200"
606
634
if self .mpls_appdb_mode ():
607
- fieldValues = {"nexthop" : "10.0.0.1" , "ifname" : "Ethernet0" , "mpls_nh" : "swap201 " , "mpls_pop" : "1" }
635
+ fieldValues = {"nexthop" : "10.0.0.1" , "ifname" : "Ethernet0" , "mpls_nh" : "swap101 " , "mpls_pop" : "1" }
608
636
self .create_inseg_entry (label , fieldValues )
637
+ fieldValues = {"nexthop" : "10.0.0.1,10.0.0.3" , "ifname" : "Ethernet0,Ethernet4" , "mpls_nh" : "swap201,swap202" , "mpls_pop" : "1" }
638
+ self .create_inseg_entry (label2 , fieldValues )
609
639
else :
610
- # dvs.runcmd("ip -f mpls route add 200 as 201 via inet 10.0.0.1 dev Ethernet0")
611
- dvs .runcmd ("vtysh -c \" configure terminal \" -c \" mpls lsp 200 10.0.0.1 201 \" " )
640
+ dvs .runcmd ("ip -f mpls route add 100 nexthop as 101 via inet 10.0.0.1 dev Ethernet0" )
641
+ dvs .runcmd ("ip -f mpls route add 200 nexthop as 201 via inet 10.0.0.1 dev Ethernet0 nexthop as 202 via inet 10.0.0.3 dev Ethernet4 " )
612
642
613
643
# check application database
614
644
self .pdb .wait_for_entry ("LABEL_ROUTE_TABLE" , label )
645
+ self .pdb .wait_for_entry ("LABEL_ROUTE_TABLE" , label2 )
615
646
616
- # check ASIC inseg database. inseg with unresolved NH should not be present.
617
- self .check_inseg_entries (False , [label ])
618
- self .check_nexthop (False , "SAI_NEXT_HOP_TYPE_MPLS" , "10.0.0.1" , "SAI_OUTSEG_TYPE_SWAP" , "1:201" )
619
-
620
- # now resolve the NH
621
- dvs .servers [0 ].runcmd ("ping -c 1 10.0.0.3" )
622
- dvs .servers [2 ].runcmd ("ping -c 1 10.0.0.3" )
647
+ # check neighbor got resolved and removed from NEIGH_RESOLVE_TABLE
648
+ self .pdb .wait_for_deleted_entry ("NEIGH_RESOLVE_TABLE" , "Ethernet0:10.0.0.1" )
649
+ self .pdb .wait_for_deleted_entry ("NEIGH_RESOLVE_TABLE" , "Ethernet4:10.0.0.3" )
623
650
624
651
# check ASIC inseg database
625
652
self .check_inseg_entries (True , [label ])
626
- self .check_inseg_nexthop (label , "SAI_NEXT_HOP_TYPE_MPLS" , "10.0.0.1" , "SAI_OUTSEG_TYPE_SWAP" , "1:201" )
653
+ self .check_inseg_nexthop (label , "SAI_NEXT_HOP_TYPE_MPLS" , "10.0.0.1" , "SAI_OUTSEG_TYPE_SWAP" , "1:101" )
654
+ self .check_inseg_entries (True , [label2 ])
655
+ self .check_inseg_nexthop_group (label2 , 2 )
656
+ self .check_nexthop (True , "SAI_NEXT_HOP_TYPE_MPLS" , "10.0.0.1" , "SAI_OUTSEG_TYPE_SWAP" , "1:201" )
657
+ self .check_nexthop (True , "SAI_NEXT_HOP_TYPE_MPLS" , "10.0.0.3" , "SAI_OUTSEG_TYPE_SWAP" , "1:202" )
658
+ nhg = self .get_inseg_nexthop (label )
627
659
628
- # remove route entry
660
+ # remove inseg entry
629
661
if self .mpls_appdb_mode ():
630
662
self .remove_inseg_entry (label )
663
+ self .remove_inseg_entry (label2 )
631
664
else :
632
- # dvs.runcmd("ip -f mpls route del 200 as 201 via inet 10.0.0.1 dev Ethernet0")
633
- dvs .runcmd ("vtysh -c \" configure terminal \" -c \" no mpls lsp 200 10.0.0.1 201 \" " )
665
+ dvs .runcmd ("ip -f mpls route del 100 nexthop as 101 via inet 10.0.0.1 dev Ethernet0" )
666
+ dvs .runcmd ("ip -f mpls route del 200 nexthop as 201 via inet 10.0.0.1 dev Ethernet0 nexthop as 202 via inet 10.0.0.3 dev Ethernet4 " )
634
667
635
668
# check application database
636
669
self .pdb .wait_for_deleted_entry ("LABEL_ROUTE_TABLE" , label )
670
+ self .pdb .wait_for_deleted_entry ("LABEL_ROUTE_TABLE" , label2 )
637
671
638
- # check ASIC inseg database
672
+ # check ASIC route database
639
673
self .check_inseg_entries (False , [label ])
674
+ self .check_inseg_entries (False , [label2 ])
675
+ self .check_nexthop_group (False , nhg )
676
+ self .check_nexthop (False , "SAI_NEXT_HOP_TYPE_MPLS" , "10.0.0.1" , "SAI_OUTSEG_TYPE_SWAP" , "1:101" )
640
677
self .check_nexthop (False , "SAI_NEXT_HOP_TYPE_MPLS" , "10.0.0.1" , "SAI_OUTSEG_TYPE_SWAP" , "1:201" )
678
+ self .check_nexthop (False , "SAI_NEXT_HOP_TYPE_MPLS" , "10.0.0.3" , "SAI_OUTSEG_TYPE_SWAP" , "1:202" )
641
679
642
680
self .teardown_mpls (dvs )
643
681
0 commit comments