]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
lldpd: add proper insert/delete/ageout counters
authorVincent Bernat <bernat@luffy.cx>
Sat, 1 Sep 2012 17:20:37 +0000 (19:20 +0200)
committerVincent Bernat <bernat@luffy.cx>
Sat, 1 Sep 2012 18:08:07 +0000 (20:08 +0200)
src/daemon/agent.c
src/daemon/lldpd.c
src/lldpd-structs.c
src/lldpd-structs.h
tests/check_snmp.c

index 151496355cf8c40ca6aeb12789cafa2ae51ca040..7c6ff9cf6f885b798325840170d90d9c902342fb 100644 (file)
@@ -628,18 +628,17 @@ agent_h_scalars(struct variable *vp, oid *name, size_t *length,
                /* We assume this is equal to valid frames received on all ports */
                long_ret = 0;
                TAILQ_FOREACH(hardware, &scfg->g_hardware, h_entries)
-                       long_ret += hardware->h_rx_cnt;
+                   long_ret += hardware->h_insert_cnt;
                return (u_char *)&long_ret;
        case LLDP_SNMP_STATS_AGEOUTS:
                long_ret = 0;
                TAILQ_FOREACH(hardware, &scfg->g_hardware, h_entries)
-                       long_ret += hardware->h_rx_ageout_cnt;
+                   long_ret += hardware->h_ageout_cnt;
                return (u_char *)&long_ret;
        case LLDP_SNMP_STATS_DELETES:
                long_ret = 0;
                TAILQ_FOREACH(hardware, &scfg->g_hardware, h_entries)
-                       long_ret += hardware->h_rx_ageout_cnt +
-                           hardware->h_rx_cnt?(hardware->h_rx_cnt - 1):0;
+                   long_ret += hardware->h_delete_cnt;
                return (u_char *)&long_ret;
        case LLDP_SNMP_STATS_DROPS:
                /* We assume that we never have insufficient resources */
@@ -1050,7 +1049,7 @@ agent_h_stats(struct variable *vp, oid *name, size_t *length,
                long_ret = hardware->h_rx_unrecognized_cnt;
                return (u_char *)&long_ret;
        case LLDP_SNMP_STATS_RX_AGEOUTS:
-                long_ret = hardware->h_rx_ageout_cnt;
+                long_ret = hardware->h_ageout_cnt;
                return (u_char *)&long_ret;
        default:
                break;
index 564a4114e95b4d83a38dc10275e33259252cf632..bc2824653540cb02b4f092ac0e2f523c999cfbcf 100644 (file)
@@ -421,9 +421,16 @@ lldpd_decode(struct lldpd *cfg, char *frame, int s,
            hardware->h_ifname, i);
 
        /* Notify */
-       levent_ctl_notify(hardware->h_ifname,
-           oport?NEIGHBOR_CHANGE_UPDATED:NEIGHBOR_CHANGE_ADDED,
-           port);
+       if (oport) {
+               /* This is an update */
+               levent_ctl_notify(hardware->h_ifname,
+                   NEIGHBOR_CHANGE_UPDATED, port);
+       } else {
+               /* This is a new neighbor */
+               levent_ctl_notify(hardware->h_ifname,
+                   NEIGHBOR_CHANGE_ADDED, port);
+               hardware->h_insert_cnt++;
+       }
 
        return;
 }
index 87784372ce81cab4084846e060d088ddbb7aff4f..b142ff07db7f657d4d4b4d03f9e8ecc61d288713 100644 (file)
@@ -112,7 +112,8 @@ lldpd_remote_cleanup(struct lldpd_hardware *hardware,
                del = (expire == NULL);
                if (expire &&
                    (time(NULL) - port->p_lastupdate > port->p_chassis->c_ttl)) {
-                       hardware->h_rx_ageout_cnt++;
+                       hardware->h_ageout_cnt++;
+                       hardware->h_delete_cnt++;
                        expire(hardware, port);
                        del = 1;
                }
index 315f41fa06ba9e7e89b818dca18e20fb918cc854..b440392b3331657f3ae43a220b5c363a19457a79 100644 (file)
@@ -370,8 +370,10 @@ struct lldpd_hardware {
        u_int64_t                h_tx_cnt;
        u_int64_t                h_rx_cnt;
        u_int64_t                h_rx_discarded_cnt;
-       u_int64_t                h_rx_ageout_cnt;
        u_int64_t                h_rx_unrecognized_cnt;
+       u_int64_t                h_ageout_cnt;
+       u_int64_t                h_insert_cnt;
+       u_int64_t                h_delete_cnt;
 
        struct lldpd_port        h_lport;  /* Port attached to this hardware port */
        TAILQ_HEAD(, lldpd_port) h_rports; /* Remote ports */
index 9588fb6f102238511c121fbf01ef2358c6438a48..4b79cb1be51f863fa0379e1684a3719f1c5c2abe 100644 (file)
@@ -98,8 +98,10 @@ struct lldpd_hardware hardware1 = {
        .h_tx_cnt = 1352,
        .h_rx_cnt = 1458,
        .h_rx_discarded_cnt = 5,
-       .h_rx_ageout_cnt = 1455,
        .h_rx_unrecognized_cnt = 4,
+       .h_insert_cnt = 100,
+       .h_delete_cnt = 5,
+       .h_ageout_cnt = 20,
        .h_lport = {
                .p_chassis    = &chassis1,
                .p_lastchange = 200,
@@ -178,8 +180,10 @@ struct lldpd_hardware hardware2 = {
        .h_tx_cnt = 11352,
        .h_rx_cnt = 11458,
        .h_rx_discarded_cnt = 55,
-       .h_rx_ageout_cnt = 21455,
        .h_rx_unrecognized_cnt = 14,
+       .h_insert_cnt = 1000,
+       .h_delete_cnt = 51,
+       .h_ageout_cnt = 210,
        .h_lport = {
                .p_chassis    = &chassis1,
                .p_lastchange = 50,
@@ -356,10 +360,10 @@ struct tree_node snmp_tree[] = {
        { {1, 1, 4, 0}, 4, ASN_INTEGER,   { .integer = 1 } },  /* lldpTxDelay */
        { {1, 1, 5, 0}, 4, ASN_INTEGER,   { .integer = 5 } },  /* lldpNotificationInterval */
        { {1, 2, 1, 0}, 4, ASN_TIMETICKS, { .integer = 10000 } },/* lldpStatsRemTablesLastChangeTime */
-       { {1, 2, 2, 0}, 4, ASN_GAUGE,     { .integer = 12916 } }, /* lldpStatsRemTablesInserts */
-       { {1, 2, 3, 0}, 4, ASN_GAUGE,     { .integer = 12914 } }, /* lldpStatsRemTablesDeletes */
+       { {1, 2, 2, 0}, 4, ASN_GAUGE,     { .integer = 1100 } }, /* lldpStatsRemTablesInserts */
+       { {1, 2, 3, 0}, 4, ASN_GAUGE,     { .integer = 56 } }, /* lldpStatsRemTablesDeletes */
        { {1, 2, 4, 0}, 4, ASN_GAUGE,     { .integer = 0 } }, /* lldpStatsRemTablesDrops */
-       { {1, 2, 5, 0}, 4, ASN_GAUGE,     { .integer = 22910 } }, /* lldpStatsRemTablesAgeouts */
+       { {1, 2, 5, 0}, 4, ASN_GAUGE,     { .integer = 230 } }, /* lldpStatsRemTablesAgeouts */
 
        { {1, 2, 6, 1, 2, 3}, 6, ASN_COUNTER, { .integer = 1352 } }, /* lldpStatsTxPortFramesTotal.3 */
        { {1, 2, 6, 1, 2, 4}, 6, ASN_COUNTER, { .integer = 11352 } }, /* lldpStatsTxPortFramesTotal.4 */
@@ -373,8 +377,8 @@ struct tree_node snmp_tree[] = {
        { {1, 2, 7, 1, 5, 4}, 6, ASN_COUNTER, { .integer = 14 } }, /* lldpStatsRxPortTLVsDiscardedTotal.4 */
        { {1, 2, 7, 1, 6, 3}, 6, ASN_COUNTER, { .integer = 4 } }, /* lldpStatsRxPortTLVsUnrecognizedTotal.3 */
        { {1, 2, 7, 1, 6, 4}, 6, ASN_COUNTER, { .integer = 14 } }, /* lldpStatsRxPortTLVsUnrecognizedTotal.4 */
-       { {1, 2, 7, 1, 7, 3}, 6, ASN_GAUGE,   { .integer = 1455 } }, /* lldpStatsRxPortAgeoutsTotal.3 */
-       { {1, 2, 7, 1, 7, 4}, 6, ASN_GAUGE,   { .integer = 21455 } }, /* lldpStatsRxPortAgeoutsTotal.4 */
+       { {1, 2, 7, 1, 7, 3}, 6, ASN_GAUGE,   { .integer = 20 } }, /* lldpStatsRxPortAgeoutsTotal.3 */
+       { {1, 2, 7, 1, 7, 4}, 6, ASN_GAUGE,   { .integer = 210 } }, /* lldpStatsRxPortAgeoutsTotal.4 */
 
        { {1, 3, 1, 0}, 4, ASN_INTEGER,   { .integer = 4 } }, /* lldpLocChassisIdSubtype */
        /* lldpLocChassisId */