]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
stream: track pcap log segments timestamp with SCTime_t
authorVictor Julien <vjulien@oisf.net>
Sat, 12 Oct 2024 04:58:34 +0000 (06:58 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 25 Oct 2024 05:47:11 +0000 (07:47 +0200)
This is a more compact time format.

src/log-pcap.c
src/stream-tcp-list.c
src/stream-tcp-private.h
src/stream-tcp.c

index e62a03dd806cd4c1e652f9757d0842d21b9badbb..a930d98fa329fbd419126cb05197d19b2826def4 100644 (file)
@@ -528,8 +528,10 @@ static int PcapLogSegmentCallback(
     struct PcapLogCallbackContext *pctx = (struct PcapLogCallbackContext *)data;
 
     if (seg->pcap_hdr_storage->pktlen) {
-        pctx->pl->h->ts.tv_sec = seg->pcap_hdr_storage->ts.tv_sec;
-        pctx->pl->h->ts.tv_usec = seg->pcap_hdr_storage->ts.tv_usec;
+        struct timeval tv;
+        SCTIME_TO_TIMEVAL(&tv, seg->pcap_hdr_storage->ts);
+        pctx->pl->h->ts.tv_sec = tv.tv_sec;
+        pctx->pl->h->ts.tv_usec = tv.tv_usec;
         pctx->pl->h->len = seg->pcap_hdr_storage->pktlen + buflen;
         pctx->pl->h->caplen = seg->pcap_hdr_storage->pktlen + buflen;
         MemBufferReset(pctx->buf);
index 25fdd9ca9fbd4c7ccc04221388a24bca89a17a80..0e6499337a498f18481787bfe848640dd93f0553 100644 (file)
@@ -569,8 +569,7 @@ static int DoHandleData(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx,
 static void StreamTcpSegmentAddPacketDataDo(TcpSegment *seg, const Packet *rp, const Packet *pp)
 {
     if (GET_PKT_DATA(rp) != NULL && GET_PKT_LEN(rp) > pp->payload_len) {
-        seg->pcap_hdr_storage->ts.tv_sec = SCTIME_SECS(rp->ts);
-        seg->pcap_hdr_storage->ts.tv_usec = SCTIME_USECS(rp->ts);
+        seg->pcap_hdr_storage->ts = rp->ts;
         seg->pcap_hdr_storage->pktlen = GET_PKT_LEN(rp) - pp->payload_len;
         /*
          * pkt_hdr members are initially allocated 64 bytes of memory. Thus,
@@ -582,8 +581,7 @@ static void StreamTcpSegmentAddPacketDataDo(TcpSegment *seg, const Packet *rp, c
                     seg->pcap_hdr_storage->alloclen, seg->pcap_hdr_storage->pktlen);
             if (tmp_pkt_hdr == NULL) {
                 SCLogDebug("Failed to realloc");
-                seg->pcap_hdr_storage->ts.tv_sec = 0;
-                seg->pcap_hdr_storage->ts.tv_usec = 0;
+                seg->pcap_hdr_storage->ts = SCTIME_INITIALIZER;
                 seg->pcap_hdr_storage->pktlen = 0;
                 return;
             } else {
@@ -594,8 +592,7 @@ static void StreamTcpSegmentAddPacketDataDo(TcpSegment *seg, const Packet *rp, c
         memcpy(seg->pcap_hdr_storage->pkt_hdr, GET_PKT_DATA(rp),
                 (size_t)GET_PKT_LEN(rp) - pp->payload_len);
     } else {
-        seg->pcap_hdr_storage->ts.tv_sec = 0;
-        seg->pcap_hdr_storage->ts.tv_usec = 0;
+        seg->pcap_hdr_storage->ts = SCTIME_INITIALIZER;
         seg->pcap_hdr_storage->pktlen = 0;
     }
 }
index 6873a56b912ab5de802f439ecf6e1ae9e4d1a473..4c425a8b39281a64e2c67e2f7ad58b1728228a0b 100644 (file)
@@ -63,7 +63,7 @@ RB_PROTOTYPE(TCPSACK, StreamTcpSackRecord, rb, TcpSackCompare);
  * used if the session-dump option is enabled.
  */
 typedef struct TcpSegmentPcapHdrStorage_ {
-    struct timeval ts;
+    SCTime_t ts;
     uint32_t pktlen;
     uint32_t alloclen;
     uint8_t *pkt_hdr;
index 9b3fe73eb60b0d9f33b236ebff2d06110202396a..eafedc187c393f071a36dd883ea34475939c0a08 100644 (file)
@@ -7022,8 +7022,8 @@ int StreamTcpSegmentForSession(
             }
             server_node = TCPSEG_RB_NEXT(server_node);
         } else {
-            if (TimevalEarlier(
-                        &client_node->pcap_hdr_storage->ts, &server_node->pcap_hdr_storage->ts)) {
+            if (SCTIME_CMP_LT(
+                        client_node->pcap_hdr_storage->ts, server_node->pcap_hdr_storage->ts)) {
                 StreamingBufferSegmentGetData(
                         &client_stream->sb, &client_node->sbseg, &seg_data, &seg_datalen);
                 ret = CallbackFunc(p, client_node, data, seg_data, seg_datalen);