@cryptotaxi247 / netdata-1 / commits / 85096711f

Skip collecting network interface speed and duplex if carrier is down (#13019)

Vladimir Kobal committed May 31, 2022 at 09:10 UTC 85096711f2a4fdcb1d3c790287843c64dbd5c171
1 file changed +26 -13
collectors/proc.plugin/proc_net_dev.c
+26 -13
@@ -792,7 +792,18 @@ int do_proc_net_dev(int update_every, usec_t dt) {
792 d->tcarrier = str2kernel_uint_t(procfile_lineword(ff, l, 15));
793 }
794
795 - if (d->do_duplex != CONFIG_BOOLEAN_NO && d->filename_duplex) {
795 + if ((d->do_carrier != CONFIG_BOOLEAN_NO ||
796 + d->do_duplex != CONFIG_BOOLEAN_NO ||
797 + d->do_speed != CONFIG_BOOLEAN_NO) &&
798 + d->filename_carrier) {
799 + if (read_single_number_file(d->filename_carrier, &d->carrier)) {
800 + error("Cannot refresh interface %s carrier state by reading '%s'. Stop updating it.", d->name, d->filename_carrier);
801 + freez(d->filename_carrier);
802 + d->filename_carrier = NULL;
803 + }
804 + }
805 +
806 + if (d->do_duplex != CONFIG_BOOLEAN_NO && d->filename_duplex && (d->carrier || !d->filename_carrier)) {
807 char buffer[STATE_LENGTH_MAX + 1];
808
809 if (read_file(d->filename_duplex, buffer, STATE_LENGTH_MAX)) {
@@ -808,6 +819,8 @@ int do_proc_net_dev(int update_every, usec_t dt) {
819 else
820 d->duplex = 0;
821 }
822 + } else {
823 + d->duplex = 0;
824 }
825
826 if(d->do_operstate != CONFIG_BOOLEAN_NO && d->filename_operstate) {
@@ -825,19 +838,11 @@ int do_proc_net_dev(int update_every, usec_t dt) {
838 }
839 }
840
828 - if (d->do_carrier != CONFIG_BOOLEAN_NO && d->filename_carrier) {
829 - if (read_single_number_file(d->filename_carrier, &d->carrier)) {
830 - error("Cannot refresh interface %s carrier state by reading '%s'. Stop updating it.", d->name, d->filename_carrier);
831 - freez(d->filename_carrier);
832 - d->filename_carrier = NULL;
833 - }
834 - }
835 -
841 if (d->do_mtu != CONFIG_BOOLEAN_NO && d->filename_mtu) {
842 if (read_single_number_file(d->filename_mtu, &d->mtu)) {
838 - error("Cannot refresh mtu for interface %s by reading '%s'. Stop updating it.", d->name, d->filename_carrier);
839 - freez(d->filename_carrier);
840 - d->filename_carrier = NULL;
843 + error("Cannot refresh mtu for interface %s by reading '%s'. Stop updating it.", d->name, d->filename_mtu);
844 + freez(d->filename_mtu);
845 + d->filename_mtu = NULL;
846 }
847 }
848
@@ -907,7 +912,15 @@ int do_proc_net_dev(int update_every, usec_t dt) {
912 }
913
914 if(d->filename_speed && d->chart_var_speed) {
910 - if(read_single_number_file(d->filename_speed, (unsigned long long *) &d->speed)) {
915 + int ret = 0;
916 +
917 + if (d->carrier || !d->filename_carrier) {
918 + ret = read_single_number_file(d->filename_speed, (unsigned long long *) &d->speed);
919 + } else {
920 + d->speed = 0;
921 + }
922 +
923 + if(ret) {
924 error("Cannot refresh interface %s speed by reading '%s'. Will not update its speed anymore.", d->name, d->filename_speed);
925 freez(d->filename_speed);
926 d->filename_speed = NULL;