X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fnetlink.c;h=d14e5101dd885824b904b754845aa039dca05630;hb=d3fc6d0831a63af2e96300f488a9f8f5fc3183fb;hp=8c883f67179a9525d71dc0a1a04b11dbb9a3a1bd;hpb=747f853a2ce3f8a55438aff274df5ea25a3e9cce;p=collectd.git diff --git a/src/netlink.c b/src/netlink.c index 8c883f67..d14e5101 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -171,14 +171,15 @@ static void submit_one (const char *dev, const char *type, vl.values = values; vl.values_len = 1; vl.time = time (NULL); - strcpy (vl.host, hostname_g); - strcpy (vl.plugin, "netlink"); - strncpy (vl.plugin_instance, dev, sizeof (vl.plugin_instance)); + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "netlink", sizeof (vl.plugin)); + sstrncpy (vl.plugin_instance, dev, sizeof (vl.plugin_instance)); + sstrncpy (vl.type, type, sizeof (vl.type)); if (type_instance != NULL) - strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); + sstrncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); - plugin_dispatch_values (type, &vl); + plugin_dispatch_values (&vl); } /* void submit_one */ static void submit_two (const char *dev, const char *type, @@ -194,18 +195,19 @@ static void submit_two (const char *dev, const char *type, vl.values = values; vl.values_len = 2; vl.time = time (NULL); - strcpy (vl.host, hostname_g); - strcpy (vl.plugin, "netlink"); - strncpy (vl.plugin_instance, dev, sizeof (vl.plugin_instance)); + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "netlink", sizeof (vl.plugin)); + sstrncpy (vl.plugin_instance, dev, sizeof (vl.plugin_instance)); + sstrncpy (vl.type, type, sizeof (vl.type)); if (type_instance != NULL) - strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); + sstrncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); - plugin_dispatch_values (type, &vl); + plugin_dispatch_values (&vl); } /* void submit_two */ static int link_filter (const struct sockaddr_nl *sa, - const struct nlmsghdr *nmh, void *args) + struct nlmsghdr *nmh, void *args) { struct ifinfomsg *msg; int msg_len; @@ -237,10 +239,6 @@ static int link_filter (const struct sockaddr_nl *sa, return (-1); } - if (attrs[IFLA_STATS] == NULL) - return (-1); - stats = RTA_DATA (attrs[IFLA_STATS]); - if (attrs[IFLA_IFNAME] == NULL) { ERROR ("netlink plugin: link_filter: attrs[IFLA_IFNAME] == NULL"); @@ -273,6 +271,13 @@ static int link_filter (const struct sockaddr_nl *sa, iflist[msg->ifi_index] = strdup (dev); } + if (attrs[IFLA_STATS] == NULL) + { + DEBUG ("netlink plugin: link_filter: No statistics for interface %s.", dev); + return (0); + } + stats = RTA_DATA (attrs[IFLA_STATS]); + if (check_ignorelist (dev, "interface", NULL) == 0) { submit_two (dev, "if_octets", NULL, stats->rx_bytes, stats->tx_bytes); @@ -312,7 +317,7 @@ static int link_filter (const struct sockaddr_nl *sa, } /* int link_filter */ static int qos_filter (const struct sockaddr_nl *sa, - const struct nlmsghdr *nmh, void *args) + struct nlmsghdr *nmh, void *args) { struct tcmsg *msg; int msg_len; @@ -359,7 +364,7 @@ static int qos_filter (const struct sockaddr_nl *sa, if (msg->tcm_ifindex >= iflist_len) { ERROR ("netlink plugin: qos_filter: msg->tcm_ifindex = %i " - ">= iflist_len = %i", + ">= iflist_len = %zu", msg->tcm_ifindex, iflist_len); return (-1); } @@ -392,11 +397,10 @@ static int qos_filter (const struct sockaddr_nl *sa, if (strcmp (tc_type, "filter") == 0) numberic_id = msg->tcm_parent; - snprintf (tc_inst, sizeof (tc_inst), "%s-%x:%x", + ssnprintf (tc_inst, sizeof (tc_inst), "%s-%x:%x", (const char *) RTA_DATA (attrs[TCA_KIND]), numberic_id >> 16, numberic_id & 0x0000FFFF); - tc_inst[sizeof (tc_inst) - 1] = '\0'; } DEBUG ("netlink plugin: qos_filter: got %s for %s (%i).", @@ -418,9 +422,8 @@ static int qos_filter (const struct sockaddr_nl *sa, struct gnet_stats_basic bs; char type_instance[DATA_MAX_NAME_LEN]; - snprintf (type_instance, sizeof (type_instance), "%s-%s", + ssnprintf (type_instance, sizeof (type_instance), "%s-%s", tc_type, tc_inst); - type_instance[sizeof (type_instance) - 1] = '\0'; memset (&bs, '\0', sizeof (bs)); memcpy (&bs, RTA_DATA (attrs_stats[TCA_STATS_BASIC]), @@ -440,9 +443,8 @@ static int qos_filter (const struct sockaddr_nl *sa, struct tc_stats ts; char type_instance[DATA_MAX_NAME_LEN]; - snprintf (type_instance, sizeof (type_instance), "%s-%s", + ssnprintf (type_instance, sizeof (type_instance), "%s-%s", tc_type, tc_inst); - type_instance[sizeof (type_instance) - 1] = '\0'; memset(&ts, '\0', sizeof (ts)); memcpy(&ts, RTA_DATA (attrs[TCA_STATS]),