From: Vincent Bernat Date: Sat, 1 Sep 2012 17:20:37 +0000 (+0200) Subject: lldpd: add proper insert/delete/ageout counters X-Git-Tag: 0.6.1~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=14052b619757ede7cb85ccc7f72d0c75f87c7d6e;p=thirdparty%2Flldpd.git lldpd: add proper insert/delete/ageout counters --- diff --git a/src/daemon/agent.c b/src/daemon/agent.c index 15149635..7c6ff9cf 100644 --- a/src/daemon/agent.c +++ b/src/daemon/agent.c @@ -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; diff --git a/src/daemon/lldpd.c b/src/daemon/lldpd.c index 564a4114..bc282465 100644 --- a/src/daemon/lldpd.c +++ b/src/daemon/lldpd.c @@ -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; } diff --git a/src/lldpd-structs.c b/src/lldpd-structs.c index 87784372..b142ff07 100644 --- a/src/lldpd-structs.c +++ b/src/lldpd-structs.c @@ -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; } diff --git a/src/lldpd-structs.h b/src/lldpd-structs.h index 315f41fa..b440392b 100644 --- a/src/lldpd-structs.h +++ b/src/lldpd-structs.h @@ -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 */ diff --git a/tests/check_snmp.c b/tests/check_snmp.c index 9588fb6f..4b79cb1b 100644 --- a/tests/check_snmp.c +++ b/tests/check_snmp.c @@ -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 */