From ddbb731d3f561e6b67e352fbcd7a647ec5b3dc06 Mon Sep 17 00:00:00 2001 From: Sooriya Date: Sun, 13 Dec 2020 22:15:24 -0800 Subject: [PATCH 01/14] Adding Routed sub interface Testplan --- .../routing/sub_interfaces/Sub_interfaces.md | 696 ++++++++++++++++++ .../routing/sub_interfaces/sub_interface.png | Bin 0 -> 68331 bytes 2 files changed, 696 insertions(+) create mode 100644 TestPlans/routing/sub_interfaces/Sub_interfaces.md create mode 100644 TestPlans/routing/sub_interfaces/sub_interface.png diff --git a/TestPlans/routing/sub_interfaces/Sub_interfaces.md b/TestPlans/routing/sub_interfaces/Sub_interfaces.md new file mode 100644 index 000000000000..4f5561c95abd --- /dev/null +++ b/TestPlans/routing/sub_interfaces/Sub_interfaces.md @@ -0,0 +1,696 @@ +SQA Test Plan + +# Routed Sub-Interfaces +# SONiC 3.2.0 Release + +Rev 1.9 + +[TOC] + +## Test Plan Revision History + +| Rev | Date | Author | Change Description | +| ---- | ---------- | ----------------------------- | ----------------------------------------------------- | +| 1 | 11/22/2020 | Sooriya Gajendrababu | Initial Version | +| | | | | +| | | | | +| | | | | +| | | | | +| | | | | + +## List of Reviewers + +| Function | Name | +| :------: | :--: | +| | | + +## List of Approvers + +| Function | Name | Date Approved | +| :------: | :--: | :-----------: | +| | | | + +## Definition/Abbreviation + +| **Term** | **Meaning** | +| -------- | ------------------------------ | +| VRF | Virtual routing and forwarding | +| RIF | Router interface | +| | | +## Introduction + +### Objective + +The main objective of this document is to cover the test cases that will be executed for Sub port Interface. Topologies and test cases for testing the feature will be discussed as part of this document. + +### Scope + +Only Sub port interface serving as an interface to VRF is covered + +### Out of scope + +* This test plan does not cover creating and using sub port as a bridge port to a .1D bridge + + +## Feature Overview + +A sub port interface is a logical interface that can be created on a physical port or a port channel. A sub port interface serves as an interface to either a .1D bridge or a VRF, but not both. + +Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q tag, can be created on a physical port or a port channel. Sub port interfaces attaching to the same physical port or port channel can interface to different VRFs, though they share the same VLAN id space and must have different VLAN ids. Sub port interfaces attaching to different physical ports or port channels can use the same VLAN id, even when they interface to the same VRF. However, there is no L2 bridging between these sub port interfaces; each sub port interface is considered to stay in a separate bridge domain. + + + +## 1 Test Focus Areas + +### 1.1 Functional Requirements + +* Manage the life cycle of a sub port interface created on a physical port or a port channel and used as a router interface to a VRF: + + - Creation with the specified dot1q vlan id encapsulation + - Runtime admin status change + - Removal + + A sub port interface shall support the following features: + + - L3 forwarding + - BGP + - ARP and NDP + - VRF + - RIF counters + - QoS setting inherited from parent physical port or port channel + - mtu inherited from parent physical port or port channel + - Per sub port interface admin status config + +## 2 Topologies + +![sub-interface](sub_interface.png "Figure 1: Topology 1") + + + +## 3 Test Case and objectives + +### **3.1 CLI Test Cases** + +### 3.1.1 Verify all the config/show CLIs for sub interface + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **Verify all the config/show CLIs for sub interface** | +| **Test Setup** | **Topology1** | +| **Type** | **CLI** | +| **Steps** | Verify config/delete cli for sub interface with all options both in click and klish
Verify show output returns sub interface operational states
Verify out of range encapsulation id throws suitable error
Suitable error should be thrown
Verify adding parent interface to Portchannel throws error
Try adding physical sub interfaces to Portchannel and verify config throws error
Verify enabling L2 protocol on parent interface throws error
| + +### 3.1.2 Verify all the Sub interface CLIs using OCI Yang/Rest api's. + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **Verify all the Sub interface CLIs using OCI Yang/Rest api's.** | +| **Test Setup** | **Topology1** | +| **Type** | **CLI** | +| **Steps** | Verify all the below config CLIs for sub interfaces using Rest ocyang URIs.
Verify sub interface operational configs via OCYANG GET URIs
Verify sub interface config removal using DELETE URIs
| + + + +### 3.1.3 Verify running-config for sub interface configs. + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **Verify running-config for sub interface configs** | +| **Test Setup** | **Topology1** | +| **Type** | **CLI** | +| **Steps** | 1)Configure multiple sub interfaces over both physical and portchannel interfaces
2)Verify "show running config" displays all the sub interface configs
3)Delete the configs and verify it is removed from running config | + +### 3.2 Functional Test Cases** + + + +### 3.2.1 To verify basic sub interface routing created over physical port + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | To verify basic sub interface routing created over physical port | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 100(100.1.1.2 and 1001::2) and other on Vlan200(200.1.1.2 and 2001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan200
3)On D1(Router), Create two sub interfaces for the physical port connecting to D2 with encapsulation id 100,200 respectively
4) Configure ip/ipv6 addresses addresses for these sub interfaces created over physical port 100.1.1.1 , 1001::1 and 200.1.1.1,2001::1 respectively
5)Send L3 ipv4 and ipv6 between Host1 and Host2 and Verify D1 routes the traffic over sub interfaces | + +### 3.2.2 To verify basic sub interface routing created over Lag port + + + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify basic sub interface routing created over Lag port** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 300(300.1.1.2 and 3001::2) and other on Vlan400(400.1.1.2 and 4001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan2003 +3)On D1(Router), Create two sub interfaces for the portchannel port connecting to D2 with encapsulation id 100,200 respectively +4) Configure ip/ipv6 addresses addresses for these sub interfaces created over lag port 300.1.1.1 , 3001::1 and 300.1.1.1,3001::1 respectively +5)Send L3 ipv4 and ipv6 between Host1 and Host2 and Verify D1 routes the traffic over sub interfaces
6) Delete Parent PortChannel interface with sub interfaces configured and verify all parent and sub interfaces gets deleted | + + + + + +### 3.2.3 To verify sub port from different physical/lag ports can map to same vrf + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify sub port from different physical/lag ports can map to same vrf** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure a sub interface on physical interface with encap id 100 and a sub interface on lag interface with encap id 200
2) Assign both sub interfaces to same user-vrf Vrf1.
3) Verify D1 routes traffic between sub interfaces belonging to different parent interfaces
| + +### 3.2.4 To verify sub port from same parent port map to different VRFs + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To verify sub port from same parent port map to different VRFs** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure two sub interfaces on single parent port with encap id as 100 and 200 respectively and on lag port create 2 sub interfaces
2) Assign first sub interface to Vrf1 and second sub interface to Vrf2 on both physical and lag ports
3) Verify sub interfaces are assigned to corresponding VRFs and verify traffic gets forwarded within VRFs | + + + +### 3.2.5 To verify same sub port from different parent ports map to different VRFs + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To verify same sub port from different parent ports map to different VRFs** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces with same id on two different parent ports
2) Assign first sub interface on first parent interfaces to Vrf1 and sub interface on second parent interface to Vrf2
3) Verify sub interfaces are assigned to corresponding VRFs and verify traffic gets forwarded within VRFs
| + + + +### 3.2.6 To Verify sub ports on different parent ports can have same encapsulation id with BUM traffic + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify sub ports on different phy/lag ports can have same encapsulation id** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interface with encap id 100 on both physical and Portchannel parent ports
2)Verify sub interface creation is successful
3)Send L2 traffic with Vlanid 100 same as sub interface id and verify L2 bridging does not happen between the sub interfaces with same encap id
4) Configure Router Tgen port as L2 port on Vlan 100 and send BUM traffic from router Tgen and verify traffic not flooded to sub interfaces with encap id 100
5) Configure SVI interface over Vlan 100 with ip and ipv6 address and verify BUM flooding did not happen
6)Delete the Vlan id 100 which is same as encap-id and verify sub interface configs are intact | + + + +### 3.2.7 To Verify creating sub interface with port id and encapsulation id different + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify creating sub interface with port id and encapsulation id different** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure Sub interface on Ethernet100 with port-id as 20 and encapsulation id as 10
2) Configure one more sub interface on Eth100 with port-id as 10 and encapsulation id as 20
3)Bind it to Vrf and assign ip/ipv6 addressess
4)Verify L3 traffic routing between the sub interfaces
5) Delete the Ethernet100.10 and verify the other sub interface is intact
6)Recreate Ethernet100.20 encap-id 10 nd verify Traffic forwarding resumes | + + + +### 3.2.8 To Verify port admin status flap for sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify port admin status flap for sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure multiple sub interfaces on both physical and Portchannel parent ports
2)Verify admin down of parent port brings down all sub interfaces
3)Verify admin up of parent interfaces brings all sub interfaces to admin up
4)Verify sub interface state can be administratively controlled separately and it does not affect parent port state and other sub interfaces on the same parent port
5)Verify sub interfaces goes oper down when parent port goes oper down
6)Bring back all parent and sub interfaces and verify all ports are Oper-up
7)Bring down the parent interface oper-down by shutting the link on remote DUT
8)Verify parent and sub interface state goes oper-down
9) Configure Portchannel minimum link to 3 for the parent interface and verify both parent and sub interfaces goes oper down | + + + +### 3.2.9 To Verify parent physical/lag port shows aggregate stats of sub ports + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify parent physical/lag port shows aggregate stats of sub ports** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure multiple sub interfaces on both physical and Port channel parent ports
2) Send L3 traffic between sub interfaces
3) Verify parent interface statistics shows aggregate count from all of its sub interfaces
| + + + +### 3.2.10 To Verify interface stats at sub interface level + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify interface stats at sub interface level** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure multiple sub interfaces on both physical and Port channel parent ports
2) Send L3 traffic between sub interfaces
3) Verify Sub interfaces counter statistics are shown correctly for each sub interface
4) Verify counters on other sub interface belonging to same parent interface do not increment | + +### 3.2.11 To Verify primary and secondary ip and ipv6 address configs on sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify primary and secondary ip and ipv6 address configs on sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure multiple sub interfaces on both physical and Port channel parent ports
2) Configure primary and secondary ipv4 addressed on sub interfaces and verify L3 routing
3)Verify "show ip/ipv6 interfaces" displays the IP, VRF and oper-state for the sub interfaces
4)Delete and re-add configured IP addresses and verify configs are getting deleted and re-applied
5)Configure multiple Ipv6 addresses on Sub interfaces and verify L3 routing works
6)Delete and reconfigure ipv6 addresses and verify configs are getting deleted and re-applied
7)Configure ipv6 link local address on sub interface and verify it gets assigned after sub interface link flap
8)Configure overlapping/duplicate IP/IPv6 addresses and subnets over multiple parent and sub interfaces and verify it gets rejected | + +### 3.2.12 To Verify ipv6 disable/enable and verify link-local assignment on sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify ipv6 disable/enable and verify link-local assignment on sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on phy/lag ports
2)Disable ipv6 globally and verify it is disabled for all sub interfaces configured
3)Re-enable ipv6 globally and verify sub interfaces will be assigned with auto-generated ipv6 link-local address
4)Configure link-local address explicitly on sub interfaces and verify it is getting assigned
| + + + +### 3.2.13 To Verify functionality of switching from user-vrf to default for sub interfaces and parent interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify Verify functionality of switching from user-vrf to default for sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on phy/lag ports
2)Bind the sub interfaces to user-vrf with all possible L3 configs on sub interfaces
3)Do L3 configs on parent interface also on Vrf2
3) Verify L3 routing between hosts in different sub interfaces
4)Unbind Vrf1 from sub interface and verify all L3 configurations gets deleted under the sub interface
5) Rebind Vrf1 to sub interface and configure IP/Ipv6 configurations
6)Verify L3 traffic gets routed on Vrf1 between sub interfaces
7) Unbind VRF configs from parent interface and verify sub interface configs are intact and routing between sub interfaces works | + + + +### 3.2.14 To Verify IP unnumbered on sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify IP unnumbered on sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure two loopback interfaces with ip address 100.1.1.1/32 and 200.1.1.1/32 on user vrf Vrf1
2) Create 2 sub interfaces on Physical interfaces with encap id as 100 and 200
3)Configure the sub interfaces as ip unnumbered interface with loopback interface as donor
4)Verify sub interface gets the ip addresses from the donor interface
5)Verify L3 routing works between ip unnumbered sub interfaces | + + + +### 3.2.15 To Verify MTU configs on parent and sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify MTU configs on sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure multiple sub interfaces on physical and Lag interfaces
2)Verify default MTU size on sub interfaces gets inherited from parent interface
3)Configure non default MTU sizes on parent interfaces and verify MTU sizes gets inherited to sub interfaces
4)Send L3 packets for different packet sizes and verify traffic gets fragmented as per MTU sizes on sub interfaces
5)Configure different MTU sizes for each sub interfaces on same parent interface and verify each sub interface has its configured MTU value as 1200,1900 bytes
6)Send L3 stream exceeding MTU size of sub interface and verify fragmentation happens at sub interface level | + +### 3.2.16 To Verify static and dynamic ARP/ND on sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify static and dynamic ARP/ND on sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on phy/lag port
2)Assign Ipv4 and Ipv6 addresses on sub interfaces
3) Resolve ARP and ND from hosts connected to L2 switch
4)Verify arp and ND table show resolved ip and ipv6 entries for the sub interfaces
5)Configure static ARP and ND on sub interfaces and verify the table
6)Perform "Clear arp" and "clear ndp" and verify dynamic entries are relearnt | + + + +### 3.2.17 To Verify ping and traceroute towards from and to IP/IPv6s configured on Sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify ping and traceroute towards from and to IP/IPv6s configured on Sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on phy/lag port
2) Bind the sub interfaces to user vrf
3) From DUT, ping to the hosts configured on Tgen on Vlan 100 and 200 with -I arg
4)Verify ping works
5)Do traceroute to Tgen hosts and verify it works on sub ports
6)Perform ping from Tgen to IP and IPv6 configured on Sub interfaces and ve rify DUT respond with icmp reply on the sub interfaces | + + + +### 3.2.18 To Verify multiple BGP sessions on sub interfaces and parent interfaces with ECMP + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify multiple BGP sessions on sub interfaces and parent interfaces with ECMP** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure 3 sub interfaces on phy interfaces with encap id 100,200,300
2)Configure 3 sub interfaces on Lag interfaces with encap id 400,500,600
3)Bind the sub interfaces to user-vrf
4) Configure ipv4 and ipv6 addresses on all sub interfaces
5)Configure ip address on parent interface and establish BGP session on parent interface
6)Configure BGP neighbors on all sub interfaces and enable ECMP paths
7)Advertise prefixes from bgp neighbor and verify traffic
8)Verify ECMP traffic forwarding with mix of parent interface , sub interfaces | + + + +### 3.2.19 To Verify BGP 5549 unnumbered over sub interfaces + + + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify BGP 5549 unnumbered over sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on physical and lag interfaces
2)Configure encap_id on each sub interfaces and bind it to user-vrf
3)Configure BGP 5549 unnumbered neighbor over sub interfaces
4)Verify ipv4 prefixes are advertised over bgp 5549 session established via sub interfaces | + + + + + +### 3.2.20 To Verify OSPFv2 /OSPFv3 neighbors over sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify OSPFv2 /OSPFv3 neighbors over sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on physical and lag interfaces
2)Configure encap_id on each sub interfaces and bind it to user-vrf
3) Enable ospfv2 and ospv3 on all sub interfaces
4)Verify OSPF neighbors are up for all the sub interfaces
| + + + +### 3.2.21 To Verify ICMP SLAs with sub interface as source-interface + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify ICMP SLAs with sub interface as source-interface** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on physical and lag interfaces
2)Configure encap_id on each sub interfaces and bind it to user-vrf
3)COnfigure ICMP SLA for the subnet ip configured on D3
4)Verify ICMP SLA comes up fine
5)Configure src-intf as sub interfaces and verify SLAs are UP
6)Bring down the destination subnet and verify SLAs are timed out
| + +### 3.2.22 To Verify TCP SLAs with sub interface as source-interface + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify ICMP SLAs with sub interface as source-interface** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on physical and lag interfaces
2)Configure encap_id on each sub interfaces and bind it to user-vrf
3)Configure TCP SLA for the subnet ip configured on D3
4)Verify ICMP SLA comes up fine
5)Configure src-intf as sub interfaces and verify SLAs are UP 6)Bring down the destination subnet and verify SLAs are timed out | + + + +### 3.2.23 To Verify DHCP relay over sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify DHCP relay over sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on physical and lag interfaces
2) Configure dhcp v4 and dhcpv6 relay agent over sub interfaces
3)Verify dhcp messages from client gets relayed to server and vice-versa over sub interfaces
4)Verify option-82 added for each sub interface
5) Configure src-intf suboption on sub interfaces with loopback address
6)Verify DHCP packets are relayed to server with loopback address as source
| + + + +### 3.2.24 To Verify VRRP functionality over sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify Verify VRRP functionality over sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on physical and lag interfaces on D1 and D2
2)Enable VRRP on sub interfaces
3)Verify VRRP master /Backup election on sub interfaces for both ipv4 and ipv6
4) Verify traffic forwarding
5)Configure sub interface as VRRP owner and verify master/backup elections
6)Configure different priories and verifymaster/Backup election happens as per the configured priority | + + + +### 3.2.25 To Verify Static routes with sub interface as next hop interface + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify Static routes with sub interface as next hop interface** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on with ip and ipv6 interfaces
2)Configure a static route for network 150.1.1.0/24 and 1501::/64 with sub interface as nexthop interfaces
3)Verify ip route table shows static entry
4) Send L3 traffic for both ip and ipv6 destination subnets and verify traffic gets forwarded
5)Delete static route and verify static route is removed
6)Re add static route and verify traffic gets forwarded on sub interfaces
| + +### 3.2.26 To Verify Static route leak reachable via sub interface on default,user and management vrf + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify Static route leak reachable via sub interface default,user and management vrf** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure one sub interface on Vrf1 and second sub interface on Vrf2
2) Configure ipv4 and ipv6 addresses on both sub interfaces
3) Configure static route leak on Vrf2 for a destination network reachable via sub interface (Vrf1) as next hop interface
4)Verify routes installed on Vrf2 routing table and traffic gets forwarded
5)Change the Vrf config on sub interface1 from Vrf1 to default-vrf and change the static route nexthop vrf to default
6)Verify route leak from default-vrf to Vrf2 works and vice-versa
7) Configure a static route-leak on mgmt-vrf for the subnet configured on sub-interface2(Vrf2) and verify route lea works for Vrf2 to mgmt-vrf | + + + +### 3.2.27 To Verify BFD peers over sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify BFD peers over sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interfaces on with ip and ipv6 addresses
2)Bind the sub interfaces on user-vrf
3) Configure static bfd peers between sub interfaces and D3
4)Verify BFD over sub interfaces comes up
5)Trigger link failure on remote side and verify BFD sessions timed out
6) Configure non default BFD timers and verify
| + + + +### 3.2.28 To Verify Sub interfaces as MCLAG client interfaces and ICL keepalive + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify Sub interfaces as MCLAG client interfaces and ICL keepalive** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure MLAG peer nodes with mlag client
2)Configure sub interface as ICL peer link for Keepalive
2) Configure sub interfaces over Portchannel interface with encap id 100 & 200
3) Configure the client dut with Portchannel member of Vlans 100 & 200
4)Send L3 traffic from hosts connected to Client on Vlan 100,200
5)Verify Traffic forwarding with sub interfaces as client interfaces
6)Verify MAC/ARP sync on mlag nodes learnt on sub interfaces | + + + +### 3.2.29 To Verify upstream link tracking brings down mlag client sub interface + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify upstream link tracking brings down mlag client sub interface** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure MLAG peer nodes with mlag client
2)Configure sub interface as ICL peer link for Keepalive
2) Configure sub interfaces over Portchannel interface with encap id 100 & 200
3) Configure the client dut with Portchannel member of Vlans 100 & 200
4)Send L3 traffic from hosts connected to Client on Vlan 100,200
5)Verify Traffic forwarding with sub interfaces as client interfaces
6)COnfigure upstream link tracking and verify bringing down upstream link brings down the mlag sub interface client interface
7)Bring back the upstream link and verify sub interfce comes up after hold timer expiry | + + + +### 3.2.30 To Verify SAG on sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify SAG on sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure MLAG peer nodes with mlag client
2)Configure sub interface as ICL peer link for Keepalive
3) Configure sub interfaces over Portchannel interface
4)Configure static ipv4 and ipv6 anycast address on the sub interface on Mlag peers
6)Verify Traffic forwarding with from lag client to orphan port using static anycast addresses configured on sub interfaces as gateway
| + + + +### 3.2.31 To Verify sub interfaces as underlay in Vxlan topology + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify sub interfaces as underlay in Vxlan topology** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Bring up EVPN topology with 2 Spine and 3 Leaf nodes
2) In the underlay, configure 3 sub interfaces between each Spine and Leaf node over physical and Lag interfaces
3) With Vxlan tunnel established and remote VTEP is reachable via all 3 sub interfaces on Leaf1
4)Send L2 BUM traffic and L3 traffic from Leaf1
4)Verify Vxlan uses only one sub interface for forwarding the traffic to remote VTEP
5) Bring down the sub interface and verify next sub interface used for traffic forwarding
6)Flap the vxlan tunnel and verify traffic forwarding over sub interfaces
| + +### 3.2.32 To Verify qos service-policy on sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify qos service-policy on sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure a qos policy-map to match source ip address,source ipv6 address and define set actions like dscp,traffic-class
2)Attach the service policy to parent interface
3)Verify service-policy gets inherited to sub interfaces
4)Send traffic matching the classifier fields and verify sub interface applies the qos service-policy at ingress as well as egress directions
5)Verify mapping a different policy-map directly to sub interface and verify
| + + + +### 3.2.33 To Verify PBR service-policy on sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify PBR service-policy on sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure SUb interfaces over phy and lag interfaces
2)Bind sub interfaces over phy interface on Vrf1 and sub interfaces over lag interface on Vrf2
3)Configure policy map and set the nexthop pointing to lag sub interface on Vrf2
4)Bind the service policy on phy interface and verify it gets inherited to sub interfaces
5)Upon receiving the L3 traffic on Vrf1 , traffic should be routed to sub interface over lag interface on Vrf2
6)Verify null interface on policy map drops the traffic
| + + + +### 3.2.34 To Verify port mirroring on parent and sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify port mirroring on parent and sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure Sub interfaces over phy and lag interfaces
2)Configure parent interface as mirroring destination port
3)Verify port ingressing on source port gets mirrored to parent interface
4) Configure sub interface as destination port and verify port mirroring works
5)Repeat the test steps with parent and sub interface as source port and verify packet ingressing on sub interfaces gets mirrored | + +### 3.2.35 To Verify L3 acl functionality applied on sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify L3 acl functionality applied on sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure Sub interfaces over phy and lag interfaces
2) Configure IP and IPv6 address and bind it to user-vrf
3)Configure ipv4 and ipv6 access-lists with src-ip/dst-ip and src-ipv6/dst-ipv6 specified with permit and deny rules
4)Apply v4 and v6 ACls to sub interfaces
5)Verify Flows matching the acl rules will be forwarded and discarded as per permit/deny action
6)Verify ACL counters gets incrmented | + +### 3.2.36 To Verify delete and recreate sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify delete and recreate sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 300(300.1.1.2 and 3001::2) and other on Vlan400(400.1.1.2 and 4001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan2003 +3)On D1(Router), Create two sub interfaces for the physical port connecting to D2 with encapsulation id 100,200 respectively +4) Configure ip/ipv6 addresses addresses for these sub interfaces created over lag port 300.1.1.1 , 3001::1 and 300.1.1.1,3001::1 respectively +5)Send L3 ipv4 and ipv6 between Host1 and Host2 and Verify D1 routes the traffic over sub interfaces +6)Delete sub interface and verify all configs are gone +7)Recreate sub interfaces and verify routing between subinterfaces | + + + + + + +### 3.2.37 To Verify Inband management on sub interface + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify InBand management on sub interface** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interface on a parent interface
2)Bind it to Vrf1 and Configure IP and IPv6 addresses
3)Verify ssh and telnet to the IP and Ipv6 addresses configured on sub interfaces works from peer node
4)Repeat the test steps by binding sub interfaces to default and management VRFs | + + + +### 3.2.38 To Verify dynamic breakout on parent interface + + + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify Verify dynamic breakout on parent interface** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interface on a parent interface
2)Bind sub interface to user vrf and do L3 ipv4 and ipv6 configs
3) Do dynamic breakout on parent interface and verify all the sub interfaces created on that parent interface gets deleted
4)Disable breakout config on parent interface and configure back the sub interfaces
5)Verify L3 routing happens between Sub interfaces after breakout
| + +### 3.2.39 To Verify NTP server functionality on sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify NTP over sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interface on a parent interface both physical and Port channel
2)Configure NTP client on eth0 management interface .Create loopback interface and leak it to Vrf1
3)Configure sub interfaces on Vrf1 and configure NTP server as leaked Loopback address
4)Verify NTP client connected to sub interfaces gets time synced | + +### 3.2.40 To Verify SNMP walk retrieves sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify snmpwalk retrieves sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interface on a parent interface both physical and Portchannel
2)Bind sub interface to user vrf and do L3 ipv4 and ipv6 configs
3)Perform SNMP mib walk and verify Sub interface gets retrieved
| + + + +### 3.2.41 To Verify sub interfaces logs gets updated on Syslog + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify snmpwalk retrieves sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interface on a parent interface both physical and Port channel
2)Bind sub interface to user vrf and do L3 ipv4 and ipv6 configs
3)Verify logs associated with sub interfaces gets written to Syslog
| + +### 3.2.42 To Verify handling of untagged packets on sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify handling of untagged packets on sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interface on a parent interface both physical and Port channel
2)Configure encapsulation IDs on the sub interfaces
3) Configure ip/ipv6 configuration on parent interface
4) Configure ip/ipv6 addresses on sub interfaces Eth100.10 and Eth100.20
5) Verify untagged ping request towards subnet configured on parent interface works
6)Send L3 untagged data packet and verify parent interface routes the traffic,since it does not match nay encap_id configured on sub interfaces | + + + +### 3.2.43 To Verify handling of QinQ packets on sub interfaces + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify handling of QinQ packets on sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure sub interface on Ethenet10.100 with 100 as encap id and Ethernet10.200 with 200 as encap id
2) Bind it to user vrf and assign ip/ipv6 addresses
3)Send QinQ L3 traffic with outer vlan id as 100 and verify Ethernet10.100 routes the traffic to Ethernet10.200
| + + + +### 3.2.44 To Verify creation of sub interface in port aliasing mode + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify creation of sub interface in port aliasing mode** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)With aliasing mode enabled, configure sub interfaces over parent interface in aliasing mode
2)Verify sub interfaces are created as expected with encap ids
3) Verify L3 routing between sub interfaces | + +### 3.2.45 To Verify creation of sub interface over Portchannel with long interface name + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To To Verify creation of sub interface over Portchannel with long interface name** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure Portchannel on DUT1
2) Configure sub interface over Portchennel using long-interface name as PortChannelXXXX and verify sub interface gets created | + +### **3.3 Reboot Test Cases** + +### 3.3.1 To verify routing over sub interfaces with config reload ### + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify routing over sub interfaces with config reload** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchannel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces
3)Save config and Perform config reload
4)Verify all sub interface configs are retained and all ports comes up
5)Verify Traffic forwarding | + + +### 3.3.2 To verify routing over sub interfaces with Coldboot + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify routing over sub interfaces with Coldboot** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces +3)Save config and Perform coldboot +4)Verify all sub interface configs are retained and all ports comes up +5)Verify Traffic forwarding | + +### 3.3.3 To verify routing over sub interfaces with Fastboot + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify routing over sub interfaces with Fastboot** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces +3)Save config and Perform Fastboot +4)Verify all sub interface configs are retained and all ports comes up +5)Verify Traffic forwarding | + +### 3.3.4 To verify routing over sub interfaces with Warmboot + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify routing over sub interfaces with Warmboot** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces +3)Save config and Perform warmboot +4)Verify all sub interface configs are retained and all ports comes up +5)Verify Traffic forwarding and check there is no traffic loss during warmboot | + + + +### **3.4 Scale Test Cases** + +### 3.4.1 To verify maximum sub interfaces per parent interface ### + + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify maximum sub interfaces per parent interface** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure maximum supported 250 sub interfaces on a physical port
2) Assign IP and IPv6 addresses on each sub interfaces
3) Assign encapsulation ID in the range 1-4090 for each sub interface randomly
4) Verify all Sub interfaces comes up without any issues
5)Verify all directly connected subnets on sub interfaces gets installed in routing table
6)Repeat the test on Port channel interface | + +### 3.4.2 To verify maximum sub interfaces system level ### + + +| **Test ID** | **iTAS Test Case Manager ID** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify maximum sub interfaces system level** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1) Configure maximum supported 750 sub interfaces system level with 3 parnt ports having 250 sub interfaces each
2) Assign IP and IPv6 addresses on each sub interfaces +3) Assign encapsulation ID in the range 1-4090 for each sub interface randomly +4) Verify all 750 Sub interfaces comes up without any issues +5)Verify all directly connected subnets on sub interfaces gets installed in routing table | + + + + + +## **Reference Links** + + +https://docs.google.com/document/d/1RY3No-V8EjicA5FVqyFGNxWpMbvOWw3STbpvOyFmtx0/edit#heading=h.b4jtujka6b5e + diff --git a/TestPlans/routing/sub_interfaces/sub_interface.png b/TestPlans/routing/sub_interfaces/sub_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..cad6b319a197bfc96cf389ef7cc7bc91a39160ac GIT binary patch literal 68331 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 u`G3Fef6MNFD+ Date: Sun, 13 Dec 2020 22:15:24 -0800 Subject: [PATCH 02/14] Adding Routed sub interface Testplan --- TestPlans/routing/sub_interfaces/Sub_interfaces.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/TestPlans/routing/sub_interfaces/Sub_interfaces.md b/TestPlans/routing/sub_interfaces/Sub_interfaces.md index 4f5561c95abd..c7d9e2a61179 100644 --- a/TestPlans/routing/sub_interfaces/Sub_interfaces.md +++ b/TestPlans/routing/sub_interfaces/Sub_interfaces.md @@ -142,9 +142,9 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To verify basic sub interface routing created over Lag port** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 300(300.1.1.2 and 3001::2) and other on Vlan400(400.1.1.2 and 4001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan2003 +| **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 300(130.1.1.2 and 3001::2) and other on Vlan400(140.1.1.2 and 4001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan2003 3)On D1(Router), Create two sub interfaces for the portchannel port connecting to D2 with encapsulation id 100,200 respectively -4) Configure ip/ipv6 addresses addresses for these sub interfaces created over lag port 300.1.1.1 , 3001::1 and 300.1.1.1,3001::1 respectively +4) Configure ip/ipv6 addresses addresses for these sub interfaces created over lag port 130.1.1.1 , 3001::1 and 130.1.1.1,3001::1 respectively 5)Send L3 ipv4 and ipv6 between Host1 and Host2 and Verify D1 routes the traffic over sub interfaces
6) Delete Parent PortChannel interface with sub interfaces configured and verify all parent and sub interfaces gets deleted | @@ -352,7 +352,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To Verify ICMP SLAs with sub interface as source-interface** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1) Configure sub interfaces on physical and lag interfaces
2)Configure encap_id on each sub interfaces and bind it to user-vrf
3)COnfigure ICMP SLA for the subnet ip configured on D3
4)Verify ICMP SLA comes up fine
5)Configure src-intf as sub interfaces and verify SLAs are UP
6)Bring down the destination subnet and verify SLAs are timed out
| +| **Steps** | 1) Configure sub interfaces on physical and lag interfaces
2)Configure encap_id on each sub interfaces and bind it to user-vrf
3)Configure ICMP SLA for the subnet ip configured on D3
4)Verify ICMP SLA comes up fine
5)Configure src-intf as sub interfaces and verify SLAs are UP
6)Bring down the destination subnet and verify SLAs are timed out
7) Verify static route configured with sub interface as nexthop gets removed from routing table once SLA goes down | ### 3.2.22 To Verify TCP SLAs with sub interface as source-interface @@ -361,7 +361,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To Verify ICMP SLAs with sub interface as source-interface** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1) Configure sub interfaces on physical and lag interfaces
2)Configure encap_id on each sub interfaces and bind it to user-vrf
3)Configure TCP SLA for the subnet ip configured on D3
4)Verify ICMP SLA comes up fine
5)Configure src-intf as sub interfaces and verify SLAs are UP 6)Bring down the destination subnet and verify SLAs are timed out | +| **Steps** | 1) Configure sub interfaces on physical and lag interfaces
2)Configure encap_id on each sub interfaces and bind it to user-vrf
3)Configure TCP SLA for the subnet ip configured on D3
4)Verify ICMP SLA comes up fine
5)Configure src-intf as sub interfaces and verify SLAs are UP 6)Bring down the destination subnet and verify SLAs are timed out
6)Verify static route configured with sub interface as nexthop gets removed from routing table once SLA goes down | @@ -507,9 +507,9 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To Verify delete and recreate sub interfaces** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 300(300.1.1.2 and 3001::2) and other on Vlan400(400.1.1.2 and 4001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan2003 +| **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 300(130.1.1.2 and 3001::2) and other on Vlan400(140.1.1.2 and 4001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan2003 3)On D1(Router), Create two sub interfaces for the physical port connecting to D2 with encapsulation id 100,200 respectively -4) Configure ip/ipv6 addresses addresses for these sub interfaces created over lag port 300.1.1.1 , 3001::1 and 300.1.1.1,3001::1 respectively +4) Configure ip/ipv6 addresses addresses for these sub interfaces created over lag port 130.1.1.1 , 3001::1 and 140.1.1.1,4001::1 respectively 5)Send L3 ipv4 and ipv6 between Host1 and Host2 and Verify D1 routes the traffic over sub interfaces 6)Delete sub interface and verify all configs are gone 7)Recreate sub interfaces and verify routing between subinterfaces | From f156b3c584f2292f9364f269c35e9357cdfa9c6c Mon Sep 17 00:00:00 2001 From: Sooriya Date: Sun, 13 Dec 2020 22:15:24 -0800 Subject: [PATCH 03/14] Adding Routed sub interface Testplan --- .../routing/sub_interfaces/Sub_interfaces.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/TestPlans/routing/sub_interfaces/Sub_interfaces.md b/TestPlans/routing/sub_interfaces/Sub_interfaces.md index c7d9e2a61179..34931aafb68e 100644 --- a/TestPlans/routing/sub_interfaces/Sub_interfaces.md +++ b/TestPlans/routing/sub_interfaces/Sub_interfaces.md @@ -145,8 +145,8 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 300(130.1.1.2 and 3001::2) and other on Vlan400(140.1.1.2 and 4001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan2003 3)On D1(Router), Create two sub interfaces for the portchannel port connecting to D2 with encapsulation id 100,200 respectively 4) Configure ip/ipv6 addresses addresses for these sub interfaces created over lag port 130.1.1.1 , 3001::1 and 130.1.1.1,3001::1 respectively -5)Send L3 ipv4 and ipv6 between Host1 and Host2 and Verify D1 routes the traffic over sub interfaces
6) Delete Parent PortChannel interface with sub interfaces configured and verify all parent and sub interfaces gets deleted | - +5)Send L3 ipv4 and ipv6 between Host1 and Host2 and Verify D1 routes the traffic over sub interfaces +6) Delete Parent PortChannel interface with sub interfaces configured and verify all parent and sub interfaces gets deleted | @@ -519,6 +519,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t + ### 3.2.37 To Verify Inband management on sub interface | **Test ID** | **iTAS Test Case Manager ID** | @@ -634,6 +635,8 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t 4)Verify all sub interface configs are retained and all ports comes up 5)Verify Traffic forwarding | + + ### 3.3.3 To verify routing over sub interfaces with Fastboot | **Test ID** | **iTAS Test Case Manager ID** | @@ -646,6 +649,8 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t 4)Verify all sub interface configs are retained and all ports comes up 5)Verify Traffic forwarding | + + ### 3.3.4 To verify routing over sub interfaces with Warmboot | **Test ID** | **iTAS Test Case Manager ID** | @@ -658,7 +663,9 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t 4)Verify all sub interface configs are retained and all ports comes up 5)Verify Traffic forwarding and check there is no traffic loss during warmboot | - + + + ### **3.4 Scale Test Cases** @@ -680,7 +687,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To verify maximum sub interfaces system level** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1) Configure maximum supported 750 sub interfaces system level with 3 parnt ports having 250 sub interfaces each
2) Assign IP and IPv6 addresses on each sub interfaces +| **Steps** | 1) Configure maximum supported 750 sub interfaces system level with 3 parent ports having 2)50 sub interfaces each
2) Assign IP and IPv6 addresses on each sub interfaces 3) Assign encapsulation ID in the range 1-4090 for each sub interface randomly 4) Verify all 750 Sub interfaces comes up without any issues 5)Verify all directly connected subnets on sub interfaces gets installed in routing table | @@ -689,6 +696,8 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t + + ## **Reference Links** From c14f753f1357f8bb7ccb493df23061f0941ee2d9 Mon Sep 17 00:00:00 2001 From: Sooriya Date: Sun, 13 Dec 2020 22:15:24 -0800 Subject: [PATCH 04/14] Adding Routed sub interface Testplan --- .../routing/sub_interfaces/Sub_interfaces.md | 44 +++++++------------ 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/TestPlans/routing/sub_interfaces/Sub_interfaces.md b/TestPlans/routing/sub_interfaces/Sub_interfaces.md index 34931aafb68e..2eeb8052a114 100644 --- a/TestPlans/routing/sub_interfaces/Sub_interfaces.md +++ b/TestPlans/routing/sub_interfaces/Sub_interfaces.md @@ -142,11 +142,8 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To verify basic sub interface routing created over Lag port** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 300(130.1.1.2 and 3001::2) and other on Vlan400(140.1.1.2 and 4001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan2003 -3)On D1(Router), Create two sub interfaces for the portchannel port connecting to D2 with encapsulation id 100,200 respectively -4) Configure ip/ipv6 addresses addresses for these sub interfaces created over lag port 130.1.1.1 , 3001::1 and 130.1.1.1,3001::1 respectively -5)Send L3 ipv4 and ipv6 between Host1 and Host2 and Verify D1 routes the traffic over sub interfaces -6) Delete Parent PortChannel interface with sub interfaces configured and verify all parent and sub interfaces gets deleted | +| **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 300(130.1.1.2 and 3001::2) and other on Vlan400(140.1.1.2 and 4001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan2003
3)On D1(Router), Create two sub interfaces for the Portchannel port connecting to D2 with encapsulation id 100,200 respectively
4) Configure ip/ipv6 addresses addresses for these sub interfaces created over lag port 130.1.1.1 , 3001::1 and 130.1.1.1,3001::1 respectively
5)Send L3 ipv4 and ipv6 between Host1 and Host2 and Verify D1 routes the traffic over sub interfaces
6) Delete Parent Portchannel interface with sub interfaces configured and verify all parent and sub interfaces gets deleted
| + @@ -507,12 +504,9 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To Verify delete and recreate sub interfaces** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 300(130.1.1.2 and 3001::2) and other on Vlan400(140.1.1.2 and 4001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan2003 -3)On D1(Router), Create two sub interfaces for the physical port connecting to D2 with encapsulation id 100,200 respectively -4) Configure ip/ipv6 addresses addresses for these sub interfaces created over lag port 130.1.1.1 , 3001::1 and 140.1.1.1,4001::1 respectively -5)Send L3 ipv4 and ipv6 between Host1 and Host2 and Verify D1 routes the traffic over sub interfaces -6)Delete sub interface and verify all configs are gone -7)Recreate sub interfaces and verify routing between subinterfaces | +| **Steps** | 1) Configure 2 hosts connecting to D2(L2 switch) one on Vlan 300(130.1.1.2 and 3001::2) and other on Vlan400(140.1.1.2 and 4001::2)
2) Configure D2 ports towards Router D1 as trunk member for Vlan 100 and Vlan2003
3)On D1(Router), Create two sub interfaces for the physical port connecting to D2 with encapsulation id 100,200 respectively
4) Configure ip/ipv6 addresses addresses for these sub interfaces created over lag port 130.1.1.1 , 3001::1 and 140.1.1.1,4001::1 respectively
5)Send L3 ipv4 and ipv6 between Host1 and Host2 and Verify D1 routes the traffic over sub interfaces
6)Delete sub interface and verify all configs are gone
7)Recreate sub interfaces and verify routing between sub interfaces
| + + @@ -630,10 +624,9 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To verify routing over sub interfaces with Coldboot** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces -3)Save config and Perform coldboot -4)Verify all sub interface configs are retained and all ports comes up -5)Verify Traffic forwarding | +| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces
3)Save config and Perform coldboot
4)Verify all sub interface configs are retained and all ports comes up
5)Verify Traffic forwarding
| + + @@ -644,10 +637,10 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To verify routing over sub interfaces with Fastboot** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces -3)Save config and Perform Fastboot -4)Verify all sub interface configs are retained and all ports comes up -5)Verify Traffic forwarding | +| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces
3)Save config and Perform Fastboot
4)Verify all sub interface configs are retained and all ports comes up
5)Verify Traffic forwarding
| + + + @@ -658,11 +651,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To verify routing over sub interfaces with Warmboot** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces -3)Save config and Perform warmboot -4)Verify all sub interface configs are retained and all ports comes up -5)Verify Traffic forwarding and check there is no traffic loss during warmboot | - +| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces
3)Save config and Perform warmboot
4)Verify all sub interface configs are retained and all ports comes up
5)Verify Traffic forwarding and check there is no traffic loss during warmboot
| @@ -687,11 +676,8 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To verify maximum sub interfaces system level** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1) Configure maximum supported 750 sub interfaces system level with 3 parent ports having 2)50 sub interfaces each
2) Assign IP and IPv6 addresses on each sub interfaces -3) Assign encapsulation ID in the range 1-4090 for each sub interface randomly -4) Verify all 750 Sub interfaces comes up without any issues -5)Verify all directly connected subnets on sub interfaces gets installed in routing table | - +| **Steps** | 1) Configure maximum supported 750 sub interfaces system level with 3 parent ports having 2)50 sub interfaces each
2) Assign IP and IPv6 addresses on each sub interfaces
3) Assign encapsulation ID in the range 1-4090 for each sub interface randomly
4) Verify all 750 Sub interfaces comes up without any issues
5)Verify all directly connected subnets on sub interfaces gets installed in routing table
| +>>>>>>> 79a612d... Adding Routed sub interface Testplan From 1961e977db97f16599228c84362b109a8a942fe6 Mon Sep 17 00:00:00 2001 From: Sooriya Date: Sun, 13 Dec 2020 22:15:24 -0800 Subject: [PATCH 05/14] Adding Routed sub interface Testplan --- TestPlans/routing/sub_interfaces/Sub_interfaces.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/TestPlans/routing/sub_interfaces/Sub_interfaces.md b/TestPlans/routing/sub_interfaces/Sub_interfaces.md index 2eeb8052a114..876a589a112c 100644 --- a/TestPlans/routing/sub_interfaces/Sub_interfaces.md +++ b/TestPlans/routing/sub_interfaces/Sub_interfaces.md @@ -677,11 +677,6 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Setup** | **Topology1** | | **Type** | **Functional** | | **Steps** | 1) Configure maximum supported 750 sub interfaces system level with 3 parent ports having 2)50 sub interfaces each
2) Assign IP and IPv6 addresses on each sub interfaces
3) Assign encapsulation ID in the range 1-4090 for each sub interface randomly
4) Verify all 750 Sub interfaces comes up without any issues
5)Verify all directly connected subnets on sub interfaces gets installed in routing table
| ->>>>>>> 79a612d... Adding Routed sub interface Testplan - - - - ## **Reference Links** From 19b4429fa8526759625b6674c8f281fddf22fe55 Mon Sep 17 00:00:00 2001 From: Sooriya Date: Sun, 13 Dec 2020 22:15:24 -0800 Subject: [PATCH 06/14] Adding Routed sub interface Testplan --- .../routing/sub_interfaces/Sub_interfaces.md | 114 +++++++++--------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/TestPlans/routing/sub_interfaces/Sub_interfaces.md b/TestPlans/routing/sub_interfaces/Sub_interfaces.md index 876a589a112c..3778c2b28d1f 100644 --- a/TestPlans/routing/sub_interfaces/Sub_interfaces.md +++ b/TestPlans/routing/sub_interfaces/Sub_interfaces.md @@ -93,7 +93,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.1.1 Verify all the config/show CLIs for sub interface -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfCli001** | | -------------- | :----------------------------------------------------------- | | **Test Name** | **Verify all the config/show CLIs for sub interface** | | **Test Setup** | **Topology1** | @@ -102,7 +102,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.1.2 Verify all the Sub interface CLIs using OCI Yang/Rest api's. -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfCli002** | | -------------- | :----------------------------------------------------------- | | **Test Name** | **Verify all the Sub interface CLIs using OCI Yang/Rest api's.** | | **Test Setup** | **Topology1** | @@ -126,7 +126,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.1 To verify basic sub interface routing created over physical port -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc001** | | -------------- | :----------------------------------------------------------- | | **Test Name** | To verify basic sub interface routing created over physical port | | **Test Setup** | **Topology1** | @@ -137,7 +137,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc002** | | -------------- | :----------------------------------------------------------- | | **Test Name** | **To verify basic sub interface routing created over Lag port** | | **Test Setup** | **Topology1** | @@ -148,9 +148,11 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t + + ### 3.2.3 To verify sub port from different physical/lag ports can map to same vrf -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc003** | | -------------- | :----------------------------------------------------------- | | **Test Name** | **To verify sub port from different physical/lag ports can map to same vrf** | | **Test Setup** | **Topology1** | @@ -159,7 +161,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.4 To verify sub port from same parent port map to different VRFs -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc004** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To verify sub port from same parent port map to different VRFs** | | **Test Setup** | **Topology1** | @@ -170,7 +172,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.5 To verify same sub port from different parent ports map to different VRFs -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc005** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To verify same sub port from different parent ports map to different VRFs** | | **Test Setup** | **Topology1** | @@ -181,7 +183,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.6 To Verify sub ports on different parent ports can have same encapsulation id with BUM traffic -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc006** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify sub ports on different phy/lag ports can have same encapsulation id** | | **Test Setup** | **Topology1** | @@ -192,7 +194,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.7 To Verify creating sub interface with port id and encapsulation id different -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc007** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify creating sub interface with port id and encapsulation id different** | | **Test Setup** | **Topology1** | @@ -203,7 +205,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.8 To Verify port admin status flap for sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc008** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify port admin status flap for sub interfaces** | | **Test Setup** | **Topology1** | @@ -214,7 +216,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.9 To Verify parent physical/lag port shows aggregate stats of sub ports -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc009** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify parent physical/lag port shows aggregate stats of sub ports** | | **Test Setup** | **Topology1** | @@ -225,7 +227,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.10 To Verify interface stats at sub interface level -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc010** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify interface stats at sub interface level** | | **Test Setup** | **Topology1** | @@ -234,7 +236,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.11 To Verify primary and secondary ip and ipv6 address configs on sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc011** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify primary and secondary ip and ipv6 address configs on sub interfaces** | | **Test Setup** | **Topology1** | @@ -243,7 +245,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.12 To Verify ipv6 disable/enable and verify link-local assignment on sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc012** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify ipv6 disable/enable and verify link-local assignment on sub interfaces** | | **Test Setup** | **Topology1** | @@ -254,7 +256,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.13 To Verify functionality of switching from user-vrf to default for sub interfaces and parent interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc013** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify Verify functionality of switching from user-vrf to default for sub interfaces** | | **Test Setup** | **Topology1** | @@ -265,7 +267,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.14 To Verify IP unnumbered on sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc014** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify IP unnumbered on sub interfaces** | | **Test Setup** | **Topology1** | @@ -276,7 +278,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.15 To Verify MTU configs on parent and sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc015** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify MTU configs on sub interfaces** | | **Test Setup** | **Topology1** | @@ -285,7 +287,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.16 To Verify static and dynamic ARP/ND on sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc016** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify static and dynamic ARP/ND on sub interfaces** | | **Test Setup** | **Topology1** | @@ -296,7 +298,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.17 To Verify ping and traceroute towards from and to IP/IPv6s configured on Sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc017** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify ping and traceroute towards from and to IP/IPv6s configured on Sub interfaces** | | **Test Setup** | **Topology1** | @@ -307,7 +309,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.18 To Verify multiple BGP sessions on sub interfaces and parent interfaces with ECMP -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc018** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify multiple BGP sessions on sub interfaces and parent interfaces with ECMP** | | **Test Setup** | **Topology1** | @@ -320,7 +322,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc019** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify BGP 5549 unnumbered over sub interfaces** | | **Test Setup** | **Topology1** | @@ -333,7 +335,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.20 To Verify OSPFv2 /OSPFv3 neighbors over sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc020** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify OSPFv2 /OSPFv3 neighbors over sub interfaces** | | **Test Setup** | **Topology1** | @@ -344,7 +346,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.21 To Verify ICMP SLAs with sub interface as source-interface -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc021** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify ICMP SLAs with sub interface as source-interface** | | **Test Setup** | **Topology1** | @@ -353,7 +355,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.22 To Verify TCP SLAs with sub interface as source-interface -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc022** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify ICMP SLAs with sub interface as source-interface** | | **Test Setup** | **Topology1** | @@ -364,7 +366,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.23 To Verify DHCP relay over sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc023** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify DHCP relay over sub interfaces** | | **Test Setup** | **Topology1** | @@ -375,7 +377,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.24 To Verify VRRP functionality over sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc024** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify Verify VRRP functionality over sub interfaces** | | **Test Setup** | **Topology1** | @@ -386,7 +388,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.25 To Verify Static routes with sub interface as next hop interface -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc025** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify Static routes with sub interface as next hop interface** | | **Test Setup** | **Topology1** | @@ -395,7 +397,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.26 To Verify Static route leak reachable via sub interface on default,user and management vrf -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc026** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify Static route leak reachable via sub interface default,user and management vrf** | | **Test Setup** | **Topology1** | @@ -406,7 +408,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.27 To Verify BFD peers over sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc027** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify BFD peers over sub interfaces** | | **Test Setup** | **Topology1** | @@ -417,7 +419,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.28 To Verify Sub interfaces as MCLAG client interfaces and ICL keepalive -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc028** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify Sub interfaces as MCLAG client interfaces and ICL keepalive** | | **Test Setup** | **Topology1** | @@ -428,7 +430,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.29 To Verify upstream link tracking brings down mlag client sub interface -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc029** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify upstream link tracking brings down mlag client sub interface** | | **Test Setup** | **Topology1** | @@ -439,7 +441,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.30 To Verify SAG on sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc030** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify SAG on sub interfaces** | | **Test Setup** | **Topology1** | @@ -450,7 +452,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.31 To Verify sub interfaces as underlay in Vxlan topology -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc031** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify sub interfaces as underlay in Vxlan topology** | | **Test Setup** | **Topology1** | @@ -459,7 +461,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.32 To Verify qos service-policy on sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc032** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify qos service-policy on sub interfaces** | | **Test Setup** | **Topology1** | @@ -470,7 +472,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.33 To Verify PBR service-policy on sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc033** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify PBR service-policy on sub interfaces** | | **Test Setup** | **Topology1** | @@ -481,7 +483,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.34 To Verify port mirroring on parent and sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc034** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify port mirroring on parent and sub interfaces** | | **Test Setup** | **Topology1** | @@ -490,7 +492,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.35 To Verify L3 acl functionality applied on sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc035** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify L3 acl functionality applied on sub interfaces** | | **Test Setup** | **Topology1** | @@ -499,7 +501,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.36 To Verify delete and recreate sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc036** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify delete and recreate sub interfaces** | | **Test Setup** | **Topology1** | @@ -513,10 +515,9 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t - ### 3.2.37 To Verify Inband management on sub interface -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc037** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify InBand management on sub interface** | | **Test Setup** | **Topology1** | @@ -529,7 +530,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc038** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify Verify dynamic breakout on parent interface** | | **Test Setup** | **Topology1** | @@ -538,7 +539,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.39 To Verify NTP server functionality on sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc039** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify NTP over sub interfaces** | | **Test Setup** | **Topology1** | @@ -547,7 +548,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.40 To Verify SNMP walk retrieves sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc040** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify snmpwalk retrieves sub interfaces** | | **Test Setup** | **Topology1** | @@ -558,7 +559,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.41 To Verify sub interfaces logs gets updated on Syslog -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc041** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify snmpwalk retrieves sub interfaces** | | **Test Setup** | **Topology1** | @@ -567,7 +568,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.42 To Verify handling of untagged packets on sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc042** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify handling of untagged packets on sub interfaces** | | **Test Setup** | **Topology1** | @@ -578,7 +579,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.43 To Verify handling of QinQ packets on sub interfaces -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc043** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify handling of QinQ packets on sub interfaces** | | **Test Setup** | **Topology1** | @@ -589,7 +590,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.44 To Verify creation of sub interface in port aliasing mode -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc044** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To Verify creation of sub interface in port aliasing mode** | | **Test Setup** | **Topology1** | @@ -598,7 +599,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.2.45 To Verify creation of sub interface over Portchannel with long interface name -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfFunc045** | | -------------- | ------------------------------------------------------------ | | **Test Name** | **To To Verify creation of sub interface over Portchannel with long interface name** | | **Test Setup** | **Topology1** | @@ -609,7 +610,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.3.1 To verify routing over sub interfaces with config reload ### -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfReload001** | | -------------- | :----------------------------------------------------------- | | **Test Name** | **To verify routing over sub interfaces with config reload** | | **Test Setup** | **Topology1** | @@ -619,7 +620,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.3.2 To verify routing over sub interfaces with Coldboot -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfReload002** | | -------------- | :----------------------------------------------------------- | | **Test Name** | **To verify routing over sub interfaces with Coldboot** | | **Test Setup** | **Topology1** | @@ -629,10 +630,9 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t - ### 3.3.3 To verify routing over sub interfaces with Fastboot -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfReload003** | | -------------- | :----------------------------------------------------------- | | **Test Name** | **To verify routing over sub interfaces with Fastboot** | | **Test Setup** | **Topology1** | @@ -642,11 +642,9 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t - - ### 3.3.4 To verify routing over sub interfaces with Warmboot -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfReload004** | | -------------- | :----------------------------------------------------------- | | **Test Name** | **To verify routing over sub interfaces with Warmboot** | | **Test Setup** | **Topology1** | @@ -656,12 +654,14 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t + + ### **3.4 Scale Test Cases** ### 3.4.1 To verify maximum sub interfaces per parent interface ### -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfScale001** | | -------------- | :----------------------------------------------------------- | | **Test Name** | **To verify maximum sub interfaces per parent interface** | | **Test Setup** | **Topology1** | @@ -671,7 +671,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.4.2 To verify maximum sub interfaces system level ### -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfScale002** | | -------------- | :----------------------------------------------------------- | | **Test Name** | **To verify maximum sub interfaces system level** | | **Test Setup** | **Topology1** | From fedfdfb6576d991c9e8b3191abaebe98f3216179 Mon Sep 17 00:00:00 2001 From: Sooriya Date: Sun, 13 Dec 2020 22:15:24 -0800 Subject: [PATCH 07/14] Adding Routed sub interface Testplan --- TestPlans/routing/sub_interfaces/Sub_interfaces.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/TestPlans/routing/sub_interfaces/Sub_interfaces.md b/TestPlans/routing/sub_interfaces/Sub_interfaces.md index 3778c2b28d1f..c1919baede15 100644 --- a/TestPlans/routing/sub_interfaces/Sub_interfaces.md +++ b/TestPlans/routing/sub_interfaces/Sub_interfaces.md @@ -113,7 +113,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t ### 3.1.3 Verify running-config for sub interface configs. -| **Test ID** | **iTAS Test Case Manager ID** | +| **Test ID** | **FtRoSubIntfCli003** | | -------------- | :----------------------------------------------------------- | | **Test Name** | **Verify running-config for sub interface configs** | | **Test Setup** | **Topology1** | @@ -679,6 +679,8 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Steps** | 1) Configure maximum supported 750 sub interfaces system level with 3 parent ports having 2)50 sub interfaces each
2) Assign IP and IPv6 addresses on each sub interfaces
3) Assign encapsulation ID in the range 1-4090 for each sub interface randomly
4) Verify all 750 Sub interfaces comes up without any issues
5)Verify all directly connected subnets on sub interfaces gets installed in routing table
| + + ## **Reference Links** From 719035436b81326c6c03156049b7f7a673d8d041 Mon Sep 17 00:00:00 2001 From: Sooriya Date: Sun, 13 Dec 2020 22:15:24 -0800 Subject: [PATCH 08/14] Adding Routed sub interface Testplan --- .../routing/sub_interfaces/Sub_interfaces.md | 87 +++++++++++++++---- 1 file changed, 71 insertions(+), 16 deletions(-) diff --git a/TestPlans/routing/sub_interfaces/Sub_interfaces.md b/TestPlans/routing/sub_interfaces/Sub_interfaces.md index c1919baede15..43e59d0f8a36 100644 --- a/TestPlans/routing/sub_interfaces/Sub_interfaces.md +++ b/TestPlans/routing/sub_interfaces/Sub_interfaces.md @@ -72,14 +72,45 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t A sub port interface shall support the following features: - - L3 forwarding - - BGP - - ARP and NDP - - VRF - - RIF counters - - QoS setting inherited from parent physical port or port channel - - mtu inherited from parent physical port or port channel - - Per sub port interface admin status config + BGP + + OSPF + + Ping/Traceroute + + BFDDHCP Relay + + PIM + + IPv4 unnumbered + + ARP/ND + + NTP + + Static Route + + Route-map + + LAGMCLAG - Po subintf arp.nd sync + + Interface holdown + + MCLAG - ICL could use a sub-interface + + Disable all non-applicable L2 protocolsSpeed/bandwidth of the sub-interface + + QoS/ACL Policer, mirroring, and PBR + + Syslog parsing/replacing Parent interface RIF + + Mirroring/ERSPAN + + Radius, LDAP + + TACACS + + DNS ## 2 Topologies @@ -210,7 +241,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To Verify port admin status flap for sub interfaces** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1) Configure multiple sub interfaces on both physical and Portchannel parent ports
2)Verify admin down of parent port brings down all sub interfaces
3)Verify admin up of parent interfaces brings all sub interfaces to admin up
4)Verify sub interface state can be administratively controlled separately and it does not affect parent port state and other sub interfaces on the same parent port
5)Verify sub interfaces goes oper down when parent port goes oper down
6)Bring back all parent and sub interfaces and verify all ports are Oper-up
7)Bring down the parent interface oper-down by shutting the link on remote DUT
8)Verify parent and sub interface state goes oper-down
9) Configure Portchannel minimum link to 3 for the parent interface and verify both parent and sub interfaces goes oper down | +| **Steps** | 1) Configure multiple sub interfaces on both physical and Portchannel parent ports
2)Verify admin down of parent port brings down all sub interfaces
3)Verify admin up of parent interfaces brings all sub interfaces to admin up
4)Verify sub interface state can be administratively controlled separately and it does not affect parent port state and other sub interfaces on the same parent port
5)Verify sub interfaces goes oper down when parent port goes oper down
6)Bring back all parent and sub interfaces and verify all ports are Oper-up
7)Bring down the parent interface oper-down by shutting the link on remote DUT
8)Verify parent and sub interface state goes oper-down
9) Configure Portchannel minimum link to 3 for the parent interface and verify both parent and sub interfaces goes oper down
| @@ -466,7 +497,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To Verify qos service-policy on sub interfaces** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1)Configure a qos policy-map to match source ip address,source ipv6 address and define set actions like dscp,traffic-class
2)Attach the service policy to parent interface
3)Verify service-policy gets inherited to sub interfaces
4)Send traffic matching the classifier fields and verify sub interface applies the qos service-policy at ingress as well as egress directions
5)Verify mapping a different policy-map directly to sub interface and verify
| +| **Steps** | 1)Configure a qos policy-map to match source ip address,source ipv6 address and define set actions like dscp,traffic-class
2)Attach the service policy to parent interface and sub interfaces
3)Verify service-policy gets inherited to sub interfaces
4)Send traffic matching the classifier fields and verify sub interface applies the qos service-policy at ingress as well as egress directions
5)Verify mapping a different policy-map directly to sub interface and verify
| @@ -477,7 +508,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To Verify PBR service-policy on sub interfaces** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1)Configure SUb interfaces over phy and lag interfaces
2)Bind sub interfaces over phy interface on Vrf1 and sub interfaces over lag interface on Vrf2
3)Configure policy map and set the nexthop pointing to lag sub interface on Vrf2
4)Bind the service policy on phy interface and verify it gets inherited to sub interfaces
5)Upon receiving the L3 traffic on Vrf1 , traffic should be routed to sub interface over lag interface on Vrf2
6)Verify null interface on policy map drops the traffic
| +| **Steps** | 1)Configure SUb interfaces over phy and lag interfaces
2)Bind sub interfaces over phy interface on Vrf1 and sub interfaces over lag interface on Vrf2
3)Configure policy map and set the nexthop pointing to lag sub interface on Vrf2
4)Bind the service policy on sub interfaces
5)Upon receiving the L3 traffic on Vrf1 , traffic should be routed to sub interface over lag interface on Vrf2
6)Verify null interface on policy map drops the traffic
| @@ -488,7 +519,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To Verify port mirroring on parent and sub interfaces** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1)Configure Sub interfaces over phy and lag interfaces
2)Configure parent interface as mirroring destination port
3)Verify port ingressing on source port gets mirrored to parent interface
4) Configure sub interface as destination port and verify port mirroring works
5)Repeat the test steps with parent and sub interface as source port and verify packet ingressing on sub interfaces gets mirrored | +| **Steps** | 1)Configure Sub interfaces over phy and lag interfaces
2)Configure sub interface as mirroring destination port
3)Verify port ingressing on source port gets mirrored to parent interface
4) Configure sub interface as destination port and verify port mirroring works
5)Repeat the test steps with parent and sub interface as source port and verify packet ingressing on sub interfaces gets mirrored | ### 3.2.35 To Verify L3 acl functionality applied on sub interfaces @@ -606,7 +637,31 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Type** | **Functional** | | **Steps** | 1)Configure Portchannel on DUT1
2) Configure sub interface over Portchennel using long-interface name as PortChannelXXXX and verify sub interface gets created | -### **3.3 Reboot Test Cases** + + +### 3.2.46 To Verify PIM functionality over sub interfaces + +| **Test ID** | **FtRoSubIntfFunc046** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify PIM functionality over sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure sub interfaces between Dut1 and Dut2 over physical and Lag interface
2) Enable PIM on sub interfaces
3)Verify PIM neighbors comes up
4)Send IGMPv3 (S,G) join and verify Mroute entries are programmed with IIF and OIF as sub interfaces
5)Verify Multicast data forwarding
6)Send IGMPv3 Leave and verify mroute entries are deleted | + + + +### 3.2.46 To Verify Radius/LDAP authentication over sub interfaces + +| **Test ID** | **FtRoSubIntfFunc046** | +| -------------- | ------------------------------------------------------------ | +| **Test Name** | **To Verify Radius/LDAP authentication over sub interfaces** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1)Configure sub interfaces between Dut1 and Dut2 over physical and Lag interface
2)Configure RADIUS authentication on sub interface
3)Verify ssh to sub interface IP/IPv6 works with Radius authentication enabled
4) Repeat the test with LDPA authentication | + + + +### 3.3 Reboot Test Cases** ### 3.3.1 To verify routing over sub interfaces with config reload ### @@ -615,7 +670,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To verify routing over sub interfaces with config reload** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchannel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces
3)Save config and Perform config reload
4)Verify all sub interface configs are retained and all ports comes up
5)Verify Traffic forwarding | +| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchannel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces
3)Save config and Perform config reload
4)Verify all sub interface configs are retained and all ports comes up
5)Verify Traffic forwarding and measure Traffic convergence time | ### 3.3.2 To verify routing over sub interfaces with Coldboot @@ -625,7 +680,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To verify routing over sub interfaces with Coldboot** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces
3)Save config and Perform coldboot
4)Verify all sub interface configs are retained and all ports comes up
5)Verify Traffic forwarding
| +| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces
3)Save config and Perform coldboot
4)Verify all sub interface configs are retained and all ports comes up
5)Verify Traffic forwarding and measure Traffic convergence time
| @@ -637,7 +692,7 @@ Multiple L3 sub port interfaces, each characterized by a VLAN id in the 802.1q t | **Test Name** | **To verify routing over sub interfaces with Fastboot** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces
3)Save config and Perform Fastboot
4)Verify all sub interface configs are retained and all ports comes up
5)Verify Traffic forwarding
| +| **Steps** | 1)Configure multiple sub interfaces on physical interface as well as L3 Portchennel
2)Send L3 traffic from Tgen hosts and verify inter vlan routing happens on DUT between sub interfaces
3)Save config and Perform Fastboot
4)Verify all sub interface configs are retained and all ports comes up
5)Verify Traffic forwarding and measure Traffic convergence time
| From 37665034c1c43eabcc697f72a92e714f31f2395d Mon Sep 17 00:00:00 2001 From: Sooriya Date: Wed, 5 May 2021 00:11:37 -0700 Subject: [PATCH 09/14] Vlan Autostate Testplan --- .../switching/vlan_autostate/VlanAutostate.md | 253 ++++++++++++++++++ .../vlan_autostate/VlanAutostate_topo.png | Bin 0 -> 14675 bytes 2 files changed, 253 insertions(+) create mode 100644 TestPlans/switching/vlan_autostate/VlanAutostate.md create mode 100644 TestPlans/switching/vlan_autostate/VlanAutostate_topo.png diff --git a/TestPlans/switching/vlan_autostate/VlanAutostate.md b/TestPlans/switching/vlan_autostate/VlanAutostate.md new file mode 100644 index 000000000000..d12bf43f6ce1 --- /dev/null +++ b/TestPlans/switching/vlan_autostate/VlanAutostate.md @@ -0,0 +1,253 @@ +SQA Test Plan + +# Vlan AutoState +# SONiC 3.3.0 Release + +Rev 1.9 + +[TOC] + +## Test Plan Revision History + +| Rev | Date | Author | Change Description | +| ---- | ---------- | ----------------------------- | ----------------------------------------------------- | +| 1 | 05/05/2021 | Sooriya Gajendrababu | Initial Version | +| | | | | +| | | | | +| | | | | +| | | | | +| | | | | + +## List of Reviewers + +| Function | Name | +| :------: | :--: | +| | | + +## List of Approvers + +| Function | Name | Date Approved | +| :------: | :--: | :-----------: | +| | | | + +## Definition/Abbreviation + +| **Term** | **Meaning** | +| -------- | ------------------------------ | +| VRF | Virtual routing and forwarding | +| RIF | Router interface | +| | | +## Introduction + +### Objective + +The main objective of this document is to cover the test cases that will be executed for Vlan AutoState. Topologies and test cases for testing the feature will be discussed as part of this document. + +### Scope + +- Only Vlan level disable/enable of Autostate is covered + +### Out of scope + +- No support for system level setting of autostate. +- No support autostate exclude command to exclude ports from contributing to the operational state of a VLAN. + + +## Feature Overview + +The operstatus of a VLAN is currently controlled by the operational status of its physical port, portchannel members. + +VLAN Operup is required for VXLAN tunnel to get established. There are deployment scenarios which require that the VLAN be declared operationally up irrespective of the operational status of its members. An example is the border leaf where there may be no physical ports/LAG as VLAN members but a VXLAN tunnel is still expected to be established. + +This feature supports such deployment scenarios and provides configurability per VLAN to control this behavior. + + + +## 1 Test Focus Areas + +### 1.1 Functional Requirements + +- Autostate enable shall be supported per VLAN. When autostate is enabled the VLAN operstatus shall be declared as operationally up when there is atleast 1 member of type physical port or LAG which is operationally up, otherwise it shall be declared operationally down. +- Autostate disable shall be supported per VLAN. When autostate is disabled, the VLAN operstatus shall be declared operationally up when the setting is made. +- It shall be possible to switch between the two modes without having to delete the VLAN. The VLAN operstatus shall be according to the new value of the autostate setting. +- The operstatus shall be accessible from one of the Redis DBs. +- The operstatus shall also be reflected in the vlan kernel device. +- By default the VLAN shall be in Autostate enable mode. + +## 2 Topologies + +![VlanAutostate](VlanAutostate_topo.png "Figure 1: Topology 1") + + + +## 3 Test Case and objectives + +### **3.1 CLI Test Cases** + +### 3.1.1 Verify autostate enable/disable config/show CLIs per vlan and check running config + +| **Test ID** | **FtSwVlanAutoCli001** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **Verify autostate enable/disable config/show CLIs per vlan and check running config** | +| **Test Setup** | **Topology1** | +| **Type** | **CLI** | +| **Steps** | 1. Configure vlans100,200
2. Verify CLI to enable/disable vlan autostate works in both klish and click
3.Verify "show vlan" displays the autostate field as per the configuration
4.Verify running-config displays the autostate config
| + +### 3.1.2 Verify all the vlan autostate CLIs using OCI Yang/Rest api's. + +| **Test ID** | **FtSwVlanAutoCli002** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **Verify all the vlan autostate CLIs using OCI Yang/Rest api's.** | +| **Test Setup** | **Topology1** | +| **Type** | **CLI** | +| **Steps** | Verify Vlan autostate enable Rest ocyang URIs.
Verify Vlan autostate status using OCYANG GET URIs
Verify Vlan autostate config removal with DELETE URIs
| + +### **3.2 Functional Test Cases** + +### 3.2.1 To Verify Vlan add/del from physical port with autostate disabled/enabled + +| **Test ID** | **FtSwVlanAutoFunc001** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To Verify Vlan add/del from physical port with autostate disabled/enabled** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlan100-110 on D1 and add it as member port to physical port
2. Verify all Vlans have autostate enabled by default and vlan state shows Active
3. Remove vlan membership from physical port and verify Vlans go to Inactive state with autostate enabled
4. Disable autostate for all the Vlans and verify Vlans becomes Active
| + +### 3.2.2 To Verify Vlan add/del from Portchannel with autostate disabled/enabled + + + +| **Test ID** | **FtSwVlanAutoFunc002** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To Verify Vlan add/del from Portchannel with autostate disabled/enabled** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlan100-110 on D1 and add it as member to portchannel port
2. Verify all Vlans have autostate enabled by default and vlan state shows Active +3. Remove vlan membership from physical port and verify Vlans go to Inactive state with autostate enabled +4. Disable autostate for all the Vlans and verify Vlans becomes Active | + + + +### 3.2.3 To Verify autostate enable/disable for range of vlans + + + +| **Test ID** | **FtSwVlanAutoFunc003** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To Verify autostate enable/disable for range of vlans** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional5** | +| **Steps** | 1. Configure range of vlans 200-210 on D1
2.Disable Autostate for all the vlans using range command
3.Verify Autostate gets enabled for all Vlans in the specified range and Vlan is in Active state
4.Verify Vlan not specified in the range has autostate enabled
5.Re-enable Autostate for the all the Vlans using range command and verify Autostate gets enabled and Vlans goes to Inactive state
| + + + +### 3.2.4 To Verify Vlan is Active with Autostate disabled after physical/Portchannel port shutdown + + + +| **Test ID** | **FtSwVlanAutoFunc004** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To Verify Vlan is Active with Autostate disabled after physical/Portchannel port shutdown** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlan100-105 on D1 and add it as member of physical port
2.Configure Vlan106-110 on D1 and add it as member of Portchannel port
3. Verify all Vlans have autostate enabled by default and vlan state shows Active +4. Disable Autostate for all the vlans
5.Shutdown physical/Portchannel port and verify Vlans are still Active +6. Enable autostate for all the Vlans and verify Vlans becomes InActive
7.Noshut the physical and Portchannel ports and verify Vlans become Active
| + + + +### 3.2.5 To Verify vlan operational state with ip/ipv6 address configured + +| **Test ID** | **FtSwVlanAutoFunc005** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To Verify vlan operational state with ip/ipv6 address configured** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlan100 and add it to D1D2P1 and Vlan200 and add it to Portchannel 10 on both duts
2.Configure ip address 12.12.1.1/24 and 12.12.1.2/24 on D1 and D2 respectively on Vlan 100
3.COnfigure ipv6 address 1212::1/64 and 1212::2/64 on D1 and D2 respectively on Vlan 100
4.Configure ip address 12.12.2.1/24 and 12.12.2.2/24 on D1 and D2 respectively on Vlan 200
5.COnfigure ipv6 address 1222::1/64 and 1222::2/64 on D1 and D2 respectively on Vlan 200
6.Verify Vlan operational state "Up" under "show ip/ipv6 interface" output
7.Disable Vlan Autostate for the Vlans and remove the vlan membership from both physical and Portchannel port
8.Verify Vlan operational state still "Up" under "show ip/ipv6 interface" output with autostate disabled
9.Verify Vlan is in Active state with L3 configs applied
| + + + +### 3.2.6 To Verify routing table and static ARP table with autostate disabled + +| **Test ID** | **FtSwVlanAutoFunc006** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To Verify routing table and static ARP table with autostate disabled** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlan100 and add it to D1D2P1 and Vlan200 and add it to Portchannel 10 on both duts
2.Configure ip address 12.12.1.1/24 and 1212::1/64 on Vlan 100
3.Configure ip address 12.12.2.1/24 and 1222::1/64 on D1 on Vlan 200
4.Configure static ARP entry for 12.12.1.3 and 1212::3 on VLan 100.
7. Disable Vlan autostate and remove Vlan membership on D1
8.Verify Vlan connected routes are still programmed in routing table and static ARP entries are intact since Vlan interface is operationally UP.
9.Re-enable Autostate feature and verify routes and arp entries are removed
10.Re-add Vlan ports to the ports and verify routes and arp entries relearnt | + + + +### 3.2.7 To Verify disable/enable autostate for a particular vlan does not impact other Vlans + +| **Test ID** | **FtSwVlanAutoFunc007** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To Verify disable/enable autostate for a particular vlan does not impact other Vlans** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlans 100-110 and disable autostate for all the vlans
2.Verify all the VLans are in Active state
3. Re-enable autostate only for vlan 110 and verify only Vlan 110 becomes Inactive
4.Disable autostate on Vlan 100 and verify VLan 110 becomes Active and it does not impact vlans 100-109 | + + + + + + + +### **3.3 Reboot Test Cases** + +### 3.3.1 To verify Vlan autostate with config reload ### + +| **Test ID** | **FtSwVlanAutoReload001** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify Vlan autostate with config reload** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005
3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state
4.Perform config save and do config reload
5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after config reload | + + +### 3.3.2 To verify Vlan autostate with coldboot + +| **Test ID** | **FtSwVlanAutoReload002** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify Vlan autostate with coldboot** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005 +3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state +4.Perform config save and do coldboot +5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after coldboot | + + + +### 3.3.3 To verify Vlan autostate with swss container restart + +| **Test ID** | **FtSwVlanAutoReload003** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify Vlan autostate with swss container restart** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005 +3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state +4.Perform config save and do SWSS container restart +5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after SWSS container restart | + +### 3.3.4 To verify Vlan autostate with warmboot + +| **Test ID** | **FtSwVlanAutoReload004** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify Vlan autostate with warmboot** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005 +3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state +4.Perform config save and do warmboot +5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after warmboot | + + + + +## **Reference Links** + + +https://github.com/BRCM-SONIC/sonic_doc_private/blob/f041d90f0ee857f89d07a9d392d78602ae19658d/L2/VLAN/VLANAutoState.md + diff --git a/TestPlans/switching/vlan_autostate/VlanAutostate_topo.png b/TestPlans/switching/vlan_autostate/VlanAutostate_topo.png new file mode 100644 index 0000000000000000000000000000000000000000..86ce3a8432b569f1a91424aa7938e7973e16d76f GIT binary patch literal 14675 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 Date: Wed, 5 May 2021 00:11:37 -0700 Subject: [PATCH 10/14] Vlan Autostate Testplan --- .../switching/vlan_autostate/VlanAutostate.md | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/TestPlans/switching/vlan_autostate/VlanAutostate.md b/TestPlans/switching/vlan_autostate/VlanAutostate.md index d12bf43f6ce1..daf9fded17f6 100644 --- a/TestPlans/switching/vlan_autostate/VlanAutostate.md +++ b/TestPlans/switching/vlan_autostate/VlanAutostate.md @@ -122,9 +122,13 @@ This feature supports such deployment scenarios and provides configurability per | **Test Name** | **To Verify Vlan add/del from Portchannel with autostate disabled/enabled** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | +<<<<<<< HEAD | **Steps** | 1. Configure Vlan100-110 on D1 and add it as member to portchannel port
2. Verify all Vlans have autostate enabled by default and vlan state shows Active 3. Remove vlan membership from physical port and verify Vlans go to Inactive state with autostate enabled 4. Disable autostate for all the Vlans and verify Vlans becomes Active | +======= +| **Steps** | 1. Configure Vlan100-110 on D1 and add it as member to portchannel port
2. Verify all Vlans have autostate enabled by default and vlan state shows Active
3. Remove vlan membership from physical port and verify Vlans go to Inactive state with autostate enabled
4. Disable autostate for all the Vlans and verify Vlans becomes Active
| +>>>>>>> 07de985... Vlan Autostate Testplan @@ -150,9 +154,7 @@ This feature supports such deployment scenarios and provides configurability per | **Test Name** | **To Verify Vlan is Active with Autostate disabled after physical/Portchannel port shutdown** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan100-105 on D1 and add it as member of physical port
2.Configure Vlan106-110 on D1 and add it as member of Portchannel port
3. Verify all Vlans have autostate enabled by default and vlan state shows Active -4. Disable Autostate for all the vlans
5.Shutdown physical/Portchannel port and verify Vlans are still Active -6. Enable autostate for all the Vlans and verify Vlans becomes InActive
7.Noshut the physical and Portchannel ports and verify Vlans become Active
| +| **Steps** | 1. Configure Vlan100-105 on D1 and add it as member of physical port
2.Configure Vlan106-110 on D1 and add it as member of Portchannel port
3. Verify all Vlans have autostate enabled by default and vlan state shows Active
4. Disable Autostate for all the vlans
5.Shutdown physical/Portchannel port and verify Vlans are still Active
6. Enable autostate for all the Vlans and verify Vlans becomes InActive
7.Noshut the physical and Portchannel ports and verify Vlans become Active
| @@ -190,9 +192,6 @@ This feature supports such deployment scenarios and provides configurability per - - - ### **3.3 Reboot Test Cases** ### 3.3.1 To verify Vlan autostate with config reload ### @@ -202,7 +201,7 @@ This feature supports such deployment scenarios and provides configurability per | **Test Name** | **To verify Vlan autostate with config reload** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005
3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state
4.Perform config save and do config reload
5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after config reload | +| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005
3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state
4.Perform config save and do config reload
5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after config reload
| ### 3.3.2 To verify Vlan autostate with coldboot @@ -212,12 +211,7 @@ This feature supports such deployment scenarios and provides configurability per | **Test Name** | **To verify Vlan autostate with coldboot** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005 -3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state -4.Perform config save and do coldboot -5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after coldboot | - - +| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005
3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state
4.Perform config save and do coldboot
5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after coldboot
| ### 3.3.3 To verify Vlan autostate with swss container restart @@ -226,10 +220,7 @@ This feature supports such deployment scenarios and provides configurability per | **Test Name** | **To verify Vlan autostate with swss container restart** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005 -3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state -4.Perform config save and do SWSS container restart -5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after SWSS container restart | +| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005
3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state
4.Perform config save and do SWSS container restart
5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after SWSS container restart
| ### 3.3.4 To verify Vlan autostate with warmboot @@ -238,10 +229,7 @@ This feature supports such deployment scenarios and provides configurability per | **Test Name** | **To verify Vlan autostate with warmboot** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005 -3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state -4.Perform config save and do warmboot -5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after warmboot | +| **Steps** | 1. Configure Vlan 1001-1110
2.Disbale Autostate for Vlans1001-1005
3.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state
4.Perform config save and do warmboot
5.Verify Vlans 1001-1005 in Active state and other vlans in Inactive state after warmboot
| From 2a972771fcee939c6b92383adb6ec94bffd75216 Mon Sep 17 00:00:00 2001 From: Sooriya Date: Wed, 5 May 2021 00:11:37 -0700 Subject: [PATCH 11/14] Vlan Autostate Testplan --- TestPlans/switching/vlan_autostate/VlanAutostate.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/TestPlans/switching/vlan_autostate/VlanAutostate.md b/TestPlans/switching/vlan_autostate/VlanAutostate.md index daf9fded17f6..1248d1c68519 100644 --- a/TestPlans/switching/vlan_autostate/VlanAutostate.md +++ b/TestPlans/switching/vlan_autostate/VlanAutostate.md @@ -122,13 +122,7 @@ This feature supports such deployment scenarios and provides configurability per | **Test Name** | **To Verify Vlan add/del from Portchannel with autostate disabled/enabled** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -<<<<<<< HEAD -| **Steps** | 1. Configure Vlan100-110 on D1 and add it as member to portchannel port
2. Verify all Vlans have autostate enabled by default and vlan state shows Active -3. Remove vlan membership from physical port and verify Vlans go to Inactive state with autostate enabled -4. Disable autostate for all the Vlans and verify Vlans becomes Active | -======= | **Steps** | 1. Configure Vlan100-110 on D1 and add it as member to portchannel port
2. Verify all Vlans have autostate enabled by default and vlan state shows Active
3. Remove vlan membership from physical port and verify Vlans go to Inactive state with autostate enabled
4. Disable autostate for all the Vlans and verify Vlans becomes Active
| ->>>>>>> 07de985... Vlan Autostate Testplan From 2d398464a8c12086aa6b31abd572d67b94a3e6a0 Mon Sep 17 00:00:00 2001 From: Sooriya Date: Wed, 5 May 2021 00:11:37 -0700 Subject: [PATCH 12/14] Vlan Autostate Testplan --- .../switching/vlan_autostate/VlanAutostate.md | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/TestPlans/switching/vlan_autostate/VlanAutostate.md b/TestPlans/switching/vlan_autostate/VlanAutostate.md index 1248d1c68519..609288806b3c 100644 --- a/TestPlans/switching/vlan_autostate/VlanAutostate.md +++ b/TestPlans/switching/vlan_autostate/VlanAutostate.md @@ -148,40 +148,60 @@ This feature supports such deployment scenarios and provides configurability per | **Test Name** | **To Verify Vlan is Active with Autostate disabled after physical/Portchannel port shutdown** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan100-105 on D1 and add it as member of physical port
2.Configure Vlan106-110 on D1 and add it as member of Portchannel port
3. Verify all Vlans have autostate enabled by default and vlan state shows Active
4. Disable Autostate for all the vlans
5.Shutdown physical/Portchannel port and verify Vlans are still Active
6. Enable autostate for all the Vlans and verify Vlans becomes InActive
7.Noshut the physical and Portchannel ports and verify Vlans become Active
| +| **Steps** | 1. Configure Vlan100-105 on D1 and add it as member of physical port
2.Configure Vlan106-110 on D1 and add it as member of Portchannel port
3. Verify all Vlans have autostate enabled by default and vlan state shows Active +4. Disable Autostate for all the vlans
5.Shutdown physical/Portchannel port and verify Vlans are still Active
6. Enable autostate for all the Vlans and verify Vlans becomes InActive
7.Noshut the physical and Portchannel ports and verify Vlans become Active
| -### 3.2.5 To Verify vlan operational state with ip/ipv6 address configured +### 3.2.5 To Verify vlan operational state and ping to ip/ipv6 address configured on Vlan having autostate disabled | **Test ID** | **FtSwVlanAutoFunc005** | | -------------- | :----------------------------------------------------------- | -| **Test Name** | **To Verify vlan operational state with ip/ipv6 address configured** | +| **Test Name** | **To Verify vlan operational state and ping to ip/ipv6 address configured on Vlan having autostate disabled** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan100 and add it to D1D2P1 and Vlan200 and add it to Portchannel 10 on both duts
2.Configure ip address 12.12.1.1/24 and 12.12.1.2/24 on D1 and D2 respectively on Vlan 100
3.COnfigure ipv6 address 1212::1/64 and 1212::2/64 on D1 and D2 respectively on Vlan 100
4.Configure ip address 12.12.2.1/24 and 12.12.2.2/24 on D1 and D2 respectively on Vlan 200
5.COnfigure ipv6 address 1222::1/64 and 1222::2/64 on D1 and D2 respectively on Vlan 200
6.Verify Vlan operational state "Up" under "show ip/ipv6 interface" output
7.Disable Vlan Autostate for the Vlans and remove the vlan membership from both physical and Portchannel port
8.Verify Vlan operational state still "Up" under "show ip/ipv6 interface" output with autostate disabled
9.Verify Vlan is in Active state with L3 configs applied
| +| **Steps** | 1. Configure Vlan100 and add it to D1D2P1 and Vlan200 and add it to Portchannel 10 on both duts
2.Configure ip address 12.12.1.1/24 and 1212::1/64 on D1 on Vlan 100
3.Configure ip address 12.12.2.1/24 and 12.12.2.2/24 on D1 and D2 respectively on Vlan 200
4.COnfigure ipv6 address 1222::1/64 and 1222::2/64 on D1 and D2 respectively on Vlan 200
5.Configure Static route for 12.12.1.0/24 and 1212::/64 on D2 via Vlan 100 12.12.2.1
6.Verify Vlan operational state "Up" under "show ip/ipv6 interface" output
7.Disable Vlan Autostate for the Vlan 100 and remove the vlan membership from physical port
8.Verify ping to 12.12.1.1 and 1211::1 from D2 is successful with autostate disabled on D1 for Vlan 100
9.Verify Vlan operational state still "Up" under "show ip/ipv6 interface" output with autostate disabled
10.Verify Vlan is in Active state with L3 configs applied
| -### 3.2.6 To Verify routing table and static ARP table with autostate disabled +### 3.2.6 To Verify SAG configured on Vlan having autostate disabled | **Test ID** | **FtSwVlanAutoFunc006** | | -------------- | :----------------------------------------------------------- | -| **Test Name** | **To Verify routing table and static ARP table with autostate disabled** | +| **Test Name** | **To Verify vlan operational state and ping to ip/ipv6 address configured on Vlan having autostate disabled** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan100 and add it to D1D2P1 and Vlan200 and add it to Portchannel 10 on both duts
2.Configure ip address 12.12.1.1/24 and 1212::1/64 on Vlan 100
3.Configure ip address 12.12.2.1/24 and 1222::1/64 on D1 on Vlan 200
4.Configure static ARP entry for 12.12.1.3 and 1212::3 on VLan 100.
7. Disable Vlan autostate and remove Vlan membership on D1
8.Verify Vlan connected routes are still programmed in routing table and static ARP entries are intact since Vlan interface is operationally UP.
9.Re-enable Autostate feature and verify routes and arp entries are removed
10.Re-add Vlan ports to the ports and verify routes and arp entries relearnt | +| **Steps** | 1. Configure Vlan100 and add it to D1D2P1 and Vlan200 and add it to Portchannel 10 on both duts
2.Configure SAG ip address 12.12.1.1/24 and SAG ipv6 1212::1/64 on D1 on Vlan 100
3.Configure ip address 12.12.2.1/24 and 12.12.2.2/24 on D1 and D2 respectively on Vlan 200
4.COnfigure ipv6 address 1222::1/64 and 1222::2/64 on D1 and D2 respectively on Vlan 200
5.Configure Static route for 12.12.1.0/24 and 1212::/64 on D2 via Vlan 100 12.12.2.1
6.Verify Vlan operational state "Up" under "show ip/ipv6 interface" output
7.Disable Vlan Autostate for the Vlan 100 and remove the vlan membership from physical port
8.Verify ping to SAG IPs12.12.1.1 and 1211::1 from D2 is successful with autostate disabled on D1 for Vlan 100
9.Verify Vlan operational state still "Up" under "show ip/ipv6 interface" output with autostate disabled
10.Verify Vlan is in Active state with L3 configs applied
| -### 3.2.7 To Verify disable/enable autostate for a particular vlan does not impact other Vlans +### 3.2.7 To Verify routing table and static ARP table with autostate disabled | **Test ID** | **FtSwVlanAutoFunc007** | | -------------- | :----------------------------------------------------------- | +| **Test Name** | **To Verify routing table and static ARP table with autostate disabled** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlan100 and add it to D1D2P1 and Vlan200 and add it to Portchannel 10 on both duts
2.Configure ip address 12.12.1.1/24 and 1212::1/64 on Vlan 100
3.Configure ip address 12.12.2.1/24 and 1222::1/64 on D1 on Vlan 200
4.Configure static ARP entry for 12.12.1.3 and 1212::3 on VLan 100.
7. Disable Vlan autostate and remove Vlan membership on D1
8.Verify Vlan connected routes are still programmed in routing table and static ARP entries are intact since Vlan interface is operationally UP.
9.Re-enable Autostate feature and verify routes and arp entries are removed
10.Re-add Vlan ports to the ports and verify routes and arp entries relearnt
| + +### 3.2.8 To Verify disable/enable autostate for a particular vlan does not impact other Vlans + +| **Test ID** | **FtSwVlanAutoFunc008** | +| -------------- | :----------------------------------------------------------- | | **Test Name** | **To Verify disable/enable autostate for a particular vlan does not impact other Vlans** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlans 100-110 and disable autostate for all the vlans
2.Verify all the VLans are in Active state
3. Re-enable autostate only for vlan 110 and verify only Vlan 110 becomes Inactive
4.Disable autostate on Vlan 100 and verify VLan 110 becomes Active and it does not impact vlans 100-109 | +| **Steps** | 1. Configure Vlans 100-110 and disable autostate for all the vlans
2.Verify all the VLans are in Active state
3. Re-enable autostate only for vlan 110 and verify only Vlan 110 becomes Inactive
4.Disable autostate on Vlan 100 and verify VLan 110 becomes Active and it does not impact vlans 100-109
| + +### 3.2.9 To Verify Vxlan tunnel gets established with autostate disable in Leaf node + +| **Test ID** | **FtSwVlanAutoFunc009** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To Verify Vxlan tunnel gets established with autostate disable in Leaf node** | +| **Test Setup** | **Topology2** | +| **Type** | **Functional** | +| **Steps** | 1. Bring up CLOS topology with Spine and Leaf nodes
2.In the border leaf,with autostate diisabled on VLan,Verify Vxlan tunnel gets established without port membership,Vlan-VNI mapping
| + From 8338daa9aabe32153c5a94fc4961308e2acbc214 Mon Sep 17 00:00:00 2001 From: Sooriya Date: Wed, 5 May 2021 00:11:37 -0700 Subject: [PATCH 13/14] Vlan Autostate Testplan --- TestPlans/switching/vlan_autostate/VlanAutostate.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/TestPlans/switching/vlan_autostate/VlanAutostate.md b/TestPlans/switching/vlan_autostate/VlanAutostate.md index 609288806b3c..cc33c0ecf035 100644 --- a/TestPlans/switching/vlan_autostate/VlanAutostate.md +++ b/TestPlans/switching/vlan_autostate/VlanAutostate.md @@ -148,9 +148,7 @@ This feature supports such deployment scenarios and provides configurability per | **Test Name** | **To Verify Vlan is Active with Autostate disabled after physical/Portchannel port shutdown** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan100-105 on D1 and add it as member of physical port
2.Configure Vlan106-110 on D1 and add it as member of Portchannel port
3. Verify all Vlans have autostate enabled by default and vlan state shows Active -4. Disable Autostate for all the vlans
5.Shutdown physical/Portchannel port and verify Vlans are still Active
6. Enable autostate for all the Vlans and verify Vlans becomes InActive
7.Noshut the physical and Portchannel ports and verify Vlans become Active
| - +| **Steps** | 1. Configure Vlan100-105 on D1 and add it as member of physical port
2.Configure Vlan106-110 on D1 and add it as member of Portchannel port
3. Verify all Vlans have autostate enabled by default and vlan state shows Active
4.Disable Autostate for all the vlans
5.Shutdown physical/Portchannel port and verify Vlans are still Active
6. Enable autostate for all the Vlans and verify Vlans becomes InActive
7.Noshut the physical and Portchannel ports and verify Vlans become Active
| ### 3.2.5 To Verify vlan operational state and ping to ip/ipv6 address configured on Vlan having autostate disabled From ed26ad925c84fe53d43b74b771d7a8327e945a5b Mon Sep 17 00:00:00 2001 From: Sooriya Date: Wed, 5 May 2021 00:11:37 -0700 Subject: [PATCH 14/14] Vlan Autostate Testplan --- .../switching/vlan_autostate/VlanAutostate.md | 73 ++++++++++++++---- .../vlan_autostate/VlanAutostate_topo_2.png | Bin 0 -> 109315 bytes 2 files changed, 57 insertions(+), 16 deletions(-) create mode 100644 TestPlans/switching/vlan_autostate/VlanAutostate_topo_2.png diff --git a/TestPlans/switching/vlan_autostate/VlanAutostate.md b/TestPlans/switching/vlan_autostate/VlanAutostate.md index cc33c0ecf035..3d2bc26c318b 100644 --- a/TestPlans/switching/vlan_autostate/VlanAutostate.md +++ b/TestPlans/switching/vlan_autostate/VlanAutostate.md @@ -76,8 +76,14 @@ This feature supports such deployment scenarios and provides configurability per ## 2 Topologies +**Topology1** + ![VlanAutostate](VlanAutostate_topo.png "Figure 1: Topology 1") +**Topology2** + +![VlanAutostate](VlanAutostate_topo_2.png "Figure 2: Topology 2") + ## 3 Test Case and objectives @@ -122,7 +128,7 @@ This feature supports such deployment scenarios and provides configurability per | **Test Name** | **To Verify Vlan add/del from Portchannel with autostate disabled/enabled** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan100-110 on D1 and add it as member to portchannel port
2. Verify all Vlans have autostate enabled by default and vlan state shows Active
3. Remove vlan membership from physical port and verify Vlans go to Inactive state with autostate enabled
4. Disable autostate for all the Vlans and verify Vlans becomes Active
| +| **Steps** | 1. Configure Vlan100-110 on D1 and add it as member to Portchannel port
2. Verify all Vlans have autostate enabled by default and vlan state shows Active
3. Remove vlan membership from Portchannel port and verify Vlans go to Inactive state with autostate enabled
4. Disable autostate for all the Vlans and verify Vlans becomes Active
5.Remove port member from Portchannel and verify Vlan is still in Active state with autostate disabled
| @@ -162,46 +168,68 @@ This feature supports such deployment scenarios and provides configurability per -### 3.2.6 To Verify SAG configured on Vlan having autostate disabled + + +### 3.2.6 To Verify routing table and static ARP table with autostate disabled | **Test ID** | **FtSwVlanAutoFunc006** | | -------------- | :----------------------------------------------------------- | -| **Test Name** | **To Verify vlan operational state and ping to ip/ipv6 address configured on Vlan having autostate disabled** | +| **Test Name** | **To Verify routing table and static ARP table with autostate disabled** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan100 and add it to D1D2P1 and Vlan200 and add it to Portchannel 10 on both duts
2.Configure SAG ip address 12.12.1.1/24 and SAG ipv6 1212::1/64 on D1 on Vlan 100
3.Configure ip address 12.12.2.1/24 and 12.12.2.2/24 on D1 and D2 respectively on Vlan 200
4.COnfigure ipv6 address 1222::1/64 and 1222::2/64 on D1 and D2 respectively on Vlan 200
5.Configure Static route for 12.12.1.0/24 and 1212::/64 on D2 via Vlan 100 12.12.2.1
6.Verify Vlan operational state "Up" under "show ip/ipv6 interface" output
7.Disable Vlan Autostate for the Vlan 100 and remove the vlan membership from physical port
8.Verify ping to SAG IPs12.12.1.1 and 1211::1 from D2 is successful with autostate disabled on D1 for Vlan 100
9.Verify Vlan operational state still "Up" under "show ip/ipv6 interface" output with autostate disabled
10.Verify Vlan is in Active state with L3 configs applied
| - - +| **Steps** | 1. Configure Vlan100 and add it to D1D2P1 and Vlan200 and add it to Portchannel 10 on both duts
2.Configure ip address 12.12.1.1/24 and 1212::1/64 on Vlan 100
3.Configure ip address 12.12.2.1/24 and 1222::1/64 on D1 on Vlan 200
4.Configure static ARP entry for 12.12.1.3 and 1212::3 on VLan 100.
7. Disable Vlan autostate and remove Vlan membership on D1
8.Verify Vlan connected routes are still programmed in routing table and static ARP entries are intact since Vlan interface is operationally UP.
9.Re-enable Autostate feature and verify routes and arp entries are removed
10.Re-add Vlan ports to the ports and verify routes and arp entries relearnt
| -### 3.2.7 To Verify routing table and static ARP table with autostate disabled +### 3.2.7 To Verify disable/enable autostate for a particular vlan does not impact other Vlans | **Test ID** | **FtSwVlanAutoFunc007** | | -------------- | :----------------------------------------------------------- | -| **Test Name** | **To Verify routing table and static ARP table with autostate disabled** | +| **Test Name** | **To Verify disable/enable autostate for a particular vlan does not impact other Vlans** | | **Test Setup** | **Topology1** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlan100 and add it to D1D2P1 and Vlan200 and add it to Portchannel 10 on both duts
2.Configure ip address 12.12.1.1/24 and 1212::1/64 on Vlan 100
3.Configure ip address 12.12.2.1/24 and 1222::1/64 on D1 on Vlan 200
4.Configure static ARP entry for 12.12.1.3 and 1212::3 on VLan 100.
7. Disable Vlan autostate and remove Vlan membership on D1
8.Verify Vlan connected routes are still programmed in routing table and static ARP entries are intact since Vlan interface is operationally UP.
9.Re-enable Autostate feature and verify routes and arp entries are removed
10.Re-add Vlan ports to the ports and verify routes and arp entries relearnt
| +| **Steps** | 1. Configure Vlans 100-110 and disable autostate for all the vlans
2.Verify all the VLans are in Active state
3. Re-enable autostate only for vlan 110 and verify only Vlan 110 becomes Inactive
4.Disable autostate on Vlan 100 and verify VLan 110 becomes Active and it does not impact vlans 100-109
| -### 3.2.8 To Verify disable/enable autostate for a particular vlan does not impact other Vlans +### 3.2.8 To Verify Vxlan tunnel status with auto state enabled for L2VNI | **Test ID** | **FtSwVlanAutoFunc008** | | -------------- | :----------------------------------------------------------- | -| **Test Name** | **To Verify disable/enable autostate for a particular vlan does not impact other Vlans** | -| **Test Setup** | **Topology1** | +| **Test Name** | **To Verify Vxlan tunnel status with auto state enabled for L2VNI** | +| **Test Setup** | **Topology2** | | **Type** | **Functional** | -| **Steps** | 1. Configure Vlans 100-110 and disable autostate for all the vlans
2.Verify all the VLans are in Active state
3. Re-enable autostate only for vlan 110 and verify only Vlan 110 becomes Inactive
4.Disable autostate on Vlan 100 and verify VLan 110 becomes Active and it does not impact vlans 100-109
| +| **Steps** | 1) setup VxLAN tunnel between Leaf1 and remote leaf node Leaf3
2) Ensure there is only one L2VNI 100 is extended and autostate is enabled
3) configure IP address to vlan interface 100 and advertise-default-gw in Leaf1
4) shutdown all the member ports of vlan 100 in Leaf1
5) Verify tunnel between Leaf1 and Leaf3 remains UP.
6) Shutdown all the links between Leaf3 and Spine nodes
7) Verify there is NO tunnel between Leaf1 & Leaf3
8) Bring up all the links between Leaf3 and Spine nodes
9) Verify the tunnel is NOT re-established between Leaf1 and Leaf3
10) bring up anyone of vlan 100 member port in Leaf1
11) Verify the tunnel is re-established between Leaf1 and Leaf3
12) verify IP address of vlan100 is advertised to Leaf3
| + + -### 3.2.9 To Verify Vxlan tunnel gets established with autostate disable in Leaf node +### 3.2.9 To Verify Vxlan tunnel status with auto state disabled for L2VNI | **Test ID** | **FtSwVlanAutoFunc009** | | -------------- | :----------------------------------------------------------- | -| **Test Name** | **To Verify Vxlan tunnel gets established with autostate disable in Leaf node** | +| **Test Name** | **To Verify Vxlan tunnel status with auto state disabled for L2VNI** | | **Test Setup** | **Topology2** | | **Type** | **Functional** | -| **Steps** | 1. Bring up CLOS topology with Spine and Leaf nodes
2.In the border leaf,with autostate diisabled on VLan,Verify Vxlan tunnel gets established without port membership,Vlan-VNI mapping
| +| **Steps** | 1) setup VxLAN tunnel between Leaf1 and remote leaf node Leaf3
2) Ensure there is only one L2VNI 100 is extended and autostate is disabled
3) configure IP address to vlan interface 100 and advertise-default-gw in Leaf1
4) shutdown all the member ports of vlan 100 in Leaf1
5) Verify tunnel between Leaf1 and Leaf3 remains UP.
6) Shutdown all the links between Leaf3 and Spine nodes
7) Verify there is NO tunnel between Leaf1 and Leaf3
8) Bringup all the links between Leaf3 and Spine nodes
9) Verify the tunnel is re-established between Leaf1 and Leaf3
10) verify IP address of vlan100 is advertised to Leaf3
| +### 3.2.10 To Verify Vxlan tunnel status with auto state enabled for SAGVNI + +| **Test ID** | **FtSwVlanAutoFunc010** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To Verify Vxlan tunnel status with auto state enabled for SAGVNI** | +| **Test Setup** | **Topology2** | +| **Type** | **Functional** | +| **Steps** | 1) setup VxLAN tunnel between Leaf1 and remote leaf node Leaf3
2) Ensure there is SAGVNI 450 and L3VNI 500 is extended
3) configure autostate is enabled for vlan 450
4) Ensure there is no tenant route present in Leaf1 and Leaf3
5) shutdown all the member ports of vlan 450 in Leaf1
6) Verify the SAG interface status is DOWN in Leaf1
7) Verify tunnel between Leaf1 and Leaf3 remains UP.
8) Shutdown all the links between Leaf3 and Spine nodes
9) Verify there is no tunnel between Leaf1 and Leaf3
10) Bringup all the links between Leaf3 and Spine nodes
11) Verify the tunnel is NOT re-established between Leaf1 and Leaf3
12) bring up vlan member ports of 450 in Leaf1
13) Verify the SAG interface status is UP now
14) Verify the tunnel is re-established between Leaf1 and Leaf3
15) verify Leaf1's SAG IP is advertised to Leaf3
| + + + +### 3.2.11 To Verify Vxlan tunnel status with auto state disabled for SAGVNI + +| **Test ID** | **FtSwVlanAutoFunc011** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To Verify Vxlan tunnel status with auto state disabled for SAGVNI** | +| **Test Setup** | **Topology2** | +| **Type** | **Functional** | +| **Steps** | 1) setup VxLAN tunnel between Leaf1 and remote leaf node Leaf3
2) Ensure there is SAGVNI 450 and L3VNI 500 is extended
3) configure autostate is disabled for vlan 450
4) Ensure there is no tenant route present in Leaf1 and Leaf3
5) shutdown all the member ports of vlan 450 in Leaf1
6) Verify the SAG interface status remains UP in Leaf1
7) Verify tunnel between Leaf1 and Leaf3 remains UP.
8) Shutdown all the links between Leaf3 and Spine nodes
9) Verify there is no tunnel between Leaf1 and Leaf3
10) Bringup all the links between Leaf3 and Spine nodes
11) Verify the tunnel is re-established between Leaf1 and Leaf3
12) Verify the SAG interface status is UP now
13) verify Leaf1's SAG IP is advertised to Leaf3
| + ### **3.3 Reboot Test Cases** @@ -245,6 +273,19 @@ This feature supports such deployment scenarios and provides configurability per +### **3.4 Upgrade Test Cases** + +### 3.4.1 To verify Vlan autostate with firmware upgrade and downgrade between 3.3.0 and 3.2.0 + +| **Test ID** | **FtSwVlanAutoUpgrade001** | +| -------------- | :----------------------------------------------------------- | +| **Test Name** | **To verify verify Vlan autostate with firmware upgrade and downgrade between 3.3.0 and 3.2.0** | +| **Test Setup** | **Topology1** | +| **Type** | **Functional** | +| **Steps** | 1. Configure Vlan 1001-1110
2.Disable autostate for the Vlans and verify all Vlans are in Active state without member port
3. Downgrade the image to 3.2.0 and verify autostate configs are removed from the Vlans and it goes to Inactive state and becomes Active after Vlan gets added to port
4. Upgrade the DUT from 3.2.0 to 3.3.0 and verify all Vlans comes up with Autostate enabled
5.Disable Autostate for the Vlans after upgrade to 3.3.0 and verify Vlans in Active state | + +### + ## **Reference Links** diff --git a/TestPlans/switching/vlan_autostate/VlanAutostate_topo_2.png b/TestPlans/switching/vlan_autostate/VlanAutostate_topo_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e167c0db3a2e944f860967e35dddfe3d968db924 GIT binary patch literal 109315 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 literal 0 HcmV?d00001