X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fnetlink.c;h=7c4bef5a83f79f41796a473b6f6956e17a84e9fb;hb=d19bcbf5c310f3656503e64ba26829256112ded4;hp=d14e5101dd885824b904b754845aa039dca05630;hpb=e628f39838a67b40d52dfb8425b4d8474fbd0550;p=collectd.git diff --git a/src/netlink.c b/src/netlink.c index d14e5101..7c4bef5a 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -1,6 +1,6 @@ /** * collectd - src/netlink.c - * Copyright (C) 2007 Florian octo Forster + * Copyright (C) 2007-2010 Florian octo Forster * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -16,7 +16,7 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: - * Florian octo Forster + * Florian octo Forster **/ #include "collectd.h" @@ -161,16 +161,15 @@ static int check_ignorelist (const char *dev, } /* int check_ignorelist */ static void submit_one (const char *dev, const char *type, - const char *type_instance, counter_t value) + const char *type_instance, derive_t value) { value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - values[0].counter = value; + values[0].derive = value; vl.values = values; vl.values_len = 1; - vl.time = time (NULL); sstrncpy (vl.host, hostname_g, sizeof (vl.host)); sstrncpy (vl.plugin, "netlink", sizeof (vl.plugin)); sstrncpy (vl.plugin_instance, dev, sizeof (vl.plugin_instance)); @@ -184,17 +183,16 @@ static void submit_one (const char *dev, const char *type, static void submit_two (const char *dev, const char *type, const char *type_instance, - counter_t rx, counter_t tx) + derive_t rx, derive_t tx) { value_t values[2]; value_list_t vl = VALUE_LIST_INIT; - values[0].counter = rx; - values[1].counter = tx; + values[0].derive = rx; + values[1].derive = tx; vl.values = values; vl.values_len = 2; - vl.time = time (NULL); sstrncpy (vl.host, hostname_g, sizeof (vl.host)); sstrncpy (vl.plugin, "netlink", sizeof (vl.plugin)); sstrncpy (vl.plugin_instance, dev, sizeof (vl.plugin_instance)); @@ -206,8 +204,8 @@ static void submit_two (const char *dev, const char *type, plugin_dispatch_values (&vl); } /* void submit_two */ -static int link_filter (const struct sockaddr_nl *sa, - struct nlmsghdr *nmh, void *args) +static int link_filter (const struct sockaddr_nl __attribute__((unused)) *sa, + struct nlmsghdr *nmh, void __attribute__((unused)) *args) { struct ifinfomsg *msg; int msg_len; @@ -248,7 +246,7 @@ static int link_filter (const struct sockaddr_nl *sa, /* Update the `iflist'. It's used to know which interfaces exist and query * them later for qdiscs and classes. */ - if (msg->ifi_index >= iflist_len) + if ((msg->ifi_index >= 0) && ((size_t) msg->ifi_index >= iflist_len)) { char **temp; @@ -316,7 +314,7 @@ static int link_filter (const struct sockaddr_nl *sa, return (0); } /* int link_filter */ -static int qos_filter (const struct sockaddr_nl *sa, +static int qos_filter (const struct sockaddr_nl __attribute__((unused)) *sa, struct nlmsghdr *nmh, void *args) { struct tcmsg *msg; @@ -361,7 +359,8 @@ static int qos_filter (const struct sockaddr_nl *sa, return (0); } - if (msg->tcm_ifindex >= iflist_len) + if ((msg->tcm_ifindex >= 0) + && ((size_t) msg->tcm_ifindex >= iflist_len)) { ERROR ("netlink plugin: qos_filter: msg->tcm_ifindex = %i " ">= iflist_len = %zu", @@ -527,9 +526,7 @@ static int ir_config (const char *key, const char *value) } else { - if ((strcasecmp (fields[0], "yes") == 0) - || (strcasecmp (fields[0], "true") == 0) - || (strcasecmp (fields[0], "on") == 0)) + if (IS_TRUE (fields[0])) ir_ignorelist_invert = 0; else ir_ignorelist_invert = 1; @@ -573,8 +570,14 @@ static int ir_read (void) return (-1); } +#ifdef RTNL_DUMP_FILTER_FIVE_ARGS if (rtnl_dump_filter (&rth, link_filter, /* arg1 = */ NULL, NULL, NULL) != 0) +#elif defined(RTNL_DUMP_FILTER_THREE_ARGS) + if (rtnl_dump_filter (&rth, link_filter, /* arg = */ NULL) != 0) +#else +#error "Failed to determine the number of arguments to 'rtnl_dump_filter'!" +#endif { ERROR ("netlink plugin: ir_read: rtnl_dump_filter failed."); return (-1); @@ -582,9 +585,9 @@ static int ir_read (void) /* `link_filter' will update `iflist' which is used here to iterate over all * interfaces. */ - for (ifindex = 0; ifindex < iflist_len; ifindex++) + for (ifindex = 0; (size_t) ifindex < iflist_len; ifindex++) { - int type_index; + size_t type_index; if (iflist[ifindex] == NULL) continue; @@ -611,8 +614,14 @@ static int ir_read (void) continue; } +#ifdef RTNL_DUMP_FILTER_FIVE_ARGS if (rtnl_dump_filter (&rth, qos_filter, (void *) &ifindex, NULL, NULL) != 0) +#elif defined(RTNL_DUMP_FILTER_THREE_ARGS) + if (rtnl_dump_filter (&rth, qos_filter, /* arg = */ &ifindex) != 0) +#else +#error "Failed to determine the number of arguments to 'rtnl_dump_filter'!" +#endif { ERROR ("netlink plugin: ir_read: rtnl_dump_filter failed."); continue;