Merge pull request #3329 from efuss/fix-3311
[collectd.git] / src / ovs_stats.c
index 85269af..e22e851 100644 (file)
@@ -28,9 +28,9 @@
  *   Taras Chornyi <tarasx.chornyi@intel.com>
  */
 
-#include "common.h"
+#include "utils/common/common.h"
 
-#include "utils_ovs.h" /* OvS helpers */
+#include "utils/ovs/ovs.h" /* OvS helpers */
 
 /* Plugin name */
 static const char plugin_name[] = "ovs_stats";
@@ -63,6 +63,7 @@ typedef enum iface_counter {
   tx_512_to_1023_packets,
   tx_1024_to_1522_packets,
   tx_1523_to_max_packets,
+  rx_multicast_packets,
   tx_multicast_packets,
   rx_broadcast_packets,
   tx_broadcast_packets,
@@ -70,6 +71,21 @@ typedef enum iface_counter {
   rx_oversize_errors,
   rx_fragmented_errors,
   rx_jabber_errors,
+  rx_error_bytes,
+  rx_l3_l4_xsum_error,
+  rx_management_dropped,
+  rx_mbuf_allocation_errors,
+  rx_total_bytes,
+  rx_total_missed_packets,
+  rx_undersize_errors,
+  rx_management_packets,
+  tx_management_packets,
+  rx_good_bytes,
+  tx_good_bytes,
+  rx_good_packets,
+  tx_good_packets,
+  rx_total_packets,
+  tx_total_packets,
   __iface_counter_max
 } iface_counter;
 
@@ -129,6 +145,7 @@ static const char *const iface_counter_table[IFACE_COUNTER_COUNT] = {
     cnt_str(tx_512_to_1023_packets),
     cnt_str(tx_1024_to_1522_packets),
     cnt_str(tx_1523_to_max_packets),
+    cnt_str(rx_multicast_packets),
     cnt_str(tx_multicast_packets),
     cnt_str(rx_broadcast_packets),
     cnt_str(tx_broadcast_packets),
@@ -136,6 +153,21 @@ static const char *const iface_counter_table[IFACE_COUNTER_COUNT] = {
     cnt_str(rx_oversize_errors),
     cnt_str(rx_fragmented_errors),
     cnt_str(rx_jabber_errors),
+    cnt_str(rx_error_bytes),
+    cnt_str(rx_l3_l4_xsum_error),
+    cnt_str(rx_management_dropped),
+    cnt_str(rx_mbuf_allocation_errors),
+    cnt_str(rx_total_bytes),
+    cnt_str(rx_total_missed_packets),
+    cnt_str(rx_undersize_errors),
+    cnt_str(rx_management_packets),
+    cnt_str(tx_management_packets),
+    cnt_str(rx_good_bytes),
+    cnt_str(tx_good_bytes),
+    cnt_str(rx_good_packets),
+    cnt_str(tx_good_packets),
+    cnt_str(rx_total_packets),
+    cnt_str(tx_total_packets),
 };
 
 #undef cnt_str
@@ -248,8 +280,13 @@ static void ovs_stats_submit_interfaces(port_list_t *port) {
       if (strlen(iface->ex_iface_id))
         meta_data_add_string(meta, "iface-id", iface->ex_iface_id);
     }
-    snprintf(devname, sizeof(devname), "%s.%s.%s", bridge->name, port->name,
-             iface->name);
+    strjoin(devname, sizeof(devname),
+            (char *[]){
+                bridge->name,
+                port->name,
+                iface->name,
+            },
+            3, ".");
     ovs_stats_submit_one(devname, "if_collisions", NULL,
                          iface->stats[collisions], meta);
     ovs_stats_submit_two(devname, "if_dropped", NULL, iface->stats[rx_dropped],
@@ -292,8 +329,6 @@ static void ovs_stats_submit_interfaces(port_list_t *port) {
     ovs_stats_submit_two(devname, "if_packets", "broadcast_packets",
                          iface->stats[rx_broadcast_packets],
                          iface->stats[tx_broadcast_packets], meta);
-    ovs_stats_submit_one(devname, "if_multicast", "tx_multicast_packets",
-                         iface->stats[tx_multicast_packets], meta);
     ovs_stats_submit_one(devname, "if_rx_errors", "rx_undersized_errors",
                          iface->stats[rx_undersized_errors], meta);
     ovs_stats_submit_one(devname, "if_rx_errors", "rx_oversize_errors",
@@ -302,6 +337,35 @@ static void ovs_stats_submit_interfaces(port_list_t *port) {
                          iface->stats[rx_fragmented_errors], meta);
     ovs_stats_submit_one(devname, "if_rx_errors", "rx_jabber_errors",
                          iface->stats[rx_jabber_errors], meta);
+    ovs_stats_submit_one(devname, "if_rx_octets", "rx_error_bytes",
+                         iface->stats[rx_error_bytes], meta);
+    ovs_stats_submit_one(devname, "if_errors", "rx_l3_l4_xsum_error",
+                         iface->stats[rx_l3_l4_xsum_error], meta);
+    ovs_stats_submit_one(devname, "if_dropped", "rx_management_dropped",
+                         iface->stats[rx_management_dropped], meta);
+    ovs_stats_submit_one(devname, "if_errors", "rx_mbuf_allocation_errors",
+                         iface->stats[rx_mbuf_allocation_errors], meta);
+    ovs_stats_submit_one(devname, "if_octets", "rx_total_bytes",
+                         iface->stats[rx_total_bytes], meta);
+    ovs_stats_submit_one(devname, "if_packets", "rx_total_missed_packets",
+                         iface->stats[rx_total_missed_packets], meta);
+    ovs_stats_submit_one(devname, "if_rx_errors", "rx_undersize_errors",
+                         iface->stats[rx_undersize_errors], meta);
+    ovs_stats_submit_two(devname, "if_packets", "management_packets",
+                         iface->stats[rx_management_packets],
+                         iface->stats[tx_management_packets], meta);
+    ovs_stats_submit_two(devname, "if_packets", "multicast_packets",
+                         iface->stats[rx_multicast_packets],
+                         iface->stats[tx_multicast_packets], meta);
+    ovs_stats_submit_two(devname, "if_octets", "good_bytes",
+                         iface->stats[rx_good_bytes],
+                         iface->stats[tx_good_bytes], meta);
+    ovs_stats_submit_two(devname, "if_packets", "good_packets",
+                         iface->stats[rx_good_packets],
+                         iface->stats[tx_good_packets], meta);
+    ovs_stats_submit_two(devname, "if_packets", "total_packets",
+                         iface->stats[rx_total_packets],
+                         iface->stats[tx_total_packets], meta);
 
     meta_data_destroy(meta);
   }
@@ -332,16 +396,16 @@ static void ovs_stats_submit_port(port_list_t *port) {
 
     for (interface_list_t *iface = port->iface; iface != NULL;
          iface = iface->next) {
-      snprintf(key_str, sizeof(key_str), "uuid%d", i);
+      ssnprintf(key_str, sizeof(key_str), "uuid%d", i);
       meta_data_add_string(meta, key_str, iface->iface_uuid);
 
       if (strlen(iface->ex_vm_id)) {
-        snprintf(key_str, sizeof(key_str), "vm-uuid%d", i);
+        ssnprintf(key_str, sizeof(key_str), "vm-uuid%d", i);
         meta_data_add_string(meta, key_str, iface->ex_vm_id);
       }
 
       if (strlen(iface->ex_iface_id)) {
-        snprintf(key_str, sizeof(key_str), "iface-id%d", i);
+        ssnprintf(key_str, sizeof(key_str), "iface-id%d", i);
         meta_data_add_string(meta, key_str, iface->ex_iface_id);
       }
 
@@ -349,7 +413,7 @@ static void ovs_stats_submit_port(port_list_t *port) {
     }
   }
   bridge_list_t *bridge = port->br;
-  snprintf(devname, sizeof(devname), "%s.%s", bridge->name, port->name);
+  ssnprintf(devname, sizeof(devname), "%s.%s", bridge->name, port->name);
   ovs_stats_submit_one(devname, "if_collisions", NULL,
                        ovs_stats_get_port_stat_value(port, collisions), meta);
   ovs_stats_submit_two(devname, "if_dropped", NULL,
@@ -404,9 +468,6 @@ static void ovs_stats_submit_port(port_list_t *port) {
       ovs_stats_get_port_stat_value(port, rx_broadcast_packets),
       ovs_stats_get_port_stat_value(port, tx_broadcast_packets), meta);
   ovs_stats_submit_one(
-      devname, "if_multicast", "tx_multicast_packets",
-      ovs_stats_get_port_stat_value(port, tx_multicast_packets), meta);
-  ovs_stats_submit_one(
       devname, "if_rx_errors", "rx_undersized_errors",
       ovs_stats_get_port_stat_value(port, rx_undersized_errors), meta);
   ovs_stats_submit_one(devname, "if_rx_errors", "rx_oversize_errors",
@@ -418,6 +479,47 @@ static void ovs_stats_submit_port(port_list_t *port) {
   ovs_stats_submit_one(devname, "if_rx_errors", "rx_jabber_errors",
                        ovs_stats_get_port_stat_value(port, rx_jabber_errors),
                        meta);
+  ovs_stats_submit_one(devname, "if_rx_octets", "rx_error_bytes",
+                       ovs_stats_get_port_stat_value(port, rx_error_bytes),
+                       meta);
+  ovs_stats_submit_one(devname, "if_errors", "rx_l3_l4_xsum_error",
+                       ovs_stats_get_port_stat_value(port, rx_l3_l4_xsum_error),
+                       meta);
+  ovs_stats_submit_one(
+      devname, "if_dropped", "rx_management_dropped",
+      ovs_stats_get_port_stat_value(port, rx_management_dropped), meta);
+  ovs_stats_submit_one(
+      devname, "if_errors", "rx_mbuf_allocation_errors",
+      ovs_stats_get_port_stat_value(port, rx_mbuf_allocation_errors), meta);
+  ovs_stats_submit_one(devname, "if_octets", "rx_total_bytes",
+                       ovs_stats_get_port_stat_value(port, rx_total_bytes),
+                       meta);
+  ovs_stats_submit_one(
+      devname, "if_packets", "rx_total_missed_packets",
+      ovs_stats_get_port_stat_value(port, rx_total_missed_packets), meta);
+  ovs_stats_submit_one(devname, "if_rx_errors", "rx_undersize_errors",
+                       ovs_stats_get_port_stat_value(port, rx_undersize_errors),
+                       meta);
+  ovs_stats_submit_two(
+      devname, "if_packets", "management_packets",
+      ovs_stats_get_port_stat_value(port, rx_management_packets),
+      ovs_stats_get_port_stat_value(port, tx_management_packets), meta);
+  ovs_stats_submit_two(
+      devname, "if_packets", "multicast_packets",
+      ovs_stats_get_port_stat_value(port, rx_multicast_packets),
+      ovs_stats_get_port_stat_value(port, tx_multicast_packets), meta);
+  ovs_stats_submit_two(devname, "if_octets", "good_bytes",
+                       ovs_stats_get_port_stat_value(port, rx_good_bytes),
+                       ovs_stats_get_port_stat_value(port, tx_good_bytes),
+                       meta);
+  ovs_stats_submit_two(devname, "if_packets", "good_packets",
+                       ovs_stats_get_port_stat_value(port, rx_good_packets),
+                       ovs_stats_get_port_stat_value(port, tx_good_packets),
+                       meta);
+  ovs_stats_submit_two(devname, "if_packets", "total_packets",
+                       ovs_stats_get_port_stat_value(port, rx_total_packets),
+                       ovs_stats_get_port_stat_value(port, tx_total_packets),
+                       meta);
 
   meta_data_destroy(meta);
 }
@@ -482,8 +584,8 @@ static interface_list_t *ovs_stats_new_port_interface(port_list_t *port,
   interface_list_t *iface = ovs_stats_get_port_interface(port, uuid);
 
   if (iface == NULL) {
-    iface = (interface_list_t *)calloc(1, sizeof(interface_list_t));
-    if (!iface) {
+    iface = calloc(1, sizeof(*iface));
+    if (iface == NULL) {
       ERROR("%s: Error allocating interface", plugin_name);
       return NULL;
     }
@@ -505,8 +607,8 @@ static port_list_t *ovs_stats_new_port(bridge_list_t *bridge,
   port_list_t *port = ovs_stats_get_port(uuid);
 
   if (port == NULL) {
-    port = (port_list_t *)calloc(1, sizeof(port_list_t));
-    if (!port) {
+    port = calloc(1, sizeof(*port));
+    if (port == NULL) {
       ERROR("%s: Error allocating port", plugin_name);
       return NULL;
     }
@@ -606,7 +708,7 @@ static int ovs_stats_update_bridge(yajl_val bridge) {
       ovs_stats_get_bridge(g_bridge_list_head, YAJL_GET_STRING(br_name));
   if (br == NULL) {
     br = calloc(1, sizeof(*br));
-    if (!br) {
+    if (br == NULL) {
       ERROR("%s: calloc(%zu) failed.", plugin_name, sizeof(*br));
       return -1;
     }
@@ -760,7 +862,7 @@ static int ovs_stats_update_port(const char *uuid, yajl_val port) {
 
     // ifaces_list is [[ "uuid", "<some_uuid>" ], [ "uuid",
     // "<another_uuid>" ], ... ]]
-    for (int i = 0; i < YAJL_GET_ARRAY(ifaces_list)->len; i++) {
+    for (size_t i = 0; i < YAJL_GET_ARRAY(ifaces_list)->len; i++) {
       yajl_val iface_tuple = YAJL_GET_ARRAY(ifaces_list)->values[i];
 
       // iface_tuple is [ "uuid", "<some_uuid>" ]
@@ -1215,7 +1317,7 @@ static int ovs_stats_plugin_config(oconfig_item_t *ci) {
         char const *br_name = child->values[j].value.string;
         if ((bridge = ovs_stats_get_bridge(g_monitored_bridge_list_head,
                                            br_name)) == NULL) {
-          if ((bridge = calloc(1, sizeof(bridge_list_t))) == NULL) {
+          if ((bridge = calloc(1, sizeof(*bridge))) == NULL) {
             ERROR("%s: Error allocating memory for bridge", plugin_name);
             goto cleanup_fail;
           } else {