X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fovs_stats.c;h=72c92b2f2517481c8e85a004fe1bae427207a95b;hb=1c6fdbaea6ad42c41cd63006a3c8abbdefa391db;hp=1e6ddd2d4c758066e1cb693ee65d7c1edb7918dc;hpb=39d06e521542649ceda75de781d5f83579df255f;p=collectd.git diff --git a/src/ovs_stats.c b/src/ovs_stats.c index 1e6ddd2d..72c92b2f 100644 --- a/src/ovs_stats.c +++ b/src/ovs_stats.c @@ -94,42 +94,46 @@ typedef struct bridge_list_s { struct bridge_list_s *next; /* Next bridge*/ } bridge_list_t; +#define cnt_str(x) [x] = #x + static const char *const iface_counter_table[IFACE_COUNTER_COUNT] = { - [collisions] = "collisions", - [rx_bytes] = "rx_bytes", - [rx_crc_err] = "rx_crc_err", - [rx_dropped] = "rx_dropped", - [rx_errors] = "rx_errors", - [rx_frame_err] = "rx_frame_err", - [rx_over_err] = "rx_over_err", - [rx_packets] = "rx_packets", - [tx_bytes] = "tx_bytes", - [tx_dropped] = "tx_dropped", - [tx_errors] = "tx_errors", - [tx_packets] = "tx_packets", - [rx_1_to_64_packets] = "rx_1_to_64_packets", - [rx_65_to_127_packets] = "rx_65_to_127_packets", - [rx_128_to_255_packets] = "rx_128_to_255_packets", - [rx_256_to_511_packets] = "rx_256_to_511_packets", - [rx_512_to_1023_packets] = "rx_512_to_1023_packets", - [rx_1024_to_1522_packets] = "rx_1024_to_1518_packets", - [rx_1523_to_max_packets] = "rx_1523_to_max_packets", - [tx_1_to_64_packets] = "tx_1_to_64_packets", - [tx_65_to_127_packets] = "tx_65_to_127_packets", - [tx_128_to_255_packets] = "tx_128_to_255_packets", - [tx_256_to_511_packets] = "tx_256_to_511_packets", - [tx_512_to_1023_packets] = "tx_512_to_1023_packets", - [tx_1024_to_1522_packets] = "tx_1024_to_1518_packets", - [tx_1523_to_max_packets] = "tx_1523_to_max_packets", - [tx_multicast_packets] = "tx_multicast_packets", - [rx_broadcast_packets] = "rx_broadcast_packets", - [tx_broadcast_packets] = "tx_broadcast_packets", - [rx_undersized_errors] = "rx_undersized_errors", - [rx_oversize_errors] = "rx_oversize_errors", - [rx_fragmented_errors] = "rx_fragmented_errors", - [rx_jabber_errors] = "rx_jabber_errors", + cnt_str(collisions), + cnt_str(rx_bytes), + cnt_str(rx_crc_err), + cnt_str(rx_dropped), + cnt_str(rx_errors), + cnt_str(rx_frame_err), + cnt_str(rx_over_err), + cnt_str(rx_packets), + cnt_str(tx_bytes), + cnt_str(tx_dropped), + cnt_str(tx_errors), + cnt_str(tx_packets), + cnt_str(rx_1_to_64_packets), + cnt_str(rx_65_to_127_packets), + cnt_str(rx_128_to_255_packets), + cnt_str(rx_256_to_511_packets), + cnt_str(rx_512_to_1023_packets), + cnt_str(rx_1024_to_1522_packets), + cnt_str(rx_1523_to_max_packets), + cnt_str(tx_1_to_64_packets), + cnt_str(tx_65_to_127_packets), + cnt_str(tx_128_to_255_packets), + cnt_str(tx_256_to_511_packets), + cnt_str(tx_512_to_1023_packets), + cnt_str(tx_1024_to_1522_packets), + cnt_str(tx_1523_to_max_packets), + cnt_str(tx_multicast_packets), + cnt_str(rx_broadcast_packets), + cnt_str(tx_broadcast_packets), + cnt_str(rx_undersized_errors), + cnt_str(rx_oversize_errors), + cnt_str(rx_fragmented_errors), + cnt_str(rx_jabber_errors), }; +#undef cnt_str + /* Entry into the list of network bridges */ static bridge_list_t *g_bridge_list_head; @@ -360,14 +364,18 @@ static int ovs_stats_update_bridge(yajl_val bridge) { yajl_val *array = YAJL_GET_ARRAY(br_ports)->values; size_t array_len = YAJL_GET_ARRAY(br_ports)->len; if (array != NULL && array_len > 0 && YAJL_IS_ARRAY(array[1])) { - yajl_val *ports_arr = YAJL_GET_ARRAY(array[1])->values; - size_t ports_num = YAJL_GET_ARRAY(array[1])->len; - for (size_t i = 0; i < ports_num && ports_arr != NULL; i++) { - tmp = YAJL_GET_STRING(ports_arr[i]->u.array.values[1]); - if (tmp != NULL) - ovs_stats_new_port(br, tmp); - else - goto failure; + if (YAJL_GET_ARRAY(array[1]) == NULL) + goto failure; + else { + yajl_val *ports_arr = YAJL_GET_ARRAY(array[1])->values; + size_t ports_num = YAJL_GET_ARRAY(array[1])->len; + for (size_t i = 0; i < ports_num && ports_arr != NULL; i++) { + tmp = YAJL_GET_STRING(ports_arr[i]->u.array.values[1]); + if (tmp != NULL) + ovs_stats_new_port(br, tmp); + else + goto failure; + } } } } else @@ -849,6 +857,7 @@ static int ovs_stats_plugin_config(oconfig_item_t *ci) { char *br_name_dup = strdup(br_name); if (br_name_dup == NULL) { ERROR("%s: strdup() copy bridge name fail", plugin_name); + sfree(bridge); goto cleanup_fail; }