From: Dmitry Eremin-Solenikov <dmitry.ereminsoleni...@linaro.org>

Add function implementing memset and memcmp on packet object.

Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsoleni...@linaro.org>
---
/** Email created from pull request 34 (lumag:crypto-update-main-new)
 ** https://github.com/Linaro/odp/pull/34
 ** Patch: https://github.com/Linaro/odp/pull/34.patch
 ** Base sha: 826ee894aa0ebd09d42a17e1de077c46bc5b366a
 ** Merge commit sha: 7c49c61063e2d57f049a5436cf12a3c36710bb34
 **/
 .../linux-generic/include/odp_packet_internal.h    |  6 +++
 platform/linux-generic/odp_packet.c                | 48 ++++++++++++++++++++++
 2 files changed, 54 insertions(+)

diff --git a/platform/linux-generic/include/odp_packet_internal.h 
b/platform/linux-generic/include/odp_packet_internal.h
index d0db7008..a480a748 100644
--- a/platform/linux-generic/include/odp_packet_internal.h
+++ b/platform/linux-generic/include/odp_packet_internal.h
@@ -237,6 +237,12 @@ int packet_parse_common(packet_parser_t *pkt_hdr, const 
uint8_t *ptr,
 
 int _odp_cls_parse(odp_packet_hdr_t *pkt_hdr, const uint8_t *parseptr);
 
+int _odp_packet_set_data(odp_packet_t pkt, uint32_t offset,
+                        uint8_t c, uint32_t len);
+
+int _odp_packet_cmp_data(odp_packet_t pkt, uint32_t offset,
+                        const void *s, uint32_t len);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/platform/linux-generic/odp_packet.c 
b/platform/linux-generic/odp_packet.c
index 9ff642be..6799c6ef 100644
--- a/platform/linux-generic/odp_packet.c
+++ b/platform/linux-generic/odp_packet.c
@@ -1634,6 +1634,54 @@ int odp_packet_move_data(odp_packet_t pkt, uint32_t 
dst_offset,
                                        pkt, src_offset, len);
 }
 
+int _odp_packet_set_data(odp_packet_t pkt, uint32_t offset,
+                        uint8_t c, uint32_t len)
+{
+       void *mapaddr;
+       uint32_t seglen = 0; /* GCC */
+       uint32_t setlen;
+       odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
+
+       if (offset + len > pkt_hdr->frame_len)
+               return -1;
+
+       while (len > 0) {
+               mapaddr = packet_map(pkt_hdr, offset, &seglen, NULL);
+               setlen = len > seglen ? seglen : len;
+               memset(mapaddr, c, setlen);
+               offset  += setlen;
+               len     -= setlen;
+       }
+
+       return 0;
+}
+
+int _odp_packet_cmp_data(odp_packet_t pkt, uint32_t offset,
+                        const void *s, uint32_t len)
+{
+       const uint8_t *ptr = s;
+       void *mapaddr;
+       uint32_t seglen = 0; /* GCC */
+       uint32_t cmplen;
+       int ret;
+       odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
+
+       ODP_ASSERT(offset + len <= pkt_hdr->frame_len);
+
+       while (len > 0) {
+               mapaddr = packet_map(pkt_hdr, offset, &seglen, NULL);
+               cmplen = len > seglen ? seglen : len;
+               ret = memcmp(mapaddr, ptr, cmplen);
+               if (ret != 0)
+                       return ret;
+               offset  += cmplen;
+               len     -= cmplen;
+               ptr     += cmplen;
+       }
+
+       return 0;
+}
+
 /*
  *
  * Debugging

Reply via email to