Fix agent build failure on FreeBSD 14.0 due to new tcpstat struct (#14446)
* Fix agent build failure on FreeBSD 14.0 due to different tcpstat struct * Add comment with link to commit that introduced the bug
Dim-P committed
Feb 7, 2023 at 12:27 UTC
8d285012be22e740ea09696157753c4ebcf83727
1 file changed
+46
-15
collectors/freebsd.plugin/freebsd_sysctl.c
+46
-15
@@ -1991,15 +1991,34 @@ int do_net_inet_tcp_stats(int update_every, usec_t dt) {
1991
rrdset_done(st_listen);
1992
}
1993
1994
- if (do_ecn == CONFIG_BOOLEAN_YES || (do_ecn == CONFIG_BOOLEAN_AUTO &&
1995
- (tcpstat.tcps_ecn_ce ||
1994
+ if (do_ecn == CONFIG_BOOLEAN_YES || ( do_ecn == CONFIG_BOOLEAN_AUTO &&
1995
+ ( netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES ||
1996
+#if __FreeBSD_version < 1400074
1997
+// See https://github.com/freebsd/freebsd-src/commit/1a70101a870015304d5b2446b480d8677d8aad36
1998
+ tcpstat.tcps_ecn_ce ||
1999
tcpstat.tcps_ecn_ect0 ||
1997
- tcpstat.tcps_ecn_ect1 ||
1998
- netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
2000
+ tcpstat.tcps_ecn_ect1
2001
+#else
2002
+ tcpstat.tcps_ecn_rcvce ||
2003
+ tcpstat.tcps_ecn_rcvect0 ||
2004
+ tcpstat.tcps_ecn_rcvect1 ||
2005
+ tcpstat.tcps_ecn_sndect0 ||
2006
+ tcpstat.tcps_ecn_sndect1
2007
+#endif
2008
+ ))) {
2009
do_ecn = CONFIG_BOOLEAN_YES;
2010
2011
static RRDSET *st = NULL;
2002
- static RRDDIM *rd_ce = NULL, *rd_no_ect = NULL, *rd_ect0 = NULL, *rd_ect1 = NULL;
2012
+ static RRDDIM *rd_rcvce = NULL,
2013
+#if __FreeBSD_version < 1400074
2014
+ *rd_ect0 = NULL,
2015
+ *rd_ect1 = NULL;
2016
+#else
2017
+ *rd_rcvect0 = NULL,
2018
+ *rd_rcvect1 = NULL,
2019
+ *rd_sndect0 = NULL,
2020
+ *rd_sndect1 = NULL;
2021
+#endif
2022
2023
if (unlikely(!st)) {
2024
st = rrdset_create_localhost(
@@ -2019,20 +2038,32 @@ int do_net_inet_tcp_stats(int update_every, usec_t dt) {
2038
2039
rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
2040
2022
- rd_ce = rrddim_add(st, "InCEPkts", "CEP", 1, 1, RRD_ALGORITHM_INCREMENTAL);
2023
- rd_no_ect = rrddim_add(st, "InNoECTPkts", "NoECTP", -1, 1, RRD_ALGORITHM_INCREMENTAL);
2024
- rd_ect0 = rrddim_add(st, "InECT0Pkts", "ECTP0", 1, 1, RRD_ALGORITHM_INCREMENTAL);
2025
- rd_ect1 = rrddim_add(st, "InECT1Pkts", "ECTP1", 1, 1, RRD_ALGORITHM_INCREMENTAL);
2041
+ rd_rcvce = rrddim_add(st, "InCEPkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
2042
+#if __FreeBSD_version < 1400074
2043
+ rd_ect0 = rrddim_add(st, "ECT0Pkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
2044
+ rd_ect1 = rrddim_add(st, "ECT1Pkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
2045
+#else
2046
+ rd_rcvect0 = rrddim_add(st, "InECT0Pkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
2047
+ rd_rcvect1 = rrddim_add(st, "InECT1Pkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
2048
+ rd_sndect0 = rrddim_add(st, "OutECT0Pkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
2049
+ rd_sndect1 = rrddim_add(st, "OutECT1Pkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
2050
+#endif
2051
}
2052
2028
- rrddim_set_by_pointer(st, rd_ce, tcpstat.tcps_ecn_ce);
2029
- rrddim_set_by_pointer(st, rd_no_ect, tcpstat.tcps_ecn_ce - (tcpstat.tcps_ecn_ect0 +
2030
- tcpstat.tcps_ecn_ect1));
2031
- rrddim_set_by_pointer(st, rd_ect0, tcpstat.tcps_ecn_ect0);
2032
- rrddim_set_by_pointer(st, rd_ect1, tcpstat.tcps_ecn_ect1);
2053
+
2054
+#if __FreeBSD_version < 1400074
2055
+ rrddim_set_by_pointer(st, rd_rcvce, tcpstat.tcps_ecn_ce);
2056
+ rrddim_set_by_pointer(st, rd_ect0, tcpstat.tcps_ecn_ect0);
2057
+ rrddim_set_by_pointer(st, rd_ect1, tcpstat.tcps_ecn_ect1);
2058
+#else
2059
+ rrddim_set_by_pointer(st, rd_rcvce, tcpstat.tcps_ecn_rcvce);
2060
+ rrddim_set_by_pointer(st, rd_rcvect0, tcpstat.tcps_ecn_rcvect0);
2061
+ rrddim_set_by_pointer(st, rd_rcvect1, tcpstat.tcps_ecn_rcvect1);
2062
+ rrddim_set_by_pointer(st, rd_sndect0, tcpstat.tcps_ecn_sndect0);
2063
+ rrddim_set_by_pointer(st, rd_sndect1, tcpstat.tcps_ecn_sndect1);
2064
+#endif
2065
rrdset_done(st);
2066
}
2035
-
2067
}
2068
} else {
2069
collector_error("DISABLED: net.inet.tcp.stats module");