]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2908 in SNORT/snort3 from ~SMULKA/snort3:si_ip to master
authorRon Dempster (rdempste) <rdempste@cisco.com>
Wed, 2 Jun 2021 19:31:42 +0000 (19:31 +0000)
committerRon Dempster (rdempste) <rdempste@cisco.com>
Wed, 2 Jun 2021 19:31:42 +0000 (19:31 +0000)
Squashed commit of the following:

commit afd5ac41ba87a6a2bfd8321fe8c18947bca0e907
Author: smulka <smulka@cisco.com>
Date:   Tue May 25 18:33:45 2021 -0400

    reputation: daq trace log

src/network_inspectors/reputation/reputation_inspect.cc

index 3b1bb28fb03d42d6995c8e3544fc86f75e14d473..6318c4bf9ba44d42b3e74f3cc029e2592866dfda 100644 (file)
@@ -74,6 +74,7 @@ const char* AllowActionOption[] =
  * Function prototype(s)
  */
 static void snort_reputation(ReputationConfig* GlobalConf, Packet* p);
+static void populate_trace_data(IPdecision& decision, Packet* p);
 
 static inline IPrepInfo* reputation_lookup(ReputationConfig* config, const SfIp* ip)
 {
@@ -351,6 +352,10 @@ static void snort_reputation(ReputationConfig* config, Packet* p)
         reputationstats.blocked++;
         if (PacketTracer::is_active())
             PacketTracer::log("Reputation: packet blocked, drop\n");
+
+        if (PacketTracer::is_daq_activated())
+            populate_trace_data(decision, p);
+
         return;
     }
 
@@ -399,6 +404,9 @@ static void snort_reputation(ReputationConfig* config, Packet* p)
         act->trust_session(p, true);
         reputationstats.trusted++;
     }
+
+    if (PacketTracer::is_daq_activated())
+        populate_trace_data(decision, p);
 }
 
 static const char* to_string(NestedIP nip)
@@ -460,6 +468,27 @@ static const char* to_string(IPdecision ipd)
     }
 }
 
+static void populate_trace_data(IPdecision& decision, Packet* p)
+{
+    char addr[INET6_ADDRSTRLEN];
+    const SfIp* ip = nullptr;
+
+    if (BLOCKED_SRC == decision or MONITORED_SRC == decision or TRUSTED_SRC == decision)
+    {
+        ip = p->ptrs.ip_api.get_src();
+    }
+    else if (BLOCKED_DST == decision or MONITORED_DST == decision or TRUSTED_DST == decision)
+    {
+        ip = p->ptrs.ip_api.get_dst();
+    }
+
+    sfip_ntop(ip, addr, sizeof(addr));
+
+    PacketTracer::daq_log("SI-IP+%" PRId64"++Matched ip %s, action %s$",
+        TO_NSECS(pt_timer->get()),
+        addr, to_string(decision));
+}
+
 class AuxiliaryIpRepHandler : public DataHandler
 {
 public:
@@ -523,6 +552,9 @@ void Reputation::eval(Packet* p)
     if (p->is_rebuilt())
         return;
 
+    if (PacketTracer::is_daq_activated())
+        PacketTracer::pt_timer_start();
+
     snort_reputation(&config, p);
     ++reputationstats.packets;
 }