proc_net_snmp6.c 64 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #include "plugin_proc.h"
  3. #define RRD_TYPE_NET_SNMP6 "ipv6"
  4. #define PLUGIN_PROC_MODULE_NET_SNMP6_NAME "/proc/net/snmp6"
  5. int do_proc_net_snmp6(int update_every, usec_t dt) {
  6. (void)dt;
  7. static procfile *ff = NULL;
  8. static int do_ip_packets = -1,
  9. do_ip_fragsout = -1,
  10. do_ip_fragsin = -1,
  11. do_ip_errors = -1,
  12. do_udplite_packets = -1,
  13. do_udplite_errors = -1,
  14. do_udp_packets = -1,
  15. do_udp_errors = -1,
  16. do_bandwidth = -1,
  17. do_mcast = -1,
  18. do_bcast = -1,
  19. do_mcast_p = -1,
  20. do_icmp = -1,
  21. do_icmp_redir = -1,
  22. do_icmp_errors = -1,
  23. do_icmp_echos = -1,
  24. do_icmp_groupmemb = -1,
  25. do_icmp_router = -1,
  26. do_icmp_neighbor = -1,
  27. do_icmp_mldv2 = -1,
  28. do_icmp_types = -1,
  29. do_ect = -1;
  30. static ARL_BASE *arl_base = NULL;
  31. static unsigned long long Ip6InReceives = 0ULL;
  32. static unsigned long long Ip6InHdrErrors = 0ULL;
  33. static unsigned long long Ip6InTooBigErrors = 0ULL;
  34. static unsigned long long Ip6InNoRoutes = 0ULL;
  35. static unsigned long long Ip6InAddrErrors = 0ULL;
  36. static unsigned long long Ip6InUnknownProtos = 0ULL;
  37. static unsigned long long Ip6InTruncatedPkts = 0ULL;
  38. static unsigned long long Ip6InDiscards = 0ULL;
  39. static unsigned long long Ip6InDelivers = 0ULL;
  40. static unsigned long long Ip6OutForwDatagrams = 0ULL;
  41. static unsigned long long Ip6OutRequests = 0ULL;
  42. static unsigned long long Ip6OutDiscards = 0ULL;
  43. static unsigned long long Ip6OutNoRoutes = 0ULL;
  44. static unsigned long long Ip6ReasmTimeout = 0ULL;
  45. static unsigned long long Ip6ReasmReqds = 0ULL;
  46. static unsigned long long Ip6ReasmOKs = 0ULL;
  47. static unsigned long long Ip6ReasmFails = 0ULL;
  48. static unsigned long long Ip6FragOKs = 0ULL;
  49. static unsigned long long Ip6FragFails = 0ULL;
  50. static unsigned long long Ip6FragCreates = 0ULL;
  51. static unsigned long long Ip6InMcastPkts = 0ULL;
  52. static unsigned long long Ip6OutMcastPkts = 0ULL;
  53. static unsigned long long Ip6InOctets = 0ULL;
  54. static unsigned long long Ip6OutOctets = 0ULL;
  55. static unsigned long long Ip6InMcastOctets = 0ULL;
  56. static unsigned long long Ip6OutMcastOctets = 0ULL;
  57. static unsigned long long Ip6InBcastOctets = 0ULL;
  58. static unsigned long long Ip6OutBcastOctets = 0ULL;
  59. static unsigned long long Ip6InNoECTPkts = 0ULL;
  60. static unsigned long long Ip6InECT1Pkts = 0ULL;
  61. static unsigned long long Ip6InECT0Pkts = 0ULL;
  62. static unsigned long long Ip6InCEPkts = 0ULL;
  63. static unsigned long long Icmp6InMsgs = 0ULL;
  64. static unsigned long long Icmp6InErrors = 0ULL;
  65. static unsigned long long Icmp6OutMsgs = 0ULL;
  66. static unsigned long long Icmp6OutErrors = 0ULL;
  67. static unsigned long long Icmp6InCsumErrors = 0ULL;
  68. static unsigned long long Icmp6InDestUnreachs = 0ULL;
  69. static unsigned long long Icmp6InPktTooBigs = 0ULL;
  70. static unsigned long long Icmp6InTimeExcds = 0ULL;
  71. static unsigned long long Icmp6InParmProblems = 0ULL;
  72. static unsigned long long Icmp6InEchos = 0ULL;
  73. static unsigned long long Icmp6InEchoReplies = 0ULL;
  74. static unsigned long long Icmp6InGroupMembQueries = 0ULL;
  75. static unsigned long long Icmp6InGroupMembResponses = 0ULL;
  76. static unsigned long long Icmp6InGroupMembReductions = 0ULL;
  77. static unsigned long long Icmp6InRouterSolicits = 0ULL;
  78. static unsigned long long Icmp6InRouterAdvertisements = 0ULL;
  79. static unsigned long long Icmp6InNeighborSolicits = 0ULL;
  80. static unsigned long long Icmp6InNeighborAdvertisements = 0ULL;
  81. static unsigned long long Icmp6InRedirects = 0ULL;
  82. static unsigned long long Icmp6InMLDv2Reports = 0ULL;
  83. static unsigned long long Icmp6OutDestUnreachs = 0ULL;
  84. static unsigned long long Icmp6OutPktTooBigs = 0ULL;
  85. static unsigned long long Icmp6OutTimeExcds = 0ULL;
  86. static unsigned long long Icmp6OutParmProblems = 0ULL;
  87. static unsigned long long Icmp6OutEchos = 0ULL;
  88. static unsigned long long Icmp6OutEchoReplies = 0ULL;
  89. static unsigned long long Icmp6OutGroupMembQueries = 0ULL;
  90. static unsigned long long Icmp6OutGroupMembResponses = 0ULL;
  91. static unsigned long long Icmp6OutGroupMembReductions = 0ULL;
  92. static unsigned long long Icmp6OutRouterSolicits = 0ULL;
  93. static unsigned long long Icmp6OutRouterAdvertisements = 0ULL;
  94. static unsigned long long Icmp6OutNeighborSolicits = 0ULL;
  95. static unsigned long long Icmp6OutNeighborAdvertisements = 0ULL;
  96. static unsigned long long Icmp6OutRedirects = 0ULL;
  97. static unsigned long long Icmp6OutMLDv2Reports = 0ULL;
  98. static unsigned long long Icmp6InType1 = 0ULL;
  99. static unsigned long long Icmp6InType128 = 0ULL;
  100. static unsigned long long Icmp6InType129 = 0ULL;
  101. static unsigned long long Icmp6InType136 = 0ULL;
  102. static unsigned long long Icmp6OutType1 = 0ULL;
  103. static unsigned long long Icmp6OutType128 = 0ULL;
  104. static unsigned long long Icmp6OutType129 = 0ULL;
  105. static unsigned long long Icmp6OutType133 = 0ULL;
  106. static unsigned long long Icmp6OutType135 = 0ULL;
  107. static unsigned long long Icmp6OutType143 = 0ULL;
  108. static unsigned long long Udp6InDatagrams = 0ULL;
  109. static unsigned long long Udp6NoPorts = 0ULL;
  110. static unsigned long long Udp6InErrors = 0ULL;
  111. static unsigned long long Udp6OutDatagrams = 0ULL;
  112. static unsigned long long Udp6RcvbufErrors = 0ULL;
  113. static unsigned long long Udp6SndbufErrors = 0ULL;
  114. static unsigned long long Udp6InCsumErrors = 0ULL;
  115. static unsigned long long Udp6IgnoredMulti = 0ULL;
  116. static unsigned long long UdpLite6InDatagrams = 0ULL;
  117. static unsigned long long UdpLite6NoPorts = 0ULL;
  118. static unsigned long long UdpLite6InErrors = 0ULL;
  119. static unsigned long long UdpLite6OutDatagrams = 0ULL;
  120. static unsigned long long UdpLite6RcvbufErrors = 0ULL;
  121. static unsigned long long UdpLite6SndbufErrors = 0ULL;
  122. static unsigned long long UdpLite6InCsumErrors = 0ULL;
  123. if(unlikely(!arl_base)) {
  124. do_ip_packets = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "ipv6 packets", CONFIG_BOOLEAN_AUTO);
  125. do_ip_fragsout = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "ipv6 fragments sent", CONFIG_BOOLEAN_AUTO);
  126. do_ip_fragsin = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "ipv6 fragments assembly", CONFIG_BOOLEAN_AUTO);
  127. do_ip_errors = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "ipv6 errors", CONFIG_BOOLEAN_AUTO);
  128. do_udp_packets = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "ipv6 UDP packets", CONFIG_BOOLEAN_AUTO);
  129. do_udp_errors = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "ipv6 UDP errors", CONFIG_BOOLEAN_AUTO);
  130. do_udplite_packets = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "ipv6 UDPlite packets", CONFIG_BOOLEAN_AUTO);
  131. do_udplite_errors = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "ipv6 UDPlite errors", CONFIG_BOOLEAN_AUTO);
  132. do_bandwidth = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "bandwidth", CONFIG_BOOLEAN_AUTO);
  133. do_mcast = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "multicast bandwidth", CONFIG_BOOLEAN_AUTO);
  134. do_bcast = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "broadcast bandwidth", CONFIG_BOOLEAN_AUTO);
  135. do_mcast_p = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "multicast packets", CONFIG_BOOLEAN_AUTO);
  136. do_icmp = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "icmp", CONFIG_BOOLEAN_AUTO);
  137. do_icmp_redir = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "icmp redirects", CONFIG_BOOLEAN_AUTO);
  138. do_icmp_errors = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "icmp errors", CONFIG_BOOLEAN_AUTO);
  139. do_icmp_echos = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "icmp echos", CONFIG_BOOLEAN_AUTO);
  140. do_icmp_groupmemb = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "icmp group membership", CONFIG_BOOLEAN_AUTO);
  141. do_icmp_router = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "icmp router", CONFIG_BOOLEAN_AUTO);
  142. do_icmp_neighbor = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "icmp neighbor", CONFIG_BOOLEAN_AUTO);
  143. do_icmp_mldv2 = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "icmp mldv2", CONFIG_BOOLEAN_AUTO);
  144. do_icmp_types = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "icmp types", CONFIG_BOOLEAN_AUTO);
  145. do_ect = config_get_boolean_ondemand("plugin:proc:/proc/net/snmp6", "ect", CONFIG_BOOLEAN_AUTO);
  146. arl_base = arl_create("snmp6", NULL, 60);
  147. arl_expect(arl_base, "Ip6InReceives", &Ip6InReceives);
  148. arl_expect(arl_base, "Ip6InHdrErrors", &Ip6InHdrErrors);
  149. arl_expect(arl_base, "Ip6InTooBigErrors", &Ip6InTooBigErrors);
  150. arl_expect(arl_base, "Ip6InNoRoutes", &Ip6InNoRoutes);
  151. arl_expect(arl_base, "Ip6InAddrErrors", &Ip6InAddrErrors);
  152. arl_expect(arl_base, "Ip6InUnknownProtos", &Ip6InUnknownProtos);
  153. arl_expect(arl_base, "Ip6InTruncatedPkts", &Ip6InTruncatedPkts);
  154. arl_expect(arl_base, "Ip6InDiscards", &Ip6InDiscards);
  155. arl_expect(arl_base, "Ip6InDelivers", &Ip6InDelivers);
  156. arl_expect(arl_base, "Ip6OutForwDatagrams", &Ip6OutForwDatagrams);
  157. arl_expect(arl_base, "Ip6OutRequests", &Ip6OutRequests);
  158. arl_expect(arl_base, "Ip6OutDiscards", &Ip6OutDiscards);
  159. arl_expect(arl_base, "Ip6OutNoRoutes", &Ip6OutNoRoutes);
  160. arl_expect(arl_base, "Ip6ReasmTimeout", &Ip6ReasmTimeout);
  161. arl_expect(arl_base, "Ip6ReasmReqds", &Ip6ReasmReqds);
  162. arl_expect(arl_base, "Ip6ReasmOKs", &Ip6ReasmOKs);
  163. arl_expect(arl_base, "Ip6ReasmFails", &Ip6ReasmFails);
  164. arl_expect(arl_base, "Ip6FragOKs", &Ip6FragOKs);
  165. arl_expect(arl_base, "Ip6FragFails", &Ip6FragFails);
  166. arl_expect(arl_base, "Ip6FragCreates", &Ip6FragCreates);
  167. arl_expect(arl_base, "Ip6InMcastPkts", &Ip6InMcastPkts);
  168. arl_expect(arl_base, "Ip6OutMcastPkts", &Ip6OutMcastPkts);
  169. arl_expect(arl_base, "Ip6InOctets", &Ip6InOctets);
  170. arl_expect(arl_base, "Ip6OutOctets", &Ip6OutOctets);
  171. arl_expect(arl_base, "Ip6InMcastOctets", &Ip6InMcastOctets);
  172. arl_expect(arl_base, "Ip6OutMcastOctets", &Ip6OutMcastOctets);
  173. arl_expect(arl_base, "Ip6InBcastOctets", &Ip6InBcastOctets);
  174. arl_expect(arl_base, "Ip6OutBcastOctets", &Ip6OutBcastOctets);
  175. arl_expect(arl_base, "Ip6InNoECTPkts", &Ip6InNoECTPkts);
  176. arl_expect(arl_base, "Ip6InECT1Pkts", &Ip6InECT1Pkts);
  177. arl_expect(arl_base, "Ip6InECT0Pkts", &Ip6InECT0Pkts);
  178. arl_expect(arl_base, "Ip6InCEPkts", &Ip6InCEPkts);
  179. arl_expect(arl_base, "Icmp6InMsgs", &Icmp6InMsgs);
  180. arl_expect(arl_base, "Icmp6InErrors", &Icmp6InErrors);
  181. arl_expect(arl_base, "Icmp6OutMsgs", &Icmp6OutMsgs);
  182. arl_expect(arl_base, "Icmp6OutErrors", &Icmp6OutErrors);
  183. arl_expect(arl_base, "Icmp6InCsumErrors", &Icmp6InCsumErrors);
  184. arl_expect(arl_base, "Icmp6InDestUnreachs", &Icmp6InDestUnreachs);
  185. arl_expect(arl_base, "Icmp6InPktTooBigs", &Icmp6InPktTooBigs);
  186. arl_expect(arl_base, "Icmp6InTimeExcds", &Icmp6InTimeExcds);
  187. arl_expect(arl_base, "Icmp6InParmProblems", &Icmp6InParmProblems);
  188. arl_expect(arl_base, "Icmp6InEchos", &Icmp6InEchos);
  189. arl_expect(arl_base, "Icmp6InEchoReplies", &Icmp6InEchoReplies);
  190. arl_expect(arl_base, "Icmp6InGroupMembQueries", &Icmp6InGroupMembQueries);
  191. arl_expect(arl_base, "Icmp6InGroupMembResponses", &Icmp6InGroupMembResponses);
  192. arl_expect(arl_base, "Icmp6InGroupMembReductions", &Icmp6InGroupMembReductions);
  193. arl_expect(arl_base, "Icmp6InRouterSolicits", &Icmp6InRouterSolicits);
  194. arl_expect(arl_base, "Icmp6InRouterAdvertisements", &Icmp6InRouterAdvertisements);
  195. arl_expect(arl_base, "Icmp6InNeighborSolicits", &Icmp6InNeighborSolicits);
  196. arl_expect(arl_base, "Icmp6InNeighborAdvertisements", &Icmp6InNeighborAdvertisements);
  197. arl_expect(arl_base, "Icmp6InRedirects", &Icmp6InRedirects);
  198. arl_expect(arl_base, "Icmp6InMLDv2Reports", &Icmp6InMLDv2Reports);
  199. arl_expect(arl_base, "Icmp6OutDestUnreachs", &Icmp6OutDestUnreachs);
  200. arl_expect(arl_base, "Icmp6OutPktTooBigs", &Icmp6OutPktTooBigs);
  201. arl_expect(arl_base, "Icmp6OutTimeExcds", &Icmp6OutTimeExcds);
  202. arl_expect(arl_base, "Icmp6OutParmProblems", &Icmp6OutParmProblems);
  203. arl_expect(arl_base, "Icmp6OutEchos", &Icmp6OutEchos);
  204. arl_expect(arl_base, "Icmp6OutEchoReplies", &Icmp6OutEchoReplies);
  205. arl_expect(arl_base, "Icmp6OutGroupMembQueries", &Icmp6OutGroupMembQueries);
  206. arl_expect(arl_base, "Icmp6OutGroupMembResponses", &Icmp6OutGroupMembResponses);
  207. arl_expect(arl_base, "Icmp6OutGroupMembReductions", &Icmp6OutGroupMembReductions);
  208. arl_expect(arl_base, "Icmp6OutRouterSolicits", &Icmp6OutRouterSolicits);
  209. arl_expect(arl_base, "Icmp6OutRouterAdvertisements", &Icmp6OutRouterAdvertisements);
  210. arl_expect(arl_base, "Icmp6OutNeighborSolicits", &Icmp6OutNeighborSolicits);
  211. arl_expect(arl_base, "Icmp6OutNeighborAdvertisements", &Icmp6OutNeighborAdvertisements);
  212. arl_expect(arl_base, "Icmp6OutRedirects", &Icmp6OutRedirects);
  213. arl_expect(arl_base, "Icmp6OutMLDv2Reports", &Icmp6OutMLDv2Reports);
  214. arl_expect(arl_base, "Icmp6InType1", &Icmp6InType1);
  215. arl_expect(arl_base, "Icmp6InType128", &Icmp6InType128);
  216. arl_expect(arl_base, "Icmp6InType129", &Icmp6InType129);
  217. arl_expect(arl_base, "Icmp6InType136", &Icmp6InType136);
  218. arl_expect(arl_base, "Icmp6OutType1", &Icmp6OutType1);
  219. arl_expect(arl_base, "Icmp6OutType128", &Icmp6OutType128);
  220. arl_expect(arl_base, "Icmp6OutType129", &Icmp6OutType129);
  221. arl_expect(arl_base, "Icmp6OutType133", &Icmp6OutType133);
  222. arl_expect(arl_base, "Icmp6OutType135", &Icmp6OutType135);
  223. arl_expect(arl_base, "Icmp6OutType143", &Icmp6OutType143);
  224. arl_expect(arl_base, "Udp6InDatagrams", &Udp6InDatagrams);
  225. arl_expect(arl_base, "Udp6NoPorts", &Udp6NoPorts);
  226. arl_expect(arl_base, "Udp6InErrors", &Udp6InErrors);
  227. arl_expect(arl_base, "Udp6OutDatagrams", &Udp6OutDatagrams);
  228. arl_expect(arl_base, "Udp6RcvbufErrors", &Udp6RcvbufErrors);
  229. arl_expect(arl_base, "Udp6SndbufErrors", &Udp6SndbufErrors);
  230. arl_expect(arl_base, "Udp6InCsumErrors", &Udp6InCsumErrors);
  231. arl_expect(arl_base, "Udp6IgnoredMulti", &Udp6IgnoredMulti);
  232. arl_expect(arl_base, "UdpLite6InDatagrams", &UdpLite6InDatagrams);
  233. arl_expect(arl_base, "UdpLite6NoPorts", &UdpLite6NoPorts);
  234. arl_expect(arl_base, "UdpLite6InErrors", &UdpLite6InErrors);
  235. arl_expect(arl_base, "UdpLite6OutDatagrams", &UdpLite6OutDatagrams);
  236. arl_expect(arl_base, "UdpLite6RcvbufErrors", &UdpLite6RcvbufErrors);
  237. arl_expect(arl_base, "UdpLite6SndbufErrors", &UdpLite6SndbufErrors);
  238. arl_expect(arl_base, "UdpLite6InCsumErrors", &UdpLite6InCsumErrors);
  239. }
  240. if(unlikely(!ff)) {
  241. char filename[FILENAME_MAX + 1];
  242. snprintfz(filename, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/proc/net/snmp6");
  243. ff = procfile_open(config_get("plugin:proc:/proc/net/snmp6", "filename to monitor", filename), " \t:", PROCFILE_FLAG_DEFAULT);
  244. if(unlikely(!ff))
  245. return 1;
  246. }
  247. ff = procfile_readall(ff);
  248. if(unlikely(!ff))
  249. return 0; // we return 0, so that we will retry to open it next time
  250. size_t lines = procfile_lines(ff), l;
  251. arl_begin(arl_base);
  252. for(l = 0; l < lines ;l++) {
  253. size_t words = procfile_linewords(ff, l);
  254. if(unlikely(words < 2)) {
  255. if(unlikely(words)) error("Cannot read /proc/net/snmp6 line %zu. Expected 2 params, read %zu.", l, words);
  256. continue;
  257. }
  258. if(unlikely(arl_check(arl_base,
  259. procfile_lineword(ff, l, 0),
  260. procfile_lineword(ff, l, 1)))) break;
  261. }
  262. // --------------------------------------------------------------------
  263. if(do_bandwidth == CONFIG_BOOLEAN_YES || (do_bandwidth == CONFIG_BOOLEAN_AUTO &&
  264. (Ip6InOctets ||
  265. Ip6OutOctets ||
  266. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  267. do_bandwidth = CONFIG_BOOLEAN_YES;
  268. static RRDSET *st = NULL;
  269. static RRDDIM *rd_received = NULL,
  270. *rd_sent = NULL;
  271. if(unlikely(!st)) {
  272. st = rrdset_create_localhost(
  273. "system"
  274. , "ipv6"
  275. , NULL
  276. , "network"
  277. , NULL
  278. , "IPv6 Bandwidth"
  279. , "kilobits/s"
  280. , PLUGIN_PROC_NAME
  281. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  282. , NETDATA_CHART_PRIO_SYSTEM_IPV6
  283. , update_every
  284. , RRDSET_TYPE_AREA
  285. );
  286. rd_received = rrddim_add(st, "InOctets", "received", 8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  287. rd_sent = rrddim_add(st, "OutOctets", "sent", -8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  288. }
  289. else rrdset_next(st);
  290. rrddim_set_by_pointer(st, rd_received, Ip6InOctets);
  291. rrddim_set_by_pointer(st, rd_sent, Ip6OutOctets);
  292. rrdset_done(st);
  293. }
  294. // --------------------------------------------------------------------
  295. if(do_ip_packets == CONFIG_BOOLEAN_YES || (do_ip_packets == CONFIG_BOOLEAN_AUTO &&
  296. (Ip6InReceives ||
  297. Ip6OutRequests ||
  298. Ip6InDelivers ||
  299. Ip6OutForwDatagrams ||
  300. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  301. do_ip_packets = CONFIG_BOOLEAN_YES;
  302. static RRDSET *st = NULL;
  303. static RRDDIM *rd_received = NULL,
  304. *rd_sent = NULL,
  305. *rd_forwarded = NULL,
  306. *rd_delivers = NULL;
  307. if(unlikely(!st)) {
  308. st = rrdset_create_localhost(
  309. RRD_TYPE_NET_SNMP6
  310. , "packets"
  311. , NULL
  312. , "packets"
  313. , NULL
  314. , "IPv6 Packets"
  315. , "packets/s"
  316. , PLUGIN_PROC_NAME
  317. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  318. , NETDATA_CHART_PRIO_IPV6_PACKETS
  319. , update_every
  320. , RRDSET_TYPE_LINE
  321. );
  322. rd_received = rrddim_add(st, "InReceives", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  323. rd_sent = rrddim_add(st, "OutRequests", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  324. rd_forwarded = rrddim_add(st, "OutForwDatagrams", "forwarded", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  325. rd_delivers = rrddim_add(st, "InDelivers", "delivers", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  326. }
  327. else rrdset_next(st);
  328. rrddim_set_by_pointer(st, rd_received, Ip6InReceives);
  329. rrddim_set_by_pointer(st, rd_sent, Ip6OutRequests);
  330. rrddim_set_by_pointer(st, rd_forwarded, Ip6OutForwDatagrams);
  331. rrddim_set_by_pointer(st, rd_delivers, Ip6InDelivers);
  332. rrdset_done(st);
  333. }
  334. // --------------------------------------------------------------------
  335. if(do_ip_fragsout == CONFIG_BOOLEAN_YES || (do_ip_fragsout == CONFIG_BOOLEAN_AUTO &&
  336. (Ip6FragOKs ||
  337. Ip6FragFails ||
  338. Ip6FragCreates ||
  339. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  340. do_ip_fragsout = CONFIG_BOOLEAN_YES;
  341. static RRDSET *st = NULL;
  342. static RRDDIM *rd_ok = NULL,
  343. *rd_failed = NULL,
  344. *rd_all = NULL;
  345. if(unlikely(!st)) {
  346. st = rrdset_create_localhost(
  347. RRD_TYPE_NET_SNMP6
  348. , "fragsout"
  349. , NULL
  350. , "fragments6"
  351. , NULL
  352. , "IPv6 Fragments Sent"
  353. , "packets/s"
  354. , PLUGIN_PROC_NAME
  355. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  356. , NETDATA_CHART_PRIO_IPV6_FRAGSOUT
  357. , update_every
  358. , RRDSET_TYPE_LINE
  359. );
  360. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  361. rd_ok = rrddim_add(st, "FragOKs", "ok", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  362. rd_failed = rrddim_add(st, "FragFails", "failed", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  363. rd_all = rrddim_add(st, "FragCreates", "all", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  364. }
  365. else rrdset_next(st);
  366. rrddim_set_by_pointer(st, rd_ok, Ip6FragOKs);
  367. rrddim_set_by_pointer(st, rd_failed, Ip6FragFails);
  368. rrddim_set_by_pointer(st, rd_all, Ip6FragCreates);
  369. rrdset_done(st);
  370. }
  371. // --------------------------------------------------------------------
  372. if(do_ip_fragsin == CONFIG_BOOLEAN_YES || (do_ip_fragsin == CONFIG_BOOLEAN_AUTO &&
  373. (Ip6ReasmOKs ||
  374. Ip6ReasmFails ||
  375. Ip6ReasmTimeout ||
  376. Ip6ReasmReqds ||
  377. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  378. do_ip_fragsin = CONFIG_BOOLEAN_YES;
  379. static RRDSET *st = NULL;
  380. static RRDDIM *rd_ok = NULL,
  381. *rd_failed = NULL,
  382. *rd_timeout = NULL,
  383. *rd_all = NULL;
  384. if(unlikely(!st)) {
  385. st = rrdset_create_localhost(
  386. RRD_TYPE_NET_SNMP6
  387. , "fragsin"
  388. , NULL
  389. , "fragments6"
  390. , NULL
  391. , "IPv6 Fragments Reassembly"
  392. , "packets/s"
  393. , PLUGIN_PROC_NAME
  394. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  395. , NETDATA_CHART_PRIO_IPV6_FRAGSIN
  396. , update_every
  397. , RRDSET_TYPE_LINE);
  398. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  399. rd_ok = rrddim_add(st, "ReasmOKs", "ok", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  400. rd_failed = rrddim_add(st, "ReasmFails", "failed", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  401. rd_timeout = rrddim_add(st, "ReasmTimeout", "timeout", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  402. rd_all = rrddim_add(st, "ReasmReqds", "all", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  403. }
  404. else rrdset_next(st);
  405. rrddim_set_by_pointer(st, rd_ok, Ip6ReasmOKs);
  406. rrddim_set_by_pointer(st, rd_failed, Ip6ReasmFails);
  407. rrddim_set_by_pointer(st, rd_timeout, Ip6ReasmTimeout);
  408. rrddim_set_by_pointer(st, rd_all, Ip6ReasmReqds);
  409. rrdset_done(st);
  410. }
  411. // --------------------------------------------------------------------
  412. if(do_ip_errors == CONFIG_BOOLEAN_YES || (do_ip_errors == CONFIG_BOOLEAN_AUTO &&
  413. (Ip6InDiscards ||
  414. Ip6OutDiscards ||
  415. Ip6InHdrErrors ||
  416. Ip6InAddrErrors ||
  417. Ip6InUnknownProtos ||
  418. Ip6InTooBigErrors ||
  419. Ip6InTruncatedPkts ||
  420. Ip6InNoRoutes ||
  421. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  422. do_ip_errors = CONFIG_BOOLEAN_YES;
  423. static RRDSET *st = NULL;
  424. static RRDDIM *rd_InDiscards = NULL,
  425. *rd_OutDiscards = NULL,
  426. *rd_InHdrErrors = NULL,
  427. *rd_InAddrErrors = NULL,
  428. *rd_InUnknownProtos = NULL,
  429. *rd_InTooBigErrors = NULL,
  430. *rd_InTruncatedPkts = NULL,
  431. *rd_InNoRoutes = NULL,
  432. *rd_OutNoRoutes = NULL;
  433. if(unlikely(!st)) {
  434. st = rrdset_create_localhost(
  435. RRD_TYPE_NET_SNMP6
  436. , "errors"
  437. , NULL
  438. , "errors"
  439. , NULL
  440. , "IPv6 Errors"
  441. , "packets/s"
  442. , PLUGIN_PROC_NAME
  443. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  444. , NETDATA_CHART_PRIO_IPV6_ERRORS
  445. , update_every
  446. , RRDSET_TYPE_LINE
  447. );
  448. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  449. rd_InDiscards = rrddim_add(st, "InDiscards", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  450. rd_OutDiscards = rrddim_add(st, "OutDiscards", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  451. rd_InHdrErrors = rrddim_add(st, "InHdrErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  452. rd_InAddrErrors = rrddim_add(st, "InAddrErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  453. rd_InUnknownProtos = rrddim_add(st, "InUnknownProtos", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  454. rd_InTooBigErrors = rrddim_add(st, "InTooBigErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  455. rd_InTruncatedPkts = rrddim_add(st, "InTruncatedPkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  456. rd_InNoRoutes = rrddim_add(st, "InNoRoutes", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  457. rd_OutNoRoutes = rrddim_add(st, "OutNoRoutes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  458. }
  459. else rrdset_next(st);
  460. rrddim_set_by_pointer(st, rd_InDiscards, Ip6InDiscards);
  461. rrddim_set_by_pointer(st, rd_OutDiscards, Ip6OutDiscards);
  462. rrddim_set_by_pointer(st, rd_InHdrErrors, Ip6InHdrErrors);
  463. rrddim_set_by_pointer(st, rd_InAddrErrors, Ip6InAddrErrors);
  464. rrddim_set_by_pointer(st, rd_InUnknownProtos, Ip6InUnknownProtos);
  465. rrddim_set_by_pointer(st, rd_InTooBigErrors, Ip6InTooBigErrors);
  466. rrddim_set_by_pointer(st, rd_InTruncatedPkts, Ip6InTruncatedPkts);
  467. rrddim_set_by_pointer(st, rd_InNoRoutes, Ip6InNoRoutes);
  468. rrddim_set_by_pointer(st, rd_OutNoRoutes, Ip6OutNoRoutes);
  469. rrdset_done(st);
  470. }
  471. // --------------------------------------------------------------------
  472. if(do_udp_packets == CONFIG_BOOLEAN_YES || (do_udp_packets == CONFIG_BOOLEAN_AUTO &&
  473. (Udp6InDatagrams ||
  474. Udp6OutDatagrams ||
  475. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  476. do_udp_packets = CONFIG_BOOLEAN_YES;
  477. static RRDSET *st = NULL;
  478. static RRDDIM *rd_received = NULL,
  479. *rd_sent = NULL;
  480. if(unlikely(!st)) {
  481. st = rrdset_create_localhost(
  482. RRD_TYPE_NET_SNMP6
  483. , "udppackets"
  484. , NULL
  485. , "udp6"
  486. , NULL
  487. , "IPv6 UDP Packets"
  488. , "packets/s"
  489. , PLUGIN_PROC_NAME
  490. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  491. , NETDATA_CHART_PRIO_IPV6_UDP_PACKETS
  492. , update_every
  493. , RRDSET_TYPE_LINE
  494. );
  495. rd_received = rrddim_add(st, "InDatagrams", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  496. rd_sent = rrddim_add(st, "OutDatagrams", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  497. }
  498. else rrdset_next(st);
  499. rrddim_set_by_pointer(st, rd_received, Udp6InDatagrams);
  500. rrddim_set_by_pointer(st, rd_sent, Udp6OutDatagrams);
  501. rrdset_done(st);
  502. }
  503. // --------------------------------------------------------------------
  504. if(do_udp_errors == CONFIG_BOOLEAN_YES || (do_udp_errors == CONFIG_BOOLEAN_AUTO &&
  505. (Udp6InErrors ||
  506. Udp6NoPorts ||
  507. Udp6RcvbufErrors ||
  508. Udp6SndbufErrors ||
  509. Udp6InCsumErrors ||
  510. Udp6IgnoredMulti ||
  511. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  512. do_udp_errors = CONFIG_BOOLEAN_YES;
  513. static RRDSET *st = NULL;
  514. static RRDDIM *rd_RcvbufErrors = NULL,
  515. *rd_SndbufErrors = NULL,
  516. *rd_InErrors = NULL,
  517. *rd_NoPorts = NULL,
  518. *rd_InCsumErrors = NULL,
  519. *rd_IgnoredMulti = NULL;
  520. if(unlikely(!st)) {
  521. st = rrdset_create_localhost(
  522. RRD_TYPE_NET_SNMP6
  523. , "udperrors"
  524. , NULL
  525. , "udp6"
  526. , NULL
  527. , "IPv6 UDP Errors"
  528. , "events/s"
  529. , PLUGIN_PROC_NAME
  530. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  531. , NETDATA_CHART_PRIO_IPV6_UDP_ERRORS
  532. , update_every
  533. , RRDSET_TYPE_LINE
  534. );
  535. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  536. rd_RcvbufErrors = rrddim_add(st, "RcvbufErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  537. rd_SndbufErrors = rrddim_add(st, "SndbufErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  538. rd_InErrors = rrddim_add(st, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  539. rd_NoPorts = rrddim_add(st, "NoPorts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  540. rd_InCsumErrors = rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  541. rd_IgnoredMulti = rrddim_add(st, "IgnoredMulti", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  542. }
  543. else rrdset_next(st);
  544. rrddim_set_by_pointer(st, rd_RcvbufErrors, Udp6RcvbufErrors);
  545. rrddim_set_by_pointer(st, rd_SndbufErrors, Udp6SndbufErrors);
  546. rrddim_set_by_pointer(st, rd_InErrors, Udp6InErrors);
  547. rrddim_set_by_pointer(st, rd_NoPorts, Udp6NoPorts);
  548. rrddim_set_by_pointer(st, rd_InCsumErrors, Udp6InCsumErrors);
  549. rrddim_set_by_pointer(st, rd_IgnoredMulti, Udp6IgnoredMulti);
  550. rrdset_done(st);
  551. }
  552. // --------------------------------------------------------------------
  553. if(do_udplite_packets == CONFIG_BOOLEAN_YES || (do_udplite_packets == CONFIG_BOOLEAN_AUTO &&
  554. (UdpLite6InDatagrams ||
  555. UdpLite6OutDatagrams ||
  556. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  557. do_udplite_packets = CONFIG_BOOLEAN_YES;
  558. static RRDSET *st = NULL;
  559. static RRDDIM *rd_received = NULL,
  560. *rd_sent = NULL;
  561. if(unlikely(!st)) {
  562. st = rrdset_create_localhost(
  563. RRD_TYPE_NET_SNMP6
  564. , "udplitepackets"
  565. , NULL
  566. , "udplite6"
  567. , NULL
  568. , "IPv6 UDPlite Packets"
  569. , "packets/s"
  570. , PLUGIN_PROC_NAME
  571. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  572. , NETDATA_CHART_PRIO_IPV6_UDPLITE_PACKETS
  573. , update_every
  574. , RRDSET_TYPE_LINE
  575. );
  576. rd_received = rrddim_add(st, "InDatagrams", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  577. rd_sent = rrddim_add(st, "OutDatagrams", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  578. }
  579. else rrdset_next(st);
  580. rrddim_set_by_pointer(st, rd_received, UdpLite6InDatagrams);
  581. rrddim_set_by_pointer(st, rd_sent, UdpLite6OutDatagrams);
  582. rrdset_done(st);
  583. }
  584. // --------------------------------------------------------------------
  585. if(do_udplite_errors == CONFIG_BOOLEAN_YES || (do_udplite_errors == CONFIG_BOOLEAN_AUTO &&
  586. (UdpLite6InErrors ||
  587. UdpLite6NoPorts ||
  588. UdpLite6RcvbufErrors ||
  589. UdpLite6SndbufErrors ||
  590. Udp6InCsumErrors ||
  591. UdpLite6InCsumErrors ||
  592. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  593. do_udplite_errors = CONFIG_BOOLEAN_YES;
  594. static RRDSET *st = NULL;
  595. static RRDDIM *rd_RcvbufErrors = NULL,
  596. *rd_SndbufErrors = NULL,
  597. *rd_InErrors = NULL,
  598. *rd_NoPorts = NULL,
  599. *rd_InCsumErrors = NULL;
  600. if(unlikely(!st)) {
  601. st = rrdset_create_localhost(
  602. RRD_TYPE_NET_SNMP6
  603. , "udpliteerrors"
  604. , NULL
  605. , "udplite6"
  606. , NULL
  607. , "IPv6 UDP Lite Errors"
  608. , "events/s"
  609. , PLUGIN_PROC_NAME
  610. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  611. , NETDATA_CHART_PRIO_IPV6_UDPLITE_ERRORS
  612. , update_every
  613. , RRDSET_TYPE_LINE
  614. );
  615. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  616. rd_RcvbufErrors = rrddim_add(st, "RcvbufErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  617. rd_SndbufErrors = rrddim_add(st, "SndbufErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  618. rd_InErrors = rrddim_add(st, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  619. rd_NoPorts = rrddim_add(st, "NoPorts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  620. rd_InCsumErrors = rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  621. }
  622. else rrdset_next(st);
  623. rrddim_set_by_pointer(st, rd_InErrors, UdpLite6InErrors);
  624. rrddim_set_by_pointer(st, rd_NoPorts, UdpLite6NoPorts);
  625. rrddim_set_by_pointer(st, rd_RcvbufErrors, UdpLite6RcvbufErrors);
  626. rrddim_set_by_pointer(st, rd_SndbufErrors, UdpLite6SndbufErrors);
  627. rrddim_set_by_pointer(st, rd_InCsumErrors, UdpLite6InCsumErrors);
  628. rrdset_done(st);
  629. }
  630. // --------------------------------------------------------------------
  631. if(do_mcast == CONFIG_BOOLEAN_YES || (do_mcast == CONFIG_BOOLEAN_AUTO &&
  632. (Ip6OutMcastOctets ||
  633. Ip6InMcastOctets ||
  634. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  635. do_mcast = CONFIG_BOOLEAN_YES;
  636. static RRDSET *st = NULL;
  637. static RRDDIM *rd_Ip6InMcastOctets = NULL,
  638. *rd_Ip6OutMcastOctets = NULL;
  639. if(unlikely(!st)) {
  640. st = rrdset_create_localhost(
  641. RRD_TYPE_NET_SNMP6
  642. , "mcast"
  643. , NULL
  644. , "multicast6"
  645. , NULL
  646. , "IPv6 Multicast Bandwidth"
  647. , "kilobits/s"
  648. , PLUGIN_PROC_NAME
  649. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  650. , NETDATA_CHART_PRIO_IPV6_MCAST
  651. , update_every
  652. , RRDSET_TYPE_AREA
  653. );
  654. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  655. rd_Ip6InMcastOctets = rrddim_add(st, "InMcastOctets", "received", 8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  656. rd_Ip6OutMcastOctets = rrddim_add(st, "OutMcastOctets", "sent", -8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  657. }
  658. else rrdset_next(st);
  659. rrddim_set_by_pointer(st, rd_Ip6InMcastOctets, Ip6InMcastOctets);
  660. rrddim_set_by_pointer(st, rd_Ip6OutMcastOctets, Ip6OutMcastOctets);
  661. rrdset_done(st);
  662. }
  663. // --------------------------------------------------------------------
  664. if(do_bcast == CONFIG_BOOLEAN_YES || (do_bcast == CONFIG_BOOLEAN_AUTO &&
  665. (Ip6OutBcastOctets ||
  666. Ip6InBcastOctets ||
  667. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  668. do_bcast = CONFIG_BOOLEAN_YES;
  669. static RRDSET *st = NULL;
  670. static RRDDIM *rd_Ip6InBcastOctets = NULL,
  671. *rd_Ip6OutBcastOctets = NULL;
  672. if(unlikely(!st)) {
  673. st = rrdset_create_localhost(
  674. RRD_TYPE_NET_SNMP6
  675. , "bcast"
  676. , NULL
  677. , "broadcast6"
  678. , NULL
  679. , "IPv6 Broadcast Bandwidth"
  680. , "kilobits/s"
  681. , PLUGIN_PROC_NAME
  682. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  683. , NETDATA_CHART_PRIO_IPV6_BCAST
  684. , update_every
  685. , RRDSET_TYPE_AREA
  686. );
  687. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  688. rd_Ip6InBcastOctets = rrddim_add(st, "InBcastOctets", "received", 8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  689. rd_Ip6OutBcastOctets = rrddim_add(st, "OutBcastOctets", "sent", -8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  690. }
  691. else rrdset_next(st);
  692. rrddim_set_by_pointer(st, rd_Ip6InBcastOctets, Ip6InBcastOctets);
  693. rrddim_set_by_pointer(st, rd_Ip6OutBcastOctets, Ip6OutBcastOctets);
  694. rrdset_done(st);
  695. }
  696. // --------------------------------------------------------------------
  697. if(do_mcast_p == CONFIG_BOOLEAN_YES || (do_mcast_p == CONFIG_BOOLEAN_AUTO &&
  698. (Ip6OutMcastPkts ||
  699. Ip6InMcastPkts ||
  700. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  701. do_mcast_p = CONFIG_BOOLEAN_YES;
  702. static RRDSET *st = NULL;
  703. static RRDDIM *rd_Ip6InMcastPkts = NULL,
  704. *rd_Ip6OutMcastPkts = NULL;
  705. if(unlikely(!st)) {
  706. st = rrdset_create_localhost(
  707. RRD_TYPE_NET_SNMP6
  708. , "mcastpkts"
  709. , NULL
  710. , "multicast6"
  711. , NULL
  712. , "IPv6 Multicast Packets"
  713. , "packets/s"
  714. , PLUGIN_PROC_NAME
  715. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  716. , NETDATA_CHART_PRIO_IPV6_MCAST_PACKETS
  717. , update_every
  718. , RRDSET_TYPE_LINE
  719. );
  720. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  721. rd_Ip6InMcastPkts = rrddim_add(st, "InMcastPkts", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  722. rd_Ip6OutMcastPkts = rrddim_add(st, "OutMcastPkts", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  723. }
  724. else rrdset_next(st);
  725. rrddim_set_by_pointer(st, rd_Ip6InMcastPkts, Ip6InMcastPkts);
  726. rrddim_set_by_pointer(st, rd_Ip6OutMcastPkts, Ip6OutMcastPkts);
  727. rrdset_done(st);
  728. }
  729. // --------------------------------------------------------------------
  730. if(do_icmp == CONFIG_BOOLEAN_YES || (do_icmp == CONFIG_BOOLEAN_AUTO &&
  731. (Icmp6InMsgs ||
  732. Icmp6OutMsgs ||
  733. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  734. do_icmp = CONFIG_BOOLEAN_YES;
  735. static RRDSET *st = NULL;
  736. static RRDDIM *rd_Icmp6InMsgs = NULL,
  737. *rd_Icmp6OutMsgs = NULL;
  738. if(unlikely(!st)) {
  739. st = rrdset_create_localhost(
  740. RRD_TYPE_NET_SNMP6
  741. , "icmp"
  742. , NULL
  743. , "icmp6"
  744. , NULL
  745. , "IPv6 ICMP Messages"
  746. , "messages/s"
  747. , PLUGIN_PROC_NAME
  748. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  749. , NETDATA_CHART_PRIO_IPV6_ICMP
  750. , update_every
  751. , RRDSET_TYPE_LINE
  752. );
  753. rd_Icmp6InMsgs = rrddim_add(st, "InMsgs", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  754. rd_Icmp6OutMsgs = rrddim_add(st, "OutMsgs", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  755. }
  756. else rrdset_next(st);
  757. rrddim_set_by_pointer(st, rd_Icmp6InMsgs, Icmp6InMsgs);
  758. rrddim_set_by_pointer(st, rd_Icmp6OutMsgs, Icmp6OutMsgs);
  759. rrdset_done(st);
  760. }
  761. // --------------------------------------------------------------------
  762. if(do_icmp_redir == CONFIG_BOOLEAN_YES || (do_icmp_redir == CONFIG_BOOLEAN_AUTO &&
  763. (Icmp6InRedirects ||
  764. Icmp6OutRedirects ||
  765. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  766. do_icmp_redir = CONFIG_BOOLEAN_YES;
  767. static RRDSET *st = NULL;
  768. static RRDDIM *rd_Icmp6InRedirects = NULL,
  769. *rd_Icmp6OutRedirects = NULL;
  770. if(unlikely(!st)) {
  771. st = rrdset_create_localhost(
  772. RRD_TYPE_NET_SNMP6
  773. , "icmpredir"
  774. , NULL
  775. , "icmp6"
  776. , NULL
  777. , "IPv6 ICMP Redirects"
  778. , "redirects/s"
  779. , PLUGIN_PROC_NAME
  780. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  781. , NETDATA_CHART_PRIO_IPV6_ICMP_REDIR
  782. , update_every
  783. , RRDSET_TYPE_LINE
  784. );
  785. rd_Icmp6InRedirects = rrddim_add(st, "InRedirects", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  786. rd_Icmp6OutRedirects = rrddim_add(st, "OutRedirects", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  787. }
  788. else rrdset_next(st);
  789. rrddim_set_by_pointer(st, rd_Icmp6InRedirects, Icmp6InRedirects);
  790. rrddim_set_by_pointer(st, rd_Icmp6OutRedirects, Icmp6OutRedirects);
  791. rrdset_done(st);
  792. }
  793. // --------------------------------------------------------------------
  794. if(do_icmp_errors == CONFIG_BOOLEAN_YES || (do_icmp_errors == CONFIG_BOOLEAN_AUTO &&
  795. (Icmp6InErrors ||
  796. Icmp6OutErrors ||
  797. Icmp6InCsumErrors ||
  798. Icmp6InDestUnreachs ||
  799. Icmp6InPktTooBigs ||
  800. Icmp6InTimeExcds ||
  801. Icmp6InParmProblems ||
  802. Icmp6OutDestUnreachs ||
  803. Icmp6OutPktTooBigs ||
  804. Icmp6OutTimeExcds ||
  805. Icmp6OutParmProblems ||
  806. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  807. do_icmp_errors = CONFIG_BOOLEAN_YES;
  808. static RRDSET *st = NULL;
  809. static RRDDIM *rd_InErrors = NULL,
  810. *rd_OutErrors = NULL,
  811. *rd_InCsumErrors = NULL,
  812. *rd_InDestUnreachs = NULL,
  813. *rd_InPktTooBigs = NULL,
  814. *rd_InTimeExcds = NULL,
  815. *rd_InParmProblems = NULL,
  816. *rd_OutDestUnreachs = NULL,
  817. *rd_OutPktTooBigs = NULL,
  818. *rd_OutTimeExcds = NULL,
  819. *rd_OutParmProblems = NULL;
  820. if(unlikely(!st)) {
  821. st = rrdset_create_localhost(
  822. RRD_TYPE_NET_SNMP6
  823. , "icmperrors"
  824. , NULL
  825. , "icmp6"
  826. , NULL
  827. , "IPv6 ICMP Errors"
  828. , "errors/s"
  829. , PLUGIN_PROC_NAME
  830. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  831. , NETDATA_CHART_PRIO_IPV6_ICMP_ERRORS
  832. , update_every
  833. , RRDSET_TYPE_LINE
  834. );
  835. rd_InErrors = rrddim_add(st, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  836. rd_OutErrors = rrddim_add(st, "OutErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  837. rd_InCsumErrors = rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  838. rd_InDestUnreachs = rrddim_add(st, "InDestUnreachs", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  839. rd_InPktTooBigs = rrddim_add(st, "InPktTooBigs", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  840. rd_InTimeExcds = rrddim_add(st, "InTimeExcds", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  841. rd_InParmProblems = rrddim_add(st, "InParmProblems", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  842. rd_OutDestUnreachs = rrddim_add(st, "OutDestUnreachs", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  843. rd_OutPktTooBigs = rrddim_add(st, "OutPktTooBigs", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  844. rd_OutTimeExcds = rrddim_add(st, "OutTimeExcds", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  845. rd_OutParmProblems = rrddim_add(st, "OutParmProblems", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  846. }
  847. else rrdset_next(st);
  848. rrddim_set_by_pointer(st, rd_InErrors, Icmp6InErrors);
  849. rrddim_set_by_pointer(st, rd_OutErrors, Icmp6OutErrors);
  850. rrddim_set_by_pointer(st, rd_InCsumErrors, Icmp6InCsumErrors);
  851. rrddim_set_by_pointer(st, rd_InDestUnreachs, Icmp6InDestUnreachs);
  852. rrddim_set_by_pointer(st, rd_InPktTooBigs, Icmp6InPktTooBigs);
  853. rrddim_set_by_pointer(st, rd_InTimeExcds, Icmp6InTimeExcds);
  854. rrddim_set_by_pointer(st, rd_InParmProblems, Icmp6InParmProblems);
  855. rrddim_set_by_pointer(st, rd_OutDestUnreachs, Icmp6OutDestUnreachs);
  856. rrddim_set_by_pointer(st, rd_OutPktTooBigs, Icmp6OutPktTooBigs);
  857. rrddim_set_by_pointer(st, rd_OutTimeExcds, Icmp6OutTimeExcds);
  858. rrddim_set_by_pointer(st, rd_OutParmProblems, Icmp6OutParmProblems);
  859. rrdset_done(st);
  860. }
  861. // --------------------------------------------------------------------
  862. if(do_icmp_echos == CONFIG_BOOLEAN_YES || (do_icmp_echos == CONFIG_BOOLEAN_AUTO &&
  863. (Icmp6InEchos ||
  864. Icmp6OutEchos ||
  865. Icmp6InEchoReplies ||
  866. Icmp6OutEchoReplies ||
  867. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  868. do_icmp_echos = CONFIG_BOOLEAN_YES;
  869. static RRDSET *st = NULL;
  870. static RRDDIM *rd_InEchos = NULL,
  871. *rd_OutEchos = NULL,
  872. *rd_InEchoReplies = NULL,
  873. *rd_OutEchoReplies = NULL;
  874. if(unlikely(!st)) {
  875. st = rrdset_create_localhost(
  876. RRD_TYPE_NET_SNMP6
  877. , "icmpechos"
  878. , NULL
  879. , "icmp6"
  880. , NULL
  881. , "IPv6 ICMP Echo"
  882. , "messages/s"
  883. , PLUGIN_PROC_NAME
  884. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  885. , NETDATA_CHART_PRIO_IPV6_ICMP_ECHOS
  886. , update_every
  887. , RRDSET_TYPE_LINE
  888. );
  889. rd_InEchos = rrddim_add(st, "InEchos", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  890. rd_OutEchos = rrddim_add(st, "OutEchos", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  891. rd_InEchoReplies = rrddim_add(st, "InEchoReplies", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  892. rd_OutEchoReplies = rrddim_add(st, "OutEchoReplies", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  893. }
  894. else rrdset_next(st);
  895. rrddim_set_by_pointer(st, rd_InEchos, Icmp6InEchos);
  896. rrddim_set_by_pointer(st, rd_OutEchos, Icmp6OutEchos);
  897. rrddim_set_by_pointer(st, rd_InEchoReplies, Icmp6InEchoReplies);
  898. rrddim_set_by_pointer(st, rd_OutEchoReplies, Icmp6OutEchoReplies);
  899. rrdset_done(st);
  900. }
  901. // --------------------------------------------------------------------
  902. if(do_icmp_groupmemb == CONFIG_BOOLEAN_YES || (do_icmp_groupmemb == CONFIG_BOOLEAN_AUTO &&
  903. (Icmp6InGroupMembQueries ||
  904. Icmp6OutGroupMembQueries ||
  905. Icmp6InGroupMembResponses ||
  906. Icmp6OutGroupMembResponses ||
  907. Icmp6InGroupMembReductions ||
  908. Icmp6OutGroupMembReductions ||
  909. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  910. do_icmp_groupmemb = CONFIG_BOOLEAN_YES;
  911. static RRDSET *st = NULL;
  912. static RRDDIM *rd_InQueries = NULL,
  913. *rd_OutQueries = NULL,
  914. *rd_InResponses = NULL,
  915. *rd_OutResponses = NULL,
  916. *rd_InReductions = NULL,
  917. *rd_OutReductions = NULL;
  918. if(unlikely(!st)) {
  919. st = rrdset_create_localhost(
  920. RRD_TYPE_NET_SNMP6
  921. , "groupmemb"
  922. , NULL
  923. , "icmp6"
  924. , NULL
  925. , "IPv6 ICMP Group Membership"
  926. , "messages/s"
  927. , PLUGIN_PROC_NAME
  928. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  929. , NETDATA_CHART_PRIO_IPV6_ICMP_GROUPMEMB
  930. , update_every
  931. , RRDSET_TYPE_LINE);
  932. rd_InQueries = rrddim_add(st, "InQueries", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  933. rd_OutQueries = rrddim_add(st, "OutQueries", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  934. rd_InResponses = rrddim_add(st, "InResponses", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  935. rd_OutResponses = rrddim_add(st, "OutResponses", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  936. rd_InReductions = rrddim_add(st, "InReductions", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  937. rd_OutReductions = rrddim_add(st, "OutReductions", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  938. }
  939. else rrdset_next(st);
  940. rrddim_set_by_pointer(st, rd_InQueries, Icmp6InGroupMembQueries);
  941. rrddim_set_by_pointer(st, rd_OutQueries, Icmp6OutGroupMembQueries);
  942. rrddim_set_by_pointer(st, rd_InResponses, Icmp6InGroupMembResponses);
  943. rrddim_set_by_pointer(st, rd_OutResponses, Icmp6OutGroupMembResponses);
  944. rrddim_set_by_pointer(st, rd_InReductions, Icmp6InGroupMembReductions);
  945. rrddim_set_by_pointer(st, rd_OutReductions, Icmp6OutGroupMembReductions);
  946. rrdset_done(st);
  947. }
  948. // --------------------------------------------------------------------
  949. if(do_icmp_router == CONFIG_BOOLEAN_YES || (do_icmp_router == CONFIG_BOOLEAN_AUTO &&
  950. (Icmp6InRouterSolicits ||
  951. Icmp6OutRouterSolicits ||
  952. Icmp6InRouterAdvertisements ||
  953. Icmp6OutRouterAdvertisements ||
  954. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  955. do_icmp_router = CONFIG_BOOLEAN_YES;
  956. static RRDSET *st = NULL;
  957. static RRDDIM *rd_InSolicits = NULL,
  958. *rd_OutSolicits = NULL,
  959. *rd_InAdvertisements = NULL,
  960. *rd_OutAdvertisements = NULL;
  961. if(unlikely(!st)) {
  962. st = rrdset_create_localhost(
  963. RRD_TYPE_NET_SNMP6
  964. , "icmprouter"
  965. , NULL
  966. , "icmp6"
  967. , NULL
  968. , "IPv6 Router Messages"
  969. , "messages/s"
  970. , PLUGIN_PROC_NAME
  971. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  972. , NETDATA_CHART_PRIO_IPV6_ICMP_ROUTER
  973. , update_every
  974. , RRDSET_TYPE_LINE
  975. );
  976. rd_InSolicits = rrddim_add(st, "InSolicits", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  977. rd_OutSolicits = rrddim_add(st, "OutSolicits", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  978. rd_InAdvertisements = rrddim_add(st, "InAdvertisements", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  979. rd_OutAdvertisements = rrddim_add(st, "OutAdvertisements", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  980. }
  981. else rrdset_next(st);
  982. rrddim_set_by_pointer(st, rd_InSolicits, Icmp6InRouterSolicits);
  983. rrddim_set_by_pointer(st, rd_OutSolicits, Icmp6OutRouterSolicits);
  984. rrddim_set_by_pointer(st, rd_InAdvertisements, Icmp6InRouterAdvertisements);
  985. rrddim_set_by_pointer(st, rd_OutAdvertisements, Icmp6OutRouterAdvertisements);
  986. rrdset_done(st);
  987. }
  988. // --------------------------------------------------------------------
  989. if(do_icmp_neighbor == CONFIG_BOOLEAN_YES || (do_icmp_neighbor == CONFIG_BOOLEAN_AUTO &&
  990. (Icmp6InNeighborSolicits ||
  991. Icmp6OutNeighborSolicits ||
  992. Icmp6InNeighborAdvertisements ||
  993. Icmp6OutNeighborAdvertisements ||
  994. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  995. do_icmp_neighbor = CONFIG_BOOLEAN_YES;
  996. static RRDSET *st = NULL;
  997. static RRDDIM *rd_InSolicits = NULL,
  998. *rd_OutSolicits = NULL,
  999. *rd_InAdvertisements = NULL,
  1000. *rd_OutAdvertisements = NULL;
  1001. if(unlikely(!st)) {
  1002. st = rrdset_create_localhost(
  1003. RRD_TYPE_NET_SNMP6
  1004. , "icmpneighbor"
  1005. , NULL
  1006. , "icmp6"
  1007. , NULL
  1008. , "IPv6 Neighbor Messages"
  1009. , "messages/s"
  1010. , PLUGIN_PROC_NAME
  1011. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  1012. , NETDATA_CHART_PRIO_IPV6_ICMP_NEIGHBOR
  1013. , update_every
  1014. , RRDSET_TYPE_LINE
  1015. );
  1016. rd_InSolicits = rrddim_add(st, "InSolicits", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1017. rd_OutSolicits = rrddim_add(st, "OutSolicits", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1018. rd_InAdvertisements = rrddim_add(st, "InAdvertisements", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1019. rd_OutAdvertisements = rrddim_add(st, "OutAdvertisements", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1020. }
  1021. else rrdset_next(st);
  1022. rrddim_set_by_pointer(st, rd_InSolicits, Icmp6InNeighborSolicits);
  1023. rrddim_set_by_pointer(st, rd_OutSolicits, Icmp6OutNeighborSolicits);
  1024. rrddim_set_by_pointer(st, rd_InAdvertisements, Icmp6InNeighborAdvertisements);
  1025. rrddim_set_by_pointer(st, rd_OutAdvertisements, Icmp6OutNeighborAdvertisements);
  1026. rrdset_done(st);
  1027. }
  1028. // --------------------------------------------------------------------
  1029. if(do_icmp_mldv2 == CONFIG_BOOLEAN_YES || (do_icmp_mldv2 == CONFIG_BOOLEAN_AUTO &&
  1030. (Icmp6InMLDv2Reports ||
  1031. Icmp6OutMLDv2Reports ||
  1032. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  1033. do_icmp_mldv2 = CONFIG_BOOLEAN_YES;
  1034. static RRDSET *st = NULL;
  1035. static RRDDIM *rd_InMLDv2Reports = NULL,
  1036. *rd_OutMLDv2Reports = NULL;
  1037. if(unlikely(!st)) {
  1038. st = rrdset_create_localhost(
  1039. RRD_TYPE_NET_SNMP6
  1040. , "icmpmldv2"
  1041. , NULL
  1042. , "icmp6"
  1043. , NULL
  1044. , "IPv6 ICMP MLDv2 Reports"
  1045. , "reports/s"
  1046. , PLUGIN_PROC_NAME
  1047. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  1048. , NETDATA_CHART_PRIO_IPV6_ICMP_LDV2
  1049. , update_every
  1050. , RRDSET_TYPE_LINE
  1051. );
  1052. rd_InMLDv2Reports = rrddim_add(st, "InMLDv2Reports", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1053. rd_OutMLDv2Reports = rrddim_add(st, "OutMLDv2Reports", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1054. }
  1055. else rrdset_next(st);
  1056. rrddim_set_by_pointer(st, rd_InMLDv2Reports, Icmp6InMLDv2Reports);
  1057. rrddim_set_by_pointer(st, rd_OutMLDv2Reports, Icmp6OutMLDv2Reports);
  1058. rrdset_done(st);
  1059. }
  1060. // --------------------------------------------------------------------
  1061. if(do_icmp_types == CONFIG_BOOLEAN_YES || (do_icmp_types == CONFIG_BOOLEAN_AUTO &&
  1062. (Icmp6InType1 ||
  1063. Icmp6InType128 ||
  1064. Icmp6InType129 ||
  1065. Icmp6InType136 ||
  1066. Icmp6OutType1 ||
  1067. Icmp6OutType128 ||
  1068. Icmp6OutType129 ||
  1069. Icmp6OutType133 ||
  1070. Icmp6OutType135 ||
  1071. Icmp6OutType143 ||
  1072. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  1073. do_icmp_types = CONFIG_BOOLEAN_YES;
  1074. static RRDSET *st = NULL;
  1075. static RRDDIM *rd_InType1 = NULL,
  1076. *rd_InType128 = NULL,
  1077. *rd_InType129 = NULL,
  1078. *rd_InType136 = NULL,
  1079. *rd_OutType1 = NULL,
  1080. *rd_OutType128 = NULL,
  1081. *rd_OutType129 = NULL,
  1082. *rd_OutType133 = NULL,
  1083. *rd_OutType135 = NULL,
  1084. *rd_OutType143 = NULL;
  1085. if(unlikely(!st)) {
  1086. st = rrdset_create_localhost(
  1087. RRD_TYPE_NET_SNMP6
  1088. , "icmptypes"
  1089. , NULL
  1090. , "icmp6"
  1091. , NULL
  1092. , "IPv6 ICMP Types"
  1093. , "messages/s"
  1094. , PLUGIN_PROC_NAME
  1095. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  1096. , NETDATA_CHART_PRIO_IPV6_ICMP_TYPES
  1097. , update_every
  1098. , RRDSET_TYPE_LINE
  1099. );
  1100. rd_InType1 = rrddim_add(st, "InType1", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1101. rd_InType128 = rrddim_add(st, "InType128", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1102. rd_InType129 = rrddim_add(st, "InType129", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1103. rd_InType136 = rrddim_add(st, "InType136", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1104. rd_OutType1 = rrddim_add(st, "OutType1", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1105. rd_OutType128 = rrddim_add(st, "OutType128", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1106. rd_OutType129 = rrddim_add(st, "OutType129", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1107. rd_OutType133 = rrddim_add(st, "OutType133", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1108. rd_OutType135 = rrddim_add(st, "OutType135", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1109. rd_OutType143 = rrddim_add(st, "OutType143", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1110. }
  1111. else rrdset_next(st);
  1112. rrddim_set_by_pointer(st, rd_InType1, Icmp6InType1);
  1113. rrddim_set_by_pointer(st, rd_InType128, Icmp6InType128);
  1114. rrddim_set_by_pointer(st, rd_InType129, Icmp6InType129);
  1115. rrddim_set_by_pointer(st, rd_InType136, Icmp6InType136);
  1116. rrddim_set_by_pointer(st, rd_OutType1, Icmp6OutType1);
  1117. rrddim_set_by_pointer(st, rd_OutType128, Icmp6OutType128);
  1118. rrddim_set_by_pointer(st, rd_OutType129, Icmp6OutType129);
  1119. rrddim_set_by_pointer(st, rd_OutType133, Icmp6OutType133);
  1120. rrddim_set_by_pointer(st, rd_OutType135, Icmp6OutType135);
  1121. rrddim_set_by_pointer(st, rd_OutType143, Icmp6OutType143);
  1122. rrdset_done(st);
  1123. }
  1124. // --------------------------------------------------------------------
  1125. if(do_ect == CONFIG_BOOLEAN_YES || (do_ect == CONFIG_BOOLEAN_AUTO &&
  1126. (Ip6InNoECTPkts ||
  1127. Ip6InECT1Pkts ||
  1128. Ip6InECT0Pkts ||
  1129. Ip6InCEPkts ||
  1130. netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
  1131. do_ect = CONFIG_BOOLEAN_YES;
  1132. static RRDSET *st = NULL;
  1133. static RRDDIM *rd_InNoECTPkts = NULL,
  1134. *rd_InECT1Pkts = NULL,
  1135. *rd_InECT0Pkts = NULL,
  1136. *rd_InCEPkts = NULL;
  1137. if(unlikely(!st)) {
  1138. st = rrdset_create_localhost(
  1139. RRD_TYPE_NET_SNMP6
  1140. , "ect"
  1141. , NULL
  1142. , "packets"
  1143. , NULL
  1144. , "IPv6 ECT Packets"
  1145. , "packets/s"
  1146. , PLUGIN_PROC_NAME
  1147. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  1148. , NETDATA_CHART_PRIO_IPV6_ECT
  1149. , update_every
  1150. , RRDSET_TYPE_LINE
  1151. );
  1152. rd_InNoECTPkts = rrddim_add(st, "InNoECTPkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1153. rd_InECT1Pkts = rrddim_add(st, "InECT1Pkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1154. rd_InECT0Pkts = rrddim_add(st, "InECT0Pkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1155. rd_InCEPkts = rrddim_add(st, "InCEPkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1156. }
  1157. else rrdset_next(st);
  1158. rrddim_set_by_pointer(st, rd_InNoECTPkts, Ip6InNoECTPkts);
  1159. rrddim_set_by_pointer(st, rd_InECT1Pkts, Ip6InECT1Pkts);
  1160. rrddim_set_by_pointer(st, rd_InECT0Pkts, Ip6InECT0Pkts);
  1161. rrddim_set_by_pointer(st, rd_InCEPkts, Ip6InCEPkts);
  1162. rrdset_done(st);
  1163. }
  1164. return 0;
  1165. }