[PATCH 8/9] SNMP-TARGET-MIB: Send dynamic traps even if no trap sessions have been defined

Bart Van Assche <[email protected]>
Newsgroups gmane.network.net-snmp.devel
Message-ID <[email protected]>
The counters _v1_sessions and _v2_sessions in the source file
agent/agent_trap.c keep track of how many trap sessions have been
created. These counters are not updated if a row is added to
snmpTargetAddrTable. The result is that all snmpTargetAddrTable
rows are ignored if no trap sessions have been created. Fix this
by removing the _v1_sessions and _v2_sessions counters.
---
 agent/agent_trap.c | 62 ++--------------------------------------------
 1 file changed, 2 insertions(+), 60 deletions(-)

diff --git a/agent/agent_trap.c b/agent/agent_trap.c
index d49c2dca495c..028990131be1 100644
--- a/agent/agent_trap.c
+++ b/agent/agent_trap.c
@@ -92,11 +92,6 @@ struct trap_sink {
 
 struct trap_sink *sinks = NULL;
 
-#ifndef NETSNMP_DISABLE_SNMPV1
-static int _v1_sessions = 0;
-#endif /* NETSNMP_DISABLE_SNMPV1 */
-static int _v2_sessions = 0;
-
 const oid       objid_enterprisetrap[] = { NETSNMP_NOTIFICATION_MIB };
 const oid       trap_version_id[] = { NETSNMP_SYSTEM_MIB };
 const int       enterprisetrap_len = OID_LENGTH(objid_enterprisetrap);
@@ -159,55 +154,6 @@ free_trap_session(struct trap_sink *sp)
     free(sp);
 }
 
-static void
-_trap_version_incr(int version)
-{
-    switch (version) {
-#ifndef NETSNMP_DISABLE_SNMPV1
-        case SNMP_VERSION_1:
-            ++_v1_sessions;
-            break;
-#endif
-#ifndef NETSNMP_DISABLE_SNMPV2C
-        case SNMP_VERSION_2c:
-#endif
-        case SNMP_VERSION_3:
-            ++_v2_sessions;
-            break;
-        default:
-            snmp_log(LOG_ERR, "unknown snmp version %d\n", version);
-    }
-    return;
-}
-
-static void
-_trap_version_decr(int version)
-{
-    switch (version) {
-#ifndef NETSNMP_DISABLE_SNMPV1
-        case SNMP_VERSION_1:
-            if (--_v1_sessions < 0) {
-                snmp_log(LOG_ERR,"v1 session count < 0! fixed.\n");
-                _v1_sessions = 0;
-            }
-            break;
-#endif
-#ifndef NETSNMP_DISABLE_SNMPV2C
-        case SNMP_VERSION_2c:
-#endif
-        case SNMP_VERSION_3:
-            if (--_v2_sessions < 0) {
-                snmp_log(LOG_ERR,"v2 session count < 0! fixed.\n");
-                _v2_sessions = 0;
-            }
-            break;
-        default:
-            snmp_log(LOG_ERR, "unknown snmp version %d\n", version);
-    }
-    return;
-}
-
-
 #ifndef NETSNMP_NO_TRAP_STATS
 static void
 _dump_trap_stats(netsnmp_session *sess)
@@ -285,8 +231,6 @@ netsnmp_add_notification_session(netsnmp_session * ss, int pdutype,
         sinks = new_sink;
     }
 
-    _trap_version_incr(version);
-
     return 1;
 }
 
@@ -338,7 +282,6 @@ remove_trap_session(netsnmp_session * ss)
             } else {
                 sinks = sp->next;
             }
-            _trap_version_decr(ss->version);
             /*
              * I don't believe you *really* want to close the session here;
              * it may still be in use for other purposes.  In particular this
@@ -490,7 +433,6 @@ snmpd_free_trapsinks(void)
     DEBUGMSGTL(("trap", "freeing trap sessions\n"));
     while (sp) {
         sinks = sinks->next;
-        _trap_version_decr(sp->version);
         free_trap_session(sp);
         sp = sinks;
     }
@@ -1025,11 +967,11 @@ netsnmp_send_traps(int trap, int specific,
         }
     }
 #ifndef NETSNMP_DISABLE_SNMPV1
-    if (template_v1pdu && _v1_sessions)
+    if (template_v1pdu)
         snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
                         SNMPD_CALLBACK_SEND_TRAP1, template_v1pdu);
 #endif
-    if (template_v2pdu && _v2_sessions)
+    if (template_v2pdu)
         snmp_call_callbacks(SNMP_CALLBACK_APPLICATION,
                         SNMPD_CALLBACK_SEND_TRAP2, template_v2pdu);
     snmp_free_pdu(template_v1pdu);
-- 
2.17.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.