[Oisf-devel] [PATCH 2/2] Modify files to avoid direct pckt payload access

Eric Leblond eleblond at edenwall.com
Sun Nov 14 21:22:41 UTC 2010


This patch implements the needed modification of payload access
in a Packet structure to support the abstraction introduced by
the extended data system.

Signed-off-by: Eric Leblond <eleblond at edenwall.com>
---
 src/alert-debuglog.c       |   12 ++++++------
 src/alert-fastlog.c        |    2 +-
 src/alert-unified-log.c    |    8 ++++----
 src/alert-unified2-alert.c |   10 +++++-----
 src/decode-gre.c           |    8 ++++----
 src/decode-ipv4.c          |    4 ++--
 src/decode-ipv6.c          |    2 +-
 src/decode-raw.c           |    4 ++--
 src/defrag.c               |   36 ++++++++++++++++++------------------
 src/detect-bytetest.c      |    6 +++---
 src/detect-engine-tag.c    |    6 +++---
 src/flow.c                 |    2 +-
 src/source-erf-dag.c       |   20 ++++++++++----------
 src/source-erf-file.c      |   16 ++++++++--------
 src/source-ipfw.c          |   22 +++++++++++-----------
 src/source-nfq.c           |   27 +++++++++++++++------------
 src/source-pcap-file.c     |   18 +++++++++---------
 src/source-pcap.c          |   25 +++++++++++++------------
 src/source-pfring.c        |   16 ++++++++--------
 src/util-unittest-helper.c |    8 ++++----
 20 files changed, 128 insertions(+), 124 deletions(-)

diff --git a/src/alert-debuglog.c b/src/alert-debuglog.c
index 76db5d9..e7a04d4 100644
--- a/src/alert-debuglog.c
+++ b/src/alert-debuglog.c
@@ -248,9 +248,9 @@ TmEcode AlertDebugLogIPv4(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq
 
     aft->file_ctx->alerts += p->alerts.cnt;
 
-    fprintf(aft->file_ctx->fp, "PACKET LEN:        %" PRIu32 "\n", p->pktlen);
+    fprintf(aft->file_ctx->fp, "PACKET LEN:        %" PRIu32 "\n", GET_PKT_LEN(p));
     fprintf(aft->file_ctx->fp, "PACKET:\n");
-    PrintRawDataFp(aft->file_ctx->fp, p->pkt, p->pktlen);
+    PrintRawDataFp(aft->file_ctx->fp, GET_PKT_DATA(p), GET_PKT_LEN(p));
 
     fflush(aft->file_ctx->fp);
     SCMutexUnlock(&aft->file_ctx->fp_mutex);
@@ -313,9 +313,9 @@ TmEcode AlertDebugLogIPv6(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq
 
     AlertDebugLogPktVars(aft, p);
 
-    fprintf(aft->file_ctx->fp, "PACKET LEN:        %" PRIu32 "\n", p->pktlen);
+    fprintf(aft->file_ctx->fp, "PACKET LEN:        %" PRIu32 "\n", GET_PKT_LEN(p));
     fprintf(aft->file_ctx->fp, "PACKET:\n");
-    PrintRawDataFp(aft->file_ctx->fp, p->pkt, p->pktlen);
+    PrintRawDataFp(aft->file_ctx->fp, GET_PKT_DATA(p), GET_PKT_LEN(p));
 
     fflush(aft->file_ctx->fp);
     SCMutexUnlock(&aft->file_ctx->fp_mutex);
@@ -356,9 +356,9 @@ TmEcode AlertDebugLogDecoderEvent(ThreadVars *tv, Packet *p, void *data, PacketQ
 
     aft->file_ctx->alerts += p->alerts.cnt;
 
-    fprintf(aft->file_ctx->fp, "PACKET LEN:        %" PRIu32 "\n", p->pktlen);
+    fprintf(aft->file_ctx->fp, "PACKET LEN:        %" PRIu32 "\n", GET_PKT_LEN(p));
     fprintf(aft->file_ctx->fp, "PACKET:\n");
-    PrintRawDataFp(aft->file_ctx->fp, p->pkt, p->pktlen);
+    PrintRawDataFp(aft->file_ctx->fp, GET_PKT_DATA(p), GET_PKT_LEN(p));
 
     fflush(aft->file_ctx->fp);
     SCMutexUnlock(&aft->file_ctx->fp_mutex);
diff --git a/src/alert-fastlog.c b/src/alert-fastlog.c
index 1131a3f..3ca91cc 100644
--- a/src/alert-fastlog.c
+++ b/src/alert-fastlog.c
@@ -235,7 +235,7 @@ TmEcode AlertFastLogDecoderEvent(ThreadVars *tv, Packet *p, void *data, PacketQu
         fprintf(aft->file_ctx->fp, "%s  [**] [%" PRIu32 ":%" PRIu32 ":%" PRIu32 "] %s [**] [Classification: %s] [Priority: %" PRIu32 "] [**] [Raw pkt: ",
                 timebuf, pa->gid, pa->sid, pa->rev, pa->msg, pa->class_msg, pa->prio);
 
-        PrintRawLineHexFp(aft->file_ctx->fp, p->pkt, p->pktlen < 32 ? p->pktlen : 32);
+        PrintRawLineHexFp(aft->file_ctx->fp, GET_PKT_DATA(p), GET_PKT_LEN(p) < 32 ? GET_PKT_LEN(p) : 32);
         if (p->pcap_cnt != 0) {
             fprintf(aft->file_ctx->fp, "] [pcap file packet: %"PRIu64"]", p->pcap_cnt);
         }
diff --git a/src/alert-unified-log.c b/src/alert-unified-log.c
index 2ee5903..8901323 100644
--- a/src/alert-unified-log.c
+++ b/src/alert-unified-log.c
@@ -212,7 +212,7 @@ TmEcode AlertUnifiedLog (ThreadVars *tv, Packet *p, void *data, PacketQueue *pq,
     hdr.tv.tv_sec = hdr.ref_tv.tv_sec = p->ts.tv_sec;
     hdr.tv.tv_usec = hdr.ref_tv.tv_usec = p->ts.tv_usec;
     hdr.pktflags = 0; /* XXX */
-    hdr.pktlen = hdr.caplen = p->pktlen + ethh_offset;
+    hdr.pktlen = hdr.caplen = GET_PKT_LEN(p) + ethh_offset;
 
 
     uint16_t i = 0;
@@ -244,13 +244,13 @@ TmEcode AlertUnifiedLog (ThreadVars *tv, Packet *p, void *data, PacketQueue *pq,
             buflen += sizeof(ethh);
         }
 
-        memcpy(buf+buflen,&p->pkt,p->pktlen);
-        buflen += p->pktlen;
+        memcpy(buf+buflen, GET_PKT_DATA(p),GET_PKT_LEN(p));
+        buflen += GET_PKT_LEN(p);
 
         /** Wait for the mutex. We dont want all the threads rotating the file
          * at the same time :) */
         SCMutexLock(&aun->file_ctx->fp_mutex);
-        if ((aun->file_ctx->size_current + sizeof(hdr) + p->pktlen + ethh_offset) > aun->file_ctx->size_limit) {
+        if ((aun->file_ctx->size_current + sizeof(hdr) + GET_PKT_LEN(p) + ethh_offset) > aun->file_ctx->size_limit) {
             if (AlertUnifiedLogRotateFile(tv,aun) < 0) {
                 SCMutexUnlock(&aun->file_ctx->fp_mutex);
                 aun->file_ctx->alerts += i;
diff --git a/src/alert-unified2-alert.c b/src/alert-unified2-alert.c
index 7ea721d..fb3787d 100644
--- a/src/alert-unified2-alert.c
+++ b/src/alert-unified2-alert.c
@@ -240,8 +240,8 @@ int Unified2PacketTypeAlert (ThreadVars *t, Packet *p, void *data)
     int ret, len;
     char write_buffer[sizeof(Unified2AlertFileHeader) + sizeof(Unified2Packet) + IPV4_MAXPACKET_LEN];
 
-    if(p->pktlen > 0)
-        len = (sizeof(Unified2AlertFileHeader) + sizeof(Unified2Packet)) - 4 + p->pktlen;
+    if(GET_PKT_LEN(p) > 0)
+        len = (sizeof(Unified2AlertFileHeader) + sizeof(Unified2Packet)) - 4 + GET_PKT_LEN(p);
     else
         len = (sizeof(Unified2AlertFileHeader) + sizeof(Unified2Packet)) - 4;
 
@@ -251,7 +251,7 @@ int Unified2PacketTypeAlert (ThreadVars *t, Packet *p, void *data)
     memset(&phdr, 0, sizeof(Unified2Packet));
 
     hdr.type = htonl(UNIFIED2_PACKET_TYPE);
-    hdr.length = htonl(sizeof(Unified2Packet) -4 + p->pktlen);
+    hdr.length = htonl(sizeof(Unified2Packet) -4 + GET_PKT_LEN(p));
 
     memcpy(write_buffer,&hdr,sizeof(Unified2AlertFileHeader));
 
@@ -260,10 +260,10 @@ int Unified2PacketTypeAlert (ThreadVars *t, Packet *p, void *data)
     phdr.event_id = 0;
     phdr.event_second = phdr.packet_second = htonl(p->ts.tv_sec);
     phdr.packet_microsecond = htonl(p->ts.tv_usec);
-    phdr.packet_length = htonl(p->pktlen);
+    phdr.packet_length = htonl(GET_PKT_LEN(p));
 
     memcpy(write_buffer+sizeof(Unified2AlertFileHeader),&phdr,sizeof(Unified2Packet) - 4);
-    memcpy(write_buffer + sizeof(Unified2AlertFileHeader) + sizeof(Unified2Packet) - 4 , p->pkt, p->pktlen);
+    memcpy(write_buffer + sizeof(Unified2AlertFileHeader) + sizeof(Unified2Packet) - 4 , GET_PKT_DATA(p), GET_PKT_LEN(p));
 
     ret = fwrite(write_buffer,len, 1, aun->file_ctx->fp);
     if (ret != 1) {
diff --git a/src/decode-gre.c b/src/decode-gre.c
index d50e019..098309c 100644
--- a/src/decode-gre.c
+++ b/src/decode-gre.c
@@ -196,7 +196,7 @@ void DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u
                     Packet *tp = PacketPseudoPktSetup(p, pkt + header_len,
                             len - header_len, IPPROTO_IP);
                     if (tp != NULL) {
-                        DecodeTunnel(tv, dtv, tp, tp->pkt, tp->pktlen, pq);
+                        DecodeTunnel(tv, dtv, tp, GET_PKT_DATA(tp), GET_PKT_LEN(tp), pq);
                         PacketEnqueue(pq,tp);
                     }
                 }
@@ -209,7 +209,7 @@ void DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u
                     Packet *tp = PacketPseudoPktSetup(p, pkt + header_len,
                             len - header_len, PPP_OVER_GRE);
                     if (tp != NULL) {
-                        DecodeTunnel(tv, dtv, tp, tp->pkt, tp->pktlen, pq);
+                        DecodeTunnel(tv, dtv, tp, GET_PKT_DATA(tp), GET_PKT_LEN(tp), pq);
                         PacketEnqueue(pq,tp);
                     }
                 }
@@ -222,7 +222,7 @@ void DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u
                     Packet *tp = PacketPseudoPktSetup(p, pkt + header_len,
                             len - header_len, IPPROTO_IPV6);
                     if (tp != NULL) {
-                        DecodeTunnel(tv, dtv, tp, tp->pkt, tp->pktlen, pq);
+                        DecodeTunnel(tv, dtv, tp, GET_PKT_DATA(tp), GET_PKT_LEN(tp), pq);
                         PacketEnqueue(pq,tp);
                     }
                 }
@@ -235,7 +235,7 @@ void DecodeGRE(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u
                     Packet *tp = PacketPseudoPktSetup(p, pkt + header_len,
                             len - header_len, VLAN_OVER_GRE);
                     if (tp != NULL) {
-                        DecodeTunnel(tv, dtv, tp, tp->pkt, tp->pktlen, pq);
+                        DecodeTunnel(tv, dtv, tp, GET_PKT_DATA(tp), GET_PKT_LEN(tp), pq);
                         PacketEnqueue(pq,tp);
                     }
                 }
diff --git a/src/decode-ipv4.c b/src/decode-ipv4.c
index 22963dc..503253e 100644
--- a/src/decode-ipv4.c
+++ b/src/decode-ipv4.c
@@ -565,7 +565,7 @@ void DecodeIPV4(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt,
                             IPV4_GET_IPPROTO(p));
                     if (tp != NULL) {
                         /* send that to the Tunnel decoder */
-                        DecodeTunnel(tv, dtv, tp, tp->pkt, tp->pktlen, pq);
+                        DecodeTunnel(tv, dtv, tp, GET_PKT_DATA(tp), GET_PKT_LEN(tp), pq);
 
                         /* add the tp to the packet queue. */
                         PacketEnqueue(pq,tp);
@@ -584,7 +584,7 @@ void DecodeIPV4(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt,
         Packet *rp = Defrag(tv, dtv, NULL, p);
         if (rp != NULL) {
             /* Got re-assembled packet, re-run through decoder. */
-            DecodeIPV4(tv, dtv, rp, rp->pkt, rp->pktlen, pq);
+            DecodeIPV4(tv, dtv, rp, GET_PKT_DATA(rp), GET_PKT_LEN(rp), pq);
             PacketEnqueue(pq, rp);
         }
     }
diff --git a/src/decode-ipv6.c b/src/decode-ipv6.c
index 870062c..b3a5776 100644
--- a/src/decode-ipv6.c
+++ b/src/decode-ipv6.c
@@ -456,7 +456,7 @@ void DecodeIPV6(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt,
     if (IPV6_EXTHDR_ISSET_FH(p)) {
         Packet *rp = Defrag(tv, dtv, NULL, p);
         if (rp != NULL) {
-            DecodeIPV6(tv, dtv, rp, rp->pkt, rp->pktlen, pq);
+            DecodeIPV6(tv, dtv, rp, GET_PKT_DATA(rp), GET_PKT_LEN(rp), pq);
             PacketEnqueue(pq, rp);
 
             /* Not really a tunnel packet, but we're piggybacking that
diff --git a/src/decode-raw.c b/src/decode-raw.c
index d9581f3..13d8925 100644
--- a/src/decode-raw.c
+++ b/src/decode-raw.c
@@ -43,10 +43,10 @@ void DecodeRaw(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, uint8_t *pkt, u
 
     if (IP_GET_RAW_VER(pkt) == 4) {
         SCLogDebug("IPV4 Packet");
-        DecodeIPV4(tv, dtv, p, p->pkt, p->pktlen, pq);
+        DecodeIPV4(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
     } else if (IP_GET_RAW_VER(pkt) == 6) {
         SCLogDebug("IPV6 Packet");
-        DecodeIPV6(tv, dtv, p, p->pkt, p->pktlen, pq);
+        DecodeIPV6(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
     } else {
         SCLogDebug("Unknown ip version %" PRIu8 "", IP_GET_RAW_VER(pkt));
         DECODER_SET_EVENT(p,IPRAW_INVALID_IPV);
diff --git a/src/defrag.c b/src/defrag.c
index 4165560..701a00e 100644
--- a/src/defrag.c
+++ b/src/defrag.c
@@ -557,8 +557,8 @@ Defrag4Reassemble(ThreadVars *tv, DefragContext *dc, DefragTracker *tracker,
         if (frag->offset == 0) {
             /* This is the first packet, we use this packets link and
              * IPv4 header. We also copy in its data. */
-            memcpy(rp->pkt, frag->pkt, frag->len);
-            rp->ip4h = (IPV4Hdr *)(rp->pkt + frag->ip_hdr_offset);
+            CopyDataToPacket(p, frag->pkt, frag->len);
+            rp->ip4h = (IPV4Hdr *)(GET_PKT_DATA(rp) + frag->ip_hdr_offset);
             hlen = frag->hlen;
             ip_hdr_offset = frag->ip_hdr_offset;
 
@@ -574,7 +574,7 @@ Defrag4Reassemble(ThreadVars *tv, DefragContext *dc, DefragTracker *tracker,
                 SCLogWarning(SC_ERR_REASSEMBLY, "Failed re-assemble fragmented packet, exceeds size of packet buffer.");
                 goto remove_tracker;
             }
-            memcpy(rp->pkt + fragmentable_offset + frag->offset + frag->ltrim,
+            CopyDataToPacketOffset(rp, fragmentable_offset + frag->offset + frag->ltrim,
                 frag->pkt + frag->data_offset + frag->ltrim,
                 frag->data_len - frag->ltrim);
             if (frag->offset + frag->data_len > fragmentable_len)
@@ -588,7 +588,7 @@ Defrag4Reassemble(ThreadVars *tv, DefragContext *dc, DefragTracker *tracker,
     rp->ip4h->ip_off = 0;
     rp->ip4h->ip_csum = FixChecksum(rp->ip4h->ip_csum,
         old, rp->ip4h->ip_len + rp->ip4h->ip_off);
-    rp->pktlen = ip_hdr_offset + hlen + fragmentable_len;
+    SET_PKT_LEN(p, ip_hdr_offset + hlen + fragmentable_len);
     IPV4_CACHE_INIT(rp);
 
 remove_tracker:
@@ -673,11 +673,11 @@ Defrag6Reassemble(ThreadVars *tv, DefragContext *dc, DefragTracker *tracker,
             /* This is the first packet, we use this packets link and
              * IPv6 headers. We also copy in its data, but remove the
              * fragmentation header. */
-            memcpy(rp->pkt, frag->pkt, frag->frag_hdr_offset);
-            memcpy(rp->pkt + frag->frag_hdr_offset,
+            CopyDataToPacket(rp, frag->pkt, frag->frag_hdr_offset);
+            CopyDataToPacketOffset(rp, frag->frag_hdr_offset,
                 frag->pkt + frag->frag_hdr_offset + sizeof(IPV6FragHdr),
                 frag->data_len);
-            rp->ip6h = (IPV6Hdr *)(rp->pkt + frag->ip_hdr_offset);
+            rp->ip6h = (IPV6Hdr *)(GET_PKT_DATA(rp) + frag->ip_hdr_offset);
             ip_hdr_offset = frag->ip_hdr_offset;
 
             /* This is the start of the fragmentable portion of the
@@ -687,7 +687,7 @@ Defrag6Reassemble(ThreadVars *tv, DefragContext *dc, DefragTracker *tracker,
             fragmentable_len = frag->data_len;
         }
         else {
-            memcpy(rp->pkt + fragmentable_offset + frag->offset + frag->ltrim,
+            CopyDataToPacketOffset(rp, fragmentable_offset + frag->offset + frag->ltrim,
                 frag->pkt + frag->data_offset + frag->ltrim,
                 frag->data_len - frag->ltrim);
             if (frag->offset + frag->data_len > fragmentable_len)
@@ -697,7 +697,7 @@ Defrag6Reassemble(ThreadVars *tv, DefragContext *dc, DefragTracker *tracker,
     BUG_ON(rp->ip6h == NULL);
     rp->ip6h->s_ip6_plen = htons(fragmentable_len);
     rp->ip6h->s_ip6_nxt = next_hdr;
-    rp->pktlen = ip_hdr_offset + sizeof(IPV6Hdr) + fragmentable_len;
+    SET_PKT_LEN(rp, ip_hdr_offset + sizeof(IPV6Hdr) + fragmentable_len);
     IPV6_CACHE_INIT(rp);
 
 remove_tracker:
@@ -893,15 +893,15 @@ insert:
     if (new == NULL) {
         goto done;
     }
-    new->pkt = SCMalloc(p->pktlen);
+    new->pkt = SCMalloc(GET_PKT_LEN(p));
     if (new->pkt == NULL) {
         SCMutexLock(&dc->frag_pool_lock);
         PoolReturn(dc->frag_pool, new);
         SCMutexUnlock(&dc->frag_pool_lock);
         goto done;
     }
-    memcpy(new->pkt, p->pkt + ltrim, p->pktlen - ltrim);
-    new->len = p->pktlen - ltrim;
+    memcpy(new->pkt, GET_PKT_DATA(p) + ltrim, GET_PKT_LEN(p) - ltrim);
+    new->len = GET_PKT_LEN(p) - ltrim;
     new->hlen = hlen;
     new->offset = frag_offset + ltrim;
     new->data_offset = data_offset;
@@ -1233,10 +1233,10 @@ BuildTestPacket(uint16_t id, uint16_t off, int mf, const char content,
     p->ip4h->ip_dst.s_addr = 0x02020202; /* 2.2.2.2 */
     SET_IPV4_SRC_ADDR(p, &p->src);
     SET_IPV4_DST_ADDR(p, &p->dst);
-    memset(p->pkt + hlen, content, content_len);
-    p->pktlen = hlen + content_len;
+    memset(GET_PKT_DATA(p) + hlen, content, content_len);
+    SET_PKT_LEN(p, hlen + content_len);
 
-    p->ip4h->ip_csum = IPV4CalculateChecksum((uint16_t *)p->pkt, hlen);
+    p->ip4h->ip_csum = IPV4CalculateChecksum((uint16_t *)GET_PKT_DATA(p), hlen);
 
     /* Self test. */
     IPV4_CACHE_INIT(p);
@@ -1291,14 +1291,14 @@ IPV6BuildTestPacket(uint32_t id, uint16_t off, int mf, const char content,
     p->ip6h->ip6_dst[3] = 0x02020202;
 
     /* Fragmentation header. */
-    p->ip6eh.ip6fh = (IPV6FragHdr *)(p->pkt + sizeof(IPV6Hdr));
+    p->ip6eh.ip6fh = (IPV6FragHdr *)(GET_PKT_DATA(p) + sizeof(IPV6Hdr));
     p->ip6eh.ip6fh->ip6fh_nxt = IPPROTO_ICMP;
     p->ip6eh.ip6fh->ip6fh_ident = htonl(id);
     p->ip6eh.ip6fh->ip6fh_offlg = htons((off << 3) | mf);
 
-    memset(p->pkt + sizeof(IPV6Hdr) + sizeof(IPV6FragHdr), content,
+    memset(GET_PKT_DATA(p) + sizeof(IPV6Hdr) + sizeof(IPV6FragHdr), content,
         content_len);
-    p->pktlen = sizeof(IPV6Hdr) + sizeof(IPV6FragHdr) + content_len;
+    SET_PKT_LEN(p, sizeof(IPV6Hdr) + sizeof(IPV6FragHdr) + content_len);
 
     p->ip6h->s_ip6_plen = htons(sizeof(IPV6FragHdr) + content_len);
 
diff --git a/src/detect-bytetest.c b/src/detect-bytetest.c
index 96a454d..ff7247f 100644
--- a/src/detect-bytetest.c
+++ b/src/detect-bytetest.c
@@ -262,7 +262,7 @@ int DetectBytetestMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx,
      */
     if (data->flags & DETECT_BYTETEST_RELATIVE) {
         ptr = det_ctx->pkt_ptr;
-        len = p->pktlen - det_ctx->pkt_off;
+        len = GET_PKT_LEN(p) - det_ctx->pkt_off;
 
         /* No match if there is no relative base */
         if (ptr == NULL || len == 0) {
@@ -280,9 +280,9 @@ int DetectBytetestMatch(ThreadVars *t, DetectEngineThreadCtx *det_ctx,
     /* Validate that the to-be-extracted is within the packet
      * \todo Should this validate it is in the *payload*?
      */
-    if (ptr < p->pkt || data->nbytes > len) {
+    if (ptr < GET_PKT_DATA(p) || data->nbytes > len) {
         SCLogDebug("Data not within packet pkt=%p, ptr=%p, len=%d, nbytes=%d",
-                    p->pkt, ptr, len, data->nbytes);
+                    GET_PKT_DATA(p), ptr, len, data->nbytes);
         return 0;
     }
 
diff --git a/src/detect-engine-tag.c b/src/detect-engine-tag.c
index 2437796..0173049 100644
--- a/src/detect-engine-tag.c
+++ b/src/detect-engine-tag.c
@@ -348,7 +348,7 @@ void TagHandlePacket(DetectEngineCtx *de_ctx, DetectEngineThreadCtx *det_ctx,
                 /* update counters */
                 iter->last_ts.tv_sec = ts.tv_sec;
                 iter->packets++;
-                iter->bytes += p->pktlen;
+                iter->bytes += GET_PKT_LEN(p);
 
                 /* If this packet triggered the rule with tag, we dont need
                  * to log it (the alert will log it) */
@@ -482,7 +482,7 @@ void TagHandlePacket(DetectEngineCtx *de_ctx, DetectEngineThreadCtx *det_ctx,
         /* update counters */
         iter->last_ts.tv_sec = ts.tv_sec;
         iter->packets++;
-        iter->bytes += p->pktlen;
+        iter->bytes += GET_PKT_LEN(p);
 
         /* If this packet triggered the rule with tag, we dont need
          * to log it (the alert will log it) */
@@ -577,7 +577,7 @@ void TagHandlePacket(DetectEngineCtx *de_ctx, DetectEngineThreadCtx *det_ctx,
         /* update counters */
         iter->last_ts.tv_sec = ts.tv_sec;
         iter->packets++;
-        iter->bytes += p->pktlen;
+        iter->bytes += GET_PKT_LEN(p);
 
         /* If this packet triggered the rule with tag, we dont need
          * to log it (the alert will log it) */
diff --git a/src/flow.c b/src/flow.c
index d955529..cdc9d88 100644
--- a/src/flow.c
+++ b/src/flow.c
@@ -706,7 +706,7 @@ void FlowHandlePacket (ThreadVars *tv, Packet *p)
         f->tosrcpktcnt++;
         p->flowflags |= FLOW_PKT_TOCLIENT;
     }
-    f->bytecnt += p->pktlen;
+    f->bytecnt += GET_PKT_LEN(p);
 
     if (f->flags & FLOW_TO_DST_SEEN && f->flags & FLOW_TO_SRC_SEEN) {
         SCLogDebug("pkt %p FLOW_PKT_ESTABLISHED", p);
diff --git a/src/source-erf-dag.c b/src/source-erf-dag.c
index 44a11c7..ac4efc0 100644
--- a/src/source-erf-dag.c
+++ b/src/source-erf-dag.c
@@ -521,16 +521,16 @@ TmEcode ProcessErfDagRecord(ErfDagThreadVars *ewtn, char *prec, Packet *p)
 
     pload = &(dr->rec);
 
-    p->pktlen = wlen - 4;   /* Trim the FCS... */
+    GET_PKT_LEN(p) = wlen - 4;   /* Trim the FCS... */
     p->datalink = LINKTYPE_ETHERNET;
 
     /* Take into account for link type Ethernet ETH frame starts
      * after ther ERF header + pad.
      */
-    memcpy(p->pkt, pload->eth.dst, p->pktlen);
+    CopyDataToPacket(p, pload->eth.dst, GET_PKT_LEN(p));
 
-    SCLogDebug("p->pktlen: %" PRIu32 " (pkt %02x, p->pkt %02x)",
-               p->pktlen, *p, *p->pkt);
+    SCLogDebug("pktlen: %" PRIu32 " (pkt %02x, pkt data %02x)",
+               GET_PKT_LEN(p), *p, *GET_PKT_DATA(p));
 
     /* Convert ERF time to timeval - from libpcap. */
     uint64_t ts = dr->ts;
@@ -609,18 +609,18 @@ TmEcode DecodeErfDag(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq,
     SCPerfCounterIncr(dtv->counter_pkts, tv->sc_perf_pca);
     SCPerfCounterIncr(dtv->counter_pkts_per_sec, tv->sc_perf_pca);
 
-    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, GET_PKT_LEN(p));
     SCPerfCounterAddDouble(dtv->counter_mbit_per_sec, tv->sc_perf_pca,
-                           (p->pktlen * 8)/1000000.0);
+                           (GET_PKT_LEN(p) * 8)/1000000.0);
 
-    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
 
         /* call the decoder */
     switch(p->datalink) {
         case LINKTYPE_ETHERNET:
-            DecodeEthernet(tv, dtv, p, p->pkt, p->pktlen, pq);
+            DecodeEthernet(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
             break;
         default:
             SCLogError(SC_ERR_DATALINK_UNIMPLEMENTED,
diff --git a/src/source-erf-file.c b/src/source-erf-file.c
index f8462c0..9c675f8 100644
--- a/src/source-erf-file.c
+++ b/src/source-erf-file.c
@@ -120,7 +120,7 @@ ReceiveErfFile(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, PacketQue
     }
     int rlen = ntohs(dr.rlen);
     int wlen = ntohs(dr.wlen);
-    r = fread(p->pkt, rlen - sizeof(DagRecord), 1, etv->erf);
+    r = fread(GET_PKT_DATA(p), rlen - sizeof(DagRecord), 1, etv->erf);
     if (r < 1) {
         SCLogInfo("End of ERF file reached or an error occurred.");
         EngineStop();
@@ -134,7 +134,7 @@ ReceiveErfFile(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, PacketQue
         SCReturnInt(TM_ECODE_FAILED);
     }
 
-    p->pktlen = wlen - 4; /* Trim the FCS... */
+    GET_PKT_LEN(p) = wlen - 4; /* Trim the FCS... */
     p->datalink = LINKTYPE_ETHERNET;
 
     /* Convert ERF time to timeval - from libpcap. */
@@ -227,15 +227,15 @@ DecodeErfFile(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, PacketQueu
     SCPerfCounterIncr(dtv->counter_pkts, tv->sc_perf_pca);
     SCPerfCounterIncr(dtv->counter_pkts_per_sec, tv->sc_perf_pca);
 
-    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, GET_PKT_LEN(p));
     SCPerfCounterAddDouble(dtv->counter_mbit_per_sec, tv->sc_perf_pca,
-                           (p->pktlen * 8)/1000000.0 );
+                           (GET_PKT_LEN(p) * 8)/1000000.0 );
 
-    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
 
-    DecodeEthernet(tv, dtv, p, p->pkt, p->pktlen, pq);
+    DecodeEthernet(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
 
     SCReturnInt(TM_ECODE_OK);
 }
diff --git a/src/source-ipfw.c b/src/source-ipfw.c
index 8515085..d733eda 100644
--- a/src/source-ipfw.c
+++ b/src/source-ipfw.c
@@ -254,9 +254,9 @@ TmEcode ReceiveIPFW(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, Pack
     ptv->bytes += pktlen;
 
     p->datalink = ptv->datalink;
-    p->pktlen = pktlen;
-    memcpy(p->pkt, pkt, p->pktlen);
-    SCLogDebug("Packet info: p->pktlen: %" PRIu32 " (pkt %02x, p->pkt %02x)", p->pktlen, *pkt, *p->pkt);
+    SET_PKT_LEN(p, pktlen);
+    CopyDataToPacket(p, pkt, p->pktlen);
+    SCLogDebug("Packet info: pkt_len: %" PRIu32 " (pkt %02x, pkt_data %02x)", GET_PKT_LEN(p), *pkt, GET_PKT_DATA(p));
 
     /* pass on... */
     tv->tmqh_out(tv, p);
@@ -409,18 +409,18 @@ TmEcode DecodeIPFW(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, Packe
 
     /* update counters */
     SCPerfCounterIncr(dtv->counter_pkts, tv->sc_perf_pca);
-    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
 
     /* Process IP packets */
     if (IPV4_GET_RAW_VER(ip4h) == 4) {
         SCLogDebug("DecodeIPFW ip4 processing");
-        DecodeIPV4(tv, dtv, p, p->pkt, p->pktlen, pq);
+        DecodeIPV4(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
 
     } else if(IPV6_GET_RAW_VER(ip6h) == 6) {
         SCLogDebug("DecodeIPFW ip6 processing");
-        DecodeIPV6(tv, dtv, p, p->pkt, p->pktlen, pq);
+        DecodeIPV6(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
 
     } else {
         /* We don't support anything besides IP packets for now, bridged packets? */
@@ -485,7 +485,7 @@ TmEcode IPFWSetVerdict(ThreadVars *tv, IPFWThreadVars *ptv, Packet *p) {
         /* For divert sockets, accepting means writing the
          * packet back to the socket for ipfw to pick up
          */
-        SCLogDebug("IPFWSetVerdict writing to socket %d, %p, %u", ipfw_sock,p->pkt,p->pktlen);
+        SCLogDebug("IPFWSetVerdict writing to socket %d, %p, %u", ipfw_sock,GET_PKT_DATA(p),GET_PKT_LEN(p));
 
 
         while ( (poll(&IPFWpoll,1,IPFW_SOCKET_POLL_MSEC)) < 1) {
@@ -498,7 +498,7 @@ TmEcode IPFWSetVerdict(ThreadVars *tv, IPFWThreadVars *ptv, Packet *p) {
         }
 
         SCMutexLock(&ipfw_socket_lock);
-        if (sendto(ipfw_sock, p->pkt, p->pktlen, 0,(struct sockaddr *)&ipfw_sin, ipfw_sinlen) == -1) {
+        if (sendto(ipfw_sock, GET_PKT_DATA(p), GET_PKT_LEN(p), 0,(struct sockaddr *)&ipfw_sin, ipfw_sinlen) == -1) {
             SCLogWarning(SC_WARN_IPFW_XMIT,"Write to ipfw divert socket failed: %s",strerror(errno));
             SCMutexUnlock(&ipfw_socket_lock);
             SCReturnInt(TM_ECODE_FAILED);
@@ -506,7 +506,7 @@ TmEcode IPFWSetVerdict(ThreadVars *tv, IPFWThreadVars *ptv, Packet *p) {
 
         SCMutexUnlock(&ipfw_socket_lock);
 
-        SCLogDebug("Sent Packet back into IPFW Len: %d",p->pktlen);
+        SCLogDebug("Sent Packet back into IPFW Len: %d",GET_PKT_LEN(p));
 
     } /* end IPFW_ACCEPT */
 
diff --git a/src/source-nfq.c b/src/source-nfq.c
index 4e90bb8..56f9cf3 100644
--- a/src/source-nfq.c
+++ b/src/source-nfq.c
@@ -177,15 +177,18 @@ void NFQSetupPkt (Packet *p, void *data)
              * to trigger an error in packet decoding.
              * This is unlikely to happen */
             SCLogWarning(SC_ERR_INVALID_ARGUMENTS, "NFQ sent too big packet");
-            p->pktlen = 0;
+            SET_PKT_LEN(p, 0);
         } else {
-            memcpy(p->pkt, pktdata, ret);
-            p->pktlen = (size_t)ret;
+            ret = CopyDataToPacket(p, (uint8_t *)pktdata, ret);
+            if (ret == -1) {
+                SCLogWarning(SC_ERR_INVALID_ARGUMENTS, "NFQ send strange packet");
+                SET_PKT_LEN(p, 0);
+            }
         }
     } else if (ret ==  -1) {
         /* unable to get pointer to data, ensure packet length is zero.
          * This will trigger an error in packet decoding */
-        p->pktlen = 0;
+        SET_PKT_LEN(p, 0);
     }
 
     ret = nfq_get_timestamp(tb, &p->ts);
@@ -214,7 +217,7 @@ static int NFQCallBack(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
 
 #ifdef COUNTERS
     nfq_t->pkts++;
-    nfq_t->bytes += p->pktlen;
+    nfq_t->bytes += GET_PKT_LEN(p);
 #endif /* COUNTERS */
 
     /* pass on... */
@@ -616,20 +619,20 @@ TmEcode DecodeNFQ(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, Packet
     DecodeThreadVars *dtv = (DecodeThreadVars *)data;
 
     SCPerfCounterIncr(dtv->counter_pkts, tv->sc_perf_pca);
-    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, GET_PKT_LEN(p));
     SCPerfCounterAddDouble(dtv->counter_mbit_per_sec, tv->sc_perf_pca,
-                           (p->pktlen * 8)/1000000.0);
+                           (GET_PKT_LEN(p) * 8)/1000000.0);
 
     if (IPV4_GET_RAW_VER(ip4h) == 4) {
         SCLogDebug("IPv4 packet");
 
-        DecodeIPV4(tv, dtv, p, p->pkt, p->pktlen, pq);
+        DecodeIPV4(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
     } else if(IPV6_GET_RAW_VER(ip6h) == 6) {
         SCLogDebug("IPv6 packet");
-        DecodeIPV6(tv, dtv, p, p->pkt, p->pktlen, pq);
+        DecodeIPV6(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
     } else {
         SCLogDebug("packet unsupported by NFQ, first byte: %02x", *p->pkt);
     }
diff --git a/src/source-pcap-file.c b/src/source-pcap-file.c
index 0575d52..d215c30 100644
--- a/src/source-pcap-file.c
+++ b/src/source-pcap-file.c
@@ -135,9 +135,9 @@ void PcapFileCallback(char *user, struct pcap_pkthdr *h, u_char *pkt) {
     ptv->pkts++;
     ptv->bytes += h->caplen;
 
-    p->pktlen = h->caplen;
-    memcpy(p->pkt, pkt, p->pktlen);
-    //printf("PcapFileCallback: p->pktlen: %" PRIu32 " (pkt %02x, p->pkt %02x)\n", p->pktlen, *pkt, *p->pkt);
+    SET_PKT_LEN(p, h->caplen);
+    CopyDataToPacket(p, pkt, GET_PKT_LEN(p));
+    //printf("PcapFileCallback: GET_PKT_LEN(p): %" PRIu32 " (pkt %02x, GET_PKT_DATA(p) %02x)\n", GET_PKT_LEN(p), *pkt, *p->pkt);
 
     /* store the packet in our array */
     ptv->array[ptv->array_idx] = p;
@@ -309,16 +309,16 @@ TmEcode DecodePcapFile(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, P
     SCPerfCounterIncr(dtv->counter_pkts, tv->sc_perf_pca);
     SCPerfCounterIncr(dtv->counter_pkts_per_sec, tv->sc_perf_pca);
 
-    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, GET_PKT_LEN(p));
     SCPerfCounterAddDouble(dtv->counter_mbit_per_sec, tv->sc_perf_pca,
-                           (p->pktlen * 8)/1000000.0 );
+                           (GET_PKT_LEN(p) * 8)/1000000.0 );
 
-    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
 
     /* call the decoder */
-    pcap_g.Decoder(tv, dtv, p, p->pkt, p->pktlen, pq);
+    pcap_g.Decoder(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
 
     SCReturnInt(TM_ECODE_OK);
 }
diff --git a/src/source-pcap.c b/src/source-pcap.c
index bbf92d8..9f44098 100644
--- a/src/source-pcap.c
+++ b/src/source-pcap.c
@@ -151,9 +151,10 @@ void PcapCallback(char *user, struct pcap_pkthdr *h, u_char *pkt) {
     ptv->bytes += h->caplen;
 
     p->datalink = ptv->datalink;
-    p->pktlen = h->caplen;
-    memcpy(p->pkt, pkt, p->pktlen);
-    SCLogDebug("p->pktlen: %" PRIu32 " (pkt %02x, p->pkt %02x)", p->pktlen, *pkt, *p->pkt);
+    SET_PKT_LEN(p, h->caplen);
+    CopyDataToPacket(p, pkt, GET_PKT_LEN(p));
+    SCLogDebug("pktlen: %" PRIu32 " (pkt %02x, pkt data %02x)",
+               GET_PKT_LEN(p), *p, *GET_PKT_DATA(p));
 
     /* store the packet in our array */
     ptv->array[ptv->array_idx] = p;
@@ -472,27 +473,27 @@ TmEcode DecodePcap(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, Packe
     SCPerfCounterIncr(dtv->counter_pkts, tv->sc_perf_pca);
     SCPerfCounterIncr(dtv->counter_pkts_per_sec, tv->sc_perf_pca);
 
-    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, GET_PKT_LEN(p));
     SCPerfCounterAddDouble(dtv->counter_mbit_per_sec, tv->sc_perf_pca,
-                           (p->pktlen * 8)/1000000.0);
+                           (GET_PKT_LEN(p) * 8)/1000000.0);
 
-    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
 
     /* call the decoder */
     switch(p->datalink) {
         case LINKTYPE_LINUX_SLL:
-            DecodeSll(tv, dtv, p, p->pkt, p->pktlen, pq);
+            DecodeSll(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
             break;
         case LINKTYPE_ETHERNET:
-            DecodeEthernet(tv, dtv, p,p->pkt, p->pktlen, pq);
+            DecodeEthernet(tv, dtv, p,GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
             break;
         case LINKTYPE_PPP:
-            DecodePPP(tv, dtv, p, p->pkt, p->pktlen, pq);
+            DecodePPP(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
             break;
         case LINKTYPE_RAW:
-            DecodeRaw(tv, dtv, p, p->pkt, p->pktlen, pq);
+            DecodeRaw(tv, dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
             break;
         default:
             SCLogError(SC_ERR_DATALINK_UNIMPLEMENTED, "Error: datalink type %" PRId32 " not yet supported in module DecodePcap", p->datalink);
diff --git a/src/source-pfring.c b/src/source-pfring.c
index bcbec88..995542c 100644
--- a/src/source-pfring.c
+++ b/src/source-pfring.c
@@ -171,8 +171,8 @@ void PfringProcessPacket(void *user, struct pfring_pkthdr *h, u_char *pkt, Packe
     /* PF_RING all packets are marked as a link type of ethernet so that is what we do here.  */
     p->datalink = LINKTYPE_ETHERNET;
 
-    p->pktlen = h->caplen;
-    memcpy(p->pkt, pkt, p->pktlen);
+    SET_PKT_LEN(p, h->caplen);
+    CopyDataToPacket(p, pkt, GET_PKT_LEN(p));
 
 }
 
@@ -354,15 +354,15 @@ TmEcode DecodePfring(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, Pac
     SCPerfCounterIncr(dtv->counter_pkts, tv->sc_perf_pca);
     SCPerfCounterIncr(dtv->counter_pkts_per_sec, tv->sc_perf_pca);
 
-    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_bytes, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterAddDouble(dtv->counter_bytes_per_sec, tv->sc_perf_pca, GET_PKT_LEN(p));
     SCPerfCounterAddDouble(dtv->counter_mbit_per_sec, tv->sc_perf_pca,
-                           (p->pktlen * 8)/1000000.0 );
+                           (GET_PKT_LEN(p) * 8)/1000000.0 );
 
-    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, p->pktlen);
-    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, p->pktlen);
+    SCPerfCounterAddUI64(dtv->counter_avg_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
+    SCPerfCounterSetUI64(dtv->counter_max_pkt_size, tv->sc_perf_pca, GET_PKT_LEN(p));
 
-    DecodeEthernet(tv, dtv, p,p->pkt, p->pktlen, pq);
+    DecodeEthernet(tv, dtv, p,GET_PKT_DATA(p), GET_PKT_LEN(p), pq);
 
     return TM_ECODE_OK;
 }
diff --git a/src/util-unittest-helper.c b/src/util-unittest-helper.c
index af3610d..f1bfb9f 100644
--- a/src/util-unittest-helper.c
+++ b/src/util-unittest-helper.c
@@ -100,7 +100,7 @@ Packet *UTHBuildPacketIPV6Real(uint8_t *payload, uint16_t payload_len,
     p->tcph->th_sport = sport;
     p->tcph->th_dport = dport;
 
-    p->pktlen = sizeof(IPV6Hdr) + sizeof(TCPHdr) + payload_len;
+    SET_PKT_LEN(p, sizeof(IPV6Hdr) + sizeof(TCPHdr) + payload_len);
     return p;
 }
 
@@ -164,7 +164,7 @@ Packet *UTHBuildPacketReal(uint8_t *payload, uint16_t payload_len,
             memset(p->udph, 0, sizeof(UDPHdr));
             p->udph->uh_sport = sport;
             p->udph->uh_dport = dport;
-            p->pktlen = sizeof(IPV4Hdr) + sizeof(UDPHdr) + payload_len;
+            SET_PKT_LEN(p, sizeof(IPV4Hdr) + sizeof(UDPHdr) + payload_len);
             break;
         case IPPROTO_TCP:
             p->tcph = SCMalloc(sizeof(TCPHdr));
@@ -173,14 +173,14 @@ Packet *UTHBuildPacketReal(uint8_t *payload, uint16_t payload_len,
             memset(p->tcph, 0, sizeof(TCPHdr));
             p->tcph->th_sport = sport;
             p->tcph->th_dport = dport;
-            p->pktlen = sizeof(IPV4Hdr) + sizeof(TCPHdr) + payload_len;
+            SET_PKT_LEN(p, sizeof(IPV4Hdr) + sizeof(TCPHdr) + payload_len);
             break;
         case IPPROTO_ICMP:
             p->icmpv4h = SCMalloc(sizeof(ICMPV4Hdr));
             if (p->icmpv4h == NULL)
                 return NULL;
             memset(p->icmpv4h, 0, sizeof(ICMPV4Hdr));
-            p->pktlen = sizeof(IPV4Hdr) + sizeof(ICMPV4Hdr) + payload_len;
+            SET_PKT_LEN(p, sizeof(IPV4Hdr) + sizeof(ICMPV4Hdr) + payload_len);
             break;
         default:
             break;
-- 
1.7.2.3




More information about the Oisf-devel mailing list