aboutsummaryrefslogtreecommitdiffstats
path: root/tests/vpp/perf/ip6_tunnels/10ge2p1x520-ethip6lispip4-ip6base-ndrchk.robot
diff options
context:
space:
mode:
authorTibor Frank <tifrank@cisco.com>2017-06-20 13:57:08 +0200
committerTibor Frank <tifrank@cisco.com>2017-06-29 12:17:28 +0000
commit6721e7f09aa95bff6622068332a3f56afad9c87b (patch)
tree37ef7f40e53f740a62830ab46142aa87342dc56b /tests/vpp/perf/ip6_tunnels/10ge2p1x520-ethip6lispip4-ip6base-ndrchk.robot
parent859157b5db45927c7b4bb0b2d575e68805777a86 (diff)
CSIT-687: Directory structure reorganization
Change-Id: I772c9e214be2461adf58124998d272e7d795220f Signed-off-by: Tibor Frank <tifrank@cisco.com> Signed-off-by: Maciek Konstantynowicz <mkonstan@cisco.com>
Diffstat (limited to 'tests/vpp/perf/ip6_tunnels/10ge2p1x520-ethip6lispip4-ip6base-ndrchk.robot')
-rw-r--r--tests/vpp/perf/ip6_tunnels/10ge2p1x520-ethip6lispip4-ip6base-ndrchk.robot266
1 files changed, 266 insertions, 0 deletions
diff --git a/tests/vpp/perf/ip6_tunnels/10ge2p1x520-ethip6lispip4-ip6base-ndrchk.robot b/tests/vpp/perf/ip6_tunnels/10ge2p1x520-ethip6lispip4-ip6base-ndrchk.robot
new file mode 100644
index 0000000000..6448d4390f
--- /dev/null
+++ b/tests/vpp/perf/ip6_tunnels/10ge2p1x520-ethip6lispip4-ip6base-ndrchk.robot
@@ -0,0 +1,266 @@
+# 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.
+
+*** Settings ***
+| Resource | resources/libraries/robot/performance/performance_setup.robot
+| Resource | resources/libraries/robot/overlay/lisp_static_adjacency.robot
+| Variables | resources/test_data/lisp/performance/lisp_static_adjacency.py
+| ...
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRCHK
+| ... | NIC_Intel-X520-DA2 | IP6FWD | ENCAP | LISP | IP4UNRLAY | IP6OVRLAY
+| ...
+| Suite Setup | Set up 3-node performance topology with DUT's NIC model
+| ... | L3 | Intel-X520-DA2
+| Suite Teardown | Tear down 3-node performance topology
+| ...
+| Test Setup | Set up performance test
+| Test Teardown | Tear down performance ndrchk test
+| ...
+| Documentation | *Reference NDR throughput Lisp tunnel verify test cases*
+| ...
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv6-LISP-IPv4 on DUT1-DUT2,\
+| ... | Eth-IPv6 on TG-DUTn for IPv6 routing over LISPoIPv4 tunnel.
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv6\
+| ... | routing and static routes. LISPoIPv4 tunnel is configured between\
+| ... | DUT1 and DUT2. DUT1 and DUT2 tested with 2p10GE NIC X520 Niantic\
+| ... | by Intel.
+| ... | *[Ver] TG verification:* In short performance tests, TG verifies\
+| ... | DUTs' throughput at ref-NDR (reference Non Drop Rate) with zero packet\
+| ... | loss tolerance. Ref-NDR value is periodically updated acording to\
+| ... | formula: ref-NDR = 0.9x NDR, where NDR is found in RFC2544 long\
+| ... | performance tests for the same DUT confiiguration. Test packets are\
+| ... | generated by TG on links to DUTs. TG traffic profile contains two L3\
+| ... | flow-groups (flow-group per direction, 253 flows per flow-group) with\
+| ... | all packets containing Ethernet header, IPv4 header or IPv6 header with\
+| ... | IP protocol=61 and generated payload.
+| ... | *[Ref] Applicable standard specifications:* RFC2544.
+
+*** Variables ***
+# Traffic profile:
+| ${traffic_profile} | trex-sl-3n-ethip6-ip6src253
+
+*** Test Cases ***
+| tc01-78B-1t1c-ethip6lispip4-ip6base-ndrchk
+| | [Documentation]
+| | ... | [Cfg] DUT runs LISP tunnel config with 1 thread, 1 phy core,\
+| | ... | 1 receive queue per NIC port.
+| | ... | [Ver] Verify ref-NDR for 78 Byte frames using single trial\
+| | ... | throughput test at 2x 1.75mpps.
+| | [Tags] | 78B | 1T1C | STHREAD
+| | ${framesize}= | Set Variable | ${78}
+| | ${rate}= | Set Variable | 1.75mpps
+| | Given Add '1' worker threads and '1' rxqueues in 3-node single-link circular topology
+| | And Add PCI devices to DUTs in 3-node single link topology
+| | And Add no multi seg to all DUTs
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
+| | ... | ${dut1_to_dut2_ip6o4} | ${dut1_to_tg_ip6o4} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4} | ${dut_prefix6o4}
+| | And Configure LISP topology in 3-node circular topology
+| | ... | ${dut1} | ${dut1_if2} | ${NONE}
+| | ... | ${dut2} | ${dut2_if1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency} | ${dut2_ip6o4_static_adjacency}
+| | Then Traffic should pass with no loss | ${perf_trial_duration} | ${rate}
+| | ... | ${framesize} | ${traffic_profile}
+
+| tc02-1460B-1t1c-ethip6lispip4-ip6base-ndrchk
+| | [Documentation]
+| | ... | [Cfg] DUT runs LISP tunnel config with 1 thread, 1 phy core,\
+| | ... | 1 receive queue per NIC port.
+| | ... | [Ver] Verify ref-NDR for 1460 Byte frames using single trial\
+| | ... | throughput test at 2x 720000pps.
+| | [Tags] | 1460B | 1T1C | STHREAD
+| | ${framesize}= | Set Variable | ${1460}
+| | ${rate}= | Set Variable | 720000pps
+| | Given Add '1' worker threads and '1' rxqueues in 3-node single-link circular topology
+| | And Add PCI devices to DUTs in 3-node single link topology
+| | And Add no multi seg to all DUTs
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
+| | ... | ${dut1_to_dut2_ip6o4} | ${dut1_to_tg_ip6o4} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4} | ${dut_prefix6o4}
+| | And Configure LISP topology in 3-node circular topology
+| | ... | ${dut1} | ${dut1_if2} | ${NONE}
+| | ... | ${dut2} | ${dut2_if1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency} | ${dut2_ip6o4_static_adjacency}
+| | Then Traffic should pass with no loss | ${perf_trial_duration} | ${rate}
+| | ... | ${framesize} | ${traffic_profile}
+
+| tc03-9000B-1t1c-ethip6lispip4-ip6base-ndrchk
+| | [Documentation]
+| | ... | [Cfg] DUT runs LISP tunnel config with 1 thread, 1 phy core,\
+| | ... | 1 receive queue per NIC port.
+| | ... | [Ver] Verify ref-NDR for 9000 Byte frames using single trial\
+| | ... | throughput test at 2x 120000pps.
+| | [Tags] | 9000B | 1T1C | STHREAD
+| | ${framesize}= | Set Variable | ${9000}
+| | ${rate}= | Set Variable | 120000pps
+| | Given Add '1' worker threads and '1' rxqueues in 3-node single-link circular topology
+| | And Add PCI devices to DUTs in 3-node single link topology
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
+| | ... | ${dut1_to_dut2_ip6o4} | ${dut1_to_tg_ip6o4} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4} | ${dut_prefix6o4}
+| | And Configure LISP topology in 3-node circular topology
+| | ... | ${dut1} | ${dut1_if2} | ${NONE}
+| | ... | ${dut2} | ${dut2_if1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency} | ${dut2_ip6o4_static_adjacency}
+| | Then Traffic should pass with no loss | ${perf_trial_duration} | ${rate}
+| | ... | ${framesize} | ${traffic_profile}
+
+| tc04-78B-2t2c-ethip6lispip4-ip6base-ndrchk
+| | [Documentation]
+| | ... | [Cfg] DUT runs LISP tunnel config with 2 threads, 2 phy cores,\
+| | ... | 1 receive queue per NIC port.
+| | ... | [Ver] Verify ref-NDR for 78 Byte frames using single trial\
+| | ... | throughput test at 2x 3.42mpps.
+| | [Tags] | 78B | 2T2C | MTHREAD
+| | ${framesize}= | Set Variable | ${78}
+| | ${rate}= | Set Variable | 3.42mpps
+| | Given Add '2' worker threads and '1' rxqueues in 3-node single-link circular topology
+| | And Add PCI devices to DUTs in 3-node single link topology
+| | And Add no multi seg to all DUTs
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
+| | ... | ${dut1_to_dut2_ip6o4} | ${dut1_to_tg_ip6o4} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4} | ${dut_prefix6o4}
+| | And Configure LISP topology in 3-node circular topology
+| | ... | ${dut1} | ${dut1_if2} | ${NONE}
+| | ... | ${dut2} | ${dut2_if1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency} | ${dut2_ip6o4_static_adjacency}
+| | Then Traffic should pass with no loss | ${perf_trial_duration} | ${rate}
+| | ... | ${framesize} | ${traffic_profile}
+
+| tc05-1460B-2t2c-ethip6lispip4-ip6base-ndrchk
+| | [Documentation]
+| | ... | [Cfg] DUT runs LISP tunnel config with 2 threads, 2 phy cores,\
+| | ... | 1 receive queue per NIC port.
+| | ... | [Ver] Verify ref-NDR for 1460 Byte frames using single trial\
+| | ... | throughput test at 2x 720000pps.
+| | [Tags] | 1460B | 2T2C | MTHREAD
+| | ${framesize}= | Set Variable | ${1460}
+| | ${rate}= | Set Variable | 720000pps
+| | Given Add '2' worker threads and '1' rxqueues in 3-node single-link circular topology
+| | And Add PCI devices to DUTs in 3-node single link topology
+| | And Add no multi seg to all DUTs
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
+| | ... | ${dut1_to_dut2_ip6o4} | ${dut1_to_tg_ip6o4} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4} | ${dut_prefix6o4}
+| | And Configure LISP topology in 3-node circular topology
+| | ... | ${dut1} | ${dut1_if2} | ${NONE}
+| | ... | ${dut2} | ${dut2_if1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency} | ${dut2_ip6o4_static_adjacency}
+| | Then Traffic should pass with no loss | ${perf_trial_duration} | ${rate}
+| | ... | ${framesize} | ${traffic_profile}
+
+| tc06-9000B-2t2c-ethip6lispip4-ip6base-ndrchk
+| | [Documentation]
+| | ... | [Cfg] DUT runs LISP tunnel config with 2 threads, 2 phy cores,\
+| | ... | 1 receive queue per NIC port.
+| | ... | [Ver] Verify ref-NDR for 9000 Byte frames using single trial\
+| | ... | throughput test at 2x 120000pps.
+| | [Tags] | 9000B | 2T2C | MTHREAD
+| | ${framesize}= | Set Variable | ${9000}
+| | ${rate}= | Set Variable | 120000pps
+| | Given Add '2' worker threads and '1' rxqueues in 3-node single-link circular topology
+| | And Add PCI devices to DUTs in 3-node single link topology
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
+| | ... | ${dut1_to_dut2_ip6o4} | ${dut1_to_tg_ip6o4} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4} | ${dut_prefix6o4}
+| | And Configure LISP topology in 3-node circular topology
+| | ... | ${dut1} | ${dut1_if2} | ${NONE}
+| | ... | ${dut2} | ${dut2_if1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency} | ${dut2_ip6o4_static_adjacency}
+| | Then Traffic should pass with no loss | ${perf_trial_duration} | ${rate}
+| | ... | ${framesize} | ${traffic_profile}
+
+| tc07-78B-4t4c-ethip6lispip4-ip6base-ndrchk
+| | [Documentation]
+| | ... | [Cfg] DUT runs LISP tunnel config with 4 threads, 4 phy cores,\
+| | ... | 2 receive queues per NIC port.
+| | ... | [Ver] Verify ref-NDR for 78 Byte frames using single trial\
+| | ... | throughput test at 2x 3.42mpps.
+| | [Tags] | 78B | 4T4C | MTHREAD
+| | ${framesize}= | Set Variable | ${78}
+| | ${rate}= | Set Variable | 3.42mpps
+| | Given Add '4' worker threads and '2' rxqueues in 3-node single-link circular topology
+| | And Add PCI devices to DUTs in 3-node single link topology
+| | And Add no multi seg to all DUTs
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
+| | ... | ${dut1_to_dut2_ip6o4} | ${dut1_to_tg_ip6o4} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4} | ${dut_prefix6o4}
+| | And Configure LISP topology in 3-node circular topology
+| | ... | ${dut1} | ${dut1_if2} | ${NONE}
+| | ... | ${dut2} | ${dut2_if1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency} | ${dut2_ip6o4_static_adjacency}
+| | Then Traffic should pass with no loss | ${perf_trial_duration} | ${rate}
+| | ... | ${framesize} | ${traffic_profile}
+
+| tc08-1460B-4t4c-ethip6lispip4-ip6base-ndrchk
+| | [Documentation]
+| | ... | [Cfg] DUT runs LISP tunnel config with 4 threads, 4 phy cores,\
+| | ... | 2 receive queues per NIC port.
+| | ... | [Ver] Verify ref-NDR for 1460 Byte frames using single trial\
+| | ... | throughput test at 2x 720000pps.
+| | [Tags] | 1460B | 4T4C | MTHREAD
+| | ${framesize}= | Set Variable | ${1460}
+| | ${rate}= | Set Variable | 720000pps
+| | Given Add '4' worker threads and '2' rxqueues in 3-node single-link circular topology
+| | And Add PCI devices to DUTs in 3-node single link topology
+| | And Add no multi seg to all DUTs
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
+| | ... | ${dut1_to_dut2_ip6o4} | ${dut1_to_tg_ip6o4} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4} | ${dut_prefix6o4}
+| | And Configure LISP topology in 3-node circular topology
+| | ... | ${dut1} | ${dut1_if2} | ${NONE}
+| | ... | ${dut2} | ${dut2_if1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency} | ${dut2_ip6o4_static_adjacency}
+| | Then Traffic should pass with no loss | ${perf_trial_duration} | ${rate}
+| | ... | ${framesize} | ${traffic_profile}
+
+| tc09-9000B-4t4c-ethip6lispip4-ip6base-ndrchk
+| | [Documentation]
+| | ... | [Cfg] DUT runs LISP tunnel config with 4 threads, 4 phy cores,\
+| | ... | 2 receive queues per NIC port.
+| | ... | [Ver] Verify ref-NDR for 9000 Byte frames using single trial\
+| | ... | throughput test at 2x 120000pps.
+| | [Tags] | 9000B | 4T4C | MTHREAD
+| | ${framesize}= | Set Variable | ${9000}
+| | ${rate}= | Set Variable | 120000pps
+| | Given Add '4' worker threads and '2' rxqueues in 3-node single-link circular topology
+| | And Add PCI devices to DUTs in 3-node single link topology
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology
+| | ... | ${dut1_to_dut2_ip6o4} | ${dut1_to_tg_ip6o4} | ${dut2_to_dut1_ip6o4}
+| | ... | ${dut2_to_tg_ip6o4} | ${tg_prefix6o4} | ${dut_prefix6o4}
+| | And Configure LISP topology in 3-node circular topology
+| | ... | ${dut1} | ${dut1_if2} | ${NONE}
+| | ... | ${dut2} | ${dut2_if1} | ${NONE}
+| | ... | ${duts_locator_set} | ${dut1_ip6o4_eid} | ${dut2_ip6o4_eid}
+| | ... | ${dut1_ip6o4_static_adjacency} | ${dut2_ip6o4_static_adjacency}
+| | Then Traffic should pass with no loss | ${perf_trial_duration} | ${rate}
+| | ... | ${framesize} | ${traffic_profile}
n>tunnels, t, CLIB_CACHE_LINE_BYTES); memset (t, 0, sizeof (*t)); if (vec_len (igm->free_ipsec_gre_tunnel_hw_if_indices) > 0) { vnet_interface_main_t *im = &vnm->interface_main; hw_if_index = igm->free_ipsec_gre_tunnel_hw_if_indices [vec_len (igm->free_ipsec_gre_tunnel_hw_if_indices) - 1]; _vec_len (igm->free_ipsec_gre_tunnel_hw_if_indices) -= 1; hi = vnet_get_hw_interface (vnm, hw_if_index); hi->dev_instance = t - igm->tunnels; hi->hw_instance = hi->dev_instance; /* clear old stats of freed tunnel before reuse */ sw_if_index = hi->sw_if_index; vnet_interface_counter_lock (im); vlib_zero_combined_counter (&im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_TX], sw_if_index); vlib_zero_combined_counter (&im->combined_sw_if_counters[VNET_INTERFACE_COUNTER_RX], sw_if_index); vlib_zero_simple_counter (&im->sw_if_counters[VNET_INTERFACE_COUNTER_DROP], sw_if_index); vnet_interface_counter_unlock (im); } else { hw_if_index = vnet_register_interface (vnm, ipsec_gre_device_class.index, t - igm->tunnels, ipsec_gre_hw_interface_class.index, t - igm->tunnels); hi = vnet_get_hw_interface (vnm, hw_if_index); sw_if_index = hi->sw_if_index; } t->hw_if_index = hw_if_index; t->sw_if_index = sw_if_index; t->local_sa_id = a->lsa; t->remote_sa_id = a->rsa; t->local_sa = ipsec_get_sa_index_by_sa_id (a->lsa); t->remote_sa = ipsec_get_sa_index_by_sa_id (a->rsa); ip4_sw_interface_enable_disable (sw_if_index, 1); vec_validate_init_empty (igm->tunnel_index_by_sw_if_index, sw_if_index, ~0); igm->tunnel_index_by_sw_if_index[sw_if_index] = t - igm->tunnels; vec_validate (im->fib_index_by_sw_if_index, sw_if_index); hi->min_packet_bytes = 64 + sizeof (gre_header_t) + sizeof (ip4_header_t) + sizeof (esp_header_t) + sizeof (esp_footer_t); hi->per_packet_overhead_bytes = /* preamble */ 8 + /* inter frame gap */ 12; /* Standard default gre MTU. */ hi->max_l3_packet_bytes[VLIB_RX] = hi->max_l3_packet_bytes[VLIB_TX] = 9000; clib_memcpy (&t->tunnel_src, &a->src, sizeof (t->tunnel_src)); clib_memcpy (&t->tunnel_dst, &a->dst, sizeof (t->tunnel_dst)); hash_set (igm->tunnel_by_key, key, t - igm->tunnels); slot = vlib_node_add_named_next_with_slot (vnm->vlib_main, hi->tx_node_index, ESP_NODE, IPSEC_GRE_OUTPUT_NEXT_ESP_ENCRYPT); ASSERT (slot == IPSEC_GRE_OUTPUT_NEXT_ESP_ENCRYPT); } else { /* !is_add => delete */ /* tunnel needs to exist */ if (!p) return VNET_API_ERROR_NO_SUCH_ENTRY; t = pool_elt_at_index (igm->tunnels, p[0]); sw_if_index = t->sw_if_index; ip4_sw_interface_enable_disable (sw_if_index, 0); vnet_sw_interface_set_flags (vnm, sw_if_index, 0 /* down */ ); /* make sure tunnel is removed from l2 bd or xconnect */ set_int_l2_mode (igm->vlib_main, vnm, MODE_L3, sw_if_index, 0, 0, 0, 0); vec_add1 (igm->free_ipsec_gre_tunnel_hw_if_indices, t->hw_if_index); igm->tunnel_index_by_sw_if_index[sw_if_index] = ~0; hash_unset (igm->tunnel_by_key, key); pool_put (igm->tunnels, t); } if (sw_if_indexp) *sw_if_indexp = sw_if_index; return ipsec_add_del_ipsec_gre_tunnel (vnm, &args); } static clib_error_t * create_ipsec_gre_tunnel_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { unformat_input_t _line_input, *line_input = &_line_input; u8 is_add = 1; u32 num_m_args = 0; ip4_address_t src, dst; u32 lsa = 0, rsa = 0; vnet_ipsec_gre_add_del_tunnel_args_t _a, *a = &_a; int rv; u32 sw_if_index; /* Get a line of input. */ if (!unformat_user (input, unformat_line_input, line_input)) return 0; while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { if (unformat (line_input, "del")) is_add = 0; else if (unformat (line_input, "src %U", unformat_ip4_address, &src)) num_m_args++; else if (unformat (line_input, "dst %U", unformat_ip4_address, &dst)) num_m_args++; else if (unformat (line_input, "local-sa %d", &lsa)) num_m_args++; else if (unformat (line_input, "remote-sa %d", &rsa)) num_m_args++; else return clib_error_return (0, "unknown input `%U'", format_unformat_error, input); } unformat_free (line_input); if (num_m_args < 4) return clib_error_return (0, "mandatory argument(s) missing"); if (memcmp (&src, &dst, sizeof (src)) == 0) return clib_error_return (0, "src and dst are identical"); memset (a, 0, sizeof (*a)); a->is_add = is_add; a->lsa = lsa; a->rsa = rsa; clib_memcpy (&a->src, &src, sizeof (src)); clib_memcpy (&a->dst, &dst, sizeof (dst)); rv = vnet_ipsec_gre_add_del_tunnel (a, &sw_if_index); switch (rv) { case 0: vlib_cli_output (vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main (), sw_if_index); break; case VNET_API_ERROR_INVALID_VALUE: return clib_error_return (0, "GRE tunnel already exists..."); default: return clib_error_return (0, "vnet_ipsec_gre_add_del_tunnel returned %d", rv); } return 0; } /* *INDENT-OFF* */ VLIB_CLI_COMMAND (create_ipsec_gre_tunnel_command, static) = { .path = "create ipsec gre tunnel", .short_help = "create ipsec gre tunnel src <addr> dst <addr> " "local-sa <id> remote-sa <id> [del]", .function = create_ipsec_gre_tunnel_command_fn, }; /* *INDENT-ON* */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */