]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
Correctly compute discarded TLV for each port
authorVincent Bernat <bernat@luffy.cx>
Fri, 31 Oct 2008 18:43:13 +0000 (19:43 +0100)
committerVincent Bernat <bernat@luffy.cx>
Fri, 31 Oct 2008 18:43:13 +0000 (19:43 +0100)
src/agent.c
src/cdp.c
src/edp.c
src/lldp.c
src/lldpd.h

index 44f5aea20bd3ce5f9b6ef9185316ad9ba812142d..7d58e0a2cb44cca5e02dd4f5031cb82fc472f70a 100644 (file)
@@ -436,12 +436,15 @@ agent_h_stats(struct variable *vp, oid *name, size_t *length,
                return (u_char *)&long_ret;
        case LLDP_SNMP_STATS_RX_DISCARDED:
        case LLDP_SNMP_STATS_RX_ERRORS:
+               /* We discard only frame with errors. Therefore, the two values
+                * are equal */
                 long_ret = hardware->h_rx_discarded_cnt;
                return (u_char *)&long_ret;
        case LLDP_SNMP_STATS_RX_TLVDISCARDED:
        case LLDP_SNMP_STATS_RX_TLVUNRECOGNIZED:
-               /* Not really handled */
-               long_ret = 0;
+               /* We discard only unrecognized TLV. Malformed TLV
+                  implies dropping the whole frame */
+               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;
index d2fb90e325724a56eaab71bc59ae71fd45697592..9ff735e5226a2c3f74ad74d8a72bff84b2287eac 100644 (file)
--- a/src/cdp.c
+++ b/src/cdp.c
@@ -364,6 +364,7 @@ cdp_decode(struct lldpd *cfg, char *frame, int s,
                        LLOG_DEBUG("unknown CDP TLV type (%d) received on %s",
                            ntohs(tlv->tlv_type), hardware->h_ifname);
                        f += sizeof(struct cdp_tlv_head) + len;
+                       hardware->h_rx_unrecognized_cnt++;
                }
        }
        if (!software && platform) {
index 0275074d92cf3522929df41b88ee1d26c7fa5d3d..ffd317abcfe9e10dbdbd8039610828dbf6eca892 100644 (file)
--- a/src/edp.c
+++ b/src/edp.c
@@ -408,6 +408,7 @@ edp_decode(struct lldpd *cfg, char *frame, int s,
                default:
                        LLOG_DEBUG("unknown EDP TLV type (%d) received on %s",
                            tlv->tlv_type, hardware->h_ifname);
+                       hardware->h_rx_unrecognized_cnt++;
                }
                f += len;
        }
index c0475c9ce307d1b9bfa290219a24f9972d3e4e82..0eb945a4bd26d00282c4d90ad9f15010749226ce 100644 (file)
@@ -523,10 +523,12 @@ lldp_decode(struct lldpd *cfg, char *frame, int s,
                                default:
                                        /* Unknown Dot3 TLV, ignore it */
                                        f += size;
+                                       hardware->h_rx_unrecognized_cnt++;
                                }
                        } else {
                                LLOG_INFO("unknown org tlv received on %s",
                                    hardware->h_ifname);
+                               hardware->h_rx_unrecognized_cnt++;
                                f += size;
                        }
                        break;
index 6d27c8471c12b60df3fe3f41e4e1ffabac22a606..38e6d4fea2163e3fdcd198cce13ed1abd93da132 100644 (file)
@@ -122,6 +122,7 @@ struct lldpd_hardware {
        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_int8_t                *h_proto_macs;
        time_t                   h_start_probe;