@@ -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
@@ -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