proc_net_snmp6.c 58 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268
  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 && (Ip6InOctets || Ip6OutOctets))) {
  264. do_bandwidth = CONFIG_BOOLEAN_YES;
  265. static RRDSET *st = NULL;
  266. static RRDDIM *rd_received = NULL,
  267. *rd_sent = NULL;
  268. if(unlikely(!st)) {
  269. st = rrdset_create_localhost(
  270. "system"
  271. , "ipv6"
  272. , NULL
  273. , "network"
  274. , NULL
  275. , "IPv6 Bandwidth"
  276. , "kilobits/s"
  277. , PLUGIN_PROC_NAME
  278. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  279. , NETDATA_CHART_PRIO_SYSTEM_IPV6
  280. , update_every
  281. , RRDSET_TYPE_AREA
  282. );
  283. rd_received = rrddim_add(st, "InOctets", "received", 8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  284. rd_sent = rrddim_add(st, "OutOctets", "sent", -8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  285. }
  286. else rrdset_next(st);
  287. rrddim_set_by_pointer(st, rd_received, Ip6InOctets);
  288. rrddim_set_by_pointer(st, rd_sent, Ip6OutOctets);
  289. rrdset_done(st);
  290. }
  291. // --------------------------------------------------------------------
  292. if(do_ip_packets == CONFIG_BOOLEAN_YES || (do_ip_packets == CONFIG_BOOLEAN_AUTO && (Ip6InReceives || Ip6OutRequests || Ip6InDelivers || Ip6OutForwDatagrams))) {
  293. do_ip_packets = CONFIG_BOOLEAN_YES;
  294. static RRDSET *st = NULL;
  295. static RRDDIM *rd_received = NULL,
  296. *rd_sent = NULL,
  297. *rd_forwarded = NULL,
  298. *rd_delivers = NULL;
  299. if(unlikely(!st)) {
  300. st = rrdset_create_localhost(
  301. RRD_TYPE_NET_SNMP6
  302. , "packets"
  303. , NULL
  304. , "packets"
  305. , NULL
  306. , "IPv6 Packets"
  307. , "packets/s"
  308. , PLUGIN_PROC_NAME
  309. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  310. , NETDATA_CHART_PRIO_IPV6_PACKETS
  311. , update_every
  312. , RRDSET_TYPE_LINE
  313. );
  314. rd_received = rrddim_add(st, "InReceives", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  315. rd_sent = rrddim_add(st, "OutRequests", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  316. rd_forwarded = rrddim_add(st, "OutForwDatagrams", "forwarded", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  317. rd_delivers = rrddim_add(st, "InDelivers", "delivers", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  318. }
  319. else rrdset_next(st);
  320. rrddim_set_by_pointer(st, rd_received, Ip6InReceives);
  321. rrddim_set_by_pointer(st, rd_sent, Ip6OutRequests);
  322. rrddim_set_by_pointer(st, rd_forwarded, Ip6OutForwDatagrams);
  323. rrddim_set_by_pointer(st, rd_delivers, Ip6InDelivers);
  324. rrdset_done(st);
  325. }
  326. // --------------------------------------------------------------------
  327. if(do_ip_fragsout == CONFIG_BOOLEAN_YES || (do_ip_fragsout == CONFIG_BOOLEAN_AUTO && (Ip6FragOKs || Ip6FragFails || Ip6FragCreates))) {
  328. do_ip_fragsout = CONFIG_BOOLEAN_YES;
  329. static RRDSET *st = NULL;
  330. static RRDDIM *rd_ok = NULL,
  331. *rd_failed = NULL,
  332. *rd_all = NULL;
  333. if(unlikely(!st)) {
  334. st = rrdset_create_localhost(
  335. RRD_TYPE_NET_SNMP6
  336. , "fragsout"
  337. , NULL
  338. , "fragments6"
  339. , NULL
  340. , "IPv6 Fragments Sent"
  341. , "packets/s"
  342. , PLUGIN_PROC_NAME
  343. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  344. , NETDATA_CHART_PRIO_IPV6_FRAGSOUT
  345. , update_every
  346. , RRDSET_TYPE_LINE
  347. );
  348. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  349. rd_ok = rrddim_add(st, "FragOKs", "ok", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  350. rd_failed = rrddim_add(st, "FragFails", "failed", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  351. rd_all = rrddim_add(st, "FragCreates", "all", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  352. }
  353. else rrdset_next(st);
  354. rrddim_set_by_pointer(st, rd_ok, Ip6FragOKs);
  355. rrddim_set_by_pointer(st, rd_failed, Ip6FragFails);
  356. rrddim_set_by_pointer(st, rd_all, Ip6FragCreates);
  357. rrdset_done(st);
  358. }
  359. // --------------------------------------------------------------------
  360. if(do_ip_fragsin == CONFIG_BOOLEAN_YES || (do_ip_fragsin == CONFIG_BOOLEAN_AUTO
  361. && (
  362. Ip6ReasmOKs
  363. || Ip6ReasmFails
  364. || Ip6ReasmTimeout
  365. || Ip6ReasmReqds
  366. ))) {
  367. do_ip_fragsin = CONFIG_BOOLEAN_YES;
  368. static RRDSET *st = NULL;
  369. static RRDDIM *rd_ok = NULL,
  370. *rd_failed = NULL,
  371. *rd_timeout = NULL,
  372. *rd_all = NULL;
  373. if(unlikely(!st)) {
  374. st = rrdset_create_localhost(
  375. RRD_TYPE_NET_SNMP6
  376. , "fragsin"
  377. , NULL
  378. , "fragments6"
  379. , NULL
  380. , "IPv6 Fragments Reassembly"
  381. , "packets/s"
  382. , PLUGIN_PROC_NAME
  383. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  384. , NETDATA_CHART_PRIO_IPV6_FRAGSIN
  385. , update_every
  386. , RRDSET_TYPE_LINE);
  387. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  388. rd_ok = rrddim_add(st, "ReasmOKs", "ok", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  389. rd_failed = rrddim_add(st, "ReasmFails", "failed", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  390. rd_timeout = rrddim_add(st, "ReasmTimeout", "timeout", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  391. rd_all = rrddim_add(st, "ReasmReqds", "all", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  392. }
  393. else rrdset_next(st);
  394. rrddim_set_by_pointer(st, rd_ok, Ip6ReasmOKs);
  395. rrddim_set_by_pointer(st, rd_failed, Ip6ReasmFails);
  396. rrddim_set_by_pointer(st, rd_timeout, Ip6ReasmTimeout);
  397. rrddim_set_by_pointer(st, rd_all, Ip6ReasmReqds);
  398. rrdset_done(st);
  399. }
  400. // --------------------------------------------------------------------
  401. if(do_ip_errors == CONFIG_BOOLEAN_YES || (do_ip_errors == CONFIG_BOOLEAN_AUTO
  402. && (
  403. Ip6InDiscards
  404. || Ip6OutDiscards
  405. || Ip6InHdrErrors
  406. || Ip6InAddrErrors
  407. || Ip6InUnknownProtos
  408. || Ip6InTooBigErrors
  409. || Ip6InTruncatedPkts
  410. || Ip6InNoRoutes
  411. ))) {
  412. do_ip_errors = CONFIG_BOOLEAN_YES;
  413. static RRDSET *st = NULL;
  414. static RRDDIM *rd_InDiscards = NULL,
  415. *rd_OutDiscards = NULL,
  416. *rd_InHdrErrors = NULL,
  417. *rd_InAddrErrors = NULL,
  418. *rd_InUnknownProtos = NULL,
  419. *rd_InTooBigErrors = NULL,
  420. *rd_InTruncatedPkts = NULL,
  421. *rd_InNoRoutes = NULL,
  422. *rd_OutNoRoutes = NULL;
  423. if(unlikely(!st)) {
  424. st = rrdset_create_localhost(
  425. RRD_TYPE_NET_SNMP6
  426. , "errors"
  427. , NULL
  428. , "errors"
  429. , NULL
  430. , "IPv6 Errors"
  431. , "packets/s"
  432. , PLUGIN_PROC_NAME
  433. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  434. , NETDATA_CHART_PRIO_IPV6_ERRORS
  435. , update_every
  436. , RRDSET_TYPE_LINE
  437. );
  438. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  439. rd_InDiscards = rrddim_add(st, "InDiscards", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  440. rd_OutDiscards = rrddim_add(st, "OutDiscards", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  441. rd_InHdrErrors = rrddim_add(st, "InHdrErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  442. rd_InAddrErrors = rrddim_add(st, "InAddrErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  443. rd_InUnknownProtos = rrddim_add(st, "InUnknownProtos", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  444. rd_InTooBigErrors = rrddim_add(st, "InTooBigErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  445. rd_InTruncatedPkts = rrddim_add(st, "InTruncatedPkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  446. rd_InNoRoutes = rrddim_add(st, "InNoRoutes", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  447. rd_OutNoRoutes = rrddim_add(st, "OutNoRoutes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  448. }
  449. else rrdset_next(st);
  450. rrddim_set_by_pointer(st, rd_InDiscards, Ip6InDiscards);
  451. rrddim_set_by_pointer(st, rd_OutDiscards, Ip6OutDiscards);
  452. rrddim_set_by_pointer(st, rd_InHdrErrors, Ip6InHdrErrors);
  453. rrddim_set_by_pointer(st, rd_InAddrErrors, Ip6InAddrErrors);
  454. rrddim_set_by_pointer(st, rd_InUnknownProtos, Ip6InUnknownProtos);
  455. rrddim_set_by_pointer(st, rd_InTooBigErrors, Ip6InTooBigErrors);
  456. rrddim_set_by_pointer(st, rd_InTruncatedPkts, Ip6InTruncatedPkts);
  457. rrddim_set_by_pointer(st, rd_InNoRoutes, Ip6InNoRoutes);
  458. rrddim_set_by_pointer(st, rd_OutNoRoutes, Ip6OutNoRoutes);
  459. rrdset_done(st);
  460. }
  461. // --------------------------------------------------------------------
  462. if(do_udp_packets == CONFIG_BOOLEAN_YES || (do_udp_packets == CONFIG_BOOLEAN_AUTO && (Udp6InDatagrams || Udp6OutDatagrams))) {
  463. do_udp_packets = CONFIG_BOOLEAN_YES;
  464. static RRDSET *st = NULL;
  465. static RRDDIM *rd_received = NULL,
  466. *rd_sent = NULL;
  467. if(unlikely(!st)) {
  468. st = rrdset_create_localhost(
  469. RRD_TYPE_NET_SNMP6
  470. , "udppackets"
  471. , NULL
  472. , "udp6"
  473. , NULL
  474. , "IPv6 UDP Packets"
  475. , "packets/s"
  476. , PLUGIN_PROC_NAME
  477. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  478. , NETDATA_CHART_PRIO_IPV6_UDP_PACKETS
  479. , update_every
  480. , RRDSET_TYPE_LINE
  481. );
  482. rd_received = rrddim_add(st, "InDatagrams", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  483. rd_sent = rrddim_add(st, "OutDatagrams", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  484. }
  485. else rrdset_next(st);
  486. rrddim_set_by_pointer(st, rd_received, Udp6InDatagrams);
  487. rrddim_set_by_pointer(st, rd_sent, Udp6OutDatagrams);
  488. rrdset_done(st);
  489. }
  490. // --------------------------------------------------------------------
  491. if(do_udp_errors == CONFIG_BOOLEAN_YES || (do_udp_errors == CONFIG_BOOLEAN_AUTO
  492. && (
  493. Udp6InErrors
  494. || Udp6NoPorts
  495. || Udp6RcvbufErrors
  496. || Udp6SndbufErrors
  497. || Udp6InCsumErrors
  498. || Udp6IgnoredMulti
  499. ))) {
  500. do_udp_errors = CONFIG_BOOLEAN_YES;
  501. static RRDSET *st = NULL;
  502. static RRDDIM *rd_RcvbufErrors = NULL,
  503. *rd_SndbufErrors = NULL,
  504. *rd_InErrors = NULL,
  505. *rd_NoPorts = NULL,
  506. *rd_InCsumErrors = NULL,
  507. *rd_IgnoredMulti = NULL;
  508. if(unlikely(!st)) {
  509. st = rrdset_create_localhost(
  510. RRD_TYPE_NET_SNMP6
  511. , "udperrors"
  512. , NULL
  513. , "udp6"
  514. , NULL
  515. , "IPv6 UDP Errors"
  516. , "events/s"
  517. , PLUGIN_PROC_NAME
  518. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  519. , NETDATA_CHART_PRIO_IPV6_UDP_ERRORS
  520. , update_every
  521. , RRDSET_TYPE_LINE
  522. );
  523. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  524. rd_RcvbufErrors = rrddim_add(st, "RcvbufErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  525. rd_SndbufErrors = rrddim_add(st, "SndbufErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  526. rd_InErrors = rrddim_add(st, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  527. rd_NoPorts = rrddim_add(st, "NoPorts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  528. rd_InCsumErrors = rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  529. rd_IgnoredMulti = rrddim_add(st, "IgnoredMulti", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  530. }
  531. else rrdset_next(st);
  532. rrddim_set_by_pointer(st, rd_RcvbufErrors, Udp6RcvbufErrors);
  533. rrddim_set_by_pointer(st, rd_SndbufErrors, Udp6SndbufErrors);
  534. rrddim_set_by_pointer(st, rd_InErrors, Udp6InErrors);
  535. rrddim_set_by_pointer(st, rd_NoPorts, Udp6NoPorts);
  536. rrddim_set_by_pointer(st, rd_InCsumErrors, Udp6InCsumErrors);
  537. rrddim_set_by_pointer(st, rd_IgnoredMulti, Udp6IgnoredMulti);
  538. rrdset_done(st);
  539. }
  540. // --------------------------------------------------------------------
  541. if(do_udplite_packets == CONFIG_BOOLEAN_YES || (do_udplite_packets == CONFIG_BOOLEAN_AUTO && (UdpLite6InDatagrams || UdpLite6OutDatagrams))) {
  542. do_udplite_packets = CONFIG_BOOLEAN_YES;
  543. static RRDSET *st = NULL;
  544. static RRDDIM *rd_received = NULL,
  545. *rd_sent = NULL;
  546. if(unlikely(!st)) {
  547. st = rrdset_create_localhost(
  548. RRD_TYPE_NET_SNMP6
  549. , "udplitepackets"
  550. , NULL
  551. , "udplite6"
  552. , NULL
  553. , "IPv6 UDPlite Packets"
  554. , "packets/s"
  555. , PLUGIN_PROC_NAME
  556. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  557. , NETDATA_CHART_PRIO_IPV6_UDPLITE_PACKETS
  558. , update_every
  559. , RRDSET_TYPE_LINE
  560. );
  561. rd_received = rrddim_add(st, "InDatagrams", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  562. rd_sent = rrddim_add(st, "OutDatagrams", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  563. }
  564. else rrdset_next(st);
  565. rrddim_set_by_pointer(st, rd_received, UdpLite6InDatagrams);
  566. rrddim_set_by_pointer(st, rd_sent, UdpLite6OutDatagrams);
  567. rrdset_done(st);
  568. }
  569. // --------------------------------------------------------------------
  570. if(do_udplite_errors == CONFIG_BOOLEAN_YES || (do_udplite_errors == CONFIG_BOOLEAN_AUTO
  571. && (
  572. UdpLite6InErrors
  573. || UdpLite6NoPorts
  574. || UdpLite6RcvbufErrors
  575. || UdpLite6SndbufErrors
  576. || Udp6InCsumErrors
  577. || UdpLite6InCsumErrors
  578. ))) {
  579. do_udplite_errors = CONFIG_BOOLEAN_YES;
  580. static RRDSET *st = NULL;
  581. static RRDDIM *rd_RcvbufErrors = NULL,
  582. *rd_SndbufErrors = NULL,
  583. *rd_InErrors = NULL,
  584. *rd_NoPorts = NULL,
  585. *rd_InCsumErrors = NULL;
  586. if(unlikely(!st)) {
  587. st = rrdset_create_localhost(
  588. RRD_TYPE_NET_SNMP6
  589. , "udpliteerrors"
  590. , NULL
  591. , "udplite6"
  592. , NULL
  593. , "IPv6 UDP Lite Errors"
  594. , "events/s"
  595. , PLUGIN_PROC_NAME
  596. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  597. , NETDATA_CHART_PRIO_IPV6_UDPLITE_ERRORS
  598. , update_every
  599. , RRDSET_TYPE_LINE
  600. );
  601. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  602. rd_RcvbufErrors = rrddim_add(st, "RcvbufErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  603. rd_SndbufErrors = rrddim_add(st, "SndbufErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  604. rd_InErrors = rrddim_add(st, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  605. rd_NoPorts = rrddim_add(st, "NoPorts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  606. rd_InCsumErrors = rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  607. }
  608. else rrdset_next(st);
  609. rrddim_set_by_pointer(st, rd_InErrors, UdpLite6InErrors);
  610. rrddim_set_by_pointer(st, rd_NoPorts, UdpLite6NoPorts);
  611. rrddim_set_by_pointer(st, rd_RcvbufErrors, UdpLite6RcvbufErrors);
  612. rrddim_set_by_pointer(st, rd_SndbufErrors, UdpLite6SndbufErrors);
  613. rrddim_set_by_pointer(st, rd_InCsumErrors, UdpLite6InCsumErrors);
  614. rrdset_done(st);
  615. }
  616. // --------------------------------------------------------------------
  617. if(do_mcast == CONFIG_BOOLEAN_YES || (do_mcast == CONFIG_BOOLEAN_AUTO && (Ip6OutMcastOctets || Ip6InMcastOctets))) {
  618. do_mcast = CONFIG_BOOLEAN_YES;
  619. static RRDSET *st = NULL;
  620. static RRDDIM *rd_Ip6InMcastOctets = NULL,
  621. *rd_Ip6OutMcastOctets = NULL;
  622. if(unlikely(!st)) {
  623. st = rrdset_create_localhost(
  624. RRD_TYPE_NET_SNMP6
  625. , "mcast"
  626. , NULL
  627. , "multicast6"
  628. , NULL
  629. , "IPv6 Multicast Bandwidth"
  630. , "kilobits/s"
  631. , PLUGIN_PROC_NAME
  632. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  633. , NETDATA_CHART_PRIO_IPV6_MCAST
  634. , update_every
  635. , RRDSET_TYPE_AREA
  636. );
  637. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  638. rd_Ip6InMcastOctets = rrddim_add(st, "InMcastOctets", "received", 8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  639. rd_Ip6OutMcastOctets = rrddim_add(st, "OutMcastOctets", "sent", -8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  640. }
  641. else rrdset_next(st);
  642. rrddim_set_by_pointer(st, rd_Ip6InMcastOctets, Ip6InMcastOctets);
  643. rrddim_set_by_pointer(st, rd_Ip6OutMcastOctets, Ip6OutMcastOctets);
  644. rrdset_done(st);
  645. }
  646. // --------------------------------------------------------------------
  647. if(do_bcast == CONFIG_BOOLEAN_YES || (do_bcast == CONFIG_BOOLEAN_AUTO && (Ip6OutBcastOctets || Ip6InBcastOctets))) {
  648. do_bcast = CONFIG_BOOLEAN_YES;
  649. static RRDSET *st = NULL;
  650. static RRDDIM *rd_Ip6InBcastOctets = NULL,
  651. *rd_Ip6OutBcastOctets = NULL;
  652. if(unlikely(!st)) {
  653. st = rrdset_create_localhost(
  654. RRD_TYPE_NET_SNMP6
  655. , "bcast"
  656. , NULL
  657. , "broadcast6"
  658. , NULL
  659. , "IPv6 Broadcast Bandwidth"
  660. , "kilobits/s"
  661. , PLUGIN_PROC_NAME
  662. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  663. , NETDATA_CHART_PRIO_IPV6_BCAST
  664. , update_every
  665. , RRDSET_TYPE_AREA
  666. );
  667. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  668. rd_Ip6InBcastOctets = rrddim_add(st, "InBcastOctets", "received", 8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  669. rd_Ip6OutBcastOctets = rrddim_add(st, "OutBcastOctets", "sent", -8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
  670. }
  671. else rrdset_next(st);
  672. rrddim_set_by_pointer(st, rd_Ip6InBcastOctets, Ip6InBcastOctets);
  673. rrddim_set_by_pointer(st, rd_Ip6OutBcastOctets, Ip6OutBcastOctets);
  674. rrdset_done(st);
  675. }
  676. // --------------------------------------------------------------------
  677. if(do_mcast_p == CONFIG_BOOLEAN_YES || (do_mcast_p == CONFIG_BOOLEAN_AUTO && (Ip6OutMcastPkts || Ip6InMcastPkts))) {
  678. do_mcast_p = CONFIG_BOOLEAN_YES;
  679. static RRDSET *st = NULL;
  680. static RRDDIM *rd_Ip6InMcastPkts = NULL,
  681. *rd_Ip6OutMcastPkts = NULL;
  682. if(unlikely(!st)) {
  683. st = rrdset_create_localhost(
  684. RRD_TYPE_NET_SNMP6
  685. , "mcastpkts"
  686. , NULL
  687. , "multicast6"
  688. , NULL
  689. , "IPv6 Multicast Packets"
  690. , "packets/s"
  691. , PLUGIN_PROC_NAME
  692. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  693. , NETDATA_CHART_PRIO_IPV6_MCAST_PACKETS
  694. , update_every
  695. , RRDSET_TYPE_LINE
  696. );
  697. rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
  698. rd_Ip6InMcastPkts = rrddim_add(st, "InMcastPkts", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  699. rd_Ip6OutMcastPkts = rrddim_add(st, "OutMcastPkts", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  700. }
  701. else rrdset_next(st);
  702. rrddim_set_by_pointer(st, rd_Ip6InMcastPkts, Ip6InMcastPkts);
  703. rrddim_set_by_pointer(st, rd_Ip6OutMcastPkts, Ip6OutMcastPkts);
  704. rrdset_done(st);
  705. }
  706. // --------------------------------------------------------------------
  707. if(do_icmp == CONFIG_BOOLEAN_YES || (do_icmp == CONFIG_BOOLEAN_AUTO && (Icmp6InMsgs || Icmp6OutMsgs))) {
  708. do_icmp = CONFIG_BOOLEAN_YES;
  709. static RRDSET *st = NULL;
  710. static RRDDIM *rd_Icmp6InMsgs = NULL,
  711. *rd_Icmp6OutMsgs = NULL;
  712. if(unlikely(!st)) {
  713. st = rrdset_create_localhost(
  714. RRD_TYPE_NET_SNMP6
  715. , "icmp"
  716. , NULL
  717. , "icmp6"
  718. , NULL
  719. , "IPv6 ICMP Messages"
  720. , "messages/s"
  721. , PLUGIN_PROC_NAME
  722. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  723. , NETDATA_CHART_PRIO_IPV6_ICMP
  724. , update_every
  725. , RRDSET_TYPE_LINE
  726. );
  727. rd_Icmp6InMsgs = rrddim_add(st, "InMsgs", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  728. rd_Icmp6OutMsgs = rrddim_add(st, "OutMsgs", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  729. }
  730. else rrdset_next(st);
  731. rrddim_set_by_pointer(st, rd_Icmp6InMsgs, Icmp6InMsgs);
  732. rrddim_set_by_pointer(st, rd_Icmp6OutMsgs, Icmp6OutMsgs);
  733. rrdset_done(st);
  734. }
  735. // --------------------------------------------------------------------
  736. if(do_icmp_redir == CONFIG_BOOLEAN_YES || (do_icmp_redir == CONFIG_BOOLEAN_AUTO && (Icmp6InRedirects || Icmp6OutRedirects))) {
  737. do_icmp_redir = CONFIG_BOOLEAN_YES;
  738. static RRDSET *st = NULL;
  739. static RRDDIM *rd_Icmp6InRedirects = NULL,
  740. *rd_Icmp6OutRedirects = NULL;
  741. if(unlikely(!st)) {
  742. st = rrdset_create_localhost(
  743. RRD_TYPE_NET_SNMP6
  744. , "icmpredir"
  745. , NULL
  746. , "icmp6"
  747. , NULL
  748. , "IPv6 ICMP Redirects"
  749. , "redirects/s"
  750. , PLUGIN_PROC_NAME
  751. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  752. , NETDATA_CHART_PRIO_IPV6_ICMP_REDIR
  753. , update_every
  754. , RRDSET_TYPE_LINE
  755. );
  756. rd_Icmp6InRedirects = rrddim_add(st, "InRedirects", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  757. rd_Icmp6OutRedirects = rrddim_add(st, "OutRedirects", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  758. }
  759. else rrdset_next(st);
  760. rrddim_set_by_pointer(st, rd_Icmp6InRedirects, Icmp6InRedirects);
  761. rrddim_set_by_pointer(st, rd_Icmp6OutRedirects, Icmp6OutRedirects);
  762. rrdset_done(st);
  763. }
  764. // --------------------------------------------------------------------
  765. if(do_icmp_errors == CONFIG_BOOLEAN_YES || (do_icmp_errors == CONFIG_BOOLEAN_AUTO
  766. && (
  767. Icmp6InErrors
  768. || Icmp6OutErrors
  769. || Icmp6InCsumErrors
  770. || Icmp6InDestUnreachs
  771. || Icmp6InPktTooBigs
  772. || Icmp6InTimeExcds
  773. || Icmp6InParmProblems
  774. || Icmp6OutDestUnreachs
  775. || Icmp6OutPktTooBigs
  776. || Icmp6OutTimeExcds
  777. || Icmp6OutParmProblems
  778. ))) {
  779. do_icmp_errors = CONFIG_BOOLEAN_YES;
  780. static RRDSET *st = NULL;
  781. static RRDDIM *rd_InErrors = NULL,
  782. *rd_OutErrors = NULL,
  783. *rd_InCsumErrors = NULL,
  784. *rd_InDestUnreachs = NULL,
  785. *rd_InPktTooBigs = NULL,
  786. *rd_InTimeExcds = NULL,
  787. *rd_InParmProblems = NULL,
  788. *rd_OutDestUnreachs = NULL,
  789. *rd_OutPktTooBigs = NULL,
  790. *rd_OutTimeExcds = NULL,
  791. *rd_OutParmProblems = NULL;
  792. if(unlikely(!st)) {
  793. st = rrdset_create_localhost(
  794. RRD_TYPE_NET_SNMP6
  795. , "icmperrors"
  796. , NULL
  797. , "icmp6"
  798. , NULL
  799. , "IPv6 ICMP Errors"
  800. , "errors/s"
  801. , PLUGIN_PROC_NAME
  802. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  803. , NETDATA_CHART_PRIO_IPV6_ICMP_ERRORS
  804. , update_every
  805. , RRDSET_TYPE_LINE
  806. );
  807. rd_InErrors = rrddim_add(st, "InErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  808. rd_OutErrors = rrddim_add(st, "OutErrors", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  809. rd_InCsumErrors = rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  810. rd_InDestUnreachs = rrddim_add(st, "InDestUnreachs", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  811. rd_InPktTooBigs = rrddim_add(st, "InPktTooBigs", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  812. rd_InTimeExcds = rrddim_add(st, "InTimeExcds", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  813. rd_InParmProblems = rrddim_add(st, "InParmProblems", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  814. rd_OutDestUnreachs = rrddim_add(st, "OutDestUnreachs", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  815. rd_OutPktTooBigs = rrddim_add(st, "OutPktTooBigs", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  816. rd_OutTimeExcds = rrddim_add(st, "OutTimeExcds", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  817. rd_OutParmProblems = rrddim_add(st, "OutParmProblems", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  818. }
  819. else rrdset_next(st);
  820. rrddim_set_by_pointer(st, rd_InErrors, Icmp6InErrors);
  821. rrddim_set_by_pointer(st, rd_OutErrors, Icmp6OutErrors);
  822. rrddim_set_by_pointer(st, rd_InCsumErrors, Icmp6InCsumErrors);
  823. rrddim_set_by_pointer(st, rd_InDestUnreachs, Icmp6InDestUnreachs);
  824. rrddim_set_by_pointer(st, rd_InPktTooBigs, Icmp6InPktTooBigs);
  825. rrddim_set_by_pointer(st, rd_InTimeExcds, Icmp6InTimeExcds);
  826. rrddim_set_by_pointer(st, rd_InParmProblems, Icmp6InParmProblems);
  827. rrddim_set_by_pointer(st, rd_OutDestUnreachs, Icmp6OutDestUnreachs);
  828. rrddim_set_by_pointer(st, rd_OutPktTooBigs, Icmp6OutPktTooBigs);
  829. rrddim_set_by_pointer(st, rd_OutTimeExcds, Icmp6OutTimeExcds);
  830. rrddim_set_by_pointer(st, rd_OutParmProblems, Icmp6OutParmProblems);
  831. rrdset_done(st);
  832. }
  833. // --------------------------------------------------------------------
  834. if(do_icmp_echos == CONFIG_BOOLEAN_YES || (do_icmp_echos == CONFIG_BOOLEAN_AUTO
  835. && (
  836. Icmp6InEchos
  837. || Icmp6OutEchos
  838. || Icmp6InEchoReplies
  839. || Icmp6OutEchoReplies
  840. ))) {
  841. do_icmp_echos = CONFIG_BOOLEAN_YES;
  842. static RRDSET *st = NULL;
  843. static RRDDIM *rd_InEchos = NULL,
  844. *rd_OutEchos = NULL,
  845. *rd_InEchoReplies = NULL,
  846. *rd_OutEchoReplies = NULL;
  847. if(unlikely(!st)) {
  848. st = rrdset_create_localhost(
  849. RRD_TYPE_NET_SNMP6
  850. , "icmpechos"
  851. , NULL
  852. , "icmp6"
  853. , NULL
  854. , "IPv6 ICMP Echo"
  855. , "messages/s"
  856. , PLUGIN_PROC_NAME
  857. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  858. , NETDATA_CHART_PRIO_IPV6_ICMP_ECHOS
  859. , update_every
  860. , RRDSET_TYPE_LINE
  861. );
  862. rd_InEchos = rrddim_add(st, "InEchos", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  863. rd_OutEchos = rrddim_add(st, "OutEchos", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  864. rd_InEchoReplies = rrddim_add(st, "InEchoReplies", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  865. rd_OutEchoReplies = rrddim_add(st, "OutEchoReplies", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  866. }
  867. else rrdset_next(st);
  868. rrddim_set_by_pointer(st, rd_InEchos, Icmp6InEchos);
  869. rrddim_set_by_pointer(st, rd_OutEchos, Icmp6OutEchos);
  870. rrddim_set_by_pointer(st, rd_InEchoReplies, Icmp6InEchoReplies);
  871. rrddim_set_by_pointer(st, rd_OutEchoReplies, Icmp6OutEchoReplies);
  872. rrdset_done(st);
  873. }
  874. // --------------------------------------------------------------------
  875. if(do_icmp_groupmemb == CONFIG_BOOLEAN_YES || (do_icmp_groupmemb == CONFIG_BOOLEAN_AUTO
  876. && (
  877. Icmp6InGroupMembQueries
  878. || Icmp6OutGroupMembQueries
  879. || Icmp6InGroupMembResponses
  880. || Icmp6OutGroupMembResponses
  881. || Icmp6InGroupMembReductions
  882. || Icmp6OutGroupMembReductions
  883. ))) {
  884. do_icmp_groupmemb = CONFIG_BOOLEAN_YES;
  885. static RRDSET *st = NULL;
  886. static RRDDIM *rd_InQueries = NULL,
  887. *rd_OutQueries = NULL,
  888. *rd_InResponses = NULL,
  889. *rd_OutResponses = NULL,
  890. *rd_InReductions = NULL,
  891. *rd_OutReductions = NULL;
  892. if(unlikely(!st)) {
  893. st = rrdset_create_localhost(
  894. RRD_TYPE_NET_SNMP6
  895. , "groupmemb"
  896. , NULL
  897. , "icmp6"
  898. , NULL
  899. , "IPv6 ICMP Group Membership"
  900. , "messages/s"
  901. , PLUGIN_PROC_NAME
  902. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  903. , NETDATA_CHART_PRIO_IPV6_ICMP_GROUPMEMB
  904. , update_every
  905. , RRDSET_TYPE_LINE);
  906. rd_InQueries = rrddim_add(st, "InQueries", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  907. rd_OutQueries = rrddim_add(st, "OutQueries", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  908. rd_InResponses = rrddim_add(st, "InResponses", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  909. rd_OutResponses = rrddim_add(st, "OutResponses", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  910. rd_InReductions = rrddim_add(st, "InReductions", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  911. rd_OutReductions = rrddim_add(st, "OutReductions", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  912. }
  913. else rrdset_next(st);
  914. rrddim_set_by_pointer(st, rd_InQueries, Icmp6InGroupMembQueries);
  915. rrddim_set_by_pointer(st, rd_OutQueries, Icmp6OutGroupMembQueries);
  916. rrddim_set_by_pointer(st, rd_InResponses, Icmp6InGroupMembResponses);
  917. rrddim_set_by_pointer(st, rd_OutResponses, Icmp6OutGroupMembResponses);
  918. rrddim_set_by_pointer(st, rd_InReductions, Icmp6InGroupMembReductions);
  919. rrddim_set_by_pointer(st, rd_OutReductions, Icmp6OutGroupMembReductions);
  920. rrdset_done(st);
  921. }
  922. // --------------------------------------------------------------------
  923. if(do_icmp_router == CONFIG_BOOLEAN_YES || (do_icmp_router == CONFIG_BOOLEAN_AUTO
  924. && (
  925. Icmp6InRouterSolicits
  926. || Icmp6OutRouterSolicits
  927. || Icmp6InRouterAdvertisements
  928. || Icmp6OutRouterAdvertisements
  929. ))) {
  930. do_icmp_router = CONFIG_BOOLEAN_YES;
  931. static RRDSET *st = NULL;
  932. static RRDDIM *rd_InSolicits = NULL,
  933. *rd_OutSolicits = NULL,
  934. *rd_InAdvertisements = NULL,
  935. *rd_OutAdvertisements = NULL;
  936. if(unlikely(!st)) {
  937. st = rrdset_create_localhost(
  938. RRD_TYPE_NET_SNMP6
  939. , "icmprouter"
  940. , NULL
  941. , "icmp6"
  942. , NULL
  943. , "IPv6 Router Messages"
  944. , "messages/s"
  945. , PLUGIN_PROC_NAME
  946. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  947. , NETDATA_CHART_PRIO_IPV6_ICMP_ROUTER
  948. , update_every
  949. , RRDSET_TYPE_LINE
  950. );
  951. rd_InSolicits = rrddim_add(st, "InSolicits", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  952. rd_OutSolicits = rrddim_add(st, "OutSolicits", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  953. rd_InAdvertisements = rrddim_add(st, "InAdvertisements", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  954. rd_OutAdvertisements = rrddim_add(st, "OutAdvertisements", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  955. }
  956. else rrdset_next(st);
  957. rrddim_set_by_pointer(st, rd_InSolicits, Icmp6InRouterSolicits);
  958. rrddim_set_by_pointer(st, rd_OutSolicits, Icmp6OutRouterSolicits);
  959. rrddim_set_by_pointer(st, rd_InAdvertisements, Icmp6InRouterAdvertisements);
  960. rrddim_set_by_pointer(st, rd_OutAdvertisements, Icmp6OutRouterAdvertisements);
  961. rrdset_done(st);
  962. }
  963. // --------------------------------------------------------------------
  964. if(do_icmp_neighbor == CONFIG_BOOLEAN_YES || (do_icmp_neighbor == CONFIG_BOOLEAN_AUTO
  965. && (
  966. Icmp6InNeighborSolicits
  967. || Icmp6OutNeighborSolicits
  968. || Icmp6InNeighborAdvertisements
  969. || Icmp6OutNeighborAdvertisements
  970. ))) {
  971. do_icmp_neighbor = CONFIG_BOOLEAN_YES;
  972. static RRDSET *st = NULL;
  973. static RRDDIM *rd_InSolicits = NULL,
  974. *rd_OutSolicits = NULL,
  975. *rd_InAdvertisements = NULL,
  976. *rd_OutAdvertisements = NULL;
  977. if(unlikely(!st)) {
  978. st = rrdset_create_localhost(
  979. RRD_TYPE_NET_SNMP6
  980. , "icmpneighbor"
  981. , NULL
  982. , "icmp6"
  983. , NULL
  984. , "IPv6 Neighbor Messages"
  985. , "messages/s"
  986. , PLUGIN_PROC_NAME
  987. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  988. , NETDATA_CHART_PRIO_IPV6_ICMP_NEIGHBOR
  989. , update_every
  990. , RRDSET_TYPE_LINE
  991. );
  992. rd_InSolicits = rrddim_add(st, "InSolicits", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  993. rd_OutSolicits = rrddim_add(st, "OutSolicits", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  994. rd_InAdvertisements = rrddim_add(st, "InAdvertisements", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  995. rd_OutAdvertisements = rrddim_add(st, "OutAdvertisements", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  996. }
  997. else rrdset_next(st);
  998. rrddim_set_by_pointer(st, rd_InSolicits, Icmp6InNeighborSolicits);
  999. rrddim_set_by_pointer(st, rd_OutSolicits, Icmp6OutNeighborSolicits);
  1000. rrddim_set_by_pointer(st, rd_InAdvertisements, Icmp6InNeighborAdvertisements);
  1001. rrddim_set_by_pointer(st, rd_OutAdvertisements, Icmp6OutNeighborAdvertisements);
  1002. rrdset_done(st);
  1003. }
  1004. // --------------------------------------------------------------------
  1005. if(do_icmp_mldv2 == CONFIG_BOOLEAN_YES || (do_icmp_mldv2 == CONFIG_BOOLEAN_AUTO && (Icmp6InMLDv2Reports || Icmp6OutMLDv2Reports))) {
  1006. do_icmp_mldv2 = CONFIG_BOOLEAN_YES;
  1007. static RRDSET *st = NULL;
  1008. static RRDDIM *rd_InMLDv2Reports = NULL,
  1009. *rd_OutMLDv2Reports = NULL;
  1010. if(unlikely(!st)) {
  1011. st = rrdset_create_localhost(
  1012. RRD_TYPE_NET_SNMP6
  1013. , "icmpmldv2"
  1014. , NULL
  1015. , "icmp6"
  1016. , NULL
  1017. , "IPv6 ICMP MLDv2 Reports"
  1018. , "reports/s"
  1019. , PLUGIN_PROC_NAME
  1020. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  1021. , NETDATA_CHART_PRIO_IPV6_ICMP_LDV2
  1022. , update_every
  1023. , RRDSET_TYPE_LINE
  1024. );
  1025. rd_InMLDv2Reports = rrddim_add(st, "InMLDv2Reports", "received", 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1026. rd_OutMLDv2Reports = rrddim_add(st, "OutMLDv2Reports", "sent", -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1027. }
  1028. else rrdset_next(st);
  1029. rrddim_set_by_pointer(st, rd_InMLDv2Reports, Icmp6InMLDv2Reports);
  1030. rrddim_set_by_pointer(st, rd_OutMLDv2Reports, Icmp6OutMLDv2Reports);
  1031. rrdset_done(st);
  1032. }
  1033. // --------------------------------------------------------------------
  1034. if(do_icmp_types == CONFIG_BOOLEAN_YES || (do_icmp_types == CONFIG_BOOLEAN_AUTO
  1035. && (
  1036. Icmp6InType1
  1037. || Icmp6InType128
  1038. || Icmp6InType129
  1039. || Icmp6InType136
  1040. || Icmp6OutType1
  1041. || Icmp6OutType128
  1042. || Icmp6OutType129
  1043. || Icmp6OutType133
  1044. || Icmp6OutType135
  1045. || Icmp6OutType143
  1046. ))) {
  1047. do_icmp_types = CONFIG_BOOLEAN_YES;
  1048. static RRDSET *st = NULL;
  1049. static RRDDIM *rd_InType1 = NULL,
  1050. *rd_InType128 = NULL,
  1051. *rd_InType129 = NULL,
  1052. *rd_InType136 = NULL,
  1053. *rd_OutType1 = NULL,
  1054. *rd_OutType128 = NULL,
  1055. *rd_OutType129 = NULL,
  1056. *rd_OutType133 = NULL,
  1057. *rd_OutType135 = NULL,
  1058. *rd_OutType143 = NULL;
  1059. if(unlikely(!st)) {
  1060. st = rrdset_create_localhost(
  1061. RRD_TYPE_NET_SNMP6
  1062. , "icmptypes"
  1063. , NULL
  1064. , "icmp6"
  1065. , NULL
  1066. , "IPv6 ICMP Types"
  1067. , "messages/s"
  1068. , PLUGIN_PROC_NAME
  1069. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  1070. , NETDATA_CHART_PRIO_IPV6_ICMP_TYPES
  1071. , update_every
  1072. , RRDSET_TYPE_LINE
  1073. );
  1074. rd_InType1 = rrddim_add(st, "InType1", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1075. rd_InType128 = rrddim_add(st, "InType128", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1076. rd_InType129 = rrddim_add(st, "InType129", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1077. rd_InType136 = rrddim_add(st, "InType136", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1078. rd_OutType1 = rrddim_add(st, "OutType1", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1079. rd_OutType128 = rrddim_add(st, "OutType128", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1080. rd_OutType129 = rrddim_add(st, "OutType129", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1081. rd_OutType133 = rrddim_add(st, "OutType133", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1082. rd_OutType135 = rrddim_add(st, "OutType135", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1083. rd_OutType143 = rrddim_add(st, "OutType143", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
  1084. }
  1085. else rrdset_next(st);
  1086. rrddim_set_by_pointer(st, rd_InType1, Icmp6InType1);
  1087. rrddim_set_by_pointer(st, rd_InType128, Icmp6InType128);
  1088. rrddim_set_by_pointer(st, rd_InType129, Icmp6InType129);
  1089. rrddim_set_by_pointer(st, rd_InType136, Icmp6InType136);
  1090. rrddim_set_by_pointer(st, rd_OutType1, Icmp6OutType1);
  1091. rrddim_set_by_pointer(st, rd_OutType128, Icmp6OutType128);
  1092. rrddim_set_by_pointer(st, rd_OutType129, Icmp6OutType129);
  1093. rrddim_set_by_pointer(st, rd_OutType133, Icmp6OutType133);
  1094. rrddim_set_by_pointer(st, rd_OutType135, Icmp6OutType135);
  1095. rrddim_set_by_pointer(st, rd_OutType143, Icmp6OutType143);
  1096. rrdset_done(st);
  1097. }
  1098. // --------------------------------------------------------------------
  1099. if(do_ect == CONFIG_BOOLEAN_YES || (do_ect == CONFIG_BOOLEAN_AUTO
  1100. && (
  1101. Ip6InNoECTPkts
  1102. || Ip6InECT1Pkts
  1103. || Ip6InECT0Pkts
  1104. || Ip6InCEPkts
  1105. ))) {
  1106. do_ect = CONFIG_BOOLEAN_YES;
  1107. static RRDSET *st = NULL;
  1108. static RRDDIM *rd_InNoECTPkts = NULL,
  1109. *rd_InECT1Pkts = NULL,
  1110. *rd_InECT0Pkts = NULL,
  1111. *rd_InCEPkts = NULL;
  1112. if(unlikely(!st)) {
  1113. st = rrdset_create_localhost(
  1114. RRD_TYPE_NET_SNMP6
  1115. , "ect"
  1116. , NULL
  1117. , "packets"
  1118. , NULL
  1119. , "IPv6 ECT Packets"
  1120. , "packets/s"
  1121. , PLUGIN_PROC_NAME
  1122. , PLUGIN_PROC_MODULE_NET_SNMP6_NAME
  1123. , NETDATA_CHART_PRIO_IPV6_ECT
  1124. , update_every
  1125. , RRDSET_TYPE_LINE
  1126. );
  1127. rd_InNoECTPkts = rrddim_add(st, "InNoECTPkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1128. rd_InECT1Pkts = rrddim_add(st, "InECT1Pkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1129. rd_InECT0Pkts = rrddim_add(st, "InECT0Pkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1130. rd_InCEPkts = rrddim_add(st, "InCEPkts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
  1131. }
  1132. else rrdset_next(st);
  1133. rrddim_set_by_pointer(st, rd_InNoECTPkts, Ip6InNoECTPkts);
  1134. rrddim_set_by_pointer(st, rd_InECT1Pkts, Ip6InECT1Pkts);
  1135. rrddim_set_by_pointer(st, rd_InECT0Pkts, Ip6InECT0Pkts);
  1136. rrddim_set_by_pointer(st, rd_InCEPkts, Ip6InCEPkts);
  1137. rrdset_done(st);
  1138. }
  1139. return 0;
  1140. }