X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Frobot%2Fip%2Fnat.robot;h=202ade34a5bfa21a71504b4cf5f76d8866598d7f;hp=bb44fa1a1866bf4cc9f5b5c3beee7bee92df1937;hb=b26fe6de7965f6621b54a80a938f82afe95aa585;hpb=d68951ac245150eeefa6e0f4156e4c1b5c9e9325 diff --git a/resources/libraries/robot/ip/nat.robot b/resources/libraries/robot/ip/nat.robot index bb44fa1a18..202ade34a5 100644 --- a/resources/libraries/robot/ip/nat.robot +++ b/resources/libraries/robot/ip/nat.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2021 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: @@ -33,11 +33,176 @@ | | [Arguments] | ${node} | ${int_in} | ${int_out} | | | | ${int_in_name}= | Set variable | ${node['interfaces']['${int_in}']['name']} -| | ${int_out_name}= | Set variable | ${node['interfaces']['${int_out}']['name']} +| | ${int_out_name}= | Set variable +| | ... | ${node['interfaces']['${int_out}']['name']} | | Set NAT44 Interfaces | ${node} | ${int_in_name} | ${int_out_name} +| Initialize NAT44 endpoint-dependent mode in circular topology +| | [Documentation] | Initialization of NAT44 endpoint-dependent mode on DUT1 +| | +| | ... | This keyword also sets a test variable \${resetter} +| | ... | to hold a callable which resets VPP state. +| | ... | Keywords performing search will call it to get consistent trials. +| | ... | Tests which do not wish to reset NAT state should use ramp-up, +| | ... | so the resetter is not set if \${ramp_up_duration} variable +| | ... | is (defined and) nonzero. +| | +| | ... | *Test variables read:* +| | ... | - n_sessions - Expected number of opened sessions. +| | +| | ${max_sessions}= | Compute Max Translations Per Thread +| | ... | ${n_sessions} | ${thr_count_int} +| | Enable NAT44 Plugin | ${dut1} | mode=${nat_mode} | sessions=${max_sessions} +| | Configure inside and outside interfaces +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0] +| | ${resetter} = | Set NAT44 Address Range +| | ... | ${dut1} | ${out_net} | ${out_net_end} +| | ${ramp_up_rate} = | Get Ramp Up Rate +| | Return From Keyword If | ${ramp_up_rate} +| | Set Test Variable | \${resetter} + +# TODO: Remove when 'ip4.Initialize IPv4 forwarding in circular topology' KW +# adapted to use IP values from variables +| Initialize IPv4 forwarding for NAT44 in circular topology +| | [Documentation] +| | ... | Set IPv4 forwarding for NAT44: +| | ... | - set interfaces up +| | ... | - set IP addresses +| | ... | - set ARP +| | ... | - create routes +| | +| | ${status} | ${value}= | Run Keyword And Ignore Error +| | ... | Variable Should Exist | ${dut2} +| | ${dut2_status}= | Set Variable If | '${status}' == 'PASS' | ${True} +| | ... | ${False} +| | +| | Set interfaces in path up +| | +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut1_if1_ip4} | ${dut1_if1_mask} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut1_if2_ip4} | ${dut1_if2_mask} +| | Run Keyword If | ${dut2_status} +| | ... | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut2_if1_ip4} | ${dut2_if1_mask} +| | Run Keyword If | ${dut2_status} +| | ... | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${dut2_if2_ip4} | ${dut2_if2_mask} +| | +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${tg_if1_ip4} | ${TG_pf1_mac}[0] +| | Run Keyword If | ${dut2_status} +| | ... | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_if1_ip4} +| | ... | ${DUT2_${int}1_mac}[0] +| | ... | ELSE | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${tg_if2_ip4} | ${TG_pf2_mac}[0] +| | Run Keyword If | ${dut2_status} +| | ... | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut1_if1_ip4} +| | ... | ${DUT1_${int}2_mac}[0] +| | Run Keyword If | ${dut2_status} +| | ... | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${tg_if2_ip4}| ${TG_pf2_mac}[0] +| | +| | Vpp Route Add +| | ... | ${dut1} | ${in_net} | ${in_mask} | gateway=${tg_if1_ip4} +| | ... | interface=${DUT1_${int}1}[0] +| | Run Keyword If | ${dut2_status} +| | ... | Vpp Route Add +| | ... | ${dut1} | ${dest_net} | ${dest_mask} | gateway=${dut2_if1_ip4} +| | ... | interface=${DUT1_${int}2}[0] +| | ... | ELSE | Vpp Route Add +| | ... | ${dut1} | ${dest_net} | ${dest_mask} | gateway=${tg_if2_ip4} +| | ... | interface=${DUT1_${int}2}[0] +| | Run Keyword If | ${dut2_status} +| | ... | Vpp Route Add +| | ... | ${dut2} | ${dest_net} | ${dest_mask} | gateway=${tg_if2_ip4} +| | ... | interface=${DUT2_${int}2}[0] +| | Run Keyword If | ${dut2_status} +| | ... | Vpp Route Add +| | ... | ${dut2} | ${out_net} | ${out_mask} | gateway=${dut1_if2_ip4} +| | ... | interface=${DUT2_${int}1}[0] + +| Verify NAT44 TCP sessions number on DUT1 node +| | [Documentation] | Verify that all required NAT44 TCP sessions are +| | ... | established on DUT1 node. +| | +| | Verify NAT44 sessions number | ${nodes['DUT1']} | ${n_sessions} | TCP + +| Verify NAT44 UDP sessions number on DUT1 node +| | [Documentation] | Verify that all required NAT44 UDP sessions are +| | ... | established on DUT1 node. +| | +| | Verify NAT44 sessions number | ${nodes['DUT1']} | ${n_sessions} | UDP + +| Verify NAT44 sessions number +| | [Documentation] | Verify that all required NAT44 sessions of required +| | ... | protocol are established. +| | +| | ... | *Arguments:* +| | ... | - node - DUT node. Type: dictionary +| | ... | - exp_n_sessions - Expected number of NAT44 sessions. Type: integer +| | ... | - proto - Required protocol. Type: string +| | +| | ... | *Example:* +| | +| | ... | \| Verify NAT44 sessions number \| ${nodes['DUT1']} \| ${64512} \ +| | ... | \| UDP \| +| | +| | [Arguments] | ${node} | ${exp_n_sessions} | ${proto} +| | +| | ${nat44_sessions}= | Get NAT44 Sessions Number | ${node} | ${proto} +| | Should Be Equal As Integers | ${nat44_sessions} | ${exp_n_sessions} +| | ... | Not all NAT44 ${proto} sessions have been established + +# DET44 - NAT44 deterministic +| Enable DET44 plugin on DUT +| | [Documentation] | Enable DET44 plugin on DUT. +| | +| | ... | *Arguments:* +| | ... | - node - DUT node to enablr DET44 on. +| | ... | Type: dictionary +| | ... | - inside_vrf - Inside VRF ID; default value: 0. +| | ... | Type: string or integer +| | ... | - outside_vrf - Outside VRF ID; default value: 0. +| | ... | Type: string or integer +| | +| | ... | *Example:* +| | +| | ... | \| Enable DET44 plugin on all DUTs \| +| | +| | [Arguments] | ${node} | ${inside_vrf}=${0} | ${outside_vrf}=${0} +| | +| | Enable DET44 Plugin +| | ... | ${node} | inside_vrf=${inside_vrf} | outside_vrf=${outside_vrf} + +| Configure DET44 interfaces +| | [Documentation] | Configure inside and outside interfaces for DET44. +| | +| | ... | *Arguments:* +| | ... | - node - DUT node to set DET44 interfaces on. Type: dictionary +| | ... | - int_in - Inside interface key. Type: string +| | ... | - int_out - Outside interface key. Type: string +| | +| | ... | *Example:* +| | +| | ... | \| Configure DET44 interfaces \| ${nodes['DUT1']} \| port5 \| port6 \| +| | +| | [Arguments] | ${node} | ${int_in} | ${int_out} +| | +| | Set DET44 Interface | ${dut1} | ${int_in} | is_inside=${True} +| | Set DET44 Interface | ${dut1} | ${int_out} | is_inside=${False} + | Configure deterministic mode for NAT44 -| | [Documentation] | Set deterministic behaviour of NAT44. +| | [Documentation] | Set deterministic behaviour of NAT44 (DET44). +| | +| | ... | This keyword also sets a test variable \${resetter} +| | ... | to hold a callable which resets VPP state. +| | ... | Keywords performing search will call it to get consistent trials. +| | ... | Tests which do not wish to reset NAT state should use ramp-up, +| | ... | so the resetter is not set if \${ramp_up_duration} variable +| | ... | is (defined and) nonzero. | | | | ... | *Arguments:* | | ... | - node - DUT node to set deterministic mode for NAT44 on. @@ -54,74 +219,55 @@ | | | | [Arguments] | ${node} | ${ip_in} | ${subnet_in} | ${ip_out} | ${subnet_out} | | -| | Set NAT44 deterministic | ${node} | ${ip_in} | ${subnet_in} | ${ip_out} -| | ... | ${subnet_out} +| | ${resetter} = | Set DET44 Mapping +| | ... | ${node} | ${ip_in} | ${subnet_in} | ${ip_out} | ${subnet_out} +| | ${ramp_up_rate} = | Get Ramp Up Rate +| | Return From Keyword If | ${ramp_up_rate} +| | Set Test Variable | \${resetter} + +| Initialize NAT44 deterministic mode in circular topology +| | [Documentation] | Initialization of NAT44 deterministic mode (DET44) +| | ... | on DUT1 node. +| | +| | Enable DET44 plugin on DUT | ${dut1} +| | Configure DET44 interfaces +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0] +| | Configure deterministic mode for NAT44 +| | ... | ${dut1} | ${in_net} | ${in_mask} | ${out_net} | ${out_mask} -| Show NAT verbose -| | [Documentation] | Get the NAT settings on the node. +| Show DET44 verbose +| | [Documentation] | Get DET44 settings on the node. | | | | ... | *Arguments:* | | ... | - node - DUT node to show NAT. Type: dictionary | | | | ... | *Example:* | | -| | ... | \| Show NAT verbose \| ${nodes['DUT1']} \| +| | ... | \| Show DET44 verbose \| ${nodes['DUT1']} \| | | | | [Arguments] | ${node} | | -| | Show NAT | ${node} +| | Show DET44 | ${node} -| Initialize NAT44 in circular topology -| | [Documentation] | Initialization of 2-node / 3-node topology with NAT44 -| | ... | between DUTs: -| | ... | - set interfaces up -| | ... | - set IP addresses -| | ... | - set ARP -| | ... | - create routes -| | ... | - set NAT44 - only on DUT1 +| Verify DET44 sessions number on DUT1 node +| | [Documentation] | Verify that all required DET44 sessions are established on +| | ... | DUT1 node. | | -| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error -| | ... | Variable Should Exist | ${dut2} +| | Verify DET44 sessions number | ${nodes['DUT1']} | ${n_sessions} + +| Verify DET44 sessions number +| | [Documentation] | Verify that all required DET44 sessions are established. | | -| | Set interfaces in path up +| | ... | *Arguments:* +| | ... | - node - DUT node. Type: dictionary +| | ... | - exp_n_sessions - Expected number of DET44 sessions. Type: integer | | -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 10.0.0.1 | 20 -| | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} -| | ... | 11.0.0.1 | 20 -| | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} -| | ... | 11.0.0.2 | 20 -| | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set Variable | ${dut2} -| | ... | ELSE | Set Variable | ${dut1} -| | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set Variable | ${dut2_if2} -| | ... | ELSE | Set Variable | ${dut1_if2} -| | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 12.0.0.1 | 20 -| | -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.0.0.2 | ${tg_if1_mac} -| | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | 11.0.0.2 | ${dut2_if1_mac} -| | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | 11.0.0.1 | ${dut1_if2_mac} -| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 12.0.0.2 | ${tg_if2_mac} -| | -| | Vpp Route Add | ${dut1} | 20.0.0.0 | 18 | gateway=10.0.0.2 -| | ... | interface=${dut1_if1} -| | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Vpp Route Add | ${dut1} | 12.0.0.2 | 32 | gateway=11.0.0.2 -| | ... | interface=${dut1_if2} -| | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Vpp Route Add | ${dut2} | 12.0.0.0 | 24 | gateway=12.0.0.2 -| | ... | interface=${dut2_if2} -| | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Vpp Route Add | ${dut2} | 200.0.0.0 | 30 | gateway=11.0.0.1 -| | ... | interface=${dut2_if1} +| | ... | *Example:* | | -| | Configure inside and outside interfaces -| | ... | ${dut1} | ${dut1_if1} | ${dut1_if2} -| | Configure deterministic mode for NAT44 -| | ... | ${dut1} | 20.0.0.0 | 18 | 200.0.0.0 | 30 +| | ... | \| Verify DET44 sessions number \| ${nodes['DUT1']} \| ${64512} \| +| | +| | [Arguments] | ${node} | ${exp_n_sessions} +| | +| | ${det44_sessions}= | Get DET44 Sessions Number | ${node} +| | Should Be Equal As Integers | ${det44_sessions} | ${exp_n_sessions} +| | ... | Not all DET44 sessions have been established