summaryrefslogtreecommitdiffstats
path: root/src/uri.am
blob: 11dae54a5af97096dfab27849e1e12f4cedffef4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Copyright (c) 2017 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.

noinst_PROGRAMS +=				\
	uri_udp_test				\
	uri_tcp_test				\
	uri_socket_test				\
	uri_socket_server

uri_udp_test_SOURCES = uri/uri_udp_test.c
uri_udp_test_LDADD = libvlibmemoryclient.la libsvm.la \
	libvppinfra.la -lpthread -lm -lrt

uri_tcp_test_SOURCES = uri/uri_tcp_test.c
uri_tcp_test_LDADD = libvlibmemoryclient.la libsvm.la \
	libvppinfra.la -lpthread -lm -lrt

uri_socket_test_SOURCES = uri/uri_socket_test.c
uri_socket_test_LDADD = libvppinfra.la -lpthread -lm -lrt

uri_socket_server_SOURCES = uri/uri_socket_server.c
uri_socket_server_LDADD = libvppinfra.la -lpthread -lm -lrt
d='n122' href='#n122'>122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
# Copyright (c) 2019 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 ***
| Library | resources.libraries.python.IPUtil
| Library  | resources.libraries.python.Trace
| Resource | resources/libraries/robot/ip/ip4.robot
| Resource | resources/libraries/robot/ip/ip6.robot
| Resource | resources/libraries/robot/ip/map.robot
| ...
| Resource | resources/libraries/robot/shared/default.robot
| Resource | resources/libraries/robot/shared/testing_path.robot
| ...
| Force Tags | HW_ENV | VM_ENV | 3_NODE_DOUBLE_LINK_TOPO | SOFTWIRE
| ...
| Test Setup | Set up functional test
| ...
| Test Teardown | Tear down functional test
| ...
| Documentation | *Lightweight 4 over 6 test cases*
| ...
| ... | LW4o6 is a subset of MAP-E, with per-subscriber rules. It uses the
| ... | same tunneling mechanism and configuration as MAP-E. It does not use
| ... | embedded address bits.
| ...
| ... | *[Top] Network Topologies:* TG=DUT1 2-node topology with two links
| ... | between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4-UDP on TG_if1-DUT,
| ... | Eth-IPv6-IPv4-UDP on TG_if2_DUT.
| ... | *[Cfg] DUT configuration:* DUT1 is configured as lwAFTR.
| ... | *[Ver] TG verification:* Test UDP ICMP Echo Request in IPv4 are
| ... | sent to lwAFTR and are verified by TG for correctness their
| ... | encapsulation in IPv6 src-addr, dst-addr and MAC addresses.
| ... | *[Ref] Applicable standard specifications:* RFC7596 RFC7597.

*** Variables ***
| ${dut_ip4}= | 10.0.0.1
| ${dut_ip6}= | 2001:0::1
| ${tg_ip6}= | 2001:0::2
| ${ipv4_prefix_len}= | 24
| ${ipv6_prefix_len}= | 64

| ${lw_ipv4_pfx}= | 20.0.0.1/32
| ${lw_ipv6_pfx}= | 2001:1::/64
| ${lw_ipv6_src}= | 2001:1::1
| ${lw_psid_length}= | ${8}
| ${lw_psid_offset}= | ${6}
| ${lw_rule_psid}= | ${52}
| ${lw_rule_ipv6_dst}= | 2001:1::2
| ${lw_rule_2_psid}= | ${22}
| ${lw_rule_2_ipv6_dst}= | 2001:1::3
| ${test_ipv4_inside}= | 20.0.0.1
| ${test_ipv4_outside}= | 10.0.0.100
# test_port depends on psid, length, offset
| ${test_port}= | ${1232}
| ${test_icmp_id}= | ${1232}
| ${test_2_port}= | ${6232}

*** Test Cases ***
| TC01: Encapsulate IPv4 into IPv6. IPv6 dst depends on IPv4 and UDP destination
| | [Documentation]
| | ... | [Top] TG=DUT1.
| | ... | [Enc] Eth-IPv4-UDP on TG_if1-DUT, Eth-IPv6-IPv4-UDP on TG_if2_DUT.
| | ... | [Cfg] On DUT1 configure Map domain and Map rule.
| | ... | [Ver] Make TG send non-encapsulated UDP to DUT; verify TG received
| | ... |       IPv4oIPv6 encapsulated packet is correct.
| | ... | [Ref] RFC7596 RFC7597
| | ...
| | Given Configure path in 2-node circular topology
| |       ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
| | And   Set interfaces in 2-node circular topology up
| | And   Configure IP addresses on interfaces
| |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
| |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
| | And   VPP Add IP Neighbor
| |       ... | ${dut_node} | ${dut_to_tg_if2} | ${tg_ip6}
| |       ... | ${tg_to_dut_if2_mac}
| | And Vpp Route Add
| |       ... | ${dut_node} | ${lw_rule_ipv6_dst} | 128
| |       ... | gateway=${tg_ip6} | interface=${dut_to_tg_if2}
| | ${domain_index}=
| | ... | When Map Add Domain
| |            ... | ${dut_node} | ${lw_ipv4_pfx} | ${lw_ipv6_pfx}
| |            ... | ${lw_ipv6_src} | 0 | ${lw_psid_offset}
| |            ... | ${lw_psid_length}
| |       And  Map Add Rule
| |            ... | ${dut_node} | ${domain_index} | ${lw_rule_psid}
| |            ... | ${lw_rule_ipv6_dst}
| | Then Send IPv4 UDP and check headers for lightweight 4over6
| |      ... | ${tg_node} | ${tg_to_dut_if1} | ${tg_to_dut_if2}
| |      ... | ${dut_to_tg_if1_mac} | ${test_ipv4_inside} | ${test_ipv4_outside}
| |      ... | ${test_port} | ${tg_to_dut_if2_mac} | ${dut_to_tg_if2_mac}
| |      ... | ${lw_rule_ipv6_dst} | ${lw_ipv6_src}

TC02: Encapsulate IPv4 ICMP into IPv6. IPv6 dst depends on IPv4 addr and ICMP ID
| | [Documentation]
| | ... | [Top] TG=DUT1.
| | ... | [Enc] Eth-IPv4-ICMP(type 0 and 8) on TG_if1-DUT, Eth-IPv6-IPv4-ICMP
| | ... |       on TG_if2_DUT.
| | ... | [Cfg] On DUT1 configure Map domain and Map rule.
| | ... | [Ver] Make TG send non-encapsulated ICMP to DUT; verify TG received
| | ... |       IPv4oIPv6 encapsulated packet is correct. Checks IPv6
| | ... |       destination based on ICMP Identifier field.
| | ... | [Ref] RFC7596 section 8.1
| | ...
| | Given Configure path in 2-node circular topology
| |       ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
| | And   Set interfaces in 2-node circular topology up
| | And   Configure IP addresses on interfaces
| |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
| |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
| | And   VPP Add IP Neighbor
| |       ... | ${dut_node} | ${dut_to_tg_if2} | ${tg_ip6}
| |       ... | ${tg_to_dut_if2_mac}
| | And Vpp Route Add
| |       ... | ${dut_node} | ${lw_rule_ipv6_dst} | 128
| |       ... | gateway=${tg_ip6} | interface=${dut_to_tg_if2}
| | ${domain_index}=
| | ... | When Map Add Domain
| |            ... | ${dut_node} | ${lw_ipv4_pfx} | ${lw_ipv6_pfx}
| |            ... | ${lw_ipv6_src} | 0 | ${lw_psid_offset}
| |            ... | ${lw_psid_length}
| |       And  Map Add Rule
| |            ... | ${dut_node} | ${domain_index} | ${lw_rule_psid}
| |            ... | ${lw_rule_ipv6_dst}
| | Then Send IPv4 ICMP and check headers for lightweight 4over6
| |      ... | ${tg_node} | ${tg_to_dut_if1} | ${tg_to_dut_if2}
| |      ... | ${dut_to_tg_if1_mac} | ${test_ipv4_inside} | ${test_ipv4_outside}
| |      ... | ${test_icmp_id} | ${tg_to_dut_if2_mac} | ${dut_to_tg_if2_mac}
| |      ... | ${lw_rule_ipv6_dst} | ${lw_ipv6_src}

TC03: Decapsulate IPv4 UDP from IPv6.
| | [Documentation]
| | ... | [Top] TG=DUT1.
| | ... | [Enc] Eth-IPv6-IPv4-UDP on TG_if2_DUT, Eth-IPv4-UDP on TG_if1-DUT.
| | ... | [Cfg] On DUT1 configure Map domain and Map rule.
| | ... | [Ver] Make TG send encapsulated UDP to DUT; verify TG received
| | ... |       IPv4 non-encapsulated packet is correct.
| | ... | [Ref] RFC7596 RFC7597
| | ...
| | Given Configure path in 2-node circular topology
| |       ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
| | And   Set interfaces in 2-node circular topology up
| | And   Configure IP addresses on interfaces
| |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
| |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
| | And   VPP Add IP Neighbor
| |       ... | ${dut_node} | ${dut_to_tg_if1}
| |       ... | ${test_ipv4_outside}
| |       ... | ${tg_to_dut_if1_mac}
| | ${domain_index}=
| | ... | When Map Add Domain
| |            ... | ${dut_node} | ${lw_ipv4_pfx} | ${lw_ipv6_pfx}
| |            ... | ${lw_ipv6_src} | 0 | ${lw_psid_offset}
| |            ... | ${lw_psid_length}
| |       And  Map Add Rule
| |            ... | ${dut_node} | ${domain_index} | ${lw_rule_psid}
| |            ... | ${lw_rule_ipv6_dst}
| | Then Send IPv4 UDP in IPv6 and check headers for lightweight 4over6
| |      ... | ${tg_node} | ${tg_to_dut_if2} | ${tg_to_dut_if1}
| |      ... | ${dut_to_tg_if2_mac} | ${tg_to_dut_if2_mac}
| |      ... | ${lw_ipv6_src} | ${lw_rule_ipv6_dst}
| |      ... | ${test_ipv4_outside} | ${test_ipv4_inside} | ${test_port}
| |      ... | ${tg_to_dut_if1_mac} | ${dut_to_tg_if1_mac}

TC04: Hairpinning of traffic between two lwB4
| | [Documentation]
| | ... | [Top] DUT1-TG.
| | ... | [Enc] Eth-IPv6-IPv4-UDP on TG_if2_DUT, Eth-IPv6-IPv4-UDP on TG_if2_DUT.
| | ... | [Cfg] On DUT1 configure Map domain and two Map rules.
| | ... | [Ver] Make TG send encapsulated UDP to DUT; verify TG received
| | ... |       encapsulated packet is correct.
| | ... | [Ref] RFC7596 RFC7597
| | ...
| | Given Configure path in 2-node circular topology
| |       ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
| | And   Set interfaces in 2-node circular topology up
| | And   Configure IP addresses on interfaces
| |       ... | ${dut_node} | ${dut_to_tg_if1} | ${dut_ip4} | ${ipv4_prefix_len}
| |       ... | ${dut_node} | ${dut_to_tg_if2} | ${dut_ip6} | ${ipv6_prefix_len}
| | And   VPP Add IP Neighbor
| |       ... | ${dut_node} | ${dut_to_tg_if2} | ${tg_ip6}
| |       ... | ${tg_to_dut_if2_mac}
| | And Vpp Route Add
| |       ... | ${dut_node} | ${lw_rule_2_ipv6_dst} | 128
| |       ... | gateway=${tg_ip6} | interface=${dut_to_tg_if2}
| | ${domain_index}=
| | ... | When Map Add Domain
| |            ... | ${dut_node} | ${lw_ipv4_pfx} | ${lw_ipv6_pfx}
| |            ... | ${lw_ipv6_src} | 0 | ${lw_psid_offset}
| |            ... | ${lw_psid_length}
| |       And  Map Add Rule
| |            ... | ${dut_node} | ${domain_index} | ${lw_rule_psid}
| |            ... | ${lw_rule_ipv6_dst}
| |       And  Map Add Rule
| |            ... | ${dut_node} | ${domain_index} | ${lw_rule_2_psid}
| |            ... | ${lw_rule_2_ipv6_dst}
| | Then Send IPv4 UDP in IPv6 and check headers for lightweight hairpinning
| |      ... | ${tg_node} | ${tg_to_dut_if2} | ${tg_to_dut_if2}
| |      ... | ${dut_to_tg_if2_mac}
| |      ... | ${lw_ipv6_src} | ${lw_rule_ipv6_dst}
| |      ... | ${test_ipv4_inside} | ${test_ipv4_inside}
| |      ... | ${test_2_port} | ${test_port}
| |      ... | ${tg_to_dut_if2_mac} | ${dut_to_tg_if2_mac}
| |      ... | ${lw_rule_2_ipv6_dst} | ${lw_ipv6_src}