]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2205 in SNORT/snort3 from ~MIALTIZE/snort3:instance_id to master
authorMichael Altizer (mialtize) <mialtize@cisco.com>
Thu, 14 May 2020 15:31:28 +0000 (15:31 +0000)
committerMichael Altizer (mialtize) <mialtize@cisco.com>
Thu, 14 May 2020 15:31:28 +0000 (15:31 +0000)
Squashed commit of the following:

commit 1cdd68e4ecc5e72b50472b258af6a31e4137497f
Author: Michael Altizer <mialtize@cisco.com>
Date:   Mon May 11 16:56:07 2020 -0400

    daq: Configure DAQ instances with total instances and instance IDs

    The DAQ instances will only be explicitly configured with this
    information when Snort is running in multi-instance mode (-z >1).

src/main.cc
src/main/snort.cc
src/packet_io/sfdaq.cc
src/packet_io/sfdaq.h
src/packet_io/sfdaq_instance.cc
src/packet_io/sfdaq_instance.h

index 4b81d2f44b53a61cd8efbc5e4a18108ba1ff432e..f64bd5ed94ee14ee5b31b18913ccbdec3c13f308 100644 (file)
@@ -149,7 +149,7 @@ private:
 bool Pig::prep(const char* source)
 {
     SnortConfig* sc = SnortConfig::get_conf();
-    SFDAQInstance *instance = new SFDAQInstance(source, sc->daq_config);
+    SFDAQInstance *instance = new SFDAQInstance(source, idx, sc->daq_config);
     if (!SFDAQ::init_instance(instance, sc->bpf_filter))
     {
         delete instance;
index 02e6da721cb8e2f0e10f0dbf4bf1f9d092714010..acdbb9808e269e5bb101651fa63d529834e8a987 100644 (file)
@@ -235,7 +235,7 @@ void Snort::init(int argc, char** argv)
 
     LogMessage("%s\n", LOG_DIV);
 
-    SFDAQ::init(sc->daq_config);
+    SFDAQ::init(sc->daq_config, ThreadConfig::get_instance_max());
 }
 
 // this function should only include initialization that must be done as a
index 079bb12a103f5a904562a7d9ecd25ae8d51d21cd..a8389e7495afabe42e764219f4028d8f97503548 100644 (file)
@@ -212,7 +212,7 @@ static bool AddDaqModuleConfig(const SFDAQModuleConfig *dmc)
     return true;
 }
 
-bool SFDAQ::init(const SFDAQConfig* cfg)
+bool SFDAQ::init(const SFDAQConfig* cfg, unsigned total_instances)
 {
     if (!loaded)
         load(cfg);
@@ -235,6 +235,8 @@ bool SFDAQ::init(const SFDAQConfig* cfg)
     daq_config_set_msg_pool_size(daqcfg, cfg->get_batch_size() * 4);
     daq_config_set_snaplen(daqcfg, cfg->get_mru_size());
     daq_config_set_timeout(daqcfg, cfg->timeout);
+    if (total_instances > 1)
+        daq_config_set_total_instances(daqcfg, total_instances);
 
     /* If no modules were specified, try to automatically configure with the default. */
     if (cfg->module_configs.empty())
index acf511ec8f305789adfecff75f98b1c97b46cb8a..d76bd09966518861917139ed76aeb6c0d3225e05 100644 (file)
@@ -42,7 +42,7 @@ public:
 
     static void print_types(std::ostream&);
     static const char* verdict_to_string(DAQ_Verdict verdict);
-    static bool init(const SFDAQConfig*);
+    static bool init(const SFDAQConfig*, unsigned total_instances);
     static void term();
 
     static bool init_instance(SFDAQInstance*, const std::string& bpf_string);
index 5fcfa901ebaeb93f69b297dd3177511aa9951e45..860ed0886632752d4a5da1f845cf92bdd10f23c4 100644 (file)
 
 using namespace snort;
 
-SFDAQInstance::SFDAQInstance(const char* input, const SFDAQConfig* cfg)
+SFDAQInstance::SFDAQInstance(const char* input, unsigned id, const SFDAQConfig* cfg)
 {
     if (input)
         input_spec = input;
+    // The Snort instance ID is 0-based while the DAQ ID is 1-based, so adjust accordingly.
+    instance_id = id + 1;
     batch_size = cfg->get_batch_size();
     daq_msgs = new DAQ_Msg_h[batch_size];
 }
@@ -69,8 +71,11 @@ bool SFDAQInstance::init(DAQ_Config_h daqcfg, const std::string& bpf_string)
     char buf[256] = "";
     int rval;
 
-    /* Reuse the main DAQ instance configuration with the input specification specific to this instance. */
+    // Reuse the main DAQ instance configuration with the input specification specific to this
+    // instance.  Also, configure the DAQ instance ID in the multi-instance case.
     daq_config_set_input(daqcfg, input_spec.c_str());
+    if (daq_config_get_total_instances(daqcfg) > 0)
+        daq_config_set_instance_id(daqcfg, instance_id);
     if ((rval = daq_instance_instantiate(daqcfg, &instance, buf, sizeof(buf))) != DAQ_SUCCESS)
     {
         ErrorMessage("Couldn't construct a DAQ instance: %s (%d)\n", buf, rval);
index e329c72f92eebeefd3cdc5f71caad443423c1d09..19027cbbe7e739a91162d99f2a75b519679aa710 100644 (file)
@@ -39,7 +39,7 @@ struct SfIp;
 class SFDAQInstance
 {
 public:
-    SFDAQInstance(const char* intf, const SFDAQConfig*);
+    SFDAQInstance(const char* intf, unsigned id, const SFDAQConfig*);
     ~SFDAQInstance();
 
     bool init(DAQ_Config_h, const std::string& bpf_string);
@@ -87,6 +87,7 @@ private:
     void get_tunnel_capabilities();
 
     std::string input_spec;
+    uint32_t instance_id;
     DAQ_Instance_h instance = nullptr;
     DAQ_Msg_h* daq_msgs;
     unsigned curr_batch_size = 0;