aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/flow
AgeCommit message (Expand)AuthorFilesLines
2020-12-14misc: move to new pool_foreach macrosDamjan Marion1-2/+2
2020-10-21misc: minimize dependencies on udp.hFlorin Coras1-6/+10
2020-08-31flow: code refactorChenmin Sun4-352/+382
2020-08-25flow: add vnet/flow formal APIChenmin Sun4-0/+677
2020-06-27flow: add IPSec ESP/AH flowChenmin Sun2-1/+43
2020-04-30flow: add l2tpv3oip flowChenmin Sun2-2/+24
2020-04-28flow: add RSS supportChenmin Sun2-2/+110
2020-03-04flow: add vlan tagged types for IPv4/IPv6 5-tuple flowsChenmin Sun1-0/+17
2019-12-17flow: add ethernet flowChenmin Sun2-2/+23
2019-11-26flow: fix several crash issuesChenmin Sun1-0/+6
2019-11-20flow: Add GTP supportChenmin Sun2-18/+254
2019-10-16flow: Add 'drop' and 'redirect-to-queue' actions supportChenmin Sun1-0/+5
2019-01-08Fix name of ipv6-n-tupleHongjun Ni1-1/+1
2018-11-17pcap-based dispatch tracerDave Barach1-1/+1
2018-11-14Remove c-11 memcpy checks from perf-critical codeDave Barach1-1/+1
2018-10-23c11 safe string handling supportDave Barach2-2/+2
2018-06-04flow:add enabled hw format functionEyal Bari2-0/+25
2018-05-17flow:redirect to nodeEyal Bari1-0/+8
2018-05-10vnet: device flow offload infraDamjan Marion3-0/+818
2018-05-04Flow: Rename IPFIX exporter.Ole Troan8-2572/+0
2018-02-07Refactor vlib_buffer flagsDamjan Marion1-1/+1
2018-01-23VPPAPIGEN: vppapigen replacement in Python PLY.Ole Troan1-1/+1
2018-01-11api: remove transport specific code from handlersFlorin Coras1-15/+15
2018-01-09api: refactor vlibmemoryFlorin Coras1-5/+4
2018-01-08NAT64: IPFix (VPP-1106)Matus Fabian1-1/+5
2017-11-26VPP-252 Coding standards cleanup - vnet/vnet/flowSwarup Nayak6-563/+663
2017-10-09vppapigen: support per-file (major,minor,patch) version stampsDave Barach1-0/+2
2017-05-30Flowprobe: Stateful flows and IPv6, L4 recordingOle Troan4-11/+17
2017-05-24ipfix: make IPFIX work for all skip_n_vectors values (VPP-204)Juraj Sloboda1-22/+23
2017-04-25"autoreply" flag: autogenerate standard xxx_reply_t messagesDave Barach1-29/+3
2017-04-21CGN: IPFIX loggingMatus Fabian1-1/+2
2017-03-01VPP-598: tcp stack initial commitDave Barach1-1/+1
2017-01-25API refactoring : flowPavel Kotucek2-0/+570
2016-12-28Reorganize source tree to use single autotools instanceDamjan Marion6-0/+1915
> 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561
# Copyright (c) 2016 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

*** Settings ***
| Resource | resources/libraries/robot/default.robot
| Resource | resources/libraries/robot/bridge_domain.robot
| Resource | resources/libraries/robot/testing_path.robot
| Resource | resources/libraries/robot/tagging.robot
| Resource | resources/libraries/robot/l2_traffic.robot
| Library  | resources.libraries.python.Trace
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | VM_ENV
| Test Setup | Setup all DUTs before test
| Suite Setup | Setup all TGs before traffic script
| Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
| ...           | AND          | Show vpp trace dump on all DUTs
| Documentation | *L2 bridge domain with VLAN tag rewrite test cases - IPv6*
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet encapsulations:* Eth-dot1q-IPv6-ICMPv6 or
| ... | Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and DUT1-DUT2, Eth-IPv6-ICMPv6
| ... | on TG-DUT2 for L2 switching of IPv6.
| ... | *[Cfg] DUT configuration:* DUT1 is configured with bridge domain (L2BD)
| ... | switching combined with MAC learning enabled and added VLAN
| ... | sub-interface with VLAN tag rewrite translate-1-1 method
| ... | of interface towards TG and interface towards DUT2. DUT2 is configured
| ... | with L2 bridge domain (L2BD) switching between VLAN sub-interface
| ... | with VLAN tag rewrite pop-1 method of interface towards DUT1 and
| ... | interface towards TG.
| ... | *[Ver] TG verification:* Test ICMPv6 Echo Request packets are
| ... | sent from TG on link to DUT1 and received in TG on link form DUT2;
| ... | on receive TG verifies packets for correctness and their IPv6 src-addr,
| ... | dst-addr and MAC addresses.
| ... | *[Ref] Applicable standard specifications:* IEEE 802.1q, IEEE 802.1ad.

*** Variables ***
| ${bd_id1}= | 1

| ${subid}= | 10

| ${outer_vlan_id1}= | 110
| ${outer_vlan_id2}= | 120
| ${outer_vlan_wrong}= | 150

| ${inner_vlan_id1}= | 210
| ${inner_vlan_id2}= | 220
| ${inner_vlan_wrong}= | 250

| ${src_ip}= | 3ffe:63::1
| ${dst_ip}= | 3ffe:63::2

*** Test Cases ***
| TC01: DUT1 and DUT2 with L2BD and VLAN translate-1-1 (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and \
| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | bridge domain (L2BD) with one interface to DUT2 and one VLAN
| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method;
| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
| | ... | method. [Ver] Make TG send ICMPv6 Echo Req tagged with one Dot1q tag
| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
| | ... | that packet is received. [Ref] IEEE 802.1q
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-1
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Send and receive ICMP Packet
| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
| | ... | dst_ip=${dst_ip} | encaps=Dot1q | vlan1=${outer_vlan_id1}

| TC02: DUT1 and DUT2 with L2BD and VLAN translate-1-1 with wrong tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1 and \
| | ... | DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | bridge domain (L2BD) with one interface to DUT2 and one VLAN
| | ... | sub-interface towards TG with VLAN tag rewrite translate-1-1 method
| | ... | to set tag different from tag set on VLAN sub-interface of DUT2;
| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
| | ... | and one VLAN sub-interface towards DUT1 with VLAN tag rewrite pop-1
| | ... | method. [Ver] Make TG send ICMPv6 Echo Req tagged with one Dot1q tag
| | ... | from one of its interfaces to another one via DUT1 and DUT2; verify
| | ... | that packet is not received. [Ref] IEEE 802.1q
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-1 | tag1_id=${outer_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-1
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
| | ... | vlan1=${outer_vlan_id1}

| TC03: DUT1 and DUT2 with L2BD and VLAN translate-1-2 (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
| | ... | translate-1-2 method; on DUT2 configure L2 bridge domain (L2BD) with
| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
| | ... | tagged with one Dot1q tag from one of its interfaces to another one
| | ... | via DUT1 and DUT2; verify that packet is received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Send and receive ICMP Packet
| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
| | ... | dst_ip=${dst_ip} | encaps=Dot1q | vlan1=${outer_vlan_id1}

| TC04: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong inner tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
| | ... | translate-1-2 method to set inner tag different from inner tag set on
| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 bridge domain with
| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
| | ... | tagged with one Dot1q tag from one of its interfaces to another one
| | ... | via DUT1 and DUT2; verify that packet is not received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
| | ... | vlan1=${outer_vlan_id1}

| TC05: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong outer tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
| | ... | translate-1-2 method to set outer tag different from outer tag set on
| | ... | Dot1ad sub-interface of DUT2; on DUT2 configure L2 bridge domain with
| | ... | one interface to TG and one Dot1ad sub-interface towards DUT1 with
| | ... | VLAN tag rewrite pop-2 method. [Ver] Make TG send ICMPv6 Echo Req
| | ... | tagged with one Dot1q tag from one of its interfaces to another one
| | ... | via DUT1 and DUT2; verify that packet is not received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
| | ... | vlan1=${outer_vlan_id1}

| TC06: DUT1 and DUT2 with L2BD and VLAN translate-1-2 with wrong outer and inner tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1q-IPv6-ICMPv6 on TG-DUT1, \
| | ... | Eth-dot1ad-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
| | ... | DUT2 and one VLAN sub-interface towards TG with VLAN tag rewrite
| | ... | translate-1-2 method to set outer and inner tags different from tags
| | ... | set on Dot1ad sub-interface of DUT2; on DUT2 configure L2
| | ... | bridge domain with one interface to TG and one Dot1ad sub-interface
| | ... | towards DUT1 with VLAN tag rewrite pop-2 method. [Ver] Make TG send
| | ... | ICMPv6 Echo Req tagged with one Dot1q tag from one of its interfaces
| | ... | to another one via DUT1 and DUT2; verify that packet is not received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Vlan Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${outer_vlan_id1}
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-1-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1q
| | ... | vlan1=${outer_vlan_id1}

| TC07: DUT1 and DUT2 with L2BD and VLAN translate-2-1 (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, \
| | ... | Eth-dot1q-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
| | ... | translate-2-1 method; on DUT2 configure L2 bridge domain (L2BD) with
| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv6 Echo Req
| | ... | tagged with Dot1ad tags from one of its interfaces to another one
| | ... | via DUT1 and DUT2; verify that packet is received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-1
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Send and receive ICMP Packet
| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
| | ... | dst_ip=${dst_ip} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
| | ... | vlan2=${inner_vlan_id1}

| TC08: DUT1 and DUT2 with L2BD and VLAN translate-2-1 with wrong tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1, \
| | ... | Eth-dot1q-IPv6-ICMPv6 on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2.
| | ... | [Cfg] On DUT1 configure L2 bridge domain (L2BD) with one interface to
| | ... | DUT2 and one Dot1ad sub-interface towards TG with VLAN tag rewrite
| | ... | translate-2-1 method to set tag different from tag set on VLAN
| | ... | sub-interface of DUT2; on DUT2 configure L2 bridge domain (L2BD) with
| | ... | one interface to TG and one VLAN sub-interface towards DUT1 with
| | ... | VLAN tag rewrite pop-1 method. [Ver] Make TG send ICMPv6 Echo Req
| | ... | tagged with Dot1ad tags from one of its interfaces to another one
| | ... | via DUT1 and DUT2; verify that packet is not received.
| | ... | [Ref] IEEE 802.1q, IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Vlan Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${outer_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-2-1 | tag1_id=${outer_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-1
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}

| TC09: DUT1 and DUT2 with L2BD and VLAN translate-2-2 switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method;
| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG and
| | ... | one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-1
| | ... | tagged with Dot1ad tags from one of its interfaces to another one
| | ... | method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2; verify
| | ... | that packet is received. [Ref] IEEE 802.1ad
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Send and receive ICMP Packet
| | ... | ${tg_node} | ${tg_to_dut1} | ${tg_to_dut2} | src_ip=${src_ip}
| | ... | dst_ip=${dst_ip} | encaps=Dot1ad | vlan1=${outer_vlan_id1}
| | ... | vlan2=${inner_vlan_id1}

| TC10: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong inner tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
| | ... | set inner tag different from inner tag set on Dot1ad sub-interface of
| | ... | DUT2; on DUT2 configure L2 bridge domain (L2BD) with one interface to
| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
| | ... | pop-1 tagged with Dot1ad tags from one of its interfaces to another
| | ... | one method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2;
| | ... | verify that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_id2} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}

| TC11: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong outer tag used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
| | ... | set outer tag different from outer tag set on Dot1ad sub-interface of
| | ... | DUT2; on DUT2 configure L2 bridge domain (L2BD) with one interface to
| | ... | TG and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite
| | ... | pop-1 tagged with Dot1ad tags from one of its interfaces to another
| | ... | one method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2;
| | ... | verify that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_id2}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}

| TC12: DUT1 and DUT2 with L2BD and VLAN translate-2-2 with wrong outer and inner tags used (DUT1) switch ICMPv6 between two TG links
| | [Documentation]
| | ... | [Top] TG-DUT1-DUT2-TG. [Enc] Eth-dot1ad-IPv6-ICMPv6 on TG-DUT1 and \
| | ... | on DUT1-DUT2, Eth-IPv6-ICMPv6 on TG-DUT2. [Cfg] On DUT1 configure L2
| | ... | bridge domain (L2BD) with one interface to DUT2 and one Dot1ad
| | ... | sub-interface towards TG with VLAN tag rewrite translate-2-2 method to
| | ... | set tags different from tags set on Dot1ad sub-interface of DUT2;
| | ... | on DUT2 configure L2 bridge domain (L2BD) with one interface to TG
| | ... | and one Dot1ad sub-interface towards DUT1 with VLAN tag rewrite pop-1
| | ... | tagged with Dot1ad tags from one of its interfaces to another one
| | ... | method. [Ver] Make TG send ICMPv6 Echo Req via DUT1 and DUT2; verify
| | ... | that packet is not received. [Ref] IEEE 802.1ad
| | [Tags] | SKIP_PATCH
| | Given Path for 3-node testing is set
| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['DUT2']} | ${nodes['TG']}
| | And Interfaces in 3-node path are up
| | ${vlan1_name} | ${vlan1_index}= | When Tagged Subinterface Created
| | ... | ${dut1_node} | ${dut1_to_tg} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id1} | inner_vlan_id=${inner_vlan_id1}
| | ... | type_subif=two_tags dot1ad
| | ${vlan2_name} | ${vlan2_index}= | And Tagged Subinterface Created
| | ... | ${dut2_node} | ${dut2_to_dut1} | ${subid}
| | ... | outer_vlan_id=${outer_vlan_id2} | inner_vlan_id=${inner_vlan_id2}
| | ... | type_subif=two_tags dot1ad
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut1_node}
| | ... | ${vlan1_index} | translate-2-2 | push_dot1q=${False}
| | ... | tag1_id=${outer_vlan_wrong} | tag2_id=${inner_vlan_wrong}
| | And L2 Tag Rewrite Method Is Set On Interface | ${dut2_node}
| | ... | ${vlan2_index} | pop-2
| | And Bridge domain on DUT node is created | ${dut1_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${dut1_to_dut2}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut1_node} | ${vlan1_index}
| | ...                                     | ${bd_id1}
| | And Bridge domain on DUT node is created | ${dut2_node} | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${dut2_to_tg}
| | ...                                     | ${bd_id1}
| | And Interface is added to bridge domain | ${dut2_node} | ${vlan2_index}
| | ...                                     | ${bd_id1}
| | Then Run Keyword And Expect Error | ICMP echo Rx timeout
| | ... | Send and receive ICMP Packet | ${tg_node} | ${tg_to_dut1}
| | ... | ${tg_to_dut2} | src_ip=${src_ip} | dst_ip=${dst_ip} | encaps=Dot1ad
| | ... | vlan1=${outer_vlan_id1} | vlan2=${inner_vlan_id1}