summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorElias Rudberg <elias.rudberg@bahnhof.net>2020-05-07 14:29:21 +0200
committerElias Rudberg <elias.rudberg@bahnhof.net>2020-05-07 14:29:21 +0200
commit92e1b83a39458f98ff649883334b153f03af603b (patch)
treefe7a6accac254a3151081b5fccc27c7933d9e273 /src
parenta1e03d4da71a2452c1e5da399d96c51f1b487cad (diff)
lacp: fix regarding vm arg for vlib_time_now calls
Use thread-specific vlib_main_t *vm pointers to avoid problems with different threads accessing the same vlib_main_t data structure. This avoids assertion failure when vlib_time_now() is called with a vm corresponding to a different thread. Type: fix Signed-off-by: Elias Rudberg <elias.rudberg@bahnhof.net> Change-Id: I359596ecff86e03d57aa8d2330f77bf9a913485f
Diffstat (limited to 'src')
-rw-r--r--src/plugins/lacp/input.c15
-rw-r--r--src/plugins/lacp/lacp.c14
-rw-r--r--src/plugins/lacp/mux_machine.c13
-rw-r--r--src/plugins/lacp/ptx_machine.c11
-rw-r--r--src/plugins/lacp/rx_machine.c11
-rw-r--r--src/plugins/lacp/tx_machine.c5
6 files changed, 26 insertions, 43 deletions
diff --git a/src/plugins/lacp/input.c b/src/plugins/lacp/input.c
index ccefc20e7b2..a75c3b2aa4c 100644
--- a/src/plugins/lacp/input.c
+++ b/src/plugins/lacp/input.c
@@ -62,7 +62,7 @@ marker_fill_request_pdu (marker_pdu_t * marker, slave_if_t * sif)
}
static void
-send_ethernet_marker_response_pdu (slave_if_t * sif)
+send_ethernet_marker_response_pdu (vlib_main_t * vm, slave_if_t * sif)
{
lacp_main_t *lm = &lacp_main;
u32 *to_next;
@@ -71,7 +71,6 @@ send_ethernet_marker_response_pdu (slave_if_t * sif)
u32 bi0;
vlib_buffer_t *b0;
vlib_frame_t *f;
- vlib_main_t *vm = lm->vlib_main;
vnet_main_t *vnm = lm->vnet_main;
/*
@@ -109,7 +108,7 @@ send_ethernet_marker_response_pdu (slave_if_t * sif)
f->n_vectors = 1;
vlib_put_frame_to_node (vm, hw->output_node_index, f);
- sif->last_marker_pdu_sent_time = vlib_time_now (lm->vlib_main);
+ sif->last_marker_pdu_sent_time = vlib_time_now (vm);
sif->marker_pdu_sent++;
}
@@ -126,7 +125,7 @@ handle_marker_protocol (vlib_main_t * vm, slave_if_t * sif)
(marker->terminator.tlv_length != 0))
return (LACP_ERROR_BAD_TLV);
- send_ethernet_marker_response_pdu (sif);
+ send_ethernet_marker_response_pdu (vm, sif);
return LACP_ERROR_NONE;
}
@@ -138,7 +137,6 @@ lacp_error_t
lacp_input (vlib_main_t * vm, vlib_buffer_t * b0, u32 bi0)
{
bond_main_t *bm = &bond_main;
- lacp_main_t *lm = &lacp_main;
slave_if_t *sif;
uword nbytes;
lacp_error_t e;
@@ -157,7 +155,7 @@ lacp_input (vlib_main_t * vm, vlib_buffer_t * b0, u32 bi0)
marker = (marker_pdu_t *) (b0->data + b0->current_data);
if (marker->subtype == MARKER_SUBTYPE)
{
- sif->last_marker_pdu_recd_time = vlib_time_now (lm->vlib_main);
+ sif->last_marker_pdu_recd_time = vlib_time_now (vm);
if (sif->last_marker_pkt)
_vec_len (sif->last_marker_pkt) = 0;
vec_validate (sif->last_marker_pkt,
@@ -195,7 +193,7 @@ lacp_input (vlib_main_t * vm, vlib_buffer_t * b0, u32 bi0)
nbytes = vlib_buffer_contents (vm, bi0, sif->last_rx_pkt);
ASSERT (nbytes <= vec_len (sif->last_rx_pkt));
- sif->last_lacpdu_recd_time = vlib_time_now (lm->vlib_main);
+ sif->last_lacpdu_recd_time = vlib_time_now (vm);
if (nbytes < sizeof (lacp_pdu_t))
{
sif->bad_pdu_received++;
@@ -209,8 +207,7 @@ lacp_input (vlib_main_t * vm, vlib_buffer_t * b0, u32 bi0)
(sif->last_packet_signature == last_packet_signature) &&
((sif->actor.state & LACP_STEADY_STATE) == LACP_STEADY_STATE))
{
- lacp_start_current_while_timer (lm->vlib_main, sif,
- sif->ttl_in_seconds);
+ lacp_start_current_while_timer (vm, sif, sif->ttl_in_seconds);
e = LACP_ERROR_CACHE_HIT;
}
else
diff --git a/src/plugins/lacp/lacp.c b/src/plugins/lacp/lacp.c
index e789de52911..01d8e7b25e0 100644
--- a/src/plugins/lacp/lacp.c
+++ b/src/plugins/lacp/lacp.c
@@ -42,7 +42,7 @@ lacp_fill_pdu (lacp_pdu_t * lacpdu, slave_if_t * sif)
* send a lacp pkt on an ethernet interface
*/
static void
-lacp_send_ethernet_lacp_pdu (slave_if_t * sif)
+lacp_send_ethernet_lacp_pdu (vlib_main_t * vm, slave_if_t * sif)
{
lacp_main_t *lm = &lacp_main;
u32 *to_next;
@@ -51,7 +51,6 @@ lacp_send_ethernet_lacp_pdu (slave_if_t * sif)
u32 bi0;
vlib_buffer_t *b0;
vlib_frame_t *f;
- vlib_main_t *vm = lm->vlib_main;
vnet_main_t *vnm = lm->vnet_main;
/*
@@ -90,7 +89,7 @@ lacp_send_ethernet_lacp_pdu (slave_if_t * sif)
vlib_put_frame_to_node (vm, hw->output_node_index, f);
- sif->last_lacpdu_sent_time = vlib_time_now (lm->vlib_main);
+ sif->last_lacpdu_sent_time = vlib_time_now (vm);
sif->pdu_sent++;
}
@@ -127,7 +126,7 @@ lacp_send_lacp_pdu (vlib_main_t * vm, slave_if_t * sif)
switch (sif->packet_template_index)
{
case LACP_PACKET_TEMPLATE_ETHERNET:
- lacp_send_ethernet_lacp_pdu (sif);
+ lacp_send_ethernet_lacp_pdu (vm, sif);
break;
default:
@@ -139,7 +138,6 @@ void
lacp_periodic (vlib_main_t * vm)
{
bond_main_t *bm = &bond_main;
- lacp_main_t *lm = &lacp_main;
slave_if_t *sif;
bond_if_t *bif;
u8 actor_state, partner_state;
@@ -153,20 +151,20 @@ lacp_periodic (vlib_main_t * vm)
actor_state = sif->actor.state;
partner_state = sif->partner.state;
if (lacp_timer_is_running (sif->current_while_timer) &&
- lacp_timer_is_expired (lm->vlib_main, sif->current_while_timer))
+ lacp_timer_is_expired (vm, sif->current_while_timer))
{
lacp_machine_dispatch (&lacp_rx_machine, vm, sif,
LACP_RX_EVENT_TIMER_EXPIRED, &sif->rx_state);
}
if (lacp_timer_is_running (sif->periodic_timer) &&
- lacp_timer_is_expired (lm->vlib_main, sif->periodic_timer))
+ lacp_timer_is_expired (vm, sif->periodic_timer))
{
lacp_machine_dispatch (&lacp_ptx_machine, vm, sif,
LACP_PTX_EVENT_TIMER_EXPIRED, &sif->ptx_state);
}
if (lacp_timer_is_running (sif->wait_while_timer) &&
- lacp_timer_is_expired (lm->vlib_main, sif->wait_while_timer))
+ lacp_timer_is_expired (vm, sif->wait_while_timer))
{
sif->ready_n = 1;
lacp_stop_timer (&sif->wait_while_timer);
diff --git a/src/plugins/lacp/mux_machine.c b/src/plugins/lacp/mux_machine.c
index bbe452da454..6a5549077a2 100644
--- a/src/plugins/lacp/mux_machine.c
+++ b/src/plugins/lacp/mux_machine.c
@@ -98,14 +98,13 @@ lacp_mux_action_detached (void *p1, void *p2)
{
vlib_main_t *vm = p1;
slave_if_t *sif = p2;
- lacp_main_t *lm = &lacp_main;
lacp_detach_mux_from_aggregator (vm, sif);
sif->actor.state &= ~LACP_STATE_COLLECTING;
bond_disable_collecting_distributing (vm, sif);
sif->actor.state &= ~LACP_STATE_DISTRIBUTING;
sif->ntt = 1;
- lacp_start_periodic_timer (lm->vlib_main, sif, 0);
+ lacp_start_periodic_timer (vm, sif, 0);
if (sif->selected == LACP_PORT_SELECTED)
lacp_machine_dispatch (&lacp_mux_machine, vm, sif,
@@ -123,14 +122,13 @@ lacp_mux_action_attached (void *p1, void *p2)
{
vlib_main_t *vm = p1;
slave_if_t *sif = p2;
- lacp_main_t *lm = &lacp_main;
lacp_attach_mux_to_aggregator (vm, sif);
sif->actor.state &= ~LACP_STATE_COLLECTING;
bond_disable_collecting_distributing (vm, sif);
sif->actor.state &= ~LACP_STATE_DISTRIBUTING;
sif->ntt = 1;
- lacp_start_periodic_timer (lm->vlib_main, sif, 0);
+ lacp_start_periodic_timer (vm, sif, 0);
if ((sif->selected == LACP_PORT_UNSELECTED) ||
(sif->selected == LACP_PORT_STANDBY))
@@ -149,11 +147,9 @@ lacp_mux_action_waiting (void *p1, void *p2)
{
vlib_main_t *vm = p1;
slave_if_t *sif = p2;
- lacp_main_t *lm = &lacp_main;
if (!lacp_timer_is_running (sif->wait_while_timer))
- lacp_start_wait_while_timer (lm->vlib_main, sif,
- LACP_AGGREGATE_WAIT_TIME);
+ lacp_start_wait_while_timer (vm, sif, LACP_AGGREGATE_WAIT_TIME);
if ((sif->selected == LACP_PORT_SELECTED) && sif->ready)
lacp_machine_dispatch (&lacp_mux_machine, vm, sif,
@@ -171,13 +167,12 @@ lacp_mux_action_collecting_distributing (void *p1, void *p2)
{
vlib_main_t *vm = p1;
slave_if_t *sif = p2;
- lacp_main_t *lm = &lacp_main;
sif->actor.state |= LACP_STATE_SYNCHRONIZATION | LACP_STATE_COLLECTING |
LACP_STATE_DISTRIBUTING;
bond_enable_collecting_distributing (vm, sif);
sif->ntt = 1;
- lacp_start_periodic_timer (lm->vlib_main, sif, 0);
+ lacp_start_periodic_timer (vm, sif, 0);
if ((sif->selected == LACP_PORT_UNSELECTED) ||
(sif->selected == LACP_PORT_STANDBY) ||
!(sif->partner.state & LACP_STATE_SYNCHRONIZATION))
diff --git a/src/plugins/lacp/ptx_machine.c b/src/plugins/lacp/ptx_machine.c
index bd4150fe39f..941fc58cbc4 100644
--- a/src/plugins/lacp/ptx_machine.c
+++ b/src/plugins/lacp/ptx_machine.c
@@ -88,7 +88,6 @@ lacp_ptx_action_slow_periodic (void *p1, void *p2)
vlib_main_t *vm = p1;
slave_if_t *sif = p2;
u8 timer_expired;
- lacp_main_t *lm = &lacp_main;
if (!(sif->partner.state & LACP_STATE_LACP_ACTIVITY) &&
!(sif->actor.state & LACP_STATE_LACP_ACTIVITY))
@@ -97,12 +96,12 @@ lacp_ptx_action_slow_periodic (void *p1, void *p2)
else
{
if (lacp_timer_is_running (sif->periodic_timer) &&
- lacp_timer_is_expired (lm->vlib_main, sif->periodic_timer))
+ lacp_timer_is_expired (vm, sif->periodic_timer))
timer_expired = 1;
else
timer_expired = 0;
- lacp_schedule_periodic_timer (lm->vlib_main, sif);
+ lacp_schedule_periodic_timer (vm, sif);
if (timer_expired || (sif->partner.state & LACP_STATE_LACP_TIMEOUT))
lacp_machine_dispatch (&lacp_ptx_machine, vm, sif,
@@ -118,7 +117,6 @@ lacp_ptx_action_fast_periodic (void *p1, void *p2)
vlib_main_t *vm = p1;
slave_if_t *sif = p2;
u8 timer_expired;
- lacp_main_t *lm = &lacp_main;
if (!(sif->partner.state & LACP_STATE_LACP_ACTIVITY) &&
!(sif->actor.state & LACP_STATE_LACP_ACTIVITY))
@@ -127,13 +125,12 @@ lacp_ptx_action_fast_periodic (void *p1, void *p2)
else
{
if (lacp_timer_is_running (sif->periodic_timer) &&
- lacp_timer_is_expired (lm->vlib_main, sif->periodic_timer))
+ lacp_timer_is_expired (vm, sif->periodic_timer))
timer_expired = 1;
else
timer_expired = 0;
- lacp_start_periodic_timer (lm->vlib_main, sif,
- LACP_FAST_PERIODIC_TIMER);
+ lacp_start_periodic_timer (vm, sif, LACP_FAST_PERIODIC_TIMER);
if (timer_expired)
lacp_machine_dispatch (&lacp_ptx_machine, vm, sif,
diff --git a/src/plugins/lacp/rx_machine.c b/src/plugins/lacp/rx_machine.c
index 0d9d703ff42..605cccba08c 100644
--- a/src/plugins/lacp/rx_machine.c
+++ b/src/plugins/lacp/rx_machine.c
@@ -174,7 +174,6 @@ lacp_update_ntt (vlib_main_t * vm, slave_if_t * sif)
lacp_pdu_t *lacpdu = (lacp_pdu_t *) sif->last_rx_pkt;
u8 states = LACP_STATE_LACP_ACTIVITY | LACP_STATE_LACP_TIMEOUT |
LACP_STATE_SYNCHRONIZATION | LACP_STATE_AGGREGATION;
- lacp_main_t *lm = &lacp_main;
if ((states & lacpdu->partner.port_info.state) !=
(states & sif->actor.state)
@@ -182,7 +181,7 @@ lacp_update_ntt (vlib_main_t * vm, slave_if_t * sif)
sizeof (sif->actor) - sizeof (sif->actor.state)))
{
sif->ntt = 1;
- lacp_start_periodic_timer (lm->vlib_main, sif, 0);
+ lacp_start_periodic_timer (vm, sif, 0);
}
}
@@ -285,17 +284,16 @@ lacp_rx_action_expired (void *p1, void *p2)
vlib_main_t *vm = p1;
slave_if_t *sif = p2;
u8 timer_expired;
- lacp_main_t *lm = &lacp_main;
sif->partner.state &= ~LACP_STATE_SYNCHRONIZATION;
sif->partner.state |= LACP_STATE_LACP_TIMEOUT;
lacp_ptx_post_short_timeout_event (vm, sif);
if (lacp_timer_is_running (sif->current_while_timer) &&
- lacp_timer_is_expired (lm->vlib_main, sif->current_while_timer))
+ lacp_timer_is_expired (vm, sif->current_while_timer))
timer_expired = 1;
else
timer_expired = 0;
- lacp_start_current_while_timer (lm->vlib_main, sif, sif->ttl_in_seconds);
+ lacp_start_current_while_timer (vm, sif, sif->ttl_in_seconds);
sif->actor.state |= LACP_STATE_EXPIRED;
if (timer_expired)
lacp_machine_dispatch (&lacp_rx_machine, vm, sif,
@@ -365,12 +363,11 @@ lacp_rx_action_current (void *p1, void *p2)
{
vlib_main_t *vm = p1;
slave_if_t *sif = p2;
- lacp_main_t *lm = &lacp_main;
lacp_update_selected (vm, sif);
lacp_update_ntt (vm, sif);
lacp_record_pdu (vm, sif);
- lacp_start_current_while_timer (lm->vlib_main, sif, sif->ttl_in_seconds);
+ lacp_start_current_while_timer (vm, sif, sif->ttl_in_seconds);
sif->actor.state &= ~LACP_STATE_EXPIRED;
if (lacp_port_is_moved (vm, sif))
lacp_set_port_moved (vm, sif, 1);
diff --git a/src/plugins/lacp/tx_machine.c b/src/plugins/lacp/tx_machine.c
index 73ca4862fe8..3377da86422 100644
--- a/src/plugins/lacp/tx_machine.c
+++ b/src/plugins/lacp/tx_machine.c
@@ -40,8 +40,7 @@ lacp_tx_action_transmit (void *p1, void *p2)
{
vlib_main_t *vm = p1;
slave_if_t *sif = p2;
- lacp_main_t *lm = &lacp_main;
- f64 now = vlib_time_now (lm->vlib_main);
+ f64 now = vlib_time_now (vm);
if (!lacp_timer_is_running (sif->periodic_timer))
return 0;
@@ -53,7 +52,7 @@ lacp_tx_action_transmit (void *p1, void *p2)
if (sif->ntt)
{
lacp_send_lacp_pdu (vm, sif);
- lacp_schedule_periodic_timer (lm->vlib_main, sif);
+ lacp_schedule_periodic_timer (vm, sif);
}
sif->ntt = 0;
ce */ .highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */ .highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ } @media (prefers-color-scheme: light) { .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
# 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/performance.robot
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | PERFTEST_LONG
| ...        | FIB_2M | NIC_Intel-X520-DA2 | PERFTEST_SCALE
| Suite Setup | 3-node Performance Suite Setup with DUT's NIC model
| ... | L3 | Intel-X520-DA2
| Suite Teardown | 3-node Performance Suite Teardown
| Test Setup | Setup all DUTs before test
| Test Teardown | Run Keywords
| ...           | Run Keyword If Test Failed
| ...           | Traffic should pass with no loss | 10
| ...           | ${min_rate}pps | ${framesize} | 3-node-IPv4-dst-${rts_per_flow}
| ...           | fail_on_loss=${False}
| ...           | AND | Remove startup configuration of VPP from all DUTs
| Documentation | *RFC2544: Pkt throughput IPv4 routing test cases*
| ...
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for IPv4 routing.
| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with IPv4
| ... | routing and 2x1M static IPv4 /32 route entries. DUT1 and DUT2 tested
| ... | with 2p10GE NIC X520 Niantic by Intel.
| ... | *[Ver] TG verification:* TG finds and reports throughput NDR (Non Drop
| ... | Rate) with zero packet loss tolerance or throughput PDR (Partial Drop
| ... | Rate) with non-zero packet loss tolerance (LT) expressed in percentage
| ... | of packets transmitted. NDR and PDR are discovered for different
| ... | Ethernet L2 frame sizes using either binary search or linear search
| ... | algorithms with configured starting rate and final step that determines
| ... | throughput measurement resolution. Test packets are generated by TG on
| ... | links to DUTs. TG traffic profile contains two L3 flow-groups
| ... | (flow-group per direction, 1M flows per flow-group) with all packets
| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
| ... | static payload. MAC addresses are matching MAC addresses of the TG
| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
| ... | is applied to both streams.
| ... | *[Ref] Applicable standard specifications:* RFC2544.

*** Variables ***
#X520-DA2 bandwidth limit
| ${s_limit} | ${10000000000}
| ${rts_per_flow}= | ${1000000}

*** Test Cases ***
| TC01: 64B NDR binary search - DUT IPv4 Fib 2x1M - 1thread 1core 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 1 thread, 1 phy core, \
| | ... | 1 receive queue per NIC port. [Ver] Find NDR for 64 Byte frames
| | ... | using binary search start at 10GE linerate, step 100kpps.
| | [Tags] | 1_THREAD_NOHTT_RXQUEUES_1 | SINGLE_THREAD | NDR
| | ${framesize}= | Set Variable | ${64}
| | ${min_rate}= | Set Variable | ${100000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '1' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find NDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}

| TC02: 64B PDR binary search - DUT IPv4 Fib 2x1M - 1thread 1core 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 1 thread, 1 phy core, \
| | ... | 1 receive queue per NIC port. [Ver] Find PDR for 64 Byte frames
| | ... | using binary search start at 10GE linerate, step 100kpps, LT=0.5%.
| | [Tags] | 1_THREAD_NOHTT_RXQUEUES_1 | SINGLE_THREAD | PDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${64}
| | ${min_rate}= | Set Variable | ${100000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '1' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find PDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}
| | ...                                       | ${glob_loss_acceptance}
| | ...                                       | ${glob_loss_acceptance_type}

| TC03: 1518B NDR binary search - DUT IPv4 Fib 2x1M - 1thread 1core 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 1 thread, 1 phy core, \
| | ... | 1 receive queue per NIC port. [Ver] Find NDR for 1518 Byte frames
| | ... | using binary search start at 10GE linerate, step 10kpps.
| | [Tags] | 1_THREAD_NOHTT_RXQUEUES_1 | SINGLE_THREAD | NDR
| | ${framesize}= | Set Variable | ${1518}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '1' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find NDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}

| TC04: 1518B PDR binary search - DUT IPv4 Fib 2x1M - 1thread 1core 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 1 thread, 1 phy core, \
| | ... | 1 receive queue per NIC port. [Ver] Find PDR for 1518 Byte frames
| | ... | using binary search start at 10GE linerate, step 10kpps, LT=0.5%.
| | [Tags] | 1_THREAD_NOHTT_RXQUEUES_1 | SINGLE_THREAD | PDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${1518}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '1' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find PDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}
| | ...                                       | ${glob_loss_acceptance}
| | ...                                       | ${glob_loss_acceptance_type}

| TC05: 9000B NDR binary search - DUT IPv4 Fib 2x1M - 1thread 1core 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 1 thread, 1 phy core, \
| | ... | 1 receive queue per NIC port. [Ver] Find NDR for 9000 Byte frames
| | ... | using binary search start at 10GE linerate, step 5kpps.
| | [Tags] | 1_THREAD_NOHTT_RXQUEUES_1 | SINGLE_THREAD | NDR
| | ${framesize}= | Set Variable | ${9000}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '1' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find NDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}

| TC06: 9000B PDR binary search - DUT IPv4 Fib 2x1M - 1thread 1core 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 1 thread, 1 phy core, \
| | ... | 1 receive queue per NIC port. [Ver] Find PDR for 9000 Byte frames
| | ... | using binary search start at 10GE linerate, step 5kpps, LT=0.5%.
| | [Tags] | 1_THREAD_NOHTT_RXQUEUES_1 | SINGLE_THREAD | PDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${9000}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '1' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find PDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}
| | ...                                       | ${glob_loss_acceptance}
| | ...                                       | ${glob_loss_acceptance_type}

| TC07: 64B NDR binary search - DUT IPv4 Fib 2x1M - 2threads 2cores 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 2 threads, 2 phy cores, \
| | ... | 1 receive queue per NIC port. [Ver] Find NDR for 64 Byte frames
| | ... | using binary search start at 10GE linerate, step 100kpps.
| | [Tags] | 2_THREAD_NOHTT_RXQUEUES_1 | MULTI_THREAD | NDR
| | ${framesize}= | Set Variable | ${64}
| | ${min_rate}= | Set Variable | ${100000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '2' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find NDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}

| TC08: 64B PDR binary search - DUT IPv4 Fib 2x1M - 2threads 2cores 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 2 threads, 2 phy cores, \
| | ... | 1 receive queue per NIC port. [Ver] Find PDR for 64 Byte frames
| | ... | using binary search start at 10GE linerate, step 100kpps, LT=0.5%.
| | [Tags] | 2_THREAD_NOHTT_RXQUEUES_1 | MULTI_THREAD | PDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${64}
| | ${min_rate}= | Set Variable | ${100000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '2' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find PDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}
| | ...                                       | ${glob_loss_acceptance}
| | ...                                       | ${glob_loss_acceptance_type}

| TC09: 1518B NDR binary search - DUT IPv4 Fib 2x1M - 2threads 2cores 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 2 threads, 2 phy cores, \
| | ... | 1 receive queue per NIC port. [Ver] Find NDR for 1518 Byte frames
| | ... | using binary search start at 10GE linerate, step 10kpps.
| | [Tags] | 2_THREAD_NOHTT_RXQUEUES_1 | MULTI_THREAD | NDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${1518}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '2' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find NDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}

| TC10: 1518B PDR binary search - DUT IPv4 Fib 2x1M - 2threads 2cores 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 2 threads, 2 phy cores, \
| | ... | 1 receive queue per NIC port. [Ver] Find PDR for 1518 Byte frames
| | ... | using binary search start at 10GE linerate, step 10kpps, LT=0.5%.
| | [Tags] | 2_THREAD_NOHTT_RXQUEUES_1 | MULTI_THREAD | PDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${1518}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '2' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find PDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}
| | ...                                       | ${glob_loss_acceptance}
| | ...                                       | ${glob_loss_acceptance_type}

| TC11: 9000B NDR binary search - DUT IPv4 Fib 2x1M - 2threads 2cores 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 2 threads, 2 phy cores, \
| | ... | 1 receive queue per NIC port. [Ver] Find NDR for 9000 Byte frames
| | ... | using binary search start at 10GE linerate, step 5kpps.
| | [Tags] | 2_THREAD_NOHTT_RXQUEUES_1 | MULTI_THREAD | NDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${9000}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '2' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find NDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}

| TC12: 9000B PDR binary search - DUT IPv4 Fib 2x1M - 2threads 2cores 1rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 2 threads, 2 phy cores, \
| | ... | 1 receive queue per NIC port. [Ver] Find PDR for 9000 Byte frames
| | ... | using binary search start at 10GE linerate, step 5kpps, LT=0.5%.
| | [Tags] | 2_THREAD_NOHTT_RXQUEUES_1 | MULTI_THREAD | PDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${9000}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '2' worker threads and rxqueues '1' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find PDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}
| | ...                                       | ${glob_loss_acceptance}
| | ...                                       | ${glob_loss_acceptance_type}

| TC13: 64B NDR binary search - DUT IPv4 Fib 2x1M - 4threads 4cores 2rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 4 threads, 4 phy cores, \
| | ... | 2 receive queues per NIC port. [Ver] Find NDR for 64 Byte frames
| | ... | using binary search start at 10GE linerate, step 100kpps.
| | [Tags] | 4_THREAD_NOHTT_RXQUEUES_2 | MULTI_THREAD | NDR
| | ${framesize}= | Set Variable | ${64}
| | ${min_rate}= | Set Variable | ${100000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '4' worker threads and rxqueues '2' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find NDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}

| TC14: 64B PDR binary search - DUT IPv4 Fib 2x1M - 4threads 4cores 2rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 4 threads, 4 phy cores, \
| | ... | 2 receive queues per NIC port. [Ver] Find PDR for 64 Byte frames
| | ... | using binary search start at 10GE linerate, step 100kpps, LT=0.5%.
| | [Tags] | 4_THREAD_NOHTT_RXQUEUES_2 | MULTI_THREAD | PDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${64}
| | ${min_rate}= | Set Variable | ${100000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '4' worker threads and rxqueues '2' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find PDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}
| | ...                                       | ${glob_loss_acceptance}
| | ...                                       | ${glob_loss_acceptance_type}

| TC15: 1518B NDR binary search - DUT IPv4 Fib 2x1M - 4threads 4cores 2rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 4 threads, 4 phy cores, \
| | ... | 2 receive queues per NIC port. [Ver] Find NDR for 1518 Byte frames
| | ... | using binary search start at 10GE linerate, step 10kpps.
| | [Tags] | 4_THREAD_NOHTT_RXQUEUES_2 | MULTI_THREAD | NDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${1518}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '4' worker threads and rxqueues '2' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find NDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}

| TC16: 1518B PDR binary search - DUT IPv4 Fib 2x1M - 4threads 4cores 2rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 4 threads, 4 phy cores, \
| | ... | 2 receive queues per NIC port. [Ver] Find PDR for 1518 Byte frames
| | ... | using binary search start at 10GE linerate, step 10kpps, LT=0.5%.
| | [Tags] | 4_THREAD_NOHTT_RXQUEUES_2 | MULTI_THREAD | PDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${1518}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '4' worker threads and rxqueues '2' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add No Multi Seg to all DUTs
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find PDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}
| | ...                                       | ${glob_loss_acceptance}
| | ...                                       | ${glob_loss_acceptance_type}

| TC17: 9000B NDR binary search - DUT IPv4 Fib 2x1M - 4threads 4cores 2rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 4 threads, 4 phy cores, \
| | ... | 2 receive queues per NIC port. [Ver] Find NDR for 9000 Byte frames
| | ... | using binary search start at 10GE linerate, step 5kpps.
| | [Tags] | 4_THREAD_NOHTT_RXQUEUES_2 | MULTI_THREAD | NDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${9000}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '4' worker threads and rxqueues '2' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find NDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}

| TC18: 9000B PDR binary search - DUT IPv4 Fib 2x1M - 4threads 4cores 2rxq
| | [Documentation]
| | ... | [Cfg] DUT runs IPv4 routing config with 4 threads, 4 phy cores, \
| | ... | 2 receive queues per NIC port. [Ver] Find PDR for 9000 Byte frames
| | ... | using binary search start at 10GE linerate, step 5kpps, LT=0.5%.
| | [Tags] | 4_THREAD_NOHTT_RXQUEUES_2 | MULTI_THREAD | PDR | SKIP_PATCH
| | ${framesize}= | Set Variable | ${9000}
| | ${min_rate}= | Set Variable | ${10000}
| | ${max_rate}= | Calculate pps | ${s_limit} | ${framesize}
| | ${binary_min}= | Set Variable | ${min_rate}
| | ${binary_max}= | Set Variable | ${max_rate}
| | ${threshold}= | Set Variable | ${min_rate}
| | Given Add '4' worker threads and rxqueues '2' in 3-node single-link topo
| | And   Add PCI devices to DUTs from 3-node single link topology
| | And   Add Heapsize Config to all DUTs | 3G
| | And   Apply startup configuration on all VPP DUTs
| | And   Scale IPv4 forwarding initialized in a 3-node circular topology
| | ...   | ${rts_per_flow}
| | Then Find PDR using binary search and pps | ${framesize} | ${binary_min}
| | ...                                       | ${binary_max}
| | ...                                       | 3-node-IPv4-dst-${rts_per_flow}
| | ...                                       | ${min_rate} | ${max_rate}
| | ...                                       | ${threshold}
| | ...                                       | ${glob_loss_acceptance}
| | ...                                       | ${glob_loss_acceptance_type}