get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 104643,
    "url": "http://patchwork.dpdk.org/api/patches/104643/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/1637737211-41159-1-git-send-email-chcchc88@163.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<1637737211-41159-1-git-send-email-chcchc88@163.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1637737211-41159-1-git-send-email-chcchc88@163.com",
    "date": "2021-11-24T07:00:11",
    "name": "test/ipfrag: check fragment IPv4 header options",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "b72eabdf37e48323493dd3e67c2a6df3e5477096",
    "submitter": {
        "id": 2371,
        "url": "http://patchwork.dpdk.org/api/people/2371/?format=api",
        "name": "Huichao Cai",
        "email": "chcchc88@163.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/1637737211-41159-1-git-send-email-chcchc88@163.com/mbox/",
    "series": [
        {
            "id": 20727,
            "url": "http://patchwork.dpdk.org/api/series/20727/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=20727",
            "date": "2021-11-24T07:00:11",
            "name": "test/ipfrag: check fragment IPv4 header options",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/20727/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/104643/comments/",
    "check": "fail",
    "checks": "http://patchwork.dpdk.org/api/patches/104643/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 65FA9A0C55;\n\tWed, 24 Nov 2021 08:00:32 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 2922B40DF7;\n\tWed, 24 Nov 2021 08:00:32 +0100 (CET)",
            "from m12-18.163.com (m12-18.163.com [220.181.12.18])\n by mails.dpdk.org (Postfix) with ESMTP id 6E36740A4B\n for <dev@dpdk.org>; Wed, 24 Nov 2021 08:00:30 +0100 (CET)",
            "from bogon.localdomain (unknown [36.111.88.18])\n by smtp14 (Coremail) with SMTP id EsCowAD3N9sH451hpvNJMw--.13870S2;\n Wed, 24 Nov 2021 15:00:27 +0800 (CST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com;\n s=s110527; h=From:Subject:Date:Message-Id; bh=F/r5+Lyuk4Kltkzwsl\n u+OHYxjNhHGyjqrMMra019DeM=; b=Nbwz0NCmaFFk5/Ahbw3OR9RcePTzlwpKah\n YhrKuoLHOFuSBF5ikvEJ6NOwglpzY2ZFKBNuqpKMlVo6PoKpYBCqd0IQVPFxUWN2\n T059Hp6aKEhK7voHeNe2f2XT2ljbPim/ZXQDaT3rNIGcx5Gs+jPukB6qrKV+Gu00\n qwIGkz0vc=",
        "From": "Huichao Cai <chcchc88@163.com>",
        "To": "dev@dpdk.org",
        "Cc": "konstantin.ananyev@intel.com",
        "Subject": "[PATCH] test/ipfrag: check fragment IPv4 header options",
        "Date": "Wed, 24 Nov 2021 15:00:11 +0800",
        "Message-Id": "<1637737211-41159-1-git-send-email-chcchc88@163.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "X-CM-TRANSID": "EsCowAD3N9sH451hpvNJMw--.13870S2",
        "X-Coremail-Antispam": "1Uf129KBjvJXoW3KFW5Gw4xJFWDCr1rZw1UJrb_yoWDZryrp3\n s8tr90vw4kX3ZrXw4fJFs8ur4rKryIqFnrK345Zr4fKa1xZFy0ka45Kry3tr13Kr1kX3sF\n vwn8AFyY9anFkw7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2\n 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0zRtDGrUUUUU=",
        "X-Originating-IP": "[36.111.88.18]",
        "X-CM-SenderInfo": "pfkfuxrfyyqiywtou0bp/xtbBywxVF1PAQU4nygAAs0",
        "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": "Add some test data for the IPv4 header optional field fragmenting.\n\nSigned-off-by: Huichao Cai <chcchc88@163.com>\n---\nDepends-on: patch-104642 (ip_frag: add fragmenting IPv4 header optional field)\n \n app/test/test_ipfrag.c | 269 +++++++++++++++++++++++++++++++++++++++++++++----\n 1 file changed, 250 insertions(+), 19 deletions(-)",
    "diff": "diff --git a/app/test/test_ipfrag.c b/app/test/test_ipfrag.c\nindex 1ced25a..12d08d8 100644\n--- a/app/test/test_ipfrag.c\n+++ b/app/test/test_ipfrag.c\n@@ -18,10 +18,101 @@\n #define NUM_MBUFS 128\n #define BURST 32\n \n+/* IP options */\n+#define RTE_IPOPT_COPY\t\t\t\t0x80\n+#define RTE_IPOPT_CONTROL\t\t\t0x00\n+#define RTE_IPOPT_END\t\t\t\t(0 | RTE_IPOPT_CONTROL)\n+#define RTE_IPOPT_NOOP\t\t\t\t(1 | RTE_IPOPT_CONTROL)\n+#define RTE_IPOPT_COPIED(o)\t\t\t((o) & RTE_IPOPT_COPY)\n+#define RTE_IPOPT_MAX_LEN 40\n+\n+#define IPOPT_MANUAL\n+\n+#ifdef IPOPT_MANUAL\n+uint8_t expected_first_frag_ipv4_opts[] = {\n+\t0x07, 0x0b, 0x04, 0x00,\n+\t0x00, 0x00, 0x00, 0x00,\n+\t0x00, 0x00, 0x00, 0x83,\n+\t0x07, 0x04, 0xc0, 0xa8,\n+\t0xe3, 0x96, 0x00, 0x00,\n+};\n+\n+uint8_t expected_sub_frag_ipv4_opts[] = {\n+\tRTE_IPOPT_NOOP, RTE_IPOPT_NOOP, RTE_IPOPT_NOOP, RTE_IPOPT_NOOP,\n+\tRTE_IPOPT_NOOP, RTE_IPOPT_NOOP, RTE_IPOPT_NOOP, RTE_IPOPT_NOOP,\n+\tRTE_IPOPT_NOOP, RTE_IPOPT_NOOP, RTE_IPOPT_NOOP, 0x83,\n+\t0x07, 0x04, 0xc0, 0xa8,\n+\t0xe3, 0x96, 0x00, 0x00,\n+};\n+#else\n+/**\n+ * IPv4 Options\n+ */\n+struct test_ipv4_opt {\n+\t__extension__\n+\tunion {\n+\t\tuint8_t type;\t\t    /**< option type */\n+\t\tstruct {\n+#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN\n+\t\t\tuint8_t number:5;   /**< option number */\n+\t\t\tuint8_t category:2; /**< option class */\n+\t\t\tuint8_t copied:1;   /**< option copy flag */\n+#elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t\t\tuint8_t copied:1;   /**< option copy flag */\n+\t\t\tuint8_t category:2; /**< option class */\n+\t\t\tuint8_t number:5;   /**< option number */\n+#endif\n+\t\t} s_type;\n+\t};\n+\tuint8_t length;\t\t\t    /**< option length */\n+\tuint8_t pointer;\t\t    /**< option pointer */\n+\tuint8_t data[37];\t\t    /**< option data */\n+} __rte_packed;\n+\n+struct test_ipv4_opt test_ipv4_opts[] = {\n+\t{\n+\t\t.s_type.copied = 0,\n+\t\t.s_type.category = 0,\n+\t\t.s_type.number = 7,\n+\t\t.length = 11,\n+\t\t.pointer = 4,\n+\t},\n+\t{\n+\t\t.s_type.copied = 1,\n+\t\t.s_type.category = 0,\n+\t\t.s_type.number = 3,\n+\t\t.length = 7,\n+\t\t.pointer = 4,\n+\t\t.data[0] = 0xc0,\n+\t\t.data[1] = 0xa8,\n+\t\t.data[2] = 0xe3,\n+\t\t.data[3] = 0x96,\n+\t},\n+};\n+#endif\n+\n+struct test_opt_data {\n+\tbool is_first_frag;\t\t /**< offset is 0 */\n+\tuint16_t len;\t\t\t /**< option data len */\n+\tuint8_t data[RTE_IPOPT_MAX_LEN]; /**< option data */\n+};\n+\n static struct rte_mempool *pkt_pool,\n \t\t\t  *direct_pool,\n \t\t\t  *indirect_pool;\n \n+static inline void\n+hex_to_str(uint8_t *hex, uint16_t len, char *str)\n+{\n+\tint i;\n+\n+\tfor (i = 0; i < len; i++) {\n+\t\tsprintf(str, \"%02x\", hex[i]);\n+\t\tstr += 2;\n+\t}\n+\t*str = 0;\n+}\n+\n static int\n setup_buf_pool(void)\n {\n@@ -88,23 +179,78 @@ static void ut_teardown(void)\n {\n }\n \n+static inline void\n+test_get_ipv4_opt(bool is_first_frag,\n+\tstruct test_opt_data *expected_opt)\n+{\n+#ifdef IPOPT_MANUAL\n+\tif (is_first_frag) {\n+\t\texpected_opt->len = sizeof(expected_first_frag_ipv4_opts);\n+\t\trte_memcpy(expected_opt->data, expected_first_frag_ipv4_opts,\n+\t\t\tsizeof(expected_first_frag_ipv4_opts));\n+\t} else {\n+\t\texpected_opt->len = sizeof(expected_sub_frag_ipv4_opts);\n+\t\trte_memcpy(expected_opt->data, expected_sub_frag_ipv4_opts,\n+\t\t\tsizeof(expected_sub_frag_ipv4_opts));\n+\t}\n+#else\n+\tuint16_t i;\n+\tuint16_t pos = 0;\n+\texpected_opt->len = 0;\n+\n+\tfor (i = 0; i < RTE_DIM(test_ipv4_opts); i++) {\n+\t\tif (unlikely(pos + test_ipv4_opts[i].length >\n+\t\t\t\tRTE_IPOPT_MAX_LEN))\n+\t\t\treturn;\n+\n+\t\tif (is_first_frag) {\n+\t\t\trte_memcpy(expected_opt->data + pos, &test_ipv4_opts[i],\n+\t\t\t\ttest_ipv4_opts[i].length);\n+\t\t} else {\n+\t\t\tif (test_ipv4_opts[i].s_type.copied)\n+\t\t\t\trte_memcpy(expected_opt->data + pos,\n+\t\t\t\t\t&test_ipv4_opts[i],\n+\t\t\t\t\ttest_ipv4_opts[i].length);\n+\t\t\telse\n+\t\t\t\tmemset(expected_opt->data + pos, RTE_IPOPT_NOOP,\n+\t\t\t\t\ttest_ipv4_opts[i].length);\n+\t\t}\n+\t\texpected_opt->len += test_ipv4_opts[i].length;\n+\t\tpos += test_ipv4_opts[i].length;\n+\t}\n+\n+\texpected_opt->len = RTE_ALIGN_CEIL(expected_opt->len, 4);\n+\tmemset(expected_opt->data + pos, RTE_IPOPT_END,\n+\t\texpected_opt->len - pos);\n+#endif\n+}\n+\n static void\n-v4_allocate_packet_of(struct rte_mbuf *b, int fill,\n-\t\t      size_t s, int df, uint8_t mf, uint16_t off,\n-\t\t      uint8_t ttl, uint8_t proto, uint16_t pktid)\n+v4_allocate_packet_of(struct rte_mbuf *b, int fill, size_t s,\n+\tint df, uint8_t mf, uint16_t off, uint8_t ttl, uint8_t proto,\n+\tuint16_t pktid, bool have_opt, bool is_first_frag)\n {\n \t/* Create a packet, 2k bytes long */\n \tb->data_off = 0;\n \tchar *data = rte_pktmbuf_mtod(b, char *);\n-\trte_be16_t fragment_offset = 0;\t/**< fragmentation offset */\n+\trte_be16_t fragment_offset = 0;\t/* fragmentation offset */\n+\tuint16_t iph_len;\n+\tstruct test_opt_data opt;\n \n-\tmemset(data, fill, sizeof(struct rte_ipv4_hdr) + s);\n+\topt.len = 0;\n+\n+\tif (have_opt)\n+\t\ttest_get_ipv4_opt(is_first_frag, &opt);\n+\n+\tiph_len = sizeof(struct rte_ipv4_hdr) + opt.len;\n+\tmemset(data, fill, iph_len + s);\n \n \tstruct rte_ipv4_hdr *hdr = (struct rte_ipv4_hdr *)data;\n \n-\thdr->version_ihl = 0x45; /* standard IP header... */\n+\thdr->version_ihl = 0x40; /* ipv4 */\n+\thdr->version_ihl += (iph_len / 4);\n \thdr->type_of_service = 0;\n-\tb->pkt_len = s + sizeof(struct rte_ipv4_hdr);\n+\tb->pkt_len = s + iph_len;\n \tb->data_len = b->pkt_len;\n \thdr->total_length = rte_cpu_to_be_16(b->pkt_len);\n \thdr->packet_id = rte_cpu_to_be_16(pktid);\n@@ -131,6 +277,8 @@ static void ut_teardown(void)\n \thdr->hdr_checksum = 0;\n \thdr->src_addr = rte_cpu_to_be_32(0x8080808);\n \thdr->dst_addr = rte_cpu_to_be_32(0x8080404);\n+\n+\trte_memcpy(hdr + 1, opt.data, opt.len);\n }\n \n static void\n@@ -187,6 +335,43 @@ static void ut_teardown(void)\n \t}\n }\n \n+static inline void\n+test_get_frag_opt(struct rte_mbuf **mb, int32_t num,\n+\tstruct test_opt_data *opt, int ipv)\n+{\n+\tint32_t i;\n+\n+\tfor (i = 0; i < num; i++) {\n+\t\tif (ipv == 4) {\n+\t\t\tstruct rte_ipv4_hdr *iph =\n+\t\t\t    rte_pktmbuf_mtod(mb[i], struct rte_ipv4_hdr *);\n+\t\t\tuint16_t header_len = (iph->version_ihl &\n+\t\t\t\tRTE_IPV4_HDR_IHL_MASK) *\n+\t\t\t\tRTE_IPV4_IHL_MULTIPLIER;\n+\t\t\tuint16_t opt_len = header_len -\n+\t\t\t\tsizeof(struct rte_ipv4_hdr);\n+\n+\t\t\tif ((rte_be_to_cpu_16(iph->fragment_offset) &\n+\t\t\t\t    RTE_IPV4_HDR_OFFSET_MASK) == 0)\n+\t\t\t\topt->is_first_frag = true;\n+\t\t\telse\n+\t\t\t\topt->is_first_frag = false;\n+\n+\t\t\tif (opt_len && (opt_len <= RTE_IPOPT_MAX_LEN)) {\n+\t\t\t\tchar *iph_opt = rte_pktmbuf_mtod_offset(mb[i],\n+\t\t\t\t    char *, sizeof(struct rte_ipv4_hdr));\n+\t\t\t\topt->len = opt_len;\n+\t\t\t\trte_memcpy(opt->data, iph_opt, opt_len);\n+\t\t\t} else {\n+\t\t\t\topt->len = RTE_IPOPT_MAX_LEN;\n+\t\t\t\tmemset(opt->data, RTE_IPOPT_END,\n+\t\t\t\t    sizeof(opt->data));\n+\t\t\t}\n+\t\t\topt++;\n+\t\t}\n+\t}\n+}\n+\n static int\n test_ip_frag(void)\n {\n@@ -206,32 +391,43 @@ static void ut_teardown(void)\n \t\tuint16_t pkt_id;\n \t\tint      expected_frags;\n \t\tuint16_t expected_fragment_offset[BURST];\n+\t\tbool have_opt;\n+\t\tbool is_first_frag;\n \t} tests[] = {\n \t\t {4, 1280, 1400, 0, 0, 0, 64, IPPROTO_ICMP, RND_ID,       2,\n-\t\t  {0x2000, 0x009D}},\n+\t\t  {0x2000, 0x009D}, 0},\n \t\t {4, 1280, 1400, 0, 0, 0, 64, IPPROTO_ICMP, 0,            2,\n-\t\t  {0x2000, 0x009D}},\n+\t\t  {0x2000, 0x009D}, 0},\n \t\t {4,  600, 1400, 0, 0, 0, 64, IPPROTO_ICMP, RND_ID,       3,\n-\t\t  {0x2000, 0x2048, 0x0090}},\n+\t\t  {0x2000, 0x2048, 0x0090}, 0},\n \t\t {4, 4, 1400, 0, 0, 0, 64, IPPROTO_ICMP, RND_ID,    -EINVAL},\n \t\t {4, 600, 1400, 1, 0, 0, 64, IPPROTO_ICMP, RND_ID, -ENOTSUP},\n \t\t {4, 600, 1400, 0, 0, 0, 0, IPPROTO_ICMP, RND_ID,         3,\n-\t\t  {0x2000, 0x2048, 0x0090}},\n-\t\t {4, 68, 104, 0, 1, 13, 0, IPPROTO_ICMP, RND_ID,          3,\n-\t\t  {0x200D, 0x2013, 0x2019}},\n+\t\t  {0x2000, 0x2046, 0x008C}, 1, 1},\n+\t\t /* The first fragment */\n+\t\t {4, 68, 104, 0, 1, 0, 0, IPPROTO_ICMP, RND_ID,           5,\n+\t\t  {0x2000, 0x2003, 0x2006, 0x2009, 0x200C}, 1, 1},\n+\t\t /* The middle fragment */\n+\t\t {4, 68, 104, 0, 1, 13, 0, IPPROTO_ICMP, RND_ID,          5,\n+\t\t  {0x200D, 0x2010, 0x2013, 0x2016, 0x2019}, 1, 0},\n+\t\t /* The last fragment */\n+\t\t {4, 68, 104, 0, 0, 26, 0, IPPROTO_ICMP, RND_ID,          5,\n+\t\t  {0x201A, 0x201D, 0x2020, 0x2023, 0x0026}, 1, 0},\n \n \t\t {6, 1280, 1400, 0, 0, 0, 64, IPPROTO_ICMP, RND_ID,       2,\n-\t\t  {0x0001, 0x04D0}},\n+\t\t  {0x0001, 0x04D0}, 0},\n \t\t {6, 1300, 1400, 0, 0, 0, 64, IPPROTO_ICMP, RND_ID,       2,\n-\t\t  {0x0001, 0x04E0}},\n+\t\t  {0x0001, 0x04E0}, 0},\n \t\t {6, 4, 1400, 0, 0, 0, 64, IPPROTO_ICMP, RND_ID,    -EINVAL},\n \t\t {6, 1300, 1400, 0, 0, 0, 0, IPPROTO_ICMP, RND_ID,        2,\n-\t\t  {0x0001, 0x04E0}},\n+\t\t  {0x0001, 0x04E0}, 0},\n \t};\n \n \tfor (i = 0; i < RTE_DIM(tests); i++) {\n \t\tint32_t len = 0;\n \t\tuint16_t fragment_offset[BURST];\n+\t\tstruct test_opt_data opt_res[BURST];\n+\t\tstruct test_opt_data opt_exp;\n \t\tuint16_t pktid = tests[i].pkt_id;\n \t\tstruct rte_mbuf *pkts_out[BURST];\n \t\tstruct rte_mbuf *b = rte_pktmbuf_alloc(pkt_pool);\n@@ -250,7 +446,9 @@ static void ut_teardown(void)\n \t\t\t\t\t      tests[i].set_of,\n \t\t\t\t\t      tests[i].ttl,\n \t\t\t\t\t      tests[i].proto,\n-\t\t\t\t\t      pktid);\n+\t\t\t\t\t      pktid,\n+\t\t\t\t\t      tests[i].have_opt,\n+\t\t\t\t\t      tests[i].is_first_frag);\n \t\t} else if (tests[i].ipv == 6) {\n \t\t\tv6_allocate_packet_of(b, 0x41414141,\n \t\t\t\t\t      tests[i].pkt_size,\n@@ -275,17 +473,21 @@ static void ut_teardown(void)\n \t\tif (len > 0) {\n \t\t\ttest_get_offset(pkts_out, len,\n \t\t\t    fragment_offset, tests[i].ipv);\n+\t\t\tif (tests[i].have_opt)\n+\t\t\t\ttest_get_frag_opt(pkts_out, len,\n+\t\t\t\t\topt_res,\n+\t\t\t\t\ttests[i].ipv);\n \t\t\ttest_free_fragments(pkts_out, len);\n \t\t}\n \n-\t\tprintf(\"%zd: checking %d with %d\\n\", i, len,\n+\t\tprintf(\"[check frag number]%zd: checking %d with %d\\n\", i, len,\n \t\t       tests[i].expected_frags);\n \t\tRTE_TEST_ASSERT_EQUAL(len, tests[i].expected_frags,\n \t\t\t\t      \"Failed case %zd.\\n\", i);\n \n \t\tif (len > 0) {\n \t\t\tfor (j = 0; j < (size_t)len; j++) {\n-\t\t\t\tprintf(\"%zd-%zd: checking %d with %d\\n\",\n+\t\t\t\tprintf(\"[check offset]%zd-%zd: checking %d with %d\\n\",\n \t\t\t\t    i, j, fragment_offset[j],\n \t\t\t\t    rte_cpu_to_be_16(\n \t\t\t\t\ttests[i].expected_fragment_offset[j]));\n@@ -294,6 +496,35 @@ static void ut_teardown(void)\n \t\t\t\t\ttests[i].expected_fragment_offset[j]),\n \t\t\t\t    \"Failed case %zd.\\n\", i);\n \t\t\t}\n+\n+\t\t\tif (tests[i].have_opt && (tests[i].ipv == 4)) {\n+\t\t\t\tfor (j = 0; j < (size_t)len; j++) {\n+\t\t\t\t\tchar opt_res_str[2 *\n+\t\t\t\t\t\tRTE_IPOPT_MAX_LEN + 1];\n+\t\t\t\t\tchar opt_exp_str[2 *\n+\t\t\t\t\t\tRTE_IPOPT_MAX_LEN + 1];\n+\n+\t\t\t\t\ttest_get_ipv4_opt(\n+\t\t\t\t\t\topt_res[j].is_first_frag,\n+\t\t\t\t\t\t&opt_exp);\n+\t\t\t\t\thex_to_str(opt_res[j].data,\n+\t\t\t\t\t\topt_res[j].len,\n+\t\t\t\t\t\topt_res_str);\n+\t\t\t\t\thex_to_str(opt_exp.data,\n+\t\t\t\t\t\topt_exp.len,\n+\t\t\t\t\t\topt_exp_str);\n+\n+\t\t\t\t\tprintf(\n+\t\t\t\t\t\t\"[check ipv4 option]%zd-%zd: checking (%u)%s with (%u)%s\\n\",\n+\t\t\t\t\t\ti, j,\n+\t\t\t\t\t\topt_res[j].len, opt_res_str,\n+\t\t\t\t\t\topt_exp.len, opt_exp_str);\n+\t\t\t\t\t\tRTE_TEST_ASSERT_SUCCESS(\n+\t\t\t\t\t\t\tstrcmp(opt_res_str,\n+\t\t\t\t\t\t\t\topt_exp_str),\n+\t\t\t\t\t\t\"Failed case %zd.\\n\", i);\n+\t\t\t\t}\n+\t\t\t}\n \t\t}\n \n \t}\n",
    "prefixes": []
}