[collectd] [PATCH] netlink plugin: prevent complaints with 3.3 kernels

Bruno Prémont bonbons at linux-vserver.org
Wed Mar 21 21:25:10 CET 2012


Starting with linux-3.3-rc5 kernel at each interval netlink plugin triggers
three lines of kernel log:
  netlink: 12 bytes leftover after parsing attributes.

Change the libnetlink function used to query link statistics to match
iproute2's behavior and thus not trip on the kernel's new parsing of
optional attributes for RTM_GETLINK.

While at it, also fix libnetlink's complaint to stderr:
  !!!Deficit 16, rta_len=996
caused by incorrect calculation of msg_len.

Signed-off-by: Bruno Prémont <bonbons at linux-vserver.org>
---

This should get applied to 5.0 and 4.10 series!

The two hunks may get applied separately.

--- collectd-a/src/netlink.c	2012-03-21 19:20:15.304227640 +0100
+++ collectd-b/src/netlink.c	2012-03-21 19:21:20.454323202 +0100
@@ -223,7 +223,7 @@ static int link_filter (const struct soc
 
   msg = NLMSG_DATA (nmh);
 
-  msg_len = nmh->nlmsg_len - sizeof (struct ifinfomsg);
+  msg_len = nmh->nlmsg_len - NLMSG_LENGTH(sizeof (struct ifinfomsg));
   if (msg_len < 0)
   {
     ERROR ("netlink plugin: link_filter: msg_len = %i < 0;", msg_len);
@@ -554,17 +554,13 @@ static int ir_init (void)
 
 static int ir_read (void)
 {
-  struct ifinfomsg im;
   struct tcmsg tm;
   int ifindex;
 
   static const int type_id[] = { RTM_GETQDISC, RTM_GETTCLASS, RTM_GETTFILTER };
   static const char *type_name[] = { "qdisc", "class", "filter" };
 
-  memset (&im, '\0', sizeof (im));
-  im.ifi_type = AF_UNSPEC;
-
-  if (rtnl_dump_request (&rth, RTM_GETLINK, &im, sizeof (im)) < 0)
+  if (rtnl_wilddump_request (&rth, AF_UNSPEC, RTM_GETLINK) < 0)
   {
     ERROR ("netlink plugin: ir_read: rtnl_dump_request failed.");
     return (-1);



More information about the collectd mailing list