]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
atAverage snmp values return sum not average
authorChristos Tsantilas <chtsanti@users.sourceforge.net>
Fri, 21 Jan 2011 14:48:10 +0000 (16:48 +0200)
committerChristos Tsantilas <chtsanti@users.sourceforge.net>
Fri, 21 Jan 2011 14:48:10 +0000 (16:48 +0200)
src/snmpx/Inquirer.cc
src/snmpx/Pdu.cc
src/snmpx/Pdu.h

index 0510781f14085455e043dc5047a86df1b581d0c1..2c9fb4b51c061bfa3b0fb36218665c98b165fa1b 100644 (file)
@@ -92,6 +92,7 @@ void
 Snmp::Inquirer::sendResponse()
 {
     debugs(49, 5, HERE);
+    aggrPdu.fixAggregate();
     aggrPdu.command = SNMP_PDU_RESPONSE;
     u_char buffer[SNMP_REQUEST_SIZE];
     int len = sizeof(buffer);
index d27c92ba8b9ad78265ab9b7bff7ac73d8df3f433..ceea062dc0bd85f46603f83d9ffdfb0d7c7bf717 100644 (file)
@@ -44,12 +44,14 @@ Snmp::Pdu::init()
     xmemset(this, 0, sizeof(*this));
     errstat = SNMP_DEFAULT_ERRSTAT;
     errindex = SNMP_DEFAULT_ERRINDEX;
+    aggrCount = 0;
 }
 
 void
 Snmp::Pdu::aggregate(const Pdu& pdu)
 {
     Must(varCount() == pdu.varCount());
+    aggrCount++;
     for (variable_list* p_aggr = variables, *p_var = pdu.variables; p_var != NULL;
          p_aggr = p_aggr->next_variable, p_var = p_var->next_variable)
     {
@@ -103,6 +105,7 @@ Snmp::Pdu::assign(const Pdu& pdu)
     trap_type = pdu.trap_type;
     specific_type = pdu.specific_type;
     time = pdu.time;
+    aggrCount = pdu.aggrCount;
     setSystemOid(pdu.getSystemOid());
     setVars(pdu.variables);
 }
@@ -219,3 +222,17 @@ Snmp::Pdu::varCount() const
         ++count;
     return count;
 }
+
+void 
+Snmp::Pdu::fixAggregate()
+{
+    if (!aggrCount)
+        return;
+    for (variable_list* p_aggr = variables; p_aggr != NULL; p_aggr = p_aggr->next_variable) {
+        Var& aggr = static_cast<Var&>(*p_aggr);
+        if(snmpAggrType(aggr.name, aggr.name_length) == atAverage) {
+            aggr /= aggrCount;
+        }
+    }
+    aggrCount = 0;
+}
index 2084894b57f416c7806b160a5081d735bd6e3c92..f1a4cd46c164f9c031c3a4d64ce530c40a1cea2f 100644 (file)
@@ -28,6 +28,7 @@ public:
     ~Pdu();
 
     void aggregate(const Pdu& pdu);
+    void fixAggregate();
     void pack(Ipc::TypedMsgHdr& msg) const; ///< prepare for sendmsg()
     void unpack(const Ipc::TypedMsgHdr& msg); ///< restore struct from the message
     int  varCount() const; ///< size of variables list
@@ -41,6 +42,7 @@ public:
 private:
     void init(); ///< initialize members
     void assign(const Pdu& pdu); ///< perform full assignment
+    int aggrCount;  ///< The number of other Pdus merged into
 };
 
 } // namespace Snmp