From: Amos Jeffries Date: Sat, 30 Aug 2025 10:17:49 +0000 (+0000) Subject: Add RegisteredRunner for SNMP (#2142) X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=039bd8957c15fa4e29bcb60bffc85d3c41f860de;p=thirdparty%2Fsquid.git Add RegisteredRunner for SNMP (#2142) --- diff --git a/src/main.cc b/src/main.cc index e5d9a98ec9..790971ae43 100644 --- a/src/main.cc +++ b/src/main.cc @@ -110,9 +110,6 @@ #if USE_ADAPTATION #include "adaptation/Config.h" #endif -#if SQUID_SNMP -#include "snmp_core.h" -#endif #include #if HAVE_GETOPT_H @@ -784,10 +781,6 @@ serverConnectionsOpen(void) #if USE_HTCP htcpOpenPorts(); #endif -#if SQUID_SNMP - snmpOpenPorts(); -#endif - icmpEngine.Open(); netdbInit(); Acl::Node::Initialize(); @@ -808,9 +801,6 @@ serverConnectionsClose(void) #endif icmpEngine.Close(); -#if SQUID_SNMP - snmpClosePorts(); -#endif } } @@ -1138,11 +1128,6 @@ mainInitialize(void) icapLogOpen(); #endif -#if SQUID_SNMP - - snmpInit(); - -#endif #if MALLOC_DBG malloc_debug(0, malloc_debug_level); @@ -1428,6 +1413,10 @@ RegisterModules() CallRunnerRegistratorIn(Rock, SwapDirRr); #endif +#if SQUID_SNMP + CallRunnerRegistrator(SnmpRr); +#endif + #if USE_WCCP CallRunnerRegistrator(WccpRr); #endif @@ -2038,9 +2027,6 @@ SquidShutdown() icpClosePorts(); #if USE_HTCP htcpClosePorts(); -#endif -#if SQUID_SNMP - snmpClosePorts(); #endif releaseServerSockets(); commCloseAllSockets(); diff --git a/src/snmp_core.cc b/src/snmp_core.cc index cc41fc727d..a031b8bf6c 100644 --- a/src/snmp_core.cc +++ b/src/snmp_core.cc @@ -12,6 +12,7 @@ #include "acl/FilledChecklist.h" #include "base/AsyncCallbacks.h" #include "base/CbcPointer.h" +#include "base/RunnersRegistry.h" #include "CachePeer.h" #include "CachePeers.h" #include "client_db.h" @@ -57,19 +58,15 @@ static mib_tree_entry *snmpTreeEntry(oid entry, snint len, mib_tree_entry * curr static mib_tree_entry *snmpTreeSiblingEntry(oid entry, snint len, mib_tree_entry * current); extern "C" void snmpSnmplibDebug(int lvl, char *buf); -/* - * The functions used during startup: - * snmpInit - * snmpConnectionOpen - * snmpConnectionClose - */ - /* * Turns the MIB into a Tree structure. Called during the startup process. */ -void -snmpInit(void) +static void +snmpInit() { + if (!IamWorkerProcess()) + return; + debugs(49, 5, "snmpInit: Building SNMP mib tree structure"); snmplib_debug_hook = snmpSnmplibDebug; @@ -255,10 +252,11 @@ snmpInit(void) debugs(49, 9, "snmpInit: Completed SNMP mib tree structure"); } -void -snmpOpenPorts(void) +static void +snmpOpenPorts() { - debugs(49, 5, "snmpConnectionOpen: Called"); + if (!IamWorkerProcess()) + return; if (Config.Port.snmp <= 0) return; @@ -319,9 +317,12 @@ snmpPortOpened(Ipc::StartListeningAnswer &answer) fatalf("Lost SNMP port (%d) on FD %d", (int)conn->local.port(), conn->fd); } -void -snmpClosePorts(void) +static void +snmpClosePorts() { + if (!IamWorkerProcess()) + return; + if (Comm::IsConnOpen(snmpIncomingConn)) { debugs(49, DBG_IMPORTANT, "Closing SNMP receiving port " << snmpIncomingConn->local); snmpIncomingConn->close(); @@ -336,9 +337,16 @@ snmpClosePorts(void) snmpOutgoingConn = nullptr; } -/* - * Functions for handling the requests. - */ +class SnmpRr : public RegisteredRunner +{ +public: + void finalizeConfig() override { snmpInit(); } + void useConfig() override { snmpOpenPorts(); } + void startReconfigure() override { snmpClosePorts(); } + void syncConfig() override { snmpOpenPorts(); } + void startShutdown() override { snmpClosePorts(); } +}; +DefineRunnerRegistrator(SnmpRr); /* * Accept the UDP packet diff --git a/src/snmp_core.h b/src/snmp_core.h index 9e6430af95..2d650bf1a5 100644 --- a/src/snmp_core.h +++ b/src/snmp_core.h @@ -47,9 +47,6 @@ AggrType snmpAggrType(oid* Current, snint CurrentLen); extern Comm::ConnectionPointer snmpOutgoingConn; extern PF snmpHandleUdp; -void snmpInit(void); -void snmpOpenPorts(void); -void snmpClosePorts(void); const char * snmpDebugOid(oid * Name, snint Len, MemBuf &outbuf); void addr2oid(Ip::Address &addr, oid *Dest); void oid2addr(oid *Dest, Ip::Address &addr, u_int code);