3 #define RRD_TYPE_NET_STAT_NETFILTER "netfilter"
4 #define RRD_TYPE_NET_STAT_SYNPROXY "synproxy"
6 int do_proc_net_stat_synproxy(int update_every, usec_t dt) {
9 static int do_entries = -1, do_cookies = -1, do_syns = -1, do_reopened = -1;
10 static procfile *ff = NULL;
12 if(unlikely(do_entries == -1)) {
13 do_entries = config_get_boolean_ondemand("plugin:proc:/proc/net/stat/synproxy", "SYNPROXY entries", CONFIG_BOOLEAN_AUTO);
14 do_cookies = config_get_boolean_ondemand("plugin:proc:/proc/net/stat/synproxy", "SYNPROXY cookies", CONFIG_BOOLEAN_AUTO);
15 do_syns = config_get_boolean_ondemand("plugin:proc:/proc/net/stat/synproxy", "SYNPROXY SYN received", CONFIG_BOOLEAN_AUTO);
16 do_reopened = config_get_boolean_ondemand("plugin:proc:/proc/net/stat/synproxy", "SYNPROXY connections reopened", CONFIG_BOOLEAN_AUTO);
20 char filename[FILENAME_MAX + 1];
21 snprintfz(filename, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/proc/net/stat/synproxy");
22 ff = procfile_open(config_get("plugin:proc:/proc/net/stat/synproxy", "filename to monitor", filename), " \t,:|", PROCFILE_FLAG_DEFAULT);
27 ff = procfile_readall(ff);
29 return 0; // we return 0, so that we will retry to open it next time
31 // make sure we have 3 lines
32 size_t lines = procfile_lines(ff), l;
33 if(unlikely(lines < 2)) {
34 error("/proc/net/stat/synproxy has %zu lines, expected no less than 2. Disabling it.", lines);
38 unsigned long long entries = 0, syn_received = 0, cookie_invalid = 0, cookie_valid = 0, cookie_retrans = 0, conn_reopened = 0;
40 // synproxy gives its values per CPU
41 for(l = 1; l < lines ;l++) {
42 size_t words = procfile_linewords(ff, l);
43 if(unlikely(words < 6))
46 entries += strtoull(procfile_lineword(ff, l, 0), NULL, 16);
47 syn_received += strtoull(procfile_lineword(ff, l, 1), NULL, 16);
48 cookie_invalid += strtoull(procfile_lineword(ff, l, 2), NULL, 16);
49 cookie_valid += strtoull(procfile_lineword(ff, l, 3), NULL, 16);
50 cookie_retrans += strtoull(procfile_lineword(ff, l, 4), NULL, 16);
51 conn_reopened += strtoull(procfile_lineword(ff, l, 5), NULL, 16);
54 unsigned long long events = entries + syn_received + cookie_invalid + cookie_valid + cookie_retrans + conn_reopened;
58 // --------------------------------------------------------------------
60 if((do_entries == CONFIG_BOOLEAN_AUTO && events) || do_entries == CONFIG_BOOLEAN_YES) {
61 do_entries = CONFIG_BOOLEAN_YES;
63 st = rrdset_find_localhost(RRD_TYPE_NET_STAT_NETFILTER "." RRD_TYPE_NET_STAT_SYNPROXY "_entries");
65 st = rrdset_create_localhost(RRD_TYPE_NET_STAT_NETFILTER, RRD_TYPE_NET_STAT_SYNPROXY "_entries", NULL
66 , RRD_TYPE_NET_STAT_SYNPROXY, NULL, "SYNPROXY Entries Used", "entries", 3304
67 , update_every, RRDSET_TYPE_LINE);
69 rrddim_add(st, "entries", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
73 rrddim_set(st, "entries", entries);
77 // --------------------------------------------------------------------
79 if((do_syns == CONFIG_BOOLEAN_AUTO && events) || do_syns == CONFIG_BOOLEAN_YES) {
80 do_syns = CONFIG_BOOLEAN_YES;
82 st = rrdset_find_localhost(RRD_TYPE_NET_STAT_NETFILTER "." RRD_TYPE_NET_STAT_SYNPROXY "_syn_received");
84 st = rrdset_create_localhost(RRD_TYPE_NET_STAT_NETFILTER, RRD_TYPE_NET_STAT_SYNPROXY "_syn_received", NULL
85 , RRD_TYPE_NET_STAT_SYNPROXY, NULL, "SYNPROXY SYN Packets received", "SYN/s"
86 , 3301, update_every, RRDSET_TYPE_LINE);
88 rrddim_add(st, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
92 rrddim_set(st, "received", syn_received);
96 // --------------------------------------------------------------------
98 if((do_reopened == CONFIG_BOOLEAN_AUTO && events) || do_reopened == CONFIG_BOOLEAN_YES) {
99 do_reopened = CONFIG_BOOLEAN_YES;
101 st = rrdset_find_localhost(RRD_TYPE_NET_STAT_NETFILTER "." RRD_TYPE_NET_STAT_SYNPROXY "_conn_reopened");
103 st = rrdset_create_localhost(RRD_TYPE_NET_STAT_NETFILTER, RRD_TYPE_NET_STAT_SYNPROXY "_conn_reopened", NULL
104 , RRD_TYPE_NET_STAT_SYNPROXY, NULL, "SYNPROXY Connections Reopened"
105 , "connections/s", 3303, update_every, RRDSET_TYPE_LINE);
107 rrddim_add(st, "reopened", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
109 else rrdset_next(st);
111 rrddim_set(st, "reopened", conn_reopened);
115 // --------------------------------------------------------------------
117 if((do_cookies == CONFIG_BOOLEAN_AUTO && events) || do_cookies == CONFIG_BOOLEAN_YES) {
118 do_cookies = CONFIG_BOOLEAN_YES;
120 st = rrdset_find_localhost(RRD_TYPE_NET_STAT_NETFILTER "." RRD_TYPE_NET_STAT_SYNPROXY "_cookies");
122 st = rrdset_create_localhost(RRD_TYPE_NET_STAT_NETFILTER, RRD_TYPE_NET_STAT_SYNPROXY "_cookies", NULL
123 , RRD_TYPE_NET_STAT_SYNPROXY, NULL, "SYNPROXY TCP Cookies", "cookies/s", 3302
124 , update_every, RRDSET_TYPE_LINE);
126 rrddim_add(st, "valid", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
127 rrddim_add(st, "invalid", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
128 rrddim_add(st, "retransmits", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
130 else rrdset_next(st);
132 rrddim_set(st, "valid", cookie_valid);
133 rrddim_set(st, "invalid", cookie_invalid);
134 rrddim_set(st, "retransmits", cookie_retrans);