From: Lukasz Czarnik -X (lczarnik - SOFTSERVE INC at Cisco) Date: Mon, 27 Nov 2023 18:09:41 +0000 (+0000) Subject: Pull request #4065: appid: TP_appid profiler X-Git-Tag: 3.1.76.0~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a8d0aaeb590a5afaf766c25c0f822cb38c985bd8;p=thirdparty%2Fsnort3.git Pull request #4065: appid: TP_appid profiler Merge in SNORT/snort3 from ~LCZARNIK/snort3:tp_appid_profiler to master Squashed commit of the following: commit be69c7d14d16fe44a508dc8587176ced4f00e13f Author: Lukasz Czarnik Date: Tue Nov 7 08:18:01 2023 -0500 appid: Adding support for memory profiling of third party lib appid: Adds missed cppcheck warning --- diff --git a/src/network_inspectors/appid/CMakeLists.txt b/src/network_inspectors/appid/CMakeLists.txt index af177e5d2..d386787d0 100644 --- a/src/network_inspectors/appid/CMakeLists.txt +++ b/src/network_inspectors/appid/CMakeLists.txt @@ -204,6 +204,9 @@ set ( APPID_SOURCES tp_lib_handler.cc tp_lib_handler.h tp_appid_types.h + tp_appid_session_api.h + tp_appid_module_api.h + tp_appid_module_api.cc ) #if (STATIC_INSPECTORS) diff --git a/src/network_inspectors/appid/appid_inspector.cc b/src/network_inspectors/appid/appid_inspector.cc index 626db65fb..4cdb0c5d7 100644 --- a/src/network_inspectors/appid/appid_inspector.cc +++ b/src/network_inspectors/appid/appid_inspector.cc @@ -115,7 +115,8 @@ AppIdContext& AppIdInspector::get_ctxt() const bool AppIdInspector::configure(SnortConfig* sc) { assert(!ctxt); - + // cppcheck-suppress unreadVariable + Profile profile(appid_perf_stats); struct rusage ru; long prev_maxrss = -1; #ifdef REG_TEST diff --git a/src/network_inspectors/appid/appid_module.cc b/src/network_inspectors/appid/appid_module.cc index d2571cbf4..6097be65d 100644 --- a/src/network_inspectors/appid/appid_module.cc +++ b/src/network_inspectors/appid/appid_module.cc @@ -61,6 +61,7 @@ THREAD_LOCAL const Trace* appid_trace = nullptr; //------------------------------------------------------------------------- THREAD_LOCAL ProfileStats appid_perf_stats; +THREAD_LOCAL ProfileStats tp_appid_perf_stats; THREAD_LOCAL AppIdStats appid_stats; THREAD_LOCAL bool ThirdPartyAppIdContext::tp_reload_in_progress = false; @@ -491,9 +492,25 @@ const TraceOption* AppIdModule::get_trace_options() const return &appid_trace_options; } -ProfileStats* AppIdModule::get_profile() const + + +snort::ProfileStats* AppIdModule::get_profile( + unsigned i, const char*& name, const char*& parent) const { - return &appid_perf_stats; + switch (i) + { + + case 0: + name = get_name(); + parent = nullptr; + return &appid_perf_stats; + + case 1: + name = "tp_appid"; + parent = get_name(); + return &tp_appid_perf_stats; + } + return nullptr; } const AppIdConfig* AppIdModule::get_data() diff --git a/src/network_inspectors/appid/appid_module.h b/src/network_inspectors/appid/appid_module.h index 1e1b60615..36315545a 100644 --- a/src/network_inspectors/appid/appid_module.h +++ b/src/network_inspectors/appid/appid_module.h @@ -40,6 +40,7 @@ class Trace; } extern THREAD_LOCAL snort::ProfileStats appid_perf_stats; +extern THREAD_LOCAL snort::ProfileStats tp_appid_perf_stats; extern THREAD_LOCAL const snort::Trace* appid_trace; #define MOD_NAME "appid" @@ -85,7 +86,8 @@ public: const snort::Command* get_commands() const override; const PegInfo* get_pegs() const override; PegCount* get_counts() const override; - snort::ProfileStats* get_profile() const override; + snort::ProfileStats* get_profile( + unsigned i, const char*& name, const char*& parent) const override; const AppIdConfig* get_data(); diff --git a/src/network_inspectors/appid/client_plugins/client_app_msn.cc b/src/network_inspectors/appid/client_plugins/client_app_msn.cc index f8e0115fc..d8b6b38ac 100644 --- a/src/network_inspectors/appid/client_plugins/client_app_msn.cc +++ b/src/network_inspectors/appid/client_plugins/client_app_msn.cc @@ -115,6 +115,7 @@ int MsnClientDetector::validate(AppIdDiscoveryArgs& args) args.data++; /* skip the space */ } + // cppcheck-suppress knownConditionTrueFalse else if ( end - args.data >= (int)sizeof(MSMSGS) && memcmp(args.data, MSMSGS, sizeof(MSMSGS)-1) == 0 ) { diff --git a/src/network_inspectors/appid/detector_plugins/test/detector_plugins_mock.h b/src/network_inspectors/appid/detector_plugins/test/detector_plugins_mock.h index 0e1d3bf6d..aca770abe 100644 --- a/src/network_inspectors/appid/detector_plugins/test/detector_plugins_mock.h +++ b/src/network_inspectors/appid/detector_plugins/test/detector_plugins_mock.h @@ -140,7 +140,8 @@ PegCount* AppIdModule::get_counts() const return nullptr; } -snort::ProfileStats* AppIdModule::get_profile() const +snort::ProfileStats* AppIdModule::get_profile( + unsigned, const char*&, const char*&) const { return nullptr; } diff --git a/src/network_inspectors/appid/test/CMakeLists.txt b/src/network_inspectors/appid/test/CMakeLists.txt index 794da44a6..0eebbf372 100644 --- a/src/network_inspectors/appid/test/CMakeLists.txt +++ b/src/network_inspectors/appid/test/CMakeLists.txt @@ -50,6 +50,7 @@ add_cpputest( tp_lib_handler_test tp_lib_handler_test.cc ../../../network_inspectors/rna/test/rna_flow_stubs.cc ../tp_lib_handler.cc + ../tp_appid_module_api.cc LIBS dl ) diff --git a/src/network_inspectors/appid/test/appid_discovery_test.cc b/src/network_inspectors/appid/test/appid_discovery_test.cc index b95616f58..ad88c46a5 100644 --- a/src/network_inspectors/appid/test/appid_discovery_test.cc +++ b/src/network_inspectors/appid/test/appid_discovery_test.cc @@ -169,7 +169,8 @@ bool AppIdModule::set(char const*, Value&, SnortConfig*) { return true; } const Command* AppIdModule::get_commands() const { return nullptr; } const PegInfo* AppIdModule::get_pegs() const { return nullptr; } PegCount* AppIdModule::get_counts() const { return nullptr; } -ProfileStats* AppIdModule::get_profile() const { return nullptr; } +ProfileStats* AppIdModule::get_profile( + unsigned i, const char*& name, const char*& parent) const { return nullptr; } void AppIdModule::set_trace(const Trace*) const { } const TraceOption* AppIdModule::get_trace_options() const { return nullptr; } THREAD_LOCAL bool ThirdPartyAppIdContext::tp_reload_in_progress = false; diff --git a/src/network_inspectors/appid/test/appid_mock_inspector.h b/src/network_inspectors/appid/test/appid_mock_inspector.h index 19f255ee3..f0d976ea2 100644 --- a/src/network_inspectors/appid/test/appid_mock_inspector.h +++ b/src/network_inspectors/appid/test/appid_mock_inspector.h @@ -56,7 +56,8 @@ bool AppIdModule::set(char const*, snort::Value&, snort::SnortConfig*) { return const snort::Command* AppIdModule::get_commands() const { return nullptr; } const PegInfo* AppIdModule::get_pegs() const { return nullptr; } PegCount* AppIdModule::get_counts() const { return nullptr; } -snort::ProfileStats* AppIdModule::get_profile() const { return nullptr; } +snort::ProfileStats* AppIdModule::get_profile( + unsigned, const char*&, const char*& ) const { return nullptr; } void AppIdModule::set_trace(const Trace*) const { } const TraceOption* AppIdModule::get_trace_options() const { return nullptr; } diff --git a/src/network_inspectors/appid/test/tp_lib_handler_test.cc b/src/network_inspectors/appid/test/tp_lib_handler_test.cc index 5788a0071..f6d9748f8 100644 --- a/src/network_inspectors/appid/test/tp_lib_handler_test.cc +++ b/src/network_inspectors/appid/test/tp_lib_handler_test.cc @@ -35,6 +35,7 @@ #include using namespace std; +using namespace snort; static TPLibHandler* tph = nullptr; static AppIdConfig config; @@ -71,6 +72,14 @@ int ServiceDiscovery::add_service_port(AppIdDetector*, const ServiceDetectorPort { return 0; } void appid_log(const snort::Packet*, unsigned char, char const*, ...) { } + +THREAD_LOCAL ProfileStats tp_appid_perf_stats; +THREAD_LOCAL bool TimeProfilerStats::enabled = false; +MemoryContext::MemoryContext(MemoryTracker&) { } +MemoryContext::~MemoryContext() = default; +THREAD_LOCAL TimeContext* ProfileContext::curr_time = nullptr; + + TEST_GROUP(tp_lib_handler) { }; diff --git a/src/network_inspectors/appid/test/tp_mock.cc b/src/network_inspectors/appid/test/tp_mock.cc index 9bbc57b94..ff3615eed 100644 --- a/src/network_inspectors/appid/test/tp_mock.cc +++ b/src/network_inspectors/appid/test/tp_mock.cc @@ -48,19 +48,24 @@ public: : ThirdPartyAppIdContext(ver, mname, config) { cerr << WhereMacro << endl; + // For tp_appid profiler coverage + data = (int*)cfg.tp_appid_profiler_functions.appid_malloc(sizeof(int)); } ~ThirdPartyAppIdContextImpl() override { cerr << WhereMacro << endl; + // For tp_appid profiler coverage + cfg.tp_appid_profiler_functions.appid_free(data); } - int tinit() override { return 0; } - bool tfini(bool) override { return false; } + int tinit() override {return 0;} + bool tfini(bool) override {return false;} const string& get_user_config() const override { return user_config; } private: const string user_config = ""; + int* data; }; class ThirdPartyAppIdSessionImpl : public ThirdPartyAppIdSession diff --git a/src/network_inspectors/appid/tp_appid_module_api.cc b/src/network_inspectors/appid/tp_appid_module_api.cc new file mode 100644 index 000000000..bf318d606 --- /dev/null +++ b/src/network_inspectors/appid/tp_appid_module_api.cc @@ -0,0 +1,30 @@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tp_appid_module_api.h" +#include "managers/module_manager.h" +#include "appid_module.h" +#include "tp_lib_handler.h" + + +static void* tp_appid_profiler_malloc(size_t size) +{ + // cppcheck-suppress unreadVariable + snort::Profile profile(tp_appid_perf_stats); + return operator new(size); +} + +static void tp_appid_profiler_free(void* p) +{ + // cppcheck-suppress unreadVariable + snort::Profile profile(tp_appid_perf_stats); + if (p) + operator delete(p); +} + +TPAppidProfilerFunctions get_tp_appid_profiler_functions() +{ + return {tp_appid_profiler_malloc,tp_appid_profiler_free}; +} diff --git a/src/network_inspectors/appid/tp_appid_module_api.h b/src/network_inspectors/appid/tp_appid_module_api.h index ed5e16658..33d9cddaf 100644 --- a/src/network_inspectors/appid/tp_appid_module_api.h +++ b/src/network_inspectors/appid/tp_appid_module_api.h @@ -23,11 +23,19 @@ #include #include + #include "main/thread.h" +#include "profiler/profiler_defs.h" #include "tp_appid_types.h" #define THIRD_PARTY_APPID_API_VERSION 6 +struct TPAppidProfilerFunctions +{ + void* (*appid_malloc) (size_t); + void (*appid_free) (void*); +}; + class ThirdPartyConfig { public: @@ -38,6 +46,7 @@ public: std::string tp_appid_config; bool tp_appid_stats_enable = false; bool tp_appid_config_dump = false; + TPAppidProfilerFunctions tp_appid_profiler_functions = {}; }; class ThirdPartyAppIdContext diff --git a/src/network_inspectors/appid/tp_lib_handler.cc b/src/network_inspectors/appid/tp_lib_handler.cc index 64cf7eb7a..468eebc73 100644 --- a/src/network_inspectors/appid/tp_lib_handler.cc +++ b/src/network_inspectors/appid/tp_lib_handler.cc @@ -103,6 +103,7 @@ ThirdPartyAppIdContext* TPLibHandler::create_tp_appid_ctxt(const AppIdConfig& co tp_config.chp_body_collection_disabled = odp_ctxt.chp_body_collection_disabled; tp_config.tp_allow_probes = odp_ctxt.tp_allow_probes; + tp_config.tp_appid_profiler_functions = get_tp_appid_profiler_functions(); ThirdPartyAppIdContext* tp_appid_ctxt = self->tp_appid_create_ctxt(tp_config); if (tp_appid_ctxt == nullptr) diff --git a/src/network_inspectors/appid/tp_lib_handler.h b/src/network_inspectors/appid/tp_lib_handler.h index b355564c9..059bde0c9 100644 --- a/src/network_inspectors/appid/tp_lib_handler.h +++ b/src/network_inspectors/appid/tp_lib_handler.h @@ -70,4 +70,6 @@ private: bool load_callback(const char* path); }; +TPAppidProfilerFunctions get_tp_appid_profiler_functions(); + #endif