From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id A9B293798 for ; Mon, 21 Jan 2019 03:53:37 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Jan 2019 18:53:36 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,501,1539673200"; d="scan'208";a="116162479" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga007.fm.intel.com with ESMTP; 20 Jan 2019 18:53:36 -0800 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 20 Jan 2019 18:53:36 -0800 Received: from shsmsx107.ccr.corp.intel.com (10.239.4.96) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 20 Jan 2019 18:53:35 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.63]) by SHSMSX107.ccr.corp.intel.com ([169.254.9.239]) with mapi id 14.03.0415.000; Mon, 21 Jan 2019 10:53:33 +0800 From: "Zhao, XinfengX" To: "dts@dpdk.org" Thread-Topic: [dts][PATCH V1] tests: add the suite of cryptodev ipsec-gw test Thread-Index: AQHUrwi9qWKGrcOdHUuGgp+pvSY95qW5CuQQ Date: Mon, 21 Jan 2019 02:53:32 +0000 Message-ID: <44051B25D8C8784BB77FFB604D6A70CA1201DEE0@shsmsx102.ccr.corp.intel.com> References: <1547800724-9165-1-git-send-email-xinfengx.zhao@intel.com> In-Reply-To: <1547800724-9165-1-git-send-email-xinfengx.zhao@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dts] [PATCH V1] tests: add the suite of cryptodev ipsec-gw test X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Jan 2019 02:53:38 -0000 Tested-by : Xinfeng Zhao -----Original Message----- From: Zhao, XinfengX=20 Sent: Friday, January 18, 2019 4:39 PM To: dts@dpdk.org Cc: Zhao, XinfengX Subject: [dts][PATCH V1] tests: add the suite of cryptodev ipsec-gw test add the test script of cryptodev ipsec-gw to tests Signed-off-by: Xinfeng Zhao --- tests/TestSuite_cryptodev_func_ipsec-gw.py | 733 +++++++++++++++++++++++++= ++++ 1 file changed, 733 insertions(+) create mode 100644 tests/TestSuite_cryptodev_func_ipsec-gw.py diff --git a/tests/TestSuite_cryptodev_func_ipsec-gw.py b/tests/TestSuite_c= ryptodev_func_ipsec-gw.py new file mode 100644 index 0000000..6867383 --- /dev/null +++ b/tests/TestSuite_cryptodev_func_ipsec-gw.py @@ -0,0 +1,733 @@ +# BSD LICENSE +# +# Copyright(c) 2016-2017 Intel Corporation. All rights reserved. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without #=20 +modification, are permitted provided that the following conditions #=20 +are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Intel Corporation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #=20 +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #=20 +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #=20 +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT #=20 +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, #=20 +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT #=20 +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, #=20 +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY #=20 +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT #=20 +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE #=20 +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import hmac +import hashlib +import binascii +import time +import utils +from test_case import TestCase +from packet import Packet, sniff_packets, load_sniff_packets + +from cryptography.hazmat.primitives.ciphers import Cipher, algorithms,=20 +modes from cryptography.hazmat.primitives.ciphers.aead import AESCCM,=20 +AESGCM from cryptography.hazmat.backends import default_backend + +# Manually Install the CryptoMobile Python Library, # Before running=20 +this test suite # Web link : https://github.com/mitshell/CryptoMobile +import CryptoMobile.CM as cm +import pyDes + +import TestSuite_cryptodev_common as cc from packet import save_packets + +class TestIPsecGW(TestCase): + + def set_up_all(self): + + self.core_config =3D "1S/2C/1T" + self.number_of_ports =3D 1 + self.dut_ports =3D self.dut.get_ports(self.nic) + self.verify(len(self.dut_ports) >=3D self.number_of_ports, + "Not enough ports for " + self.nic) + self.ports_socket =3D self.dut.get_numa_id(self.dut_ports[0]) + + self.logger.info("core config =3D " + self.core_config) + self.logger.info("number of ports =3D " + str(self.number_of_ports= )) + self.logger.info("dut ports =3D " + str(self.dut_ports)) + self.logger.info("ports_socket =3D " + str(self.ports_socket)) + + # Generally, testbed should has 4 ports NIC, like, + # 03:00.0 03:00.1 03:00.2 03:00.3 + # This test case will + # - physical link is 03:00.0 <-> 03:00.1 and 03:00.2 <-> 03:00.3 + # - bind 03:00.0 and 03:00.2 to ipsec-secgw app + # - send test packet from 03:00.3 + # - receive packet which forwarded by ipsec-secgw from 03:00.0 + # - configure port and peer in dts port.cfg + self.tx_port =3D self.tester.get_local_port(self.dut_ports[1]) + self.rx_port =3D self.tester.get_local_port(self.dut_ports[0]) + + self.tx_interface =3D self.tester.get_interface(self.tx_port) + self.rx_interface =3D self.tester.get_interface(self.rx_port) + + self.logger.info("tx interface =3D " + self.tx_interface) + self.logger.info("rx interface =3D " + self.rx_interface) + + self._app_path =3D "./examples/ipsec-secgw/build/ipsec-secgw" + if not cc.is_build_skip(self): + cc.build_dpdk_with_cryptodev(self) + self.vf_driver =3D self.get_suite_cfg()['vf_driver'] + cc.bind_qat_device(self, self.vf_driver) + + self._default_ipsec_gw_opts =3D { + "config": None, + "P": "", + "p": "0x3", + "f": "local_conf/ipsec_test.cfg", + "u": "0x1" + } + + self._pcap_idx =3D 0 + self.pcap_filename =3D '' + + def set_up(self): + pass + + def tear_down(self): + self.dut.kill_all() + + def tear_down_all(self): + cc.clear_dpdk_config(self) + + def test_qat_aes_128_cbc_ipv4_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_128_cbc_ipv4_tunnel") + self.pcap_filename =3D "test_qat_aes_128_cbc_ipv4_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_qat_aes_256_cbc_ipv4_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_256_cbc_ipv4_tunnel") + self.pcap_filename =3D "test_qat_aes_256_cbc_ipv4_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_qat_aes_gcm_ipv4_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_gcm_ipv4_tunnel") + self.pcap_filename =3D "test_qat_aes_gcm_ipv4_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_qat_aes_128_ctr_ipv4_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_128_ctr_ipv4_tunnel") + self.pcap_filename =3D "test_qat_aes_128_ctr_ipv4_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_qat_aes_128_ctr_ipv6_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_128_ctr_ipv6_tunnel") + self.pcap_filename =3D "test_qat_aes_128_ctr_ipv6_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_qat_aes_128_ctr_ipv4_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_128_ctr_ipv4_transport") + self.pcap_filename =3D "test_qat_aes_128_ctr_ipv4_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_qat_aes_128_ctr_ipv6_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_128_ctr_ipv6_transport") + self.pcap_filename =3D "test_qat_aes_128_ctr_ipv6_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_qat_null_ipv4_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_null_ipv4_tunnel") + self.pcap_filename =3D "test_qat_null_ipv4_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_qat_aes_128_cbc_ipv4_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_128_cbc_ipv4_transport") + self.pcap_filename =3D "test_qat_aes_128_cbc_ipv4_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_qat_aes_256_cbc_ipv4_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_256_cbc_ipv4_transport") + self.pcap_filename =3D "test_qat_aes_256_cbc_ipv4_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_qat_aes_gcm_ipv4_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_gcm_ipv4_transport") + self.pcap_filename =3D "test_qat_aes_gcm_ipv4_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_qat_aes_128_cbc_ipv6_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_128_cbc_ipv6_tunnel") + self.pcap_filename =3D "test_qat_aes_128_cbc_ipv6_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_qat_aes_256_cbc_ipv6_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_256_cbc_ipv6_tunnel") + self.pcap_filename =3D "test_qat_aes_256_cbc_ipv6_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_qat_aes_gcm_ipv6_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_gcm_ipv6_tunnel") + self.pcap_filename =3D "test_qat_aes_gcm_ipv6_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_qat_null_ipv6_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_null_ipv6_tunnel") + self.pcap_filename =3D "test_qat_null_ipv6_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_qat_aes_128_cbc_ipv6_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_128_cbc_ipv6_transport") + self.pcap_filename =3D "test_qat_aes_128_cbc_ipv6_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_qat_aes_256_cbc_ipv6_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_256_cbc_ipv6_transport") + self.pcap_filename =3D "test_qat_aes_256_cbc_ipv6_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_qat_aes_gcm_ipv6_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test qat_aes_gcm_ipv6_transport") + self.pcap_filename =3D "test_qat_aes_gcm_ipv6_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_sw_aes_128_cbc_ipv4_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_128_cbc_ipv4_tunnel") + self.pcap_filename =3D "test_sw_aes_128_cbc_ipv4_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_sw_aes_256_cbc_ipv4_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_256_cbc_ipv4_tunnel") + self.pcap_filename =3D "test_sw_aes_256_cbc_ipv4_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_sw_aes_gcm_ipv4_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_gcm_ipv4_tunnel") + self.pcap_filename =3D "test_sw_aes_gcm_ipv4_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_sw_null_ipv4_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_null_ipv4_tunnel") + self.pcap_filename =3D "test_sw_null_ipv4_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_sw_aes_128_cbc_ipv4_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_128_cbc_ipv4_transport") + self.pcap_filename =3D "test_sw_aes_128_cbc_ipv4_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_sw_aes_256_cbc_ipv4_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_256_cbc_ipv4_transport") + self.pcap_filename =3D "test_sw_aes_256_cbc_ipv4_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_sw_aes_gcm_ipv4_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_gcm_ipv4_transport") + self.pcap_filename =3D "test_sw_aes_gcm_ipv4_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_sw_aes_128_cbc_ipv6_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_128_cbc_ipv6_tunnel") + self.pcap_filename =3D "test_sw_aes_128_cbc_ipv6_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_sw_aes_256_cbc_ipv6_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_256_cbc_ipv6_tunnel") + self.pcap_filename =3D "test_sw_aes_256_cbc_ipv6_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_sw_aes_gcm_ipv6_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_gcm_ipv6_tunnel") + self.pcap_filename =3D "test_sw_aes_gcm_ipv6_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_sw_null_ipv6_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_null_ipv6_tunnel") + self.pcap_filename =3D "test_sw_null_ipv6_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_sw_aes_128_cbc_ipv6_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_128_cbc_ipv6_transport") + self.pcap_filename =3D "test_sw_aes_128_cbc_ipv6_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_sw_aes_256_cbc_ipv6_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_256_cbc_ipv6_transport") + self.pcap_filename =3D "test_sw_aes_256_cbc_ipv6_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + + self.verify(result, "FAIL") + + def test_sw_aes_gcm_ipv6_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_gcm_ipv6_transport") + self.pcap_filename =3D "test_sw_aes_gcm_ipv6_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_sw_aes_128_ctr_ipv4_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_128_ctr_ipv4_tunnel") + self.pcap_filename =3D "test_sw_aes_128_ctr_ipv4_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_sw_aes_128_ctr_ipv6_tunnel(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_128_ctr_ipv6_tunnel") + self.pcap_filename =3D "test_sw_aes_128_ctr_ipv6_tunnel" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_sw_aes_128_ctr_ipv4_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_128_ctr_ipv4_transport") + self.pcap_filename =3D "test_sw_aes_128_ctr_ipv4_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def test_sw_aes_128_ctr_ipv6_transport(self): + if cc.is_test_skip(self): + return + + result =3D True + + self.logger.info("Test sw_aes_128_ctr_ipv6_transport") + self.pcap_filename =3D "test_sw_aes_128_ctr_ipv6_transport" + ipsec_gw_opt_str =3D self._get_ipsec_gw_opt_str() + self.logger.debug(ipsec_gw_opt_str) + + result =3D self._execute_ipsec_gw_test(ipsec_gw_opt_str) + self.verify(result, "FAIL") + + def _get_ipsec_gw_opt_str(self, override_ipsec_gw_opts=3D{}): + return cc.get_opt_str(self, self._default_ipsec_gw_opts, + override_ipsec_gw_opts) + + def _execute_ipsec_gw_test(self, ipsec_gw_opt_str): + result =3D True + eal_opt_str =3D cc.get_eal_opt_str(self) + + cmd_str =3D cc.get_dpdk_app_cmd_str(self._app_path, eal_opt_str, i= psec_gw_opt_str) + self.logger.info("IPsec-gw cmd: " + cmd_str) + self.dut.send_expect(cmd_str, "IPSEC:", 30) + time.sleep(3) + inst =3D sniff_packets(self.rx_interface, + timeout=3D25) + + PACKET_COUNT =3D 65 + payload =3D 256 * ['11'] + + case_cfgs =3D self.get_case_cfg() + dst_ip =3D case_cfgs["dst_ip"] + src_ip =3D case_cfgs["src_ip"] + expected_dst_ip =3D case_cfgs["expected_dst_ip"] + expected_src_ip =3D case_cfgs["expected_src_ip"] + expected_spi =3D case_cfgs["expected_spi"] + expected_length =3D case_cfgs["expected_length"] + #expected_data =3D case_cfgs["expected_data"] + + pkt =3D Packet() + if len(dst_ip)<=3D15: + pkt.assign_layers(["ether", "ipv4", "udp", "raw"]) + pkt.config_layer("ether", {"src": "52:00:00:00:00:00", "dst": = "52:00:00:00:00:01"}) + pkt.config_layer("ipv4", {"src": src_ip, "dst": dst_ip}) + else: + pkt.assign_layers(["ether", "ipv6", "udp", "raw"]) + pkt.config_layer("ether", {"src": "52:00:00:00:00:00", "dst": = "52:00:00:00:00:01"}) + pkt.config_layer("ipv6", {"src": src_ip, "dst": dst_ip}) + pkt.config_layer("udp", {"dst": 0}) + pkt.config_layer("raw", {"payload": payload}) + pkt.send_pkt(tx_port=3Dself.tx_interface, count=3DPACKET_COUNT) + #pkt.pktgen.pkt.show() + + pkt_rec =3D load_sniff_packets(inst) + + pcap_filename =3D "output/{0}.pcap".format(self.pcap_filename) + self.logger.info("Save pkts to {0}".format(pcap_filename)) + save_packets(pkt_rec, pcap_filename) + self._pcap_idx =3D self._pcap_idx + 1 + + if len(pkt_rec) =3D=3D 0: + self.logger.error("IPsec forwarding failed") + result =3D False + + for pkt_r in pkt_rec: + pkt_src_ip =3D pkt_r.pktgen.strip_layer3("src") + if pkt_src_ip !=3D expected_src_ip: + pkt_r.pktgen.pkt.show() + self.logger.error("SRC IP does not match. Pkt:{0}, Expecte= d:{1}".format( + pkt_src_ip, expected_src_ip)) + result =3D False + break + + pkt_dst_ip =3D pkt_r.pktgen.strip_layer3("dst") + self.logger.debug(pkt_dst_ip) + if pkt_dst_ip !=3D expected_dst_ip: + pkt_r.pktgen.pkt.show() + self.logger.error("DST IP does not match. Pkt:{0}, Expecte= d:{1}".format( + pkt_dst_ip, expected_dst_ip)) + result =3D False + break + + packet_hex =3D pkt_r.pktgen.pkt["ESP"].getfieldval("data") + if packet_hex is None: + self.logger.error("NO Payload !") + result =3D False + break + payload_str =3D binascii.b2a_hex(packet_hex) + self.logger.debug(payload_str) + + pkt_spi =3D hex(pkt_r.pktgen.pkt["ESP"].getfieldval("spi")) + self.logger.debug(pkt_spi) + if pkt_spi !=3D expected_spi: + self.logger.error("SPI does not match. Pkt:{0}, Expected:{= 1}".format( + pkt_spi, expected_spi)) + result =3D False + break + + pkt_len =3D len(payload_str)/2 + self.logger.debug(pkt_len) + if pkt_len !=3D int(expected_length): + self.logger.error("Packet length does not match. Pkt:{0}, = Expected:{1}".format( + pkt_len, expected_length)) + result =3D False + break + + self.dut.kill_all() + return result -- 2.7.4