This change enhances rte_pcapng_copy to have comment in enhanced
packet block.

Signed-off-by: Amit Prakash Shukla <amitpraka...@marvell.com>
---
v2:
 - Fixed code style issue
 - Fixed CI compilation issue on github-robot

v3:
 - Code review suggestion from Stephen
 - Fixed potential memory leak
 
v4:
 - Code review suggestion from Jerin

v5:
 - Code review suggestion from Jerin

 app/test/test_pcapng.c                 |  4 ++--
 doc/guides/rel_notes/release_23_03.rst |  2 ++
 lib/pcapng/rte_pcapng.c                | 10 +++++++++-
 lib/pcapng/rte_pcapng.h                |  4 +++-
 lib/pdump/rte_pdump.c                  |  2 +-
 5 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/app/test/test_pcapng.c b/app/test/test_pcapng.c
index a7acbdc058..303d3d66f9 100644
--- a/app/test/test_pcapng.c
+++ b/app/test/test_pcapng.c
@@ -139,7 +139,7 @@ test_write_packets(void)
                struct rte_mbuf *mc;
 
                mc = rte_pcapng_copy(port_id, 0, orig, mp, pkt_len,
-                               rte_get_tsc_cycles(), 0);
+                               rte_get_tsc_cycles(), 0, NULL);
                if (mc == NULL) {
                        fprintf(stderr, "Cannot copy packet\n");
                        return -1;
@@ -255,7 +255,7 @@ test_write_over_limit_iov_max(void)
                struct rte_mbuf *mc;
 
                mc = rte_pcapng_copy(port_id, 0, orig, mp, pkt_len,
-                               rte_get_tsc_cycles(), 0);
+                               rte_get_tsc_cycles(), 0, NULL);
                if (mc == NULL) {
                        fprintf(stderr, "Cannot copy packet\n");
                        return -1;
diff --git a/doc/guides/rel_notes/release_23_03.rst 
b/doc/guides/rel_notes/release_23_03.rst
index 73f5d94e14..dab62508c4 100644
--- a/doc/guides/rel_notes/release_23_03.rst
+++ b/doc/guides/rel_notes/release_23_03.rst
@@ -107,6 +107,8 @@ API Changes
    Also, make sure to start the actual text at the margin.
    =======================================================
 
+* Experimental function ``rte_pcapng_copy`` was updated to support comment
+  section in enhanced packet block in pcapng library.
 
 ABI Changes
 -----------
diff --git a/lib/pcapng/rte_pcapng.c b/lib/pcapng/rte_pcapng.c
index 80d08e1a3b..acb31a9d93 100644
--- a/lib/pcapng/rte_pcapng.c
+++ b/lib/pcapng/rte_pcapng.c
@@ -450,7 +450,8 @@ rte_pcapng_copy(uint16_t port_id, uint32_t queue,
                const struct rte_mbuf *md,
                struct rte_mempool *mp,
                uint32_t length, uint64_t cycles,
-               enum rte_pcapng_direction direction)
+               enum rte_pcapng_direction direction,
+               const char *comment)
 {
        struct pcapng_enhance_packet_block *epb;
        uint32_t orig_len, data_len, padding, flags;
@@ -511,6 +512,9 @@ rte_pcapng_copy(uint16_t port_id, uint32_t queue,
        if (rss_hash)
                optlen += pcapng_optlen(sizeof(uint8_t) + sizeof(uint32_t));
 
+       if (comment)
+               optlen += pcapng_optlen(strlen(comment));
+
        /* reserve trailing options and block length */
        opt = (struct pcapng_option *)
                rte_pktmbuf_append(mc, optlen + sizeof(uint32_t));
@@ -548,6 +552,10 @@ rte_pcapng_copy(uint16_t port_id, uint32_t queue,
                                        &hash_opt, sizeof(hash_opt));
        }
 
+       if (comment)
+               opt = pcapng_add_option(opt, PCAPNG_OPT_COMMENT, comment,
+                                       strlen(comment));
+
        /* Note: END_OPT necessary here. Wireshark doesn't do it. */
 
        /* Add PCAPNG packet header */
diff --git a/lib/pcapng/rte_pcapng.h b/lib/pcapng/rte_pcapng.h
index 7d2697c647..6d286cda41 100644
--- a/lib/pcapng/rte_pcapng.h
+++ b/lib/pcapng/rte_pcapng.h
@@ -100,6 +100,8 @@ enum rte_pcapng_direction {
  *   The timestamp in TSC cycles.
  * @param direction
  *   The direction of the packer: receive, transmit or unknown.
+ * @param comment
+ *   Packet comment.
  *
  * @return
  *   - The pointer to the new mbuf formatted for pcapng_write
@@ -111,7 +113,7 @@ struct rte_mbuf *
 rte_pcapng_copy(uint16_t port_id, uint32_t queue,
                const struct rte_mbuf *m, struct rte_mempool *mp,
                uint32_t length, uint64_t timestamp,
-               enum rte_pcapng_direction direction);
+               enum rte_pcapng_direction direction, const char *comment);
 
 
 /**
diff --git a/lib/pdump/rte_pdump.c b/lib/pdump/rte_pdump.c
index a81544cb57..9bc4bab4f2 100644
--- a/lib/pdump/rte_pdump.c
+++ b/lib/pdump/rte_pdump.c
@@ -122,7 +122,7 @@ pdump_copy(uint16_t port_id, uint16_t queue,
                if (cbs->ver == V2)
                        p = rte_pcapng_copy(port_id, queue,
                                            pkts[i], mp, cbs->snaplen,
-                                           ts, direction);
+                                           ts, direction, NULL);
                else
                        p = rte_pktmbuf_copy(pkts[i], mp, 0, cbs->snaplen);
 
-- 
2.25.1

Reply via email to