get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/127237/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 127237,
    "url": "http://patches.dpdk.org/api/patches/127237/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230523194918.1940212-4-gakhil@marvell.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20230523194918.1940212-4-gakhil@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230523194918.1940212-4-gakhil@marvell.com",
    "date": "2023-05-23T19:49:08",
    "name": "[03/13] test/security: add inline MACsec cases",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "9d826e97b8645f999bc273dc8e2d893b188d95df",
    "submitter": {
        "id": 2094,
        "url": "http://patches.dpdk.org/api/people/2094/?format=api",
        "name": "Akhil Goyal",
        "email": "gakhil@marvell.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20230523194918.1940212-4-gakhil@marvell.com/mbox/",
    "series": [
        {
            "id": 28140,
            "url": "http://patches.dpdk.org/api/series/28140/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=28140",
            "date": "2023-05-23T19:49:05",
            "name": "Add MACsec unit test cases",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/28140/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/127237/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/127237/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 1FC3F42B83;\n\tTue, 23 May 2023 21:50:17 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 374A342D44;\n\tTue, 23 May 2023 21:50:09 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 7107942D32\n for <dev@dpdk.org>; Tue, 23 May 2023 21:50:07 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id\n 34NG9H0V021237; Tue, 23 May 2023 12:50:02 -0700",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3qpwqk30uv-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Tue, 23 May 2023 12:50:02 -0700",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48;\n Tue, 23 May 2023 12:49:59 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend\n Transport; Tue, 23 May 2023 12:49:59 -0700",
            "from localhost.localdomain (unknown [10.28.36.102])\n by maili.marvell.com (Postfix) with ESMTP id 670D73F70AA;\n Tue, 23 May 2023 12:49:56 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0220;\n bh=5hGdRRzmkbIxKbzgeyBY4AFW0xoy2dHQEoSl3M3byf0=;\n b=AHxep/dQ6mR9yi7j5wl3316ynjII9HUcGOw79ovMHCsnlMqeJtzJsPyTOJFMrQxa6/iD\n hhvryw+cp/gvc4Xibo/w18Q+eRBaU5x9fAdE7k6EUmi2UvRNls4xjaHZi8o8nHZHRP9C\n ktWCwXvjguO6lozERJOum5V0vVeEVCiEVoXtVm3bEpq8aFOSQK82xS26d3A7RVLSOxHU\n q+q2O5EAM3NNbdkAtPfexTS/FTU7n98lu4E8GTOk4vgrXo9kVAGpZZAQ2VAlO+qimbQm\n ZQxxDLg0FLJZs8mFHFXd7OpaFreOc6TuCqwwuzIlHEd6PPocEHwoPXAy2I+Igkq+fTZY Qw==",
        "From": "Akhil Goyal <gakhil@marvell.com>",
        "To": "<dev@dpdk.org>, Akhil Goyal <gakhil@marvell.com>",
        "CC": "<thomas@monjalon.net>, <olivier.matz@6wind.com>, <orika@nvidia.com>,\n <david.marchand@redhat.com>, <hemant.agrawal@nxp.com>,\n <vattunuru@marvell.com>, <ferruh.yigit@amd.com>, <jerinj@marvell.com>,\n <adwivedi@marvell.com>",
        "Subject": "[PATCH 03/13] test/security: add inline MACsec cases",
        "Date": "Wed, 24 May 2023 01:19:08 +0530",
        "Message-ID": "<20230523194918.1940212-4-gakhil@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20230523194918.1940212-1-gakhil@marvell.com>",
        "References": "<20220928124516.93050-5-gakhil@marvell.com>\n <20230523194918.1940212-1-gakhil@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "OGuDb3zsx53LX973qOgKHozXPYJPBlBA",
        "X-Proofpoint-GUID": "OGuDb3zsx53LX973qOgKHozXPYJPBlBA",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26\n definitions=2023-05-23_12,2023-05-23_02,2023-05-22_02",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Updated test app to verify Inline MACsec offload using\nrte_security APIs.\nA couple of test cases are added to verify encap only\nand decap only of some known test vectors from MACsec\nspecification.\n\nSigned-off-by: Akhil Goyal <gakhil@marvell.com>\n---\n app/test/meson.build                          |    1 +\n app/test/test_security_inline_macsec.c        | 1108 +++++++++++++++++\n .../test_security_inline_macsec_vectors.h     | 1086 ++++++++++++++++\n 3 files changed, 2195 insertions(+)\n create mode 100644 app/test/test_security_inline_macsec.c\n create mode 100644 app/test/test_security_inline_macsec_vectors.h",
    "diff": "diff --git a/app/test/meson.build b/app/test/meson.build\nindex b9b5432496..69c1d19f7b 100644\n--- a/app/test/meson.build\n+++ b/app/test/meson.build\n@@ -128,6 +128,7 @@ test_sources = files(\n         'test_rwlock.c',\n         'test_sched.c',\n         'test_security.c',\n+        'test_security_inline_macsec.c',\n         'test_security_inline_proto.c',\n         'test_seqlock.c',\n         'test_service_cores.c',\ndiff --git a/app/test/test_security_inline_macsec.c b/app/test/test_security_inline_macsec.c\nnew file mode 100644\nindex 0000000000..22a54dd65b\n--- /dev/null\n+++ b/app/test/test_security_inline_macsec.c\n@@ -0,0 +1,1108 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(C) 2023 Marvell.\n+ */\n+\n+\n+#include <stdio.h>\n+#include <inttypes.h>\n+\n+#include <rte_ethdev.h>\n+#include <rte_malloc.h>\n+#include <rte_security.h>\n+\n+#include \"test.h\"\n+#include \"test_security_inline_macsec_vectors.h\"\n+\n+#ifdef RTE_EXEC_ENV_WINDOWS\n+static int\n+test_inline_macsec(void)\n+{\n+\tprintf(\"Inline MACsec not supported on Windows, skipping test\\n\");\n+\treturn TEST_SKIPPED;\n+}\n+\n+#else\n+\n+#define NB_ETHPORTS_USED\t\t1\n+#define MEMPOOL_CACHE_SIZE\t\t32\n+#define RTE_TEST_RX_DESC_DEFAULT\t1024\n+#define RTE_TEST_TX_DESC_DEFAULT\t1024\n+#define RTE_PORT_ALL\t\t(~(uint16_t)0x0)\n+\n+#define RX_PTHRESH 8 /**< Default values of RX prefetch threshold reg. */\n+#define RX_HTHRESH 8 /**< Default values of RX host threshold reg. */\n+#define RX_WTHRESH 0 /**< Default values of RX write-back threshold reg. */\n+\n+#define TX_PTHRESH 32 /**< Default values of TX prefetch threshold reg. */\n+#define TX_HTHRESH 0  /**< Default values of TX host threshold reg. */\n+#define TX_WTHRESH 0  /**< Default values of TX write-back threshold reg. */\n+\n+#define MAX_TRAFFIC_BURST\t\t2048\n+#define NB_MBUF\t\t\t\t10240\n+\n+#define MCS_INVALID_SA\t\t\t0xFFFF\n+#define MCS_DEFAULT_PN_THRESHOLD\t0xFFFFF\n+\n+static struct rte_mempool *mbufpool;\n+static struct rte_mempool *sess_pool;\n+/* ethernet addresses of ports */\n+static struct rte_ether_addr ports_eth_addr[RTE_MAX_ETHPORTS];\n+\n+struct mcs_test_opts {\n+\tint val_frames;\n+\tint nb_td;\n+\tuint16_t mtu;\n+\tuint8_t sa_in_use;\n+\tbool encrypt;\n+\tbool protect_frames;\n+\tuint8_t sectag_insert_mode;\n+\tuint8_t nb_vlan;\n+\tuint32_t replay_win_sz;\n+\tuint8_t replay_protect;\n+\tuint8_t rekey_en;\n+\tconst struct mcs_test_vector *rekey_td;\n+\tbool dump_all_stats;\n+\tuint8_t check_untagged_rx;\n+\tuint8_t check_bad_tag_cnt;\n+\tuint8_t check_sa_not_in_use;\n+\tuint8_t check_decap_stats;\n+\tuint8_t check_verify_only_stats;\n+\tuint8_t check_pkts_invalid_stats;\n+\tuint8_t check_pkts_unchecked_stats;\n+\tuint8_t check_out_pkts_untagged;\n+\tuint8_t check_out_pkts_toolong;\n+\tuint8_t check_encap_stats;\n+\tuint8_t check_auth_only_stats;\n+\tuint8_t check_sectag_interrupts;\n+};\n+\n+static struct rte_eth_conf port_conf = {\n+\t.rxmode = {\n+\t\t.mq_mode = RTE_ETH_MQ_RX_NONE,\n+\t\t.offloads = RTE_ETH_RX_OFFLOAD_CHECKSUM |\n+\t\t\t    RTE_ETH_RX_OFFLOAD_MACSEC_STRIP,\n+\t},\n+\t.txmode = {\n+\t\t.mq_mode = RTE_ETH_MQ_TX_NONE,\n+\t\t.offloads = RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE |\n+\t\t\t    RTE_ETH_TX_OFFLOAD_MACSEC_INSERT,\n+\t},\n+\t.lpbk_mode = 1,  /* enable loopback */\n+};\n+\n+static struct rte_eth_rxconf rx_conf = {\n+\t.rx_thresh = {\n+\t\t.pthresh = RX_PTHRESH,\n+\t\t.hthresh = RX_HTHRESH,\n+\t\t.wthresh = RX_WTHRESH,\n+\t},\n+\t.rx_free_thresh = 32,\n+};\n+\n+static struct rte_eth_txconf tx_conf = {\n+\t.tx_thresh = {\n+\t\t.pthresh = TX_PTHRESH,\n+\t\t.hthresh = TX_HTHRESH,\n+\t\t.wthresh = TX_WTHRESH,\n+\t},\n+\t.tx_free_thresh = 32, /* Use PMD default values */\n+\t.tx_rs_thresh = 32, /* Use PMD default values */\n+};\n+\n+static uint16_t port_id;\n+\n+static uint64_t link_mbps;\n+\n+static struct rte_flow *default_tx_flow[RTE_MAX_ETHPORTS];\n+static struct rte_flow *default_rx_flow[RTE_MAX_ETHPORTS];\n+\n+static struct rte_mbuf **tx_pkts_burst;\n+static struct rte_mbuf **rx_pkts_burst;\n+\n+static inline struct rte_mbuf *\n+init_packet(struct rte_mempool *mp, const uint8_t *data, unsigned int len)\n+{\n+\tstruct rte_mbuf *pkt;\n+\n+\tpkt = rte_pktmbuf_alloc(mp);\n+\tif (pkt == NULL)\n+\t\treturn NULL;\n+\n+\trte_memcpy(rte_pktmbuf_append(pkt, len), data, len);\n+\n+\treturn pkt;\n+}\n+\n+static int\n+init_mempools(unsigned int nb_mbuf)\n+{\n+\tstruct rte_security_ctx *sec_ctx;\n+\tuint16_t nb_sess = 512;\n+\tuint32_t sess_sz;\n+\tchar s[64];\n+\n+\tif (mbufpool == NULL) {\n+\t\tsnprintf(s, sizeof(s), \"mbuf_pool\");\n+\t\tmbufpool = rte_pktmbuf_pool_create(s, nb_mbuf,\n+\t\t\t\tMEMPOOL_CACHE_SIZE, 0,\n+\t\t\t\tRTE_MBUF_DEFAULT_BUF_SIZE, SOCKET_ID_ANY);\n+\t\tif (mbufpool == NULL) {\n+\t\t\tprintf(\"Cannot init mbuf pool\\n\");\n+\t\t\treturn TEST_FAILED;\n+\t\t}\n+\t\tprintf(\"Allocated mbuf pool\\n\");\n+\t}\n+\n+\tsec_ctx = rte_eth_dev_get_sec_ctx(port_id);\n+\tif (sec_ctx == NULL) {\n+\t\tprintf(\"Device does not support Security ctx\\n\");\n+\t\treturn TEST_SKIPPED;\n+\t}\n+\tsess_sz = rte_security_session_get_size(sec_ctx);\n+\tif (sess_pool == NULL) {\n+\t\tsnprintf(s, sizeof(s), \"sess_pool\");\n+\t\tsess_pool = rte_mempool_create(s, nb_sess, sess_sz,\n+\t\t\t\tMEMPOOL_CACHE_SIZE, 0,\n+\t\t\t\tNULL, NULL, NULL, NULL,\n+\t\t\t\tSOCKET_ID_ANY, 0);\n+\t\tif (sess_pool == NULL) {\n+\t\t\tprintf(\"Cannot init sess pool\\n\");\n+\t\t\treturn TEST_FAILED;\n+\t\t}\n+\t\tprintf(\"Allocated sess pool\\n\");\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static void\n+fill_macsec_sa_conf(const struct mcs_test_vector *td, struct rte_security_macsec_sa *sa,\n+\t\t\tenum rte_security_macsec_direction dir, uint8_t an, uint8_t tci_off)\n+{\n+\tsa->dir = dir;\n+\n+\tsa->key.data = td->sa_key.data;\n+\tsa->key.length = td->sa_key.len;\n+\n+\tmemcpy((uint8_t *)sa->salt, (const uint8_t *)td->salt, RTE_SECURITY_MACSEC_SALT_LEN);\n+\n+\t/* AN is set as per the value in secure packet in test vector */\n+\tsa->an = an & RTE_MACSEC_AN_MASK;\n+\n+\tsa->ssci = td->ssci;\n+\tsa->xpn = td->xpn;\n+\t/* Starting packet number which is expected to come next.\n+\t * It is take from the test vector so that we can match the out packet.\n+\t */\n+\tsa->next_pn = *(const uint32_t *)(&td->secure_pkt.data[tci_off + 2]);\n+}\n+\n+static void\n+fill_macsec_sc_conf(const struct mcs_test_vector *td,\n+\t\t    struct rte_security_macsec_sc *sc_conf,\n+\t\t    const struct mcs_test_opts *opts,\n+\t\t    enum rte_security_macsec_direction dir,\n+\t\t    uint16_t sa_id[], uint8_t tci_off)\n+{\n+\tuint8_t i;\n+\n+\tsc_conf->dir = dir;\n+\tif (dir == RTE_SECURITY_MACSEC_DIR_TX) {\n+\t\tsc_conf->sc_tx.sa_id = sa_id[0];\n+\t\tif (sa_id[1] != MCS_INVALID_SA) {\n+\t\t\tsc_conf->sc_tx.sa_id_rekey = sa_id[1];\n+\t\t\tsc_conf->sc_tx.re_key_en = 1;\n+\t\t}\n+\t\tsc_conf->sc_tx.active = 1;\n+\t\t/* is SCI valid */\n+\t\tif (td->secure_pkt.data[tci_off] & RTE_MACSEC_TCI_SC) {\n+\t\t\tmemcpy(&sc_conf->sc_tx.sci, &td->secure_pkt.data[tci_off + 6],\n+\t\t\t\t\tsizeof(sc_conf->sc_tx.sci));\n+\t\t\tsc_conf->sc_tx.sci = rte_be_to_cpu_64(sc_conf->sc_tx.sci);\n+\t\t} else if (td->secure_pkt.data[tci_off] & RTE_MACSEC_TCI_ES) {\n+\t\t\t/* sci = source_mac + port_id when ES.bit = 1 & SC.bit = 0 */\n+\t\t\tconst uint8_t *smac = td->plain_pkt.data + RTE_ETHER_ADDR_LEN;\n+\t\t\tuint8_t *ptr = (uint8_t *)&sc_conf->sc_tx.sci;\n+\n+\t\t\tptr[0] = 0x01;\n+\t\t\tptr[1] = 0;\n+\t\t\tfor (i = 0; i < RTE_ETHER_ADDR_LEN; i++)\n+\t\t\t\tptr[2 + i] = smac[RTE_ETHER_ADDR_LEN - 1 - i];\n+\t\t} else {\n+\t\t\t/* use some default SCI */\n+\t\t\tsc_conf->sc_tx.sci = 0xf1341e023a2b1c5d;\n+\t\t}\n+\t} else {\n+\t\tfor (i = 0; i < RTE_SECURITY_MACSEC_NUM_AN; i++) {\n+\t\t\tsc_conf->sc_rx.sa_id[i] = sa_id[i];\n+\t\t\tsc_conf->sc_rx.sa_in_use[i] = opts->sa_in_use;\n+\t\t}\n+\t\tsc_conf->sc_rx.active = 1;\n+\t}\n+}\n+\n+\n+/* Create Inline MACsec session */\n+static int\n+fill_session_conf(const struct mcs_test_vector *td, uint16_t portid __rte_unused,\n+\t\tconst struct mcs_test_opts *opts,\n+\t\tstruct rte_security_session_conf *sess_conf,\n+\t\tenum rte_security_macsec_direction dir,\n+\t\tuint16_t sc_id,\n+\t\tuint8_t tci_off)\n+{\n+\tsess_conf->action_type = RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL;\n+\tsess_conf->protocol = RTE_SECURITY_PROTOCOL_MACSEC;\n+\tsess_conf->macsec.dir = dir;\n+\tsess_conf->macsec.alg = td->alg;\n+\tsess_conf->macsec.cipher_off = 0;\n+\tif (td->secure_pkt.data[tci_off] & RTE_MACSEC_TCI_SC) {\n+\t\tsess_conf->macsec.sci = rte_be_to_cpu_64(*(const uint64_t *)\n+\t\t\t\t\t(&td->secure_pkt.data[tci_off + 6]));\n+\t} else if (td->secure_pkt.data[tci_off] & RTE_MACSEC_TCI_ES) {\n+\t\t/* sci = source_mac + port_id when ES.bit = 1 & SC.bit = 0 */\n+\t\tconst uint8_t *smac = td->plain_pkt.data + RTE_ETHER_ADDR_LEN;\n+\t\tuint8_t *ptr = (uint8_t *)&sess_conf->macsec.sci;\n+\t\tuint8_t j;\n+\n+\t\tptr[0] = 0x01;\n+\t\tptr[1] = 0;\n+\t\tfor (j = 0; j < RTE_ETHER_ADDR_LEN; j++)\n+\t\t\tptr[2 + j] = smac[RTE_ETHER_ADDR_LEN - 1 - j];\n+\t}\n+\tsess_conf->macsec.sc_id = sc_id;\n+\tif (dir == RTE_SECURITY_MACSEC_DIR_TX) {\n+\t\tsess_conf->macsec.tx_secy.mtu = opts->mtu;\n+\t\tsess_conf->macsec.tx_secy.sectag_off = (opts->sectag_insert_mode == 1) ?\n+\t\t\t\t\t\t\t2 * RTE_ETHER_ADDR_LEN :\n+\t\t\t\t\t\t\tRTE_VLAN_HLEN;\n+\t\tsess_conf->macsec.tx_secy.sectag_insert_mode = opts->sectag_insert_mode;\n+\t\tsess_conf->macsec.tx_secy.ctrl_port_enable = 1;\n+\t\tsess_conf->macsec.tx_secy.sectag_version = 0;\n+\t\tsess_conf->macsec.tx_secy.end_station =\n+\t\t\t\t\t(td->secure_pkt.data[tci_off] & RTE_MACSEC_TCI_ES) >> 6;\n+\t\tsess_conf->macsec.tx_secy.send_sci =\n+\t\t\t\t\t(td->secure_pkt.data[tci_off] & RTE_MACSEC_TCI_SC) >> 5;\n+\t\tsess_conf->macsec.tx_secy.scb =\n+\t\t\t\t\t(td->secure_pkt.data[tci_off] & RTE_MACSEC_TCI_SCB) >> 4;\n+\t\tsess_conf->macsec.tx_secy.encrypt = opts->encrypt;\n+\t\tsess_conf->macsec.tx_secy.protect_frames = opts->protect_frames;\n+\t\tsess_conf->macsec.tx_secy.icv_include_da_sa = 1;\n+\t} else {\n+\t\tsess_conf->macsec.rx_secy.replay_win_sz = opts->replay_win_sz;\n+\t\tsess_conf->macsec.rx_secy.replay_protect = opts->replay_protect;\n+\t\tsess_conf->macsec.rx_secy.icv_include_da_sa = 1;\n+\t\tsess_conf->macsec.rx_secy.ctrl_port_enable = 1;\n+\t\tsess_conf->macsec.rx_secy.preserve_sectag = 0;\n+\t\tsess_conf->macsec.rx_secy.preserve_icv = 0;\n+\t\tsess_conf->macsec.rx_secy.validate_frames = opts->val_frames;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static int\n+create_default_flow(const struct mcs_test_vector *td, uint16_t portid,\n+\t\t    enum rte_security_macsec_direction dir, void *sess)\n+{\n+\tstruct rte_flow_action action[2];\n+\tstruct rte_flow_item pattern[2];\n+\tstruct rte_flow_attr attr = {0};\n+\tstruct rte_flow_error err;\n+\tstruct rte_flow *flow;\n+\tstruct rte_flow_item_eth eth = {0};\n+\tstatic const struct rte_flow_item_eth eth_mask = {\n+\t\t.hdr.dst_addr.addr_bytes = \"\\x00\\x00\\x00\\x00\\x00\\x00\",\n+\t\t.hdr.src_addr.addr_bytes = \"\\x00\\x00\\x00\\x00\\x00\\x00\",\n+\t\t.hdr.ether_type = RTE_BE16(0x0000),\n+\t};\n+\n+\tint ret;\n+\n+\teth.has_vlan = 0;\n+\tif (dir == RTE_SECURITY_MACSEC_DIR_TX)\n+\t\tmemcpy(&eth.hdr, td->plain_pkt.data, RTE_ETHER_HDR_LEN);\n+\telse\n+\t\tmemcpy(&eth.hdr, td->secure_pkt.data, RTE_ETHER_HDR_LEN);\n+\n+\tpattern[0].type = RTE_FLOW_ITEM_TYPE_ETH;\n+\tpattern[0].spec = &eth;\n+\tpattern[0].mask = &eth_mask;\n+\tpattern[0].last = NULL;\n+\tpattern[1].type = RTE_FLOW_ITEM_TYPE_END;\n+\n+\taction[0].type = RTE_FLOW_ACTION_TYPE_SECURITY;\n+\taction[0].conf = sess;\n+\taction[1].type = RTE_FLOW_ACTION_TYPE_END;\n+\taction[1].conf = NULL;\n+\n+\tattr.ingress = (dir == RTE_SECURITY_MACSEC_DIR_RX) ? 1 : 0;\n+\tattr.egress = (dir == RTE_SECURITY_MACSEC_DIR_TX) ? 1 : 0;\n+\n+\tret = rte_flow_validate(portid, &attr, pattern, action, &err);\n+\tif (ret) {\n+\t\tprintf(\"\\nValidate flow failed, ret = %d\\n\", ret);\n+\t\treturn -1;\n+\t}\n+\tflow = rte_flow_create(portid, &attr, pattern, action, &err);\n+\tif (flow == NULL) {\n+\t\tprintf(\"\\nDefault flow rule create failed\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\tif (dir == RTE_SECURITY_MACSEC_DIR_TX)\n+\t\tdefault_tx_flow[portid] = flow;\n+\telse\n+\t\tdefault_rx_flow[portid] = flow;\n+\n+\treturn 0;\n+}\n+\n+static void\n+destroy_default_flow(uint16_t portid)\n+{\n+\tstruct rte_flow_error err;\n+\tint ret;\n+\n+\tif (default_tx_flow[portid]) {\n+\t\tret = rte_flow_destroy(portid, default_tx_flow[portid], &err);\n+\t\tif (ret) {\n+\t\t\tprintf(\"\\nDefault Tx flow rule destroy failed\\n\");\n+\t\t\treturn;\n+\t\t}\n+\t\tdefault_tx_flow[portid] = NULL;\n+\t}\n+\tif (default_rx_flow[portid]) {\n+\t\tret = rte_flow_destroy(portid, default_rx_flow[portid], &err);\n+\t\tif (ret) {\n+\t\t\tprintf(\"\\nDefault Rx flow rule destroy failed\\n\");\n+\t\t\treturn;\n+\t\t}\n+\t\tdefault_rx_flow[portid] = NULL;\n+\t}\n+}\n+\n+static void\n+print_ethaddr(const char *name, const struct rte_ether_addr *eth_addr)\n+{\n+\tchar buf[RTE_ETHER_ADDR_FMT_SIZE];\n+\trte_ether_format_addr(buf, RTE_ETHER_ADDR_FMT_SIZE, eth_addr);\n+\tprintf(\"%s%s\", name, buf);\n+}\n+\n+/* Check the link status of all ports in up to 3s, and print them finally */\n+static void\n+check_all_ports_link_status(uint16_t port_num, uint32_t port_mask)\n+{\n+#define CHECK_INTERVAL 100 /* 100ms */\n+#define MAX_CHECK_TIME 30 /* 3s (30 * 100ms) in total */\n+\tuint16_t portid;\n+\tuint8_t count, all_ports_up, print_flag = 0;\n+\tstruct rte_eth_link link;\n+\tint ret;\n+\tchar link_status[RTE_ETH_LINK_MAX_STR_LEN];\n+\n+\tprintf(\"Checking link statuses...\\n\");\n+\tfflush(stdout);\n+\tfor (count = 0; count <= MAX_CHECK_TIME; count++) {\n+\t\tall_ports_up = 1;\n+\t\tfor (portid = 0; portid < port_num; portid++) {\n+\t\t\tif ((port_mask & (1 << portid)) == 0)\n+\t\t\t\tcontinue;\n+\t\t\tmemset(&link, 0, sizeof(link));\n+\t\t\tret = rte_eth_link_get_nowait(portid, &link);\n+\t\t\tif (ret < 0) {\n+\t\t\t\tall_ports_up = 0;\n+\t\t\t\tif (print_flag == 1)\n+\t\t\t\t\tprintf(\"Port %u link get failed: %s\\n\",\n+\t\t\t\t\t\tportid, rte_strerror(-ret));\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t/* print link status if flag set */\n+\t\t\tif (print_flag == 1) {\n+\t\t\t\tif (link.link_status && link_mbps == 0)\n+\t\t\t\t\tlink_mbps = link.link_speed;\n+\n+\t\t\t\trte_eth_link_to_str(link_status,\n+\t\t\t\t\tsizeof(link_status), &link);\n+\t\t\t\tprintf(\"Port %d %s\\n\", portid, link_status);\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\t/* clear all_ports_up flag if any link down */\n+\t\t\tif (link.link_status == RTE_ETH_LINK_DOWN) {\n+\t\t\t\tall_ports_up = 0;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t\t/* after finally printing all link status, get out */\n+\t\tif (print_flag == 1)\n+\t\t\tbreak;\n+\n+\t\tif (all_ports_up == 0)\n+\t\t\tfflush(stdout);\n+\n+\t\t/* set the print_flag if all ports up or timeout */\n+\t\tif (all_ports_up == 1 || count == (MAX_CHECK_TIME - 1))\n+\t\t\tprint_flag = 1;\n+\t}\n+}\n+\n+static int\n+test_macsec_post_process(struct rte_mbuf *m, const struct mcs_test_vector *td,\n+\t\t\tenum mcs_op op, uint8_t check_out_pkts_untagged)\n+{\n+\tconst uint8_t *dptr;\n+\tuint16_t pkt_len;\n+\n+\tif (op == MCS_DECAP || op == MCS_ENCAP_DECAP ||\n+\t\t\top == MCS_VERIFY_ONLY || op == MCS_AUTH_VERIFY ||\n+\t\t\tcheck_out_pkts_untagged == 1) {\n+\t\tdptr = td->plain_pkt.data;\n+\t\tpkt_len = td->plain_pkt.len;\n+\t} else {\n+\t\tdptr = td->secure_pkt.data;\n+\t\tpkt_len = td->secure_pkt.len;\n+\t}\n+\n+\tif (memcmp(rte_pktmbuf_mtod(m, uint8_t *), dptr, pkt_len)) {\n+\t\tprintf(\"\\nData comparison failed for td.\");\n+\t\trte_pktmbuf_dump(stdout, m, m->pkt_len);\n+\t\trte_hexdump(stdout, \"expected_data\", dptr, pkt_len);\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\treturn TEST_SUCCESS;\n+}\n+\n+static void\n+mcs_stats_dump(struct rte_security_ctx *ctx, enum mcs_op op,\n+\t       void *rx_sess, void *tx_sess,\n+\t       uint8_t rx_sc_id, uint8_t tx_sc_id,\n+\t       uint16_t rx_sa_id[], uint16_t tx_sa_id[])\n+{\n+\tstruct rte_security_stats sess_stats = {0};\n+\tstruct rte_security_macsec_secy_stats *secy_stat;\n+\tstruct rte_security_macsec_sc_stats sc_stat = {0};\n+\tstruct rte_security_macsec_sa_stats sa_stat = {0};\n+\tint i;\n+\n+\tif (op == MCS_DECAP || op == MCS_ENCAP_DECAP ||\n+\t\t\top == MCS_VERIFY_ONLY || op == MCS_AUTH_VERIFY) {\n+\t\tprintf(\"\\n********* RX SECY STATS ************\\n\");\n+\t\trte_security_session_stats_get(ctx, rx_sess, &sess_stats);\n+\t\tsecy_stat = &sess_stats.macsec;\n+\n+\t\tif (secy_stat->ctl_pkt_bcast_cnt)\n+\t\t\tprintf(\"RX: ctl_pkt_bcast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->ctl_pkt_bcast_cnt);\n+\t\tif (secy_stat->ctl_pkt_mcast_cnt)\n+\t\t\tprintf(\"RX: ctl_pkt_mcast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->ctl_pkt_mcast_cnt);\n+\t\tif (secy_stat->ctl_pkt_ucast_cnt)\n+\t\t\tprintf(\"RX: ctl_pkt_ucast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->ctl_pkt_ucast_cnt);\n+\t\tif (secy_stat->ctl_octet_cnt)\n+\t\t\tprintf(\"RX: ctl_octet_cnt: 0x%\" PRIx64 \"\\n\", secy_stat->ctl_octet_cnt);\n+\t\tif (secy_stat->unctl_pkt_bcast_cnt)\n+\t\t\tprintf(\"RX: unctl_pkt_bcast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->unctl_pkt_bcast_cnt);\n+\t\tif (secy_stat->unctl_pkt_mcast_cnt)\n+\t\t\tprintf(\"RX: unctl_pkt_mcast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->unctl_pkt_mcast_cnt);\n+\t\tif (secy_stat->unctl_pkt_ucast_cnt)\n+\t\t\tprintf(\"RX: unctl_pkt_ucast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->unctl_pkt_ucast_cnt);\n+\t\tif (secy_stat->unctl_octet_cnt)\n+\t\t\tprintf(\"RX: unctl_octet_cnt: 0x%\" PRIx64 \"\\n\", secy_stat->unctl_octet_cnt);\n+\t\t/* Valid only for RX */\n+\t\tif (secy_stat->octet_decrypted_cnt)\n+\t\t\tprintf(\"RX: octet_decrypted_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->octet_decrypted_cnt);\n+\t\tif (secy_stat->octet_validated_cnt)\n+\t\t\tprintf(\"RX: octet_validated_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->octet_validated_cnt);\n+\t\tif (secy_stat->pkt_port_disabled_cnt)\n+\t\t\tprintf(\"RX: pkt_port_disabled_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->pkt_port_disabled_cnt);\n+\t\tif (secy_stat->pkt_badtag_cnt)\n+\t\t\tprintf(\"RX: pkt_badtag_cnt: 0x%\" PRIx64 \"\\n\", secy_stat->pkt_badtag_cnt);\n+\t\tif (secy_stat->pkt_nosa_cnt)\n+\t\t\tprintf(\"RX: pkt_nosa_cnt: 0x%\" PRIx64 \"\\n\", secy_stat->pkt_nosa_cnt);\n+\t\tif (secy_stat->pkt_nosaerror_cnt)\n+\t\t\tprintf(\"RX: pkt_nosaerror_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->pkt_nosaerror_cnt);\n+\t\tif (secy_stat->pkt_tagged_ctl_cnt)\n+\t\t\tprintf(\"RX: pkt_tagged_ctl_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->pkt_tagged_ctl_cnt);\n+\t\tif (secy_stat->pkt_untaged_cnt)\n+\t\t\tprintf(\"RX: pkt_untaged_cnt: 0x%\" PRIx64 \"\\n\", secy_stat->pkt_untaged_cnt);\n+\t\tif (secy_stat->pkt_ctl_cnt)\n+\t\t\tprintf(\"RX: pkt_ctl_cnt: 0x%\" PRIx64 \"\\n\", secy_stat->pkt_ctl_cnt);\n+\t\tif (secy_stat->pkt_notag_cnt)\n+\t\t\tprintf(\"RX: pkt_notag_cnt: 0x%\" PRIx64 \"\\n\", secy_stat->pkt_notag_cnt);\n+\t\tprintf(\"\\n\");\n+\t\tprintf(\"\\n********** RX SC[%u] STATS **************\\n\", rx_sc_id);\n+\n+\t\trte_security_macsec_sc_stats_get(ctx, rx_sc_id, RTE_SECURITY_MACSEC_DIR_RX,\n+\t\t\t\t\t\t &sc_stat);\n+\t\t/* RX */\n+\t\tif (sc_stat.hit_cnt)\n+\t\t\tprintf(\"RX hit_cnt: 0x%\" PRIx64 \"\\n\", sc_stat.hit_cnt);\n+\t\tif (sc_stat.pkt_invalid_cnt)\n+\t\t\tprintf(\"RX pkt_invalid_cnt: 0x%\" PRIx64 \"\\n\", sc_stat.pkt_invalid_cnt);\n+\t\tif (sc_stat.pkt_late_cnt)\n+\t\t\tprintf(\"RX pkt_late_cnt: 0x%\" PRIx64 \"\\n\", sc_stat.pkt_late_cnt);\n+\t\tif (sc_stat.pkt_notvalid_cnt)\n+\t\t\tprintf(\"RX pkt_notvalid_cnt: 0x%\" PRIx64 \"\\n\", sc_stat.pkt_notvalid_cnt);\n+\t\tif (sc_stat.pkt_unchecked_cnt)\n+\t\t\tprintf(\"RX pkt_unchecked_cnt: 0x%\" PRIx64 \"\\n\", sc_stat.pkt_unchecked_cnt);\n+\t\tif (sc_stat.pkt_delay_cnt)\n+\t\t\tprintf(\"RX pkt_delay_cnt: 0x%\" PRIx64 \"\\n\", sc_stat.pkt_delay_cnt);\n+\t\tif (sc_stat.pkt_ok_cnt)\n+\t\t\tprintf(\"RX pkt_ok_cnt: 0x%\" PRIx64 \"\\n\", sc_stat.pkt_ok_cnt);\n+\t\tif (sc_stat.octet_decrypt_cnt)\n+\t\t\tprintf(\"RX octet_decrypt_cnt: 0x%\" PRIx64 \"\\n\", sc_stat.octet_decrypt_cnt);\n+\t\tif (sc_stat.octet_validate_cnt)\n+\t\t\tprintf(\"RX octet_validate_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsc_stat.octet_validate_cnt);\n+\t\tprintf(\"\\n\");\n+\t\tfor (i = 0; i < RTE_SECURITY_MACSEC_NUM_AN; i++) {\n+\t\t\tprintf(\"\\n********** RX SA[%u] STATS ****************\\n\", rx_sa_id[i]);\n+\t\t\tmemset(&sa_stat, 0, sizeof(struct rte_security_macsec_sa_stats));\n+\t\t\trte_security_macsec_sa_stats_get(ctx, rx_sa_id[i],\n+\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_RX, &sa_stat);\n+\n+\t\t\t/* RX */\n+\t\t\tif (sa_stat.pkt_invalid_cnt)\n+\t\t\t\tprintf(\"RX pkt_invalid_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\t\tsa_stat.pkt_invalid_cnt);\n+\t\t\tif (sa_stat.pkt_nosaerror_cnt)\n+\t\t\t\tprintf(\"RX pkt_nosaerror_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\t\tsa_stat.pkt_nosaerror_cnt);\n+\t\t\tif (sa_stat.pkt_notvalid_cnt)\n+\t\t\t\tprintf(\"RX pkt_notvalid_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\t\tsa_stat.pkt_notvalid_cnt);\n+\t\t\tif (sa_stat.pkt_ok_cnt)\n+\t\t\t\tprintf(\"RX pkt_ok_cnt: 0x%\" PRIx64 \"\\n\", sa_stat.pkt_ok_cnt);\n+\t\t\tif (sa_stat.pkt_nosa_cnt)\n+\t\t\t\tprintf(\"RX pkt_nosa_cnt: 0x%\" PRIx64 \"\\n\", sa_stat.pkt_nosa_cnt);\n+\t\t\tprintf(\"\\n\");\n+\t\t}\n+\t}\n+\n+\tif (op == MCS_ENCAP || op == MCS_ENCAP_DECAP ||\n+\t\t\top == MCS_AUTH_ONLY || op == MCS_AUTH_VERIFY) {\n+\t\tmemset(&sess_stats, 0, sizeof(struct rte_security_stats));\n+\t\trte_security_session_stats_get(ctx, tx_sess, &sess_stats);\n+\t\tsecy_stat = &sess_stats.macsec;\n+\n+\t\tprintf(\"\\n********* TX SECY STATS ************\\n\");\n+\t\tif (secy_stat->ctl_pkt_bcast_cnt)\n+\t\t\tprintf(\"TX: ctl_pkt_bcast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->ctl_pkt_bcast_cnt);\n+\t\tif (secy_stat->ctl_pkt_mcast_cnt)\n+\t\t\tprintf(\"TX: ctl_pkt_mcast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->ctl_pkt_mcast_cnt);\n+\t\tif (secy_stat->ctl_pkt_ucast_cnt)\n+\t\t\tprintf(\"TX: ctl_pkt_ucast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->ctl_pkt_ucast_cnt);\n+\t\tif (secy_stat->ctl_octet_cnt)\n+\t\t\tprintf(\"TX: ctl_octet_cnt: 0x%\" PRIx64 \"\\n\", secy_stat->ctl_octet_cnt);\n+\t\tif (secy_stat->unctl_pkt_bcast_cnt)\n+\t\t\tprintf(\"TX: unctl_pkt_bcast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->unctl_pkt_bcast_cnt);\n+\t\tif (secy_stat->unctl_pkt_mcast_cnt)\n+\t\t\tprintf(\"TX: unctl_pkt_mcast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->unctl_pkt_mcast_cnt);\n+\t\tif (secy_stat->unctl_pkt_ucast_cnt)\n+\t\t\tprintf(\"TX: unctl_pkt_ucast_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->unctl_pkt_ucast_cnt);\n+\t\tif (secy_stat->unctl_octet_cnt)\n+\t\t\tprintf(\"TX: unctl_octet_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->unctl_octet_cnt);\n+\t\t/* Valid only for TX */\n+\t\tif (secy_stat->octet_encrypted_cnt)\n+\t\t\tprintf(\"TX: octet_encrypted_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->octet_encrypted_cnt);\n+\t\tif (secy_stat->octet_protected_cnt)\n+\t\t\tprintf(\"TX: octet_protected_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->octet_protected_cnt);\n+\t\tif (secy_stat->pkt_noactivesa_cnt)\n+\t\t\tprintf(\"TX: pkt_noactivesa_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->pkt_noactivesa_cnt);\n+\t\tif (secy_stat->pkt_toolong_cnt)\n+\t\t\tprintf(\"TX: pkt_toolong_cnt: 0x%\" PRIx64 \"\\n\", secy_stat->pkt_toolong_cnt);\n+\t\tif (secy_stat->pkt_untagged_cnt)\n+\t\t\tprintf(\"TX: pkt_untagged_cnt: 0x%\" PRIx64 \"\\n\",\n+\t\t\t\t\tsecy_stat->pkt_untagged_cnt);\n+\n+\n+\t\tmemset(&sc_stat, 0, sizeof(struct rte_security_macsec_sc_stats));\n+\t\trte_security_macsec_sc_stats_get(ctx, tx_sc_id, RTE_SECURITY_MACSEC_DIR_TX,\n+\t\t\t\t\t\t &sc_stat);\n+\t\tprintf(\"\\n********** TX SC[%u] STATS **************\\n\", tx_sc_id);\n+\t\tif (sc_stat.pkt_encrypt_cnt)\n+\t\t\tprintf(\"TX pkt_encrypt_cnt: 0x%\" PRIx64 \"\\n\", sc_stat.pkt_encrypt_cnt);\n+\t\tif (sc_stat.pkt_protected_cnt)\n+\t\t\tprintf(\"TX pkt_protected_cnt: 0x%\" PRIx64 \"\\n\", sc_stat.pkt_protected_cnt);\n+\t\tif (sc_stat.octet_encrypt_cnt)\n+\t\t\tprintf(\"TX octet_encrypt_cnt: 0x%\" PRIx64 \"\\n\", sc_stat.octet_encrypt_cnt);\n+\n+\t\tmemset(&sa_stat, 0, sizeof(struct rte_security_macsec_sa_stats));\n+\t\trte_security_macsec_sa_stats_get(ctx, tx_sa_id[0],\n+\t\t\t\tRTE_SECURITY_MACSEC_DIR_TX, &sa_stat);\n+\t\tprintf(\"\\n********** TX SA[%u] STATS ****************\\n\", tx_sa_id[0]);\n+\t\tif (sa_stat.pkt_encrypt_cnt)\n+\t\t\tprintf(\"TX pkt_encrypt_cnt: 0x%\" PRIx64 \"\\n\", sa_stat.pkt_encrypt_cnt);\n+\t\tif (sa_stat.pkt_protected_cnt)\n+\t\t\tprintf(\"TX pkt_protected_cnt: 0x%\" PRIx64 \"\\n\", sa_stat.pkt_protected_cnt);\n+\t}\n+}\n+\n+static int\n+test_macsec(const struct mcs_test_vector *td[], enum mcs_op op, const struct mcs_test_opts *opts)\n+{\n+\tuint16_t rx_sa_id[MCS_MAX_FLOWS][RTE_SECURITY_MACSEC_NUM_AN] = {0};\n+\tuint16_t tx_sa_id[MCS_MAX_FLOWS][2] = {0};\n+\tuint16_t rx_sc_id[MCS_MAX_FLOWS] = {0};\n+\tuint16_t tx_sc_id[MCS_MAX_FLOWS] = {0};\n+\tvoid *rx_sess[MCS_MAX_FLOWS];\n+\tvoid *tx_sess[MCS_MAX_FLOWS];\n+\tstruct rte_security_session_conf sess_conf = {0};\n+\tstruct rte_security_macsec_sa sa_conf = {0};\n+\tstruct rte_security_macsec_sc sc_conf = {0};\n+\tstruct rte_security_ctx *ctx;\n+\tint nb_rx = 0, nb_sent;\n+\tint i, j = 0, ret, id, an = 0;\n+\tuint8_t tci_off;\n+\n+\tmemset(rx_pkts_burst, 0, sizeof(rx_pkts_burst[0]) * opts->nb_td);\n+\n+\tctx = (struct rte_security_ctx *)rte_eth_dev_get_sec_ctx(port_id);\n+\tif (ctx == NULL) {\n+\t\tprintf(\"Ethernet device doesn't support security features.\\n\");\n+\t\treturn TEST_SKIPPED;\n+\t}\n+\n+\ttci_off = (opts->sectag_insert_mode == 1) ? RTE_ETHER_HDR_LEN :\n+\t\t\tRTE_ETHER_HDR_LEN + (opts->nb_vlan * RTE_VLAN_HLEN);\n+\n+\tfor (i = 0, j = 0; i < opts->nb_td; i++) {\n+\t\tif (op == MCS_DECAP || op == MCS_VERIFY_ONLY)\n+\t\t\ttx_pkts_burst[j] = init_packet(mbufpool, td[i]->secure_pkt.data,\n+\t\t\t\t\t\t\ttd[i]->secure_pkt.len);\n+\t\telse {\n+\t\t\ttx_pkts_burst[j] = init_packet(mbufpool, td[i]->plain_pkt.data,\n+\t\t\t\t\t\t\ttd[i]->plain_pkt.len);\n+\n+\t\t\ttx_pkts_burst[j]->ol_flags |= RTE_MBUF_F_TX_MACSEC;\n+\t\t}\n+\t\tif (tx_pkts_burst[j] == NULL) {\n+\t\t\twhile (j--)\n+\t\t\t\trte_pktmbuf_free(tx_pkts_burst[j]);\n+\t\t\tret = TEST_FAILED;\n+\t\t\tgoto out;\n+\t\t}\n+\t\tj++;\n+\n+\t\tif (op == MCS_DECAP || op == MCS_ENCAP_DECAP ||\n+\t\t\t\top == MCS_VERIFY_ONLY || op == MCS_AUTH_VERIFY) {\n+\t\t\tfor (an = 0; an < RTE_SECURITY_MACSEC_NUM_AN; an++) {\n+\t\t\t\t/* For simplicity, using same SA conf for all AN */\n+\t\t\t\tfill_macsec_sa_conf(td[i], &sa_conf,\n+\t\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_RX, an, tci_off);\n+\t\t\t\tid = rte_security_macsec_sa_create(ctx, &sa_conf);\n+\t\t\t\tif (id < 0) {\n+\t\t\t\t\tprintf(\"MACsec SA create failed : %d.\\n\", id);\n+\t\t\t\t\treturn TEST_FAILED;\n+\t\t\t\t}\n+\t\t\t\trx_sa_id[i][an] = (uint16_t)id;\n+\t\t\t}\n+\t\t\tfill_macsec_sc_conf(td[i], &sc_conf, opts,\n+\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_RX, rx_sa_id[i], tci_off);\n+\t\t\tid = rte_security_macsec_sc_create(ctx, &sc_conf);\n+\t\t\tif (id < 0) {\n+\t\t\t\tprintf(\"MACsec SC create failed : %d.\\n\", id);\n+\t\t\t\tgoto out;\n+\t\t\t}\n+\t\t\trx_sc_id[i] = (uint16_t)id;\n+\n+\t\t\t/* Create Inline IPsec session. */\n+\t\t\tret = fill_session_conf(td[i], port_id, opts, &sess_conf,\n+\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_RX, rx_sc_id[i], tci_off);\n+\t\t\tif (ret)\n+\t\t\t\treturn TEST_FAILED;\n+\n+\t\t\trx_sess[i] = rte_security_session_create(ctx, &sess_conf,\n+\t\t\t\t\tsess_pool);\n+\t\t\tif (rx_sess[i] == NULL) {\n+\t\t\t\tprintf(\"SEC Session init failed.\\n\");\n+\t\t\t\treturn TEST_FAILED;\n+\t\t\t}\n+\t\t\tret = create_default_flow(td[i], port_id,\n+\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_RX, rx_sess[i]);\n+\t\t\tif (ret)\n+\t\t\t\tgoto out;\n+\t\t}\n+\t\tif (op == MCS_ENCAP || op == MCS_ENCAP_DECAP ||\n+\t\t\t\top == MCS_AUTH_ONLY || op == MCS_AUTH_VERIFY) {\n+\t\t\tint id;\n+\n+\t\t\tfill_macsec_sa_conf(td[i], &sa_conf,\n+\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_TX,\n+\t\t\t\t\ttd[i]->secure_pkt.data[tci_off] & RTE_MACSEC_AN_MASK,\n+\t\t\t\t\ttci_off);\n+\t\t\tid = rte_security_macsec_sa_create(ctx, &sa_conf);\n+\t\t\tif (id < 0) {\n+\t\t\t\tprintf(\"MACsec SA create failed : %d.\\n\", id);\n+\t\t\t\treturn TEST_FAILED;\n+\t\t\t}\n+\t\t\ttx_sa_id[i][0] = (uint16_t)id;\n+\t\t\ttx_sa_id[i][1] = MCS_INVALID_SA;\n+\t\t\tfill_macsec_sc_conf(td[i], &sc_conf, opts,\n+\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_TX, tx_sa_id[i], tci_off);\n+\t\t\tid = rte_security_macsec_sc_create(ctx, &sc_conf);\n+\t\t\tif (id < 0) {\n+\t\t\t\tprintf(\"MACsec SC create failed : %d.\\n\", id);\n+\t\t\t\tgoto out;\n+\t\t\t}\n+\t\t\ttx_sc_id[i] = (uint16_t)id;\n+\n+\t\t\t/* Create Inline IPsec session. */\n+\t\t\tret = fill_session_conf(td[i], port_id, opts, &sess_conf,\n+\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_TX, tx_sc_id[i], tci_off);\n+\t\t\tif (ret)\n+\t\t\t\treturn TEST_FAILED;\n+\n+\t\t\ttx_sess[i] = rte_security_session_create(ctx, &sess_conf,\n+\t\t\t\t\tsess_pool);\n+\t\t\tif (tx_sess[i] == NULL) {\n+\t\t\t\tprintf(\"SEC Session init failed.\\n\");\n+\t\t\t\treturn TEST_FAILED;\n+\t\t\t}\n+\t\t\tret = create_default_flow(td[i], port_id,\n+\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_TX, tx_sess[i]);\n+\t\t\tif (ret)\n+\t\t\t\tgoto out;\n+\t\t}\n+\t}\n+\n+\t/* Send packet to ethdev for inline MACsec processing. */\n+\tnb_sent = rte_eth_tx_burst(port_id, 0, tx_pkts_burst, j);\n+\n+\tif (nb_sent != j) {\n+\t\tprintf(\"\\nUnable to TX %d packets, sent: %i\", j, nb_sent);\n+\t\tfor ( ; nb_sent < j; nb_sent++)\n+\t\t\trte_pktmbuf_free(tx_pkts_burst[nb_sent]);\n+\t\tret = TEST_FAILED;\n+\t\tgoto out;\n+\t}\n+\n+\trte_pause();\n+\n+\t/* Receive back packet on loopback interface. */\n+\tdo {\n+\t\tnb_rx += rte_eth_rx_burst(port_id, 0,\n+\t\t\t\t&rx_pkts_burst[nb_rx],\n+\t\t\t\tnb_sent - nb_rx);\n+\t\tif (nb_rx >= nb_sent)\n+\t\t\tbreak;\n+\t\trte_delay_ms(1);\n+\t} while (j++ < 5 && nb_rx == 0);\n+\n+\tif (nb_rx != nb_sent) {\n+\t\tprintf(\"\\nUnable to RX all %d packets, received(%i)\",\n+\t\t\t\tnb_sent, nb_rx);\n+\t\twhile (--nb_rx >= 0)\n+\t\t\trte_pktmbuf_free(rx_pkts_burst[nb_rx]);\n+\t\tret = TEST_FAILED;\n+\t\tgoto out;\n+\t}\n+\n+\tfor (i = 0; i < nb_rx; i++) {\n+\t\tret = test_macsec_post_process(rx_pkts_burst[i], td[i], op,\n+\t\t\t\topts->check_out_pkts_untagged);\n+\t\tif (ret != TEST_SUCCESS) {\n+\t\t\tfor ( ; i < nb_rx; i++)\n+\t\t\t\trte_pktmbuf_free(rx_pkts_burst[i]);\n+\t\t\tgoto out;\n+\t\t}\n+\n+\t\trte_pktmbuf_free(rx_pkts_burst[i]);\n+\t\trx_pkts_burst[i] = NULL;\n+\t}\n+out:\n+\tfor (i = 0; i < opts->nb_td; i++) {\n+\t\tif (opts->dump_all_stats) {\n+\t\t\tmcs_stats_dump(ctx, op,\n+\t\t\t\t\trx_sess[i], tx_sess[i],\n+\t\t\t\t\trx_sc_id[i], tx_sc_id[i],\n+\t\t\t\t\trx_sa_id[i], tx_sa_id[i]);\n+\t\t}\n+\t}\n+\n+\tdestroy_default_flow(port_id);\n+\n+\t/* Destroy session so that other cases can create the session again */\n+\tfor (i = 0; i < opts->nb_td; i++) {\n+\t\tif (op == MCS_ENCAP || op == MCS_ENCAP_DECAP ||\n+\t\t\t\top == MCS_AUTH_ONLY || op == MCS_AUTH_VERIFY) {\n+\t\t\trte_security_session_destroy(ctx, tx_sess[i]);\n+\t\t\ttx_sess[i] = NULL;\n+\t\t\trte_security_macsec_sc_destroy(ctx, tx_sc_id[i],\n+\t\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_TX);\n+\t\t\trte_security_macsec_sa_destroy(ctx, tx_sa_id[i][0],\n+\t\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_TX);\n+\t\t}\n+\t\tif (op == MCS_DECAP || op == MCS_ENCAP_DECAP ||\n+\t\t\t\top == MCS_VERIFY_ONLY || op == MCS_AUTH_VERIFY) {\n+\t\t\trte_security_session_destroy(ctx, rx_sess[i]);\n+\t\t\trx_sess[i] = NULL;\n+\t\t\trte_security_macsec_sc_destroy(ctx, rx_sc_id[i],\n+\t\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_RX);\n+\t\t\tfor (j = 0; j < RTE_SECURITY_MACSEC_NUM_AN; j++) {\n+\t\t\t\trte_security_macsec_sa_destroy(ctx, rx_sa_id[i][j],\n+\t\t\t\t\t\tRTE_SECURITY_MACSEC_DIR_RX);\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\treturn ret;\n+}\n+\n+static int\n+test_inline_macsec_encap_all(const void *data __rte_unused)\n+{\n+\tconst struct mcs_test_vector *cur_td;\n+\tstruct mcs_test_opts opts = {0};\n+\tint err, all_err = 0;\n+\tint i, size;\n+\n+\topts.val_frames = RTE_SECURITY_MACSEC_VALIDATE_STRICT;\n+\topts.encrypt = true;\n+\topts.protect_frames = true;\n+\topts.sa_in_use = 1;\n+\topts.nb_td = 1;\n+\topts.sectag_insert_mode = 1;\n+\topts.mtu = RTE_ETHER_MTU;\n+\n+\tsize = (sizeof(list_mcs_cipher_vectors) / sizeof((list_mcs_cipher_vectors)[0]));\n+\tfor (i = 0; i < size; i++) {\n+\t\tcur_td = &list_mcs_cipher_vectors[i];\n+\t\terr = test_macsec(&cur_td, MCS_ENCAP, &opts);\n+\t\tif (err) {\n+\t\t\tprintf(\"\\nCipher Auth Encryption case %d failed\", cur_td->test_idx);\n+\t\t\terr = -1;\n+\t\t} else {\n+\t\t\tprintf(\"\\nCipher Auth Encryption case %d Passed\", cur_td->test_idx);\n+\t\t\terr = 0;\n+\t\t}\n+\t\tall_err += err;\n+\t}\n+\tprintf(\"\\n%s: Success: %d, Failure: %d\\n\", __func__, size + all_err, -all_err);\n+\n+\treturn all_err;\n+}\n+\n+static int\n+test_inline_macsec_decap_all(const void *data __rte_unused)\n+{\n+\tconst struct mcs_test_vector *cur_td;\n+\tstruct mcs_test_opts opts = {0};\n+\tint err, all_err = 0;\n+\tint i, size;\n+\n+\topts.val_frames = RTE_SECURITY_MACSEC_VALIDATE_STRICT;\n+\topts.sa_in_use = 1;\n+\topts.nb_td = 1;\n+\topts.sectag_insert_mode = 1;\n+\topts.mtu = RTE_ETHER_MTU;\n+\n+\tsize = (sizeof(list_mcs_cipher_vectors) / sizeof((list_mcs_cipher_vectors)[0]));\n+\tfor (i = 0; i < size; i++) {\n+\t\tcur_td = &list_mcs_cipher_vectors[i];\n+\t\terr = test_macsec(&cur_td, MCS_DECAP, &opts);\n+\t\tif (err) {\n+\t\t\tprintf(\"\\nCipher Auth Decryption case %d failed\", cur_td->test_idx);\n+\t\t\terr = -1;\n+\t\t} else {\n+\t\t\tprintf(\"\\nCipher Auth Decryption case %d Passed\", cur_td->test_idx);\n+\t\t\terr = 0;\n+\t\t}\n+\t\tall_err += err;\n+\t}\n+\tprintf(\"\\n%s: Success: %d, Failure: %d\\n\", __func__, size + all_err, -all_err);\n+\n+\treturn all_err;\n+}\n+\n+static int\n+ut_setup_inline_macsec(void)\n+{\n+\tint ret;\n+\n+\t/* Start device */\n+\tret = rte_eth_dev_start(port_id);\n+\tif (ret < 0) {\n+\t\tprintf(\"rte_eth_dev_start: err=%d, port=%d\\n\",\n+\t\t\tret, port_id);\n+\t\treturn ret;\n+\t}\n+\t/* always enable promiscuous */\n+\tret = rte_eth_promiscuous_enable(port_id);\n+\tif (ret != 0) {\n+\t\tprintf(\"rte_eth_promiscuous_enable: err=%s, port=%d\\n\",\n+\t\t\trte_strerror(-ret), port_id);\n+\t\treturn ret;\n+\t}\n+\n+\tcheck_all_ports_link_status(1, RTE_PORT_ALL);\n+\n+\treturn 0;\n+}\n+\n+static void\n+ut_teardown_inline_macsec(void)\n+{\n+\tuint16_t portid;\n+\tint ret;\n+\n+\t/* port tear down */\n+\tRTE_ETH_FOREACH_DEV(portid) {\n+\t\tret = rte_eth_dev_stop(portid);\n+\t\tif (ret != 0)\n+\t\t\tprintf(\"rte_eth_dev_stop: err=%s, port=%u\\n\",\n+\t\t\t       rte_strerror(-ret), portid);\n+\n+\t}\n+}\n+\n+static int\n+inline_macsec_testsuite_setup(void)\n+{\n+\tuint16_t nb_rxd;\n+\tuint16_t nb_txd;\n+\tuint16_t nb_ports;\n+\tint ret;\n+\tuint16_t nb_rx_queue = 1, nb_tx_queue = 1;\n+\n+\tprintf(\"Start inline MACsec test.\\n\");\n+\n+\tnb_ports = rte_eth_dev_count_avail();\n+\tif (nb_ports < NB_ETHPORTS_USED) {\n+\t\tprintf(\"At least %u port(s) used for test\\n\",\n+\t\t       NB_ETHPORTS_USED);\n+\t\treturn TEST_SKIPPED;\n+\t}\n+\n+\tret = init_mempools(NB_MBUF);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tif (tx_pkts_burst == NULL) {\n+\t\ttx_pkts_burst = (struct rte_mbuf **)rte_calloc(\"tx_buff\",\n+\t\t\t\t\t  MAX_TRAFFIC_BURST,\n+\t\t\t\t\t  sizeof(void *),\n+\t\t\t\t\t  RTE_CACHE_LINE_SIZE);\n+\t\tif (!tx_pkts_burst)\n+\t\t\treturn TEST_FAILED;\n+\n+\t\trx_pkts_burst = (struct rte_mbuf **)rte_calloc(\"rx_buff\",\n+\t\t\t\t\t  MAX_TRAFFIC_BURST,\n+\t\t\t\t\t  sizeof(void *),\n+\t\t\t\t\t  RTE_CACHE_LINE_SIZE);\n+\t\tif (!rx_pkts_burst)\n+\t\t\treturn TEST_FAILED;\n+\t}\n+\n+\tprintf(\"Generate %d packets\\n\", MAX_TRAFFIC_BURST);\n+\n+\tnb_rxd = RTE_TEST_RX_DESC_DEFAULT;\n+\tnb_txd = RTE_TEST_TX_DESC_DEFAULT;\n+\n+\t/* configuring port 0 for the test is enough */\n+\tport_id = 0;\n+\t/* port configure */\n+\tret = rte_eth_dev_configure(port_id, nb_rx_queue,\n+\t\t\t\t    nb_tx_queue, &port_conf);\n+\tif (ret < 0) {\n+\t\tprintf(\"Cannot configure device: err=%d, port=%d\\n\",\n+\t\t\t ret, port_id);\n+\t\treturn ret;\n+\t}\n+\tret = rte_eth_macaddr_get(port_id, &ports_eth_addr[port_id]);\n+\tif (ret < 0) {\n+\t\tprintf(\"Cannot get mac address: err=%d, port=%d\\n\",\n+\t\t\t ret, port_id);\n+\t\treturn ret;\n+\t}\n+\tprintf(\"Port %u \", port_id);\n+\tprint_ethaddr(\"Address:\", &ports_eth_addr[port_id]);\n+\tprintf(\"\\n\");\n+\n+\t/* tx queue setup */\n+\tret = rte_eth_tx_queue_setup(port_id, 0, nb_txd,\n+\t\t\t\t     SOCKET_ID_ANY, &tx_conf);\n+\tif (ret < 0) {\n+\t\tprintf(\"rte_eth_tx_queue_setup: err=%d, port=%d\\n\",\n+\t\t\t\tret, port_id);\n+\t\treturn ret;\n+\t}\n+\t/* rx queue steup */\n+\tret = rte_eth_rx_queue_setup(port_id, 0, nb_rxd, SOCKET_ID_ANY,\n+\t\t\t\t     &rx_conf, mbufpool);\n+\tif (ret < 0) {\n+\t\tprintf(\"rte_eth_rx_queue_setup: err=%d, port=%d\\n\",\n+\t\t\t\tret, port_id);\n+\t\treturn ret;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static void\n+inline_macsec_testsuite_teardown(void)\n+{\n+\tuint16_t portid;\n+\tint ret;\n+\n+\t/* port tear down */\n+\tRTE_ETH_FOREACH_DEV(portid) {\n+\t\tret = rte_eth_dev_reset(portid);\n+\t\tif (ret != 0)\n+\t\t\tprintf(\"rte_eth_dev_reset: err=%s, port=%u\\n\",\n+\t\t\t       rte_strerror(-ret), port_id);\n+\t}\n+\trte_free(tx_pkts_burst);\n+\trte_free(rx_pkts_burst);\n+}\n+\n+\n+static struct unit_test_suite inline_macsec_testsuite  = {\n+\t.suite_name = \"Inline MACsec Ethernet Device Unit Test Suite\",\n+\t.unit_test_cases = {\n+\t\tTEST_CASE_NAMED_ST(\n+\t\t\t\"MACsec encap(Cipher+Auth) known vector\",\n+\t\t\tut_setup_inline_macsec, ut_teardown_inline_macsec,\n+\t\t\ttest_inline_macsec_encap_all),\n+\t\tTEST_CASE_NAMED_ST(\n+\t\t\t\"MACsec decap(De-cipher+verify) known vector\",\n+\t\t\tut_setup_inline_macsec, ut_teardown_inline_macsec,\n+\t\t\ttest_inline_macsec_decap_all),\n+\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n+\t},\n+};\n+\n+static int\n+test_inline_macsec(void)\n+{\n+\tinline_macsec_testsuite.setup = inline_macsec_testsuite_setup;\n+\tinline_macsec_testsuite.teardown = inline_macsec_testsuite_teardown;\n+\treturn unit_test_suite_runner(&inline_macsec_testsuite);\n+}\n+\n+#endif /* !RTE_EXEC_ENV_WINDOWS */\n+\n+REGISTER_TEST_COMMAND(inline_macsec_autotest, test_inline_macsec);\ndiff --git a/app/test/test_security_inline_macsec_vectors.h b/app/test/test_security_inline_macsec_vectors.h\nnew file mode 100644\nindex 0000000000..68bd485419\n--- /dev/null\n+++ b/app/test/test_security_inline_macsec_vectors.h\n@@ -0,0 +1,1086 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(C) 2023 Marvell.\n+ */\n+#ifndef _TEST_INLINE_MACSEC_VECTORS_H_\n+#define _TEST_INLINE_MACSEC_VECTORS_H_\n+\n+#define MCS_MAX_DATA_SZ\t\t\t\t256\n+#define MCS_MAX_KEY_LEN\t\t\t\t32\n+#define MCS_IV_LEN\t\t\t\t12\n+#define MCS_SALT_LEN\t\t\t\t12\n+#define MCS_MAX_FLOWS\t\t\t\t63\n+\n+enum mcs_op {\n+\tMCS_NO_OP,\n+\tMCS_ENCAP,\n+\tMCS_DECAP,\n+\tMCS_ENCAP_DECAP,\n+\tMCS_AUTH_ONLY,\n+\tMCS_VERIFY_ONLY,\n+\tMCS_AUTH_VERIFY,\n+};\n+\n+struct mcs_test_vector {\n+\tuint32_t test_idx;\n+\tenum rte_security_macsec_alg alg;\n+\tuint32_t ssci;\n+\tuint32_t xpn;\n+\tuint8_t salt[MCS_SALT_LEN];\n+\tstruct {\n+\t\tuint8_t data[MCS_MAX_KEY_LEN];\n+\t\tuint16_t len;\n+\t} sa_key;\n+\tstruct {\n+\t\tuint8_t data[MCS_MAX_DATA_SZ];\n+\t\tuint16_t len;\n+\t} plain_pkt;\n+\tstruct {\n+\t\tuint8_t data[MCS_MAX_DATA_SZ];\n+\t\tuint16_t len;\n+\t} secure_pkt;\n+};\n+\n+static const struct mcs_test_vector list_mcs_cipher_vectors[] = {\n+/* gcm_128_64B_cipher */\n+{\n+\t.test_idx = 0,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_128,\n+\t.ssci = 0x0,\n+\t.salt = {0},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x07, 0x1B, 0x11, 0x3B, 0x0C, 0xA7, 0x43, 0xFE,\n+\t\t\t0xCC, 0xCF, 0x3D, 0x05, 0x1F, 0x73, 0x73, 0x82\n+\t\t},\n+\t\t.len = 16,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xE2, 0x01, 0x06, 0xD7, 0xCD, 0x0D,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF0, 0x76, 0x1E, 0x8D, 0xCD, 0x3D,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x40, 0x41, 0x42,\n+\t\t\t0x43, 0x44, 0x45, 0x46,\n+\t\t},\n+\t\t.len = 64,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xE2, 0x01, 0x06, 0xD7, 0xCD, 0x0D,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF0, 0x76, 0x1E, 0x8D, 0xCD, 0x3D,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x2C,\n+\t\t\t/* SL */\n+\t\t\t0x0,\n+\t\t\t/* PN */\n+\t\t\t0x0, 0x0, 0x0, 0x2,\n+\t\t\t/* SCI */\n+\t\t\t0xFE, 0x2F, 0xCD, 0x14, 0x24, 0x1B, 0x88, 0x2C,\n+\t\t\t/* Secure Data */\n+\t\t\t0x39, 0x38, 0x97, 0x44, 0xA2, 0x6D, 0x71, 0x3D,\n+\t\t\t0x14, 0x27, 0xC7, 0x3E, 0x02, 0x96, 0x81, 0xAD,\n+\t\t\t0x47, 0x82, 0x2A, 0xCF, 0x19, 0x79, 0x12, 0x49,\n+\t\t\t0x0F, 0x93, 0x5A, 0x32, 0x43, 0x79, 0xEF, 0x9D,\n+\t\t\t0x70, 0xF8, 0xA9, 0xBE, 0x3D, 0x00, 0x5D, 0x22,\n+\t\t\t0xDA, 0x87, 0x3D, 0xC1, 0xBE, 0x1B, 0x13, 0xD9,\n+\t\t\t0x99, 0xDB, 0xF1, 0xC8,\n+\t\t\t/* ICV */\n+\t\t\t0x4B, 0xC4, 0xF8, 0xC6,\t0x09, 0x78, 0xB9, 0xBB,\n+\t\t\t0x5D, 0xC0, 0x04, 0xF3,\t0x20, 0x7D, 0x14, 0x87,\n+\t\t},\n+\t\t.len = 96,\n+\t},\n+},\n+/* gcm_128_54B_cipher */\n+{\n+\t.test_idx = 1,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_128,\n+\t.ssci = 0x0,\n+\t.xpn = 0,\n+\t.salt = {0},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x07, 0x1B, 0x11, 0x3B, 0x0C, 0xA7, 0x43, 0xFE,\n+\t\t\t0xCC, 0xCF, 0x3D, 0x05, 0x1F, 0x73, 0x73, 0x82,\n+\t\t},\n+\t\t.len = 16,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xE2, 0x01, 0x06, 0xD7, 0xCD, 0x0D,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF0, 0x76, 0x1E, 0x8D, 0xCD, 0x3D,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x00, 0x04,\n+\t\t},\n+\t\t.len = 54,\n+\t},\n+\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xE2, 0x01, 0x06, 0xD7, 0xCD, 0x0D,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF0, 0x76, 0x1E, 0x8D, 0xCD, 0x3D,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x4C,\n+\t\t\t/* SL */\n+\t\t\t0x2A,\n+\t\t\t/* PN */\n+\t\t\t0x76, 0xD4, 0x57, 0xED,\n+\t\t\t/* Secure Data */\n+\t\t\t0x13, 0xB4, 0xC7, 0x2B, 0x38, 0x9D, 0xC5, 0x01,\n+\t\t\t0x8E, 0x72, 0xA1, 0x71, 0xDD, 0x85, 0xA5, 0xD3,\n+\t\t\t0x75, 0x22, 0x74, 0xD3, 0xA0, 0x19, 0xFB, 0xCA,\n+\t\t\t0xED, 0x09, 0xA4, 0x25, 0xCD, 0x9B, 0x2E, 0x1C,\n+\t\t\t0x9B, 0x72, 0xEE, 0xE7, 0xC9, 0xDE, 0x7D, 0x52,\n+\t\t\t0xB3, 0xF3,\n+\t\t\t/* ICV */\n+\t\t\t0xD6, 0xA5, 0x28, 0x4F, 0x4A, 0x6D, 0x3F, 0xE2,\n+\t\t\t0x2A, 0x5D, 0x6C, 0x2B, 0x96, 0x04, 0x94, 0xC3,\n+\t\t},\n+\t\t.len = 78,\n+\t},\n+},\n+/* gcm_256_54B_cipher */\n+{\n+\t.test_idx = 2,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_256,\n+\t.ssci = 0x0,\n+\t.xpn = 0,\n+\t.salt = {0},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x69, 0x1D, 0x3E, 0xE9, 0x09, 0xD7, 0xF5, 0x41,\n+\t\t\t0x67, 0xFD, 0x1C, 0xA0, 0xB5, 0xD7, 0x69, 0x08,\n+\t\t\t0x1F, 0x2B, 0xDE, 0x1A, 0xEE, 0x65, 0x5F, 0xDB,\n+\t\t\t0xAB, 0x80, 0xBD, 0x52, 0x95, 0xAE, 0x6B, 0xE7,\n+\t\t},\n+\t\t.len = 32,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xE2, 0x01, 0x06, 0xD7, 0xCD, 0x0D,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF0, 0x76, 0x1E, 0x8D, 0xCD, 0x3D,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x00, 0x04,\n+\t\t},\n+\t\t.len = 54,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xE2, 0x01, 0x06, 0xD7, 0xCD, 0x0D,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF0, 0x76, 0x1E, 0x8D, 0xCD, 0x3D,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x4C,\n+\t\t\t/* SL */\n+\t\t\t0x2A,\n+\t\t\t/* PN */\n+\t\t\t0x76, 0xD4, 0x57, 0xED,\n+\t\t\t/* Secure Data */\n+\t\t\t0xC1, 0x62, 0x3F, 0x55, 0x73, 0x0C, 0x93, 0x53,\n+\t\t\t0x30, 0x97, 0xAD, 0xDA, 0xD2, 0x56, 0x64, 0x96,\n+\t\t\t0x61, 0x25, 0x35, 0x2B, 0x43, 0xAD, 0xAC, 0xBD,\n+\t\t\t0x61, 0xC5, 0xEF, 0x3A, 0xC9, 0x0B, 0x5B, 0xEE,\n+\t\t\t0x92, 0x9C, 0xE4, 0x63, 0x0E, 0xA7, 0x9F, 0x6C,\n+\t\t\t0xE5, 0x19,\n+\t\t\t/* ICV */\n+\t\t\t0x12, 0xAF, 0x39, 0xC2, 0xD1, 0xFD, 0xC2, 0x05,\n+\t\t\t0x1F, 0x8B, 0x7B, 0x3C, 0x9D, 0x39, 0x7E, 0xF2,\n+\t\t},\n+\t\t.len = 78,\n+\t},\n+},\n+/* gcm_128_xpn_54B_cipher */\n+{\n+\t.test_idx = 3,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_XPN_128,\n+\t.ssci = 0x7A30C118,\n+\t.xpn = 0xB0DF459C, /* Most significant 32 bits */\n+\t.salt = {\n+\t\t0xE6, 0x30, 0xE8, 0x1A, 0x48, 0xDE,\n+\t\t0x86, 0xA2, 0x1C, 0x66, 0xFA, 0x6D,\n+\t},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x07, 0x1B, 0x11, 0x3B, 0x0C, 0xA7, 0x43, 0xFE,\n+\t\t\t0xCC, 0xCF, 0x3D, 0x05, 0x1F, 0x73, 0x73, 0x82,\n+\t\t},\n+\t\t.len = 16,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xE2, 0x01, 0x06, 0xD7, 0xCD, 0x0D,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF0, 0x76, 0x1E, 0x8D, 0xCD, 0x3D,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x00, 0x04,\n+\t\t},\n+\t\t.len = 54,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xE2, 0x01, 0x06, 0xD7, 0xCD, 0x0D,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF0, 0x76, 0x1E, 0x8D, 0xCD, 0x3D,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x4C,\n+\t\t\t/* SL */\n+\t\t\t0x2A,\n+\t\t\t/* PN */\n+\t\t\t0x76, 0xD4, 0x57, 0xED,\n+\t\t\t/* Secure Data */\n+\t\t\t0x9C, 0xA4, 0x69, 0x84, 0x43, 0x02, 0x03, 0xED,\n+\t\t\t0x41, 0x6E, 0xBD, 0xC2, 0xFE, 0x26, 0x22, 0xBA,\n+\t\t\t0x3E, 0x5E, 0xAB, 0x69, 0x61, 0xC3, 0x63, 0x83,\n+\t\t\t0x00, 0x9E, 0x18, 0x7E, 0x9B, 0x0C, 0x88, 0x56,\n+\t\t\t0x46, 0x53, 0xB9, 0xAB, 0xD2, 0x16, 0x44, 0x1C,\n+\t\t\t0x6A, 0xB6,\n+\t\t\t/* ICV */\n+\t\t\t0xF0, 0xA2, 0x32, 0xE9, 0xE4, 0x4C, 0x97, 0x8C,\n+\t\t\t0xF7, 0xCD, 0x84, 0xD4, 0x34, 0x84, 0xD1, 0x01,\n+\t\t},\n+\t\t.len = 78,\n+\t},\n+},\n+/* gcm_256_xpn_54B_cipher */\n+{\n+\t.test_idx = 4,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_XPN_256,\n+\t.ssci = 0x7A30C118,\n+\t.xpn = 0xB0DF459C, /* Most significant 32 bits */\n+\t.salt = {\n+\t\t0xE6, 0x30, 0xE8, 0x1A, 0x48, 0xDE,\n+\t\t0x86, 0xA2, 0x1C, 0x66, 0xFA, 0x6D,\n+\t},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x69, 0x1D, 0x3E, 0xE9, 0x09, 0xD7, 0xF5, 0x41,\n+\t\t\t0x67, 0xFD, 0x1C, 0xA0, 0xB5, 0xD7, 0x69, 0x08,\n+\t\t\t0x1F, 0x2B, 0xDE, 0x1A, 0xEE, 0x65, 0x5F, 0xDB,\n+\t\t\t0xAB, 0x80, 0xBD, 0x52, 0x95, 0xAE, 0x6B, 0xE7,\n+\t\t},\n+\t\t.len = 32,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xE2, 0x01, 0x06, 0xD7, 0xCD, 0x0D,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF0, 0x76, 0x1E, 0x8D, 0xCD, 0x3D,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x00, 0x04,\n+\t\t},\n+\t\t.len = 54,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xE2, 0x01, 0x06, 0xD7, 0xCD, 0x0D,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF0, 0x76, 0x1E, 0x8D, 0xCD, 0x3D,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x4C,\n+\t\t\t/* SL */\n+\t\t\t0x2A,\n+\t\t\t/* PN */\n+\t\t\t0x76, 0xD4, 0x57, 0xED,\n+\t\t\t/* Secure Data */\n+\t\t\t0x88, 0xD9, 0xF7, 0xD1, 0xF1, 0x57, 0x8E, 0xE3,\n+\t\t\t0x4B, 0xA7, 0xB1, 0xAB, 0xC8, 0x98, 0x93, 0xEF,\n+\t\t\t0x1D, 0x33, 0x98, 0xC9, 0xF1, 0xDD, 0x3E, 0x47,\n+\t\t\t0xFB, 0xD8, 0x55, 0x3E, 0x0F, 0xF7, 0x86, 0xEF,\n+\t\t\t0x56, 0x99, 0xEB, 0x01, 0xEA, 0x10, 0x42, 0x0D,\n+\t\t\t0x0E, 0xBD,\n+\t\t\t/* ICV */\n+\t\t\t0x39, 0xA0, 0xE2, 0x73, 0xC4, 0xC7, 0xF9, 0x5E,\n+\t\t\t0xD8, 0x43, 0x20, 0x7D, 0x7A, 0x49, 0x7D, 0xFA,\n+\t\t},\n+\t\t.len = 78,\n+\t},\n+},\n+/* gcm_128_60B_cipher */\n+{\n+\t.test_idx = 5,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_128,\n+\t.ssci = 0x0,\n+\t.xpn = 0x0, /* Most significant 32 bits */\n+\t.salt = {0},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0xAD, 0x7A, 0x2B, 0xD0, 0x3E, 0xAC, 0x83, 0x5A,\n+\t\t\t0x6F, 0x62, 0x0F, 0xDC, 0xB5, 0x06, 0xB3, 0x45,\n+\t\t},\n+\t\t.len = 16,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xD6, 0x09, 0xB1, 0xF0, 0x56, 0x63,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0x0D, 0x46, 0xDF, 0x99, 0x8D,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x00, 0x02,\n+\t\t},\n+\t\t.len = 60,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xD6, 0x09, 0xB1, 0xF0, 0x56, 0x63,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0x0D, 0x46, 0xDF, 0x99, 0x8D,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x2E,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0xB2, 0xC2, 0x84, 0x65,\n+\t\t\t/* SCI */\n+\t\t\t0x12, 0x15, 0x35, 0x24, 0xC0, 0x89, 0x5E, 0x81,\n+\t\t\t/* Secure Data */\n+\t\t\t0x70, 0x1A, 0xFA, 0x1C, 0xC0, 0x39, 0xC0, 0xD7,\n+\t\t\t0x65, 0x12, 0x8A, 0x66, 0x5D, 0xAB, 0x69, 0x24,\n+\t\t\t0x38, 0x99, 0xBF, 0x73, 0x18, 0xCC, 0xDC, 0x81,\n+\t\t\t0xC9, 0x93, 0x1D, 0xA1, 0x7F, 0xBE, 0x8E, 0xDD,\n+\t\t\t0x7D, 0x17, 0xCB, 0x8B, 0x4C, 0x26, 0xFC, 0x81,\n+\t\t\t0xE3, 0x28, 0x4F, 0x2B, 0x7F, 0xBA, 0x71, 0x3D,\n+\t\t\t/* ICV */\n+\t\t\t0x4F, 0x8D, 0x55, 0xE7, 0xD3, 0xF0, 0x6F, 0xD5,\n+\t\t\t0xA1, 0x3C, 0x0C, 0x29, 0xB9, 0xD5, 0xB8, 0x80,\n+\t\t},\n+\t\t.len = 92,\n+\t},\n+},\n+/* gcm_256_60B_cipher */\n+{\n+\t.test_idx = 6,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_256,\n+\t.ssci = 0x0,\n+\t.xpn = 0x0, /* Most significant 32 bits */\n+\t.salt = {0},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0xE3, 0xC0, 0x8A, 0x8F, 0x06, 0xC6, 0xE3, 0xAD,\n+\t\t\t0x95, 0xA7, 0x05, 0x57, 0xB2, 0x3F, 0x75, 0x48,\n+\t\t\t0x3C, 0xE3, 0x30, 0x21, 0xA9, 0xC7, 0x2B, 0x70,\n+\t\t\t0x25, 0x66, 0x62, 0x04, 0xC6, 0x9C, 0x0B, 0x72,\n+\t\t},\n+\t\t.len = 32,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xD6, 0x09, 0xB1, 0xF0, 0x56, 0x63,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0x0D, 0x46, 0xDF, 0x99, 0x8D,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x00, 0x02,\n+\t\t},\n+\t\t.len = 60,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xD6, 0x09, 0xB1, 0xF0, 0x56, 0x63,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0x0D, 0x46, 0xDF, 0x99, 0x8D,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x2E,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0xB2, 0xC2, 0x84, 0x65,\n+\t\t\t/* SCI */\n+\t\t\t0x12, 0x15, 0x35, 0x24, 0xC0, 0x89, 0x5E, 0x81,\n+\t\t\t/* Secure Data */\n+\t\t\t0xE2, 0x00, 0x6E, 0xB4, 0x2F, 0x52, 0x77, 0x02,\n+\t\t\t0x2D, 0x9B, 0x19, 0x92, 0x5B, 0xC4, 0x19, 0xD7,\n+\t\t\t0xA5, 0x92, 0x66, 0x6C, 0x92, 0x5F, 0xE2, 0xEF,\n+\t\t\t0x71, 0x8E, 0xB4, 0xE3, 0x08, 0xEF, 0xEA, 0xA7,\n+\t\t\t0xC5, 0x27, 0x3B, 0x39, 0x41, 0x18, 0x86, 0x0A,\n+\t\t\t0x5B, 0xE2, 0xA9, 0x7F, 0x56, 0xAB, 0x78, 0x36,\n+\t\t\t/* ICV */\n+\t\t\t0x5C, 0xA5, 0x97, 0xCD, 0xBB, 0x3E, 0xDB, 0x8D,\n+\t\t\t0x1A, 0x11, 0x51, 0xEA, 0x0A, 0xF7, 0xB4, 0x36,\n+\t\t},\n+\t\t.len = 92,\n+\t},\n+},\n+/* gcm_128_xpn_60B_cipher */\n+{\n+\t.test_idx = 7,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_XPN_128,\n+\t.ssci = 0x7A30C118,\n+\t.xpn = 0xB0DF459C, /* Most significant 32 bits */\n+\t.salt = {\n+\t\t0xE6, 0x30, 0xE8, 0x1A, 0x48, 0xDE,\n+\t\t0x86, 0xA2, 0x1C, 0x66, 0xFA, 0x6D,\n+\t},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0xAD, 0x7A, 0x2B, 0xD0, 0x3E, 0xAC, 0x83, 0x5A,\n+\t\t\t0x6F, 0x62, 0x0F, 0xDC, 0xB5, 0x06, 0xB3, 0x45,\n+\t\t},\n+\t\t.len = 16,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xD6, 0x09, 0xB1, 0xF0, 0x56, 0x63,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0x0D, 0x46, 0xDF, 0x99, 0x8D,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x00, 0x02,\n+\t\t},\n+\t\t.len = 60,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xD6, 0x09, 0xB1, 0xF0, 0x56, 0x63,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0x0D, 0x46, 0xDF, 0x99, 0x8D,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x2E,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0xB2, 0xC2, 0x84, 0x65,\n+\t\t\t/* SCI */\n+\t\t\t0x12, 0x15, 0x35, 0x24, 0xC0, 0x89, 0x5E, 0x81,\n+\t\t\t/* Secure Data */\n+\t\t\t0x07, 0x12, 0xD9, 0x80, 0xCA, 0x50, 0xBB, 0xED,\n+\t\t\t0x35, 0xA0, 0xFA, 0x56, 0x63, 0x38, 0x72, 0x9F,\n+\t\t\t0xFA, 0x16, 0xD1, 0x9F, 0xFC, 0xF0, 0x7B, 0x3A,\n+\t\t\t0x1E, 0x79, 0x19, 0xB3, 0x77, 0x6A, 0xAC, 0xEC,\n+\t\t\t0x8A, 0x59, 0x37, 0x20, 0x8B, 0x48, 0x3A, 0x76,\n+\t\t\t0x91, 0x98, 0x4D, 0x38, 0x07, 0x92, 0xE0, 0x7F,\n+\t\t\t/* ICV */\n+\t\t\t0xC2, 0xC3, 0xC7, 0x9F, 0x26, 0x3F, 0xA6, 0xBF,\n+\t\t\t0xF8, 0xE7, 0x58, 0x1E, 0x2C, 0xE4, 0x5A, 0xF8,\n+\t\t},\n+\t\t.len = 92,\n+\t},\n+},\n+/* gcm_256_xpn_60B_cipher */\n+{\n+\t.test_idx = 8,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_XPN_256,\n+\t.ssci = 0x7A30C118,\n+\t.xpn = 0xB0DF459C, /* Most significant 32 bits */\n+\t.salt = {\n+\t\t0xE6, 0x30, 0xE8, 0x1A, 0x48, 0xDE,\n+\t\t0x86, 0xA2, 0x1C, 0x66, 0xFA, 0x6D,\n+\t},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0xE3, 0xC0, 0x8A, 0x8F, 0x06, 0xC6, 0xE3, 0xAD,\n+\t\t\t0x95, 0xA7, 0x05, 0x57, 0xB2, 0x3F, 0x75, 0x48,\n+\t\t\t0x3C, 0xE3, 0x30, 0x21, 0xA9, 0xC7, 0x2B, 0x70,\n+\t\t\t0x25, 0x66, 0x62, 0x04, 0xC6, 0x9C, 0x0B, 0x72,\n+\t\t},\n+\t\t.len = 32,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xD6, 0x09, 0xB1, 0xF0, 0x56, 0x63,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0x0D, 0x46, 0xDF, 0x99, 0x8D,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x00, 0x02,\n+\t\t},\n+\t\t.len = 60,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0xD6, 0x09, 0xB1, 0xF0, 0x56, 0x63,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0x0D, 0x46, 0xDF, 0x99, 0x8D,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x2E,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0xB2, 0xC2, 0x84, 0x65,\n+\t\t\t/* SCI */\n+\t\t\t0x12, 0x15, 0x35, 0x24, 0xC0, 0x89, 0x5E, 0x81,\n+\t\t\t/* Secure Data */\n+\t\t\t0x3E, 0xB0, 0x4A, 0x4B, 0xBF, 0x54, 0xC6, 0xEB,\n+\t\t\t0x12, 0x22, 0xA9, 0xAE, 0xA0, 0x0C, 0x38, 0x68,\n+\t\t\t0x7F, 0x6C, 0x35, 0x20, 0xD9, 0x76, 0xA3, 0xB6,\n+\t\t\t0x94, 0x80, 0x06, 0x50, 0xCE, 0x65, 0x85, 0xE6,\n+\t\t\t0x20, 0xA4, 0x19, 0x19, 0x17, 0xD2, 0xA6, 0x05,\n+\t\t\t0xD8, 0x70, 0xC7, 0x8D, 0x27, 0x52, 0xCE, 0x49,\n+\t\t\t/* ICV */\n+\t\t\t0x3B, 0x44, 0x2A, 0xC0, 0xC8, 0x16, 0xD7, 0xAB,\n+\t\t\t0xD7, 0x0A, 0xD6, 0x5C, 0x25, 0xD4, 0x64, 0x13,\n+\t\t},\n+\t\t.len = 92,\n+\t},\n+},\n+/* gcm_128_61B_cipher */\n+{\n+\t.test_idx = 9,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_128,\n+\t.ssci = 0x0,\n+\t.xpn = 0x0, /* Most significant 32 bits */\n+\t.salt = {0},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x01, 0x3F, 0xE0, 0x0B, 0x5F, 0x11, 0xBE, 0x7F,\n+\t\t\t0x86, 0x6D, 0x0C, 0xBB, 0xC5, 0x5A, 0x7A, 0x90,\n+\t\t},\n+\t\t.len = 16,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x84, 0xC5, 0xD5, 0x13, 0xD2, 0xAA,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF6, 0xE5, 0xBB, 0xD2, 0x72, 0x77,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x00,\n+\t\t\t0x06,\n+\t\t},\n+\t\t.len = 61,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x84, 0xC5, 0xD5, 0x13, 0xD2, 0xAA,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF6, 0xE5, 0xBB, 0xD2, 0x72, 0x77,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x2F,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0x89, 0x32, 0xD6, 0x12,\n+\t\t\t/* SCI */\n+\t\t\t0x7C, 0xFD, 0xE9, 0xF9, 0xE3, 0x37, 0x24, 0xC6,\n+\t\t\t/* Secure Data */\n+\t\t\t0x3A, 0x4D, 0xE6, 0xFA, 0x32, 0x19, 0x10, 0x14,\n+\t\t\t0xDB, 0xB3, 0x03, 0xD9, 0x2E, 0xE3, 0xA9, 0xE8,\n+\t\t\t0xA1, 0xB5, 0x99, 0xC1, 0x4D, 0x22, 0xFB, 0x08,\n+\t\t\t0x00, 0x96, 0xE1, 0x38, 0x11, 0x81, 0x6A, 0x3C,\n+\t\t\t0x9C, 0x9B, 0xCF, 0x7C, 0x1B, 0x9B, 0x96, 0xDA,\n+\t\t\t0x80, 0x92, 0x04, 0xE2, 0x9D, 0x0E, 0x2A, 0x76,\n+\t\t\t0x42,\n+\t\t\t/* ICV */\n+\t\t\t0xBF, 0xD3, 0x10, 0xA4, 0x83, 0x7C, 0x81, 0x6C,\n+\t\t\t0xCF, 0xA5, 0xAC, 0x23, 0xAB, 0x00, 0x39, 0x88,\n+\t\t},\n+\t\t.len = 93,\n+\t},\n+},\n+/* gcm_256_61B_cipher */\n+{\n+\t.test_idx = 10,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_256,\n+\t.ssci = 0x0,\n+\t.xpn = 0x0, /* Most significant 32 bits */\n+\t.salt = {0},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x83, 0xC0, 0x93, 0xB5, 0x8D, 0xE7, 0xFF, 0xE1,\n+\t\t\t0xC0, 0xDA, 0x92, 0x6A, 0xC4, 0x3F, 0xB3, 0x60,\n+\t\t\t0x9A, 0xC1, 0xC8, 0x0F, 0xEE, 0x1B, 0x62, 0x44,\n+\t\t\t0x97, 0xEF, 0x94, 0x2E, 0x2F, 0x79, 0xA8, 0x23,\n+\t\t},\n+\t\t.len = 32,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x84, 0xC5, 0xD5, 0x13, 0xD2, 0xAA,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF6, 0xE5, 0xBB, 0xD2, 0x72, 0x77,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x00,\n+\t\t\t0x06,\n+\t\t},\n+\t\t.len = 61,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x84, 0xC5, 0xD5, 0x13, 0xD2, 0xAA,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF6, 0xE5, 0xBB, 0xD2, 0x72, 0x77,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x2F,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0x89, 0x32, 0xD6, 0x12,\n+\t\t\t/* SCI */\n+\t\t\t0x7C, 0xFD, 0xE9, 0xF9, 0xE3, 0x37, 0x24, 0xC6,\n+\t\t\t/* Secure Data */\n+\t\t\t0x11, 0x02, 0x22, 0xFF, 0x80, 0x50, 0xCB, 0xEC,\n+\t\t\t0xE6, 0x6A, 0x81, 0x3A, 0xD0, 0x9A, 0x73, 0xED,\n+\t\t\t0x7A, 0x9A, 0x08, 0x9C, 0x10, 0x6B, 0x95, 0x93,\n+\t\t\t0x89, 0x16, 0x8E, 0xD6, 0xE8, 0x69, 0x8E, 0xA9,\n+\t\t\t0x02, 0xEB, 0x12, 0x77, 0xDB, 0xEC, 0x2E, 0x68,\n+\t\t\t0xE4, 0x73, 0x15, 0x5A, 0x15, 0xA7, 0xDA, 0xEE,\n+\t\t\t0xD4,\n+\t\t\t/* ICV */\n+\t\t\t0xA1, 0x0F, 0x4E, 0x05, 0x13, 0x9C, 0x23, 0xDF,\n+\t\t\t0x00, 0xB3, 0xAA, 0xDC, 0x71, 0xF0, 0x59, 0x6A,\n+\t\t},\n+\t\t.len = 93,\n+\t},\n+},\n+/* gcm_128_xpn_61B_cipher */\n+{\n+\t.test_idx = 11,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_XPN_128,\n+\t.ssci = 0x7A30C118,\n+\t.xpn = 0xB0DF459C, /* Most significant 32 bits */\n+\t.salt = {\n+\t\t0xE6, 0x30, 0xE8, 0x1A, 0x48, 0xDE,\n+\t\t0x86, 0xA2, 0x1C, 0x66, 0xFA, 0x6D,\n+\t},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x01, 0x3F, 0xE0, 0x0B, 0x5F, 0x11, 0xBE, 0x7F,\n+\t\t\t0x86, 0x6D, 0x0C, 0xBB, 0xC5, 0x5A, 0x7A, 0x90,\n+\t\t},\n+\t\t.len = 16,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x84, 0xC5, 0xD5, 0x13, 0xD2, 0xAA,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF6, 0xE5, 0xBB, 0xD2, 0x72, 0x77,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x00,\n+\t\t\t0x06,\n+\t\t},\n+\t\t.len = 61,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x84, 0xC5, 0xD5, 0x13, 0xD2, 0xAA,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF6, 0xE5, 0xBB, 0xD2, 0x72, 0x77,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x2F,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0x89, 0x32, 0xD6, 0x12,\n+\t\t\t/* SCI */\n+\t\t\t0x7C, 0xFD, 0xE9, 0xF9, 0xE3, 0x37, 0x24, 0xC6,\n+\t\t\t/* Secure Data */\n+\t\t\t0x14, 0xC1, 0x76, 0x93, 0xBC, 0x82, 0x97, 0xEE,\n+\t\t\t0x6C, 0x47, 0xC5, 0x65, 0xCB, 0xE0, 0x67, 0x9E,\n+\t\t\t0x80, 0xF0, 0x0F, 0xCA, 0xF5, 0x92, 0xC9, 0xAA,\n+\t\t\t0x04, 0x73, 0x92, 0x8E, 0x7F, 0x2F, 0x21, 0x6F,\n+\t\t\t0xF5, 0xA0, 0x33, 0xDE, 0xC7, 0x51, 0x3F, 0x45,\n+\t\t\t0xD3, 0x4C, 0xBB, 0x98, 0x1C, 0x5B, 0xD6, 0x4E,\n+\t\t\t0x8B,\n+\t\t\t/* ICV */\n+\t\t\t0xD8, 0x4B, 0x8E, 0x2A, 0x78, 0xE7, 0x4D, 0xAF,\n+\t\t\t0xEA, 0xA0, 0x38, 0x46, 0xFE, 0x93, 0x0C, 0x0E,\n+\t\t},\n+\t\t.len = 93,\n+\t},\n+},\n+/* gcm_256_xpn_61B_cipher */\n+{\n+\t.test_idx = 12,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_XPN_256,\n+\t.ssci = 0x7A30C118,\n+\t.xpn = 0xB0DF459C, /* Most significant 32 bits */\n+\t.salt = {\n+\t\t0xE6, 0x30, 0xE8, 0x1A, 0x48, 0xDE,\n+\t\t0x86, 0xA2, 0x1C, 0x66, 0xFA, 0x6D,\n+\t},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x83, 0xC0, 0x93, 0xB5, 0x8D, 0xE7, 0xFF, 0xE1,\n+\t\t\t0xC0, 0xDA, 0x92, 0x6A, 0xC4, 0x3F, 0xB3, 0x60,\n+\t\t\t0x9A, 0xC1, 0xC8, 0x0F, 0xEE, 0x1B, 0x62, 0x44,\n+\t\t\t0x97, 0xEF, 0x94, 0x2E, 0x2F, 0x79, 0xA8, 0x23,\n+\t\t},\n+\t\t.len = 32,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x84, 0xC5, 0xD5, 0x13, 0xD2, 0xAA,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF6, 0xE5, 0xBB, 0xD2, 0x72, 0x77,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x00,\n+\t\t\t0x06,\n+\t\t},\n+\t\t.len = 61,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x84, 0xC5, 0xD5, 0x13, 0xD2, 0xAA,\n+\t\t\t/* MAC SA */\n+\t\t\t0xF6, 0xE5, 0xBB, 0xD2, 0x72, 0x77,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x2F,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0x89, 0x32, 0xD6, 0x12,\n+\t\t\t/* SCI */\n+\t\t\t0x7C, 0xFD, 0xE9, 0xF9, 0xE3, 0x37, 0x24, 0xC6,\n+\t\t\t/* Secure Data */\n+\t\t\t0x09, 0x96, 0xE0, 0xC9, 0xA5, 0x57, 0x74, 0xE0,\n+\t\t\t0xA7, 0x92, 0x30, 0x4E, 0x7D, 0xC1, 0x50, 0xBD,\n+\t\t\t0x67, 0xFD, 0x74, 0x7D, 0xD1, 0xB9, 0x41, 0x95,\n+\t\t\t0x94, 0xBF, 0x37, 0x3D, 0x4A, 0xCE, 0x8F, 0x87,\n+\t\t\t0xF5, 0xC1, 0x34, 0x9A, 0xFA, 0xC4, 0x91, 0xAA,\n+\t\t\t0x0A, 0x40, 0xD3, 0x19, 0x90, 0x87, 0xB2, 0x9F,\n+\t\t\t0xDF,\n+\t\t\t/* ICV */\n+\t\t\t0x80, 0x2F, 0x05, 0x0E, 0x69, 0x1F, 0x11, 0xA2,\n+\t\t\t0xD9, 0xB3, 0x58, 0xF6, 0x99, 0x41, 0x84, 0xF5,\n+\t\t},\n+\t\t.len = 93,\n+\t},\n+},\n+/* gcm_128_75B_cipher */\n+{\n+\t.test_idx = 13,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_128,\n+\t.ssci = 0,\n+\t.xpn = 0, /* Most significant 32 bits */\n+\t.salt = {0},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x88, 0xEE, 0x08, 0x7F, 0xD9, 0x5D, 0xA9, 0xFB,\n+\t\t\t0xF6, 0x72, 0x5A, 0xA9, 0xD7, 0x57, 0xB0, 0xCD,\n+\t\t},\n+\t\t.len = 16,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x68, 0xF2, 0xE7, 0x76, 0x96, 0xCE,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0xE8, 0xE2, 0xCA, 0x4E, 0xC5,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,\n+\t\t\t0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44,\n+\t\t\t0x45, 0x46, 0x47, 0x48, 0x49, 0x00, 0x08,\n+\t\t},\n+\t\t.len = 75,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x68, 0xF2, 0xE7, 0x76, 0x96, 0xCE,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0xE8, 0xE2, 0xCA, 0x4E, 0xC5,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x4D,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0x2E, 0x58, 0x49, 0x5C,\n+\t\t\t/* SCI */\n+\t\t\t/* Secure Data */\n+\t\t\t0xC3, 0x1F, 0x53, 0xD9, 0x9E, 0x56, 0x87, 0xF7,\n+\t\t\t0x36, 0x51, 0x19, 0xB8, 0x32, 0xD2, 0xAA, 0xE7,\n+\t\t\t0x07, 0x41, 0xD5, 0x93, 0xF1, 0xF9, 0xE2, 0xAB,\n+\t\t\t0x34, 0x55, 0x77, 0x9B, 0x07, 0x8E, 0xB8, 0xFE,\n+\t\t\t0xAC, 0xDF, 0xEC, 0x1F, 0x8E, 0x3E, 0x52, 0x77,\n+\t\t\t0xF8, 0x18, 0x0B, 0x43, 0x36, 0x1F, 0x65, 0x12,\n+\t\t\t0xAD, 0xB1, 0x6D, 0x2E, 0x38, 0x54, 0x8A, 0x2C,\n+\t\t\t0x71, 0x9D, 0xBA, 0x72, 0x28, 0xD8, 0x40,\n+\t\t\t/* ICV */\n+\t\t\t0x88, 0xF8, 0x75, 0x7A, 0xDB, 0x8A, 0xA7, 0x88,\n+\t\t\t0xD8, 0xF6, 0x5A, 0xD6, 0x68, 0xBE, 0x70, 0xE7,\n+\t\t},\n+\t\t.len = 99,\n+\t},\n+},\n+/* gcm_256_75B_cipher */\n+{\n+\t.test_idx = 14,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_256,\n+\t.ssci = 0,\n+\t.xpn = 0, /* Most significant 32 bits */\n+\t.salt = {0},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x4C, 0x97, 0x3D, 0xBC, 0x73, 0x64, 0x62, 0x16,\n+\t\t\t0x74, 0xF8, 0xB5, 0xB8, 0x9E, 0x5C, 0x15, 0x51,\n+\t\t\t0x1F, 0xCE, 0xD9, 0x21, 0x64, 0x90, 0xFB, 0x1C,\n+\t\t\t0x1A, 0x2C, 0xAA, 0x0F, 0xFE, 0x04, 0x07, 0xE5,\n+\t\t},\n+\t\t.len = 32,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x68, 0xF2, 0xE7, 0x76, 0x96, 0xCE,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0xE8, 0xE2, 0xCA, 0x4E, 0xC5,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,\n+\t\t\t0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44,\n+\t\t\t0x45, 0x46, 0x47, 0x48, 0x49, 0x00, 0x08,\n+\t\t},\n+\t\t.len = 75,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x68, 0xF2, 0xE7, 0x76, 0x96, 0xCE,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0xE8, 0xE2, 0xCA, 0x4E, 0xC5,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x4D,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0x2E, 0x58, 0x49, 0x5C,\n+\t\t\t/* SCI */\n+\t\t\t/* Secure Data */\n+\t\t\t0xBA, 0x8A, 0xE3, 0x1B, 0xC5, 0x06, 0x48, 0x6D,\n+\t\t\t0x68, 0x73, 0xE4, 0xFC, 0xE4, 0x60, 0xE7, 0xDC,\n+\t\t\t0x57, 0x59, 0x1F, 0xF0, 0x06, 0x11, 0xF3, 0x1C,\n+\t\t\t0x38, 0x34, 0xFE, 0x1C, 0x04, 0xAD, 0x80, 0xB6,\n+\t\t\t0x68, 0x03, 0xAF, 0xCF, 0x5B, 0x27, 0xE6, 0x33,\n+\t\t\t0x3F, 0xA6, 0x7C, 0x99, 0xDA, 0x47, 0xC2, 0xF0,\n+\t\t\t0xCE, 0xD6, 0x8D, 0x53, 0x1B, 0xD7, 0x41, 0xA9,\n+\t\t\t0x43, 0xCF, 0xF7, 0xA6, 0x71, 0x3B, 0xD0,\n+\t\t\t/* ICV */\n+\t\t\t0x26, 0x11, 0xCD, 0x7D, 0xAA, 0x01, 0xD6, 0x1C,\n+\t\t\t0x5C, 0x88, 0x6D, 0xC1, 0xA8, 0x17, 0x01, 0x07,\n+\t\t},\n+\t\t.len = 99,\n+\t},\n+},\n+/* gcm_128_xpn_75B_cipher */\n+{\n+\t.test_idx = 15,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_XPN_128,\n+\t.ssci = 0x7A30C118,\n+\t.xpn = 0xB0DF459C, /* Most significant 32 bits */\n+\t.salt = {\n+\t\t0xE6, 0x30, 0xE8, 0x1A, 0x48, 0xDE, 0x86, 0xA2,\n+\t\t0x1C, 0x66, 0xFA, 0x6D,\n+\t},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x88, 0xEE, 0x08, 0x7F, 0xD9, 0x5D, 0xA9, 0xFB,\n+\t\t\t0xF6, 0x72, 0x5A, 0xA9, 0xD7, 0x57, 0xB0, 0xCD,\n+\t\t},\n+\t\t.len = 16,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x68, 0xF2, 0xE7, 0x76, 0x96, 0xCE,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0xE8, 0xE2, 0xCA, 0x4E, 0xC5,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,\n+\t\t\t0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44,\n+\t\t\t0x45, 0x46, 0x47, 0x48, 0x49, 0x00, 0x08,\n+\t\t},\n+\t\t.len = 75,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x68, 0xF2, 0xE7, 0x76, 0x96, 0xCE,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0xE8, 0xE2, 0xCA, 0x4E, 0xC5,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x4D,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0x2E, 0x58, 0x49, 0x5C,\n+\t\t\t/* SCI */\n+\t\t\t/* Secure Data */\n+\t\t\t0xEA, 0xEC, 0xC6, 0xAF, 0x65, 0x12, 0xFC, 0x8B,\n+\t\t\t0x6C, 0x8C, 0x43, 0xBC, 0x55, 0xB1, 0x90, 0xB2,\n+\t\t\t0x62, 0x6D, 0x07, 0xD3, 0xD2, 0x18, 0xFA, 0xF5,\n+\t\t\t0xDA, 0xA7, 0xD8, 0xF8, 0x00, 0xA5, 0x73, 0x31,\n+\t\t\t0xEB, 0x43, 0xB5, 0xA1, 0x7A, 0x37, 0xE5, 0xB1,\n+\t\t\t0xD6, 0x0D, 0x27, 0x5C, 0xCA, 0xF7, 0xAC, 0xD7,\n+\t\t\t0x04, 0xCC, 0x9A, 0xCE, 0x2B, 0xF8, 0xBC, 0x8B,\n+\t\t\t0x9B, 0x23, 0xB9, 0xAD, 0xF0, 0x2F, 0x87,\n+\t\t\t/* ICV */\n+\t\t\t0x34, 0x6B, 0x96, 0xD1, 0x13, 0x6A, 0x75, 0x4D,\n+\t\t\t0xF0, 0xA6, 0xCD, 0xE1, 0x26, 0xC1, 0x07, 0xF8,\n+\t\t},\n+\t\t.len = 99,\n+\t},\n+},\n+/* gcm_256_xpn_75B_cipher */\n+{\n+\t.test_idx = 16,\n+\t.alg = RTE_SECURITY_MACSEC_ALG_GCM_XPN_256,\n+\t.ssci = 0x7A30C118,\n+\t.xpn = 0xB0DF459C, /* Most significant 32 bits */\n+\t.salt = {\n+\t\t0xE6, 0x30, 0xE8, 0x1A, 0x48, 0xDE, 0x86, 0xA2,\n+\t\t0x1C, 0x66, 0xFA, 0x6D,\n+\t},\n+\t.sa_key = {\n+\t\t.data = {\n+\t\t\t0x4C, 0x97, 0x3D, 0xBC, 0x73, 0x64, 0x62, 0x16,\n+\t\t\t0x74, 0xF8, 0xB5, 0xB8, 0x9E, 0x5C, 0x15, 0x51,\n+\t\t\t0x1F, 0xCE, 0xD9, 0x21, 0x64, 0x90, 0xFB, 0x1C,\n+\t\t\t0x1A, 0x2C, 0xAA, 0x0F, 0xFE, 0x04, 0x07, 0xE5,\n+\t\t},\n+\t\t.len = 32,\n+\t},\n+\t.plain_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x68, 0xF2, 0xE7, 0x76, 0x96, 0xCE,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0xE8, 0xE2, 0xCA, 0x4E, 0xC5,\n+\t\t\t/* User Data */\n+\t\t\t0x08, 0x00, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,\n+\t\t\t0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,\n+\t\t\t0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,\n+\t\t\t0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,\n+\t\t\t0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,\n+\t\t\t0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,\n+\t\t\t0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44,\n+\t\t\t0x45, 0x46, 0x47, 0x48, 0x49, 0x00, 0x08,\n+\t\t},\n+\t\t.len = 75,\n+\t},\n+\t.secure_pkt = {\n+\t\t.data = {/* MAC DA */\n+\t\t\t0x68, 0xF2, 0xE7, 0x76, 0x96, 0xCE,\n+\t\t\t/* MAC SA */\n+\t\t\t0x7A, 0xE8, 0xE2, 0xCA, 0x4E, 0xC5,\n+\t\t\t/* MACsec EtherType */\n+\t\t\t0x88, 0xE5,\n+\t\t\t/* TCI and AN */\n+\t\t\t0x4D,\n+\t\t\t/* SL */\n+\t\t\t0x00,\n+\t\t\t/* PN */\n+\t\t\t0x2E, 0x58, 0x49, 0x5C,\n+\t\t\t/* SCI */\n+\t\t\t/* Secure Data */\n+\t\t\t0xB0, 0xFE, 0xA3, 0x63, 0x18, 0xB9, 0xB3, 0x64,\n+\t\t\t0x66, 0xC4, 0x6E, 0x9E, 0x1B, 0xDA, 0x1A, 0x26,\n+\t\t\t0x68, 0x58, 0x19, 0x6E, 0x7E, 0x70, 0xD8, 0x82,\n+\t\t\t0xAE, 0x70, 0x47, 0x56, 0x68, 0xCD, 0xE4, 0xEC,\n+\t\t\t0x88, 0x3F, 0x6A, 0xC2, 0x36, 0x9F, 0x28, 0x4B,\n+\t\t\t0xED, 0x1F, 0xE3, 0x2F, 0x42, 0x09, 0x2F, 0xDF,\n+\t\t\t0xF5, 0x86, 0x8A, 0x3C, 0x64, 0xE5, 0x61, 0x51,\n+\t\t\t0x92, 0xA7, 0xA3, 0x76, 0x0B, 0x34, 0xBC,\n+\t\t\t/* ICV */\n+\t\t\t0x85, 0x69, 0x2C, 0xD8, 0x15, 0xB6, 0x64, 0x71,\n+\t\t\t0x1A, 0xEF, 0x91, 0x1D, 0xF7, 0x8D, 0x7F, 0x46,\n+\t\t},\n+\t\t.len = 99,\n+\t},\n+},\n+};\n+\n+#endif\n",
    "prefixes": [
        "03/13"
    ]
}