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;