+#define COPY_RTNL_LINK_VALUE(dst_stats, src_stats, value_name) \
+ (dst_stats)->value_name = (src_stats)->value_name
+
+#define COPY_RTNL_LINK_STATS(dst_stats, src_stats) \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, rx_packets); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, tx_packets); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, rx_bytes); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, tx_bytes); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, rx_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, tx_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, rx_dropped); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, tx_dropped); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, multicast); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, collisions); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, rx_length_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, rx_over_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, rx_crc_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, rx_frame_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, rx_fifo_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, rx_missed_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, tx_aborted_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, tx_carrier_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, tx_fifo_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, tx_heartbeat_errors); \
+ COPY_RTNL_LINK_VALUE(dst_stats, src_stats, tx_window_errors)
+
+#ifdef HAVE_RTNL_LINK_STATS64
+static void check_ignorelist_and_submit64(const char *dev,
+ struct rtnl_link_stats64 *stats) {
+ struct ir_link_stats_storage_s s;
+
+ COPY_RTNL_LINK_STATS(&s, stats);
+
+ check_ignorelist_and_submit(dev, &s);
+}
+#endif
+
+static void check_ignorelist_and_submit32(const char *dev,
+ struct rtnl_link_stats *stats) {
+ struct ir_link_stats_storage_s s;
+
+ COPY_RTNL_LINK_STATS(&s, stats);
+
+ check_ignorelist_and_submit(dev, &s);
+}
+
+static int link_filter_cb(const struct nlmsghdr *nlh,
+ void *args __attribute__((unused))) {
+ struct ifinfomsg *ifm = mnl_nlmsg_get_payload(nlh);