logstash-integration-snmp 4.0.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +23 -0
  3. data/CONTRIBUTORS +20 -0
  4. data/Gemfile +11 -0
  5. data/LICENSE +202 -0
  6. data/README.md +89 -0
  7. data/VERSION +1 -0
  8. data/docs/index.asciidoc +202 -0
  9. data/docs/input-snmp.asciidoc +524 -0
  10. data/docs/input-snmptrap.asciidoc +392 -0
  11. data/lib/logstash/inputs/snmp.rb +369 -0
  12. data/lib/logstash/inputs/snmptrap.rb +190 -0
  13. data/lib/logstash/plugin_mixins/snmp/common.rb +197 -0
  14. data/lib/logstash-integration-snmp_jars.rb +6 -0
  15. data/lib/mibs/ietf/ACCOUNTING-CONTROL-MIB.dic +1316 -0
  16. data/lib/mibs/ietf/ADSL-LINE-EXT-MIB.dic +1724 -0
  17. data/lib/mibs/ietf/ADSL-LINE-MIB.dic +7297 -0
  18. data/lib/mibs/ietf/ADSL-TC-MIB.dic +160 -0
  19. data/lib/mibs/ietf/ADSL2-LINE-MIB.dic +8663 -0
  20. data/lib/mibs/ietf/ADSL2-LINE-TC-MIB.dic +1462 -0
  21. data/lib/mibs/ietf/AGENTX-MIB.dic +817 -0
  22. data/lib/mibs/ietf/AGGREGATE-MIB.dic +708 -0
  23. data/lib/mibs/ietf/ALARM-MIB.dic +1734 -0
  24. data/lib/mibs/ietf/APM-MIB.dic +2870 -0
  25. data/lib/mibs/ietf/APPC-MIB.dic +8687 -0
  26. data/lib/mibs/ietf/APPLETALK-MIB.dic +4399 -0
  27. data/lib/mibs/ietf/APPLICATION-MIB.dic +3750 -0
  28. data/lib/mibs/ietf/APPN-DLUR-MIB.dic +972 -0
  29. data/lib/mibs/ietf/APPN-MIB.dic +9364 -0
  30. data/lib/mibs/ietf/APPN-TRAP-MIB.dic +664 -0
  31. data/lib/mibs/ietf/APS-MIB.dic +2430 -0
  32. data/lib/mibs/ietf/ARC-MIB.dic +552 -0
  33. data/lib/mibs/ietf/ATM-ACCOUNTING-INFORMATION-MIB.dic +816 -0
  34. data/lib/mibs/ietf/ATM-MIB.dic +4104 -0
  35. data/lib/mibs/ietf/ATM-TC-MIB.dic +914 -0
  36. data/lib/mibs/ietf/ATM2-MIB.dic +4715 -0
  37. data/lib/mibs/ietf/BFD-STD-MIB.dic +2367 -0
  38. data/lib/mibs/ietf/BFD-TC-STD-MIB.dic +202 -0
  39. data/lib/mibs/ietf/BGP4-MIB.dic +1931 -0
  40. data/lib/mibs/ietf/BLDG-HVAC-MIB.dic +812 -0
  41. data/lib/mibs/ietf/BRIDGE-MIB.dic +2257 -0
  42. data/lib/mibs/ietf/CAPWAP-BASE-MIB.dic +4128 -0
  43. data/lib/mibs/ietf/CAPWAP-DOT11-MIB.dic +482 -0
  44. data/lib/mibs/ietf/CHARACTER-MIB.dic +1140 -0
  45. data/lib/mibs/ietf/CIRCUIT-IF-MIB.dic +493 -0
  46. data/lib/mibs/ietf/CLNS-MIB.dic +1702 -0
  47. data/lib/mibs/ietf/COFFEE-POT-MIB.dic +282 -0
  48. data/lib/mibs/ietf/COPS-CLIENT-MIB.dic +1270 -0
  49. data/lib/mibs/ietf/DECNET-PHIV-MIB.dic +5837 -0
  50. data/lib/mibs/ietf/DIAL-CONTROL-MIB.dic +2139 -0
  51. data/lib/mibs/ietf/DIFFSERV-CONFIG-MIB.dic +378 -0
  52. data/lib/mibs/ietf/DIFFSERV-MIB.dic +5073 -0
  53. data/lib/mibs/ietf/DIRECTORY-SERVER-MIB.dic +1041 -0
  54. data/lib/mibs/ietf/DISMAN-EVENT-MIB.dic +3151 -0
  55. data/lib/mibs/ietf/DISMAN-EXPRESSION-MIB.dic +1716 -0
  56. data/lib/mibs/ietf/DISMAN-NSLOOKUP-MIB.dic +698 -0
  57. data/lib/mibs/ietf/DISMAN-PING-MIB.dic +2635 -0
  58. data/lib/mibs/ietf/DISMAN-SCHEDULE-MIB.dic +1744 -0
  59. data/lib/mibs/ietf/DISMAN-SCRIPT-MIB.dic +2820 -0
  60. data/lib/mibs/ietf/DISMAN-TRACEROUTE-MIB.dic +3239 -0
  61. data/lib/mibs/ietf/DLSW-MIB.dic +5635 -0
  62. data/lib/mibs/ietf/DNS-RESOLVER-MIB.dic +1765 -0
  63. data/lib/mibs/ietf/DNS-SERVER-MIB.dic +1593 -0
  64. data/lib/mibs/ietf/DOCS-BPI-MIB.dic +2634 -0
  65. data/lib/mibs/ietf/DOCS-CABLE-DEVICE-MIB.dic +5042 -0
  66. data/lib/mibs/ietf/DOCS-IETF-BPI2-MIB.dic +5478 -0
  67. data/lib/mibs/ietf/DOCS-IETF-CABLE-DEVICE-NOTIFICATION-MIB.dic +2447 -0
  68. data/lib/mibs/ietf/DOCS-IETF-QOS-MIB.dic +4886 -0
  69. data/lib/mibs/ietf/DOCS-IETF-SUBMGT-MIB.dic +1331 -0
  70. data/lib/mibs/ietf/DOCS-IF-MIB.dic +7980 -0
  71. data/lib/mibs/ietf/DOT12-IF-MIB.dic +1066 -0
  72. data/lib/mibs/ietf/DOT12-RPTR-MIB.dic +2669 -0
  73. data/lib/mibs/ietf/DOT3-EPON-MIB.dic +3297 -0
  74. data/lib/mibs/ietf/DOT3-OAM-MIB.dic +2830 -0
  75. data/lib/mibs/ietf/DS0-MIB.dic +466 -0
  76. data/lib/mibs/ietf/DS0BUNDLE-MIB.dic +468 -0
  77. data/lib/mibs/ietf/DS1-MIB.dic +4890 -0
  78. data/lib/mibs/ietf/DS3-MIB.dic +2719 -0
  79. data/lib/mibs/ietf/DSA-MIB.dic +888 -0
  80. data/lib/mibs/ietf/DSMON-MIB.dic +6177 -0
  81. data/lib/mibs/ietf/DVB-RCS-MIB.dic +5764 -0
  82. data/lib/mibs/ietf/EBN-MIB.dic +1026 -0
  83. data/lib/mibs/ietf/EFM-CU-MIB.dic +4335 -0
  84. data/lib/mibs/ietf/ENTITY-MIB.dic +2235 -0
  85. data/lib/mibs/ietf/ENTITY-SENSOR-MIB.dic +653 -0
  86. data/lib/mibs/ietf/ENTITY-STATE-MIB.dic +457 -0
  87. data/lib/mibs/ietf/ENTITY-STATE-TC-MIB.dic +260 -0
  88. data/lib/mibs/ietf/ETHER-CHIPSET-MIB.dic +787 -0
  89. data/lib/mibs/ietf/EtherLike-MIB.dic +2548 -0
  90. data/lib/mibs/ietf/FC-MGMT-MIB.dic +3465 -0
  91. data/lib/mibs/ietf/FCIP-MGMT-MIB.dic +1596 -0
  92. data/lib/mibs/ietf/FDDI-SMT73-MIB.dic +3378 -0
  93. data/lib/mibs/ietf/FIBRE-CHANNEL-FE-MIB.dic +2504 -0
  94. data/lib/mibs/ietf/FLOAT-TC-MIB.dic +128 -0
  95. data/lib/mibs/ietf/FLOW-METER-MIB.dic +3201 -0
  96. data/lib/mibs/ietf/FORCES-MIB.dic +598 -0
  97. data/lib/mibs/ietf/FR-ATM-PVC-SERVICE-IWF-MIB.dic +1601 -0
  98. data/lib/mibs/ietf/FR-MFR-MIB.dic +1351 -0
  99. data/lib/mibs/ietf/FRAME-RELAY-DTE-MIB.dic +1688 -0
  100. data/lib/mibs/ietf/FRNETSERV-MIB.dic +3940 -0
  101. data/lib/mibs/ietf/FRSLD-MIB.dic +2580 -0
  102. data/lib/mibs/ietf/Finisher-MIB.dic +1416 -0
  103. data/lib/mibs/ietf/GMPLS-LABEL-STD-MIB.dic +965 -0
  104. data/lib/mibs/ietf/GMPLS-LSR-STD-MIB.dic +693 -0
  105. data/lib/mibs/ietf/GMPLS-TC-STD-MIB.dic +180 -0
  106. data/lib/mibs/ietf/GMPLS-TE-STD-MIB.dic +2542 -0
  107. data/lib/mibs/ietf/GSMP-MIB.dic +2468 -0
  108. data/lib/mibs/ietf/HC-ALARM-MIB.dic +1050 -0
  109. data/lib/mibs/ietf/HC-PerfHist-TC-MIB.dic +310 -0
  110. data/lib/mibs/ietf/HC-RMON-MIB.dic +4456 -0
  111. data/lib/mibs/ietf/HDSL2-SHDSL-LINE-MIB.dic +3955 -0
  112. data/lib/mibs/ietf/HOST-RESOURCES-MIB.dic +2453 -0
  113. data/lib/mibs/ietf/HPR-IP-MIB.dic +640 -0
  114. data/lib/mibs/ietf/HPR-MIB.dic +1959 -0
  115. data/lib/mibs/ietf/IANA-ITU-ALARM-TC-MIB.dic +936 -0
  116. data/lib/mibs/ietf/IF-CAP-STACK-MIB.dic +356 -0
  117. data/lib/mibs/ietf/IF-INVERTED-STACK-MIB.dic +220 -0
  118. data/lib/mibs/ietf/IF-MIB.dic +2753 -0
  119. data/lib/mibs/ietf/IFCP-MGMT-MIB.dic +1717 -0
  120. data/lib/mibs/ietf/IGMP-STD-MIB.dic +809 -0
  121. data/lib/mibs/ietf/INET-ADDRESS-MIB.dic +570 -0
  122. data/lib/mibs/ietf/INTEGRATED-SERVICES-GUARANTEED-MIB.dic +319 -0
  123. data/lib/mibs/ietf/INTEGRATED-SERVICES-MIB.dic +1196 -0
  124. data/lib/mibs/ietf/INTERFACETOPN-MIB.dic +1705 -0
  125. data/lib/mibs/ietf/IP-FORWARD-MIB.dic +1853 -0
  126. data/lib/mibs/ietf/IP-MIB.dic +7064 -0
  127. data/lib/mibs/ietf/IPATM-IPMC-MIB.dic +4830 -0
  128. data/lib/mibs/ietf/IPFIX-MIB.dic +2334 -0
  129. data/lib/mibs/ietf/IPFIX-SELECTOR-MIB.dic +215 -0
  130. data/lib/mibs/ietf/IPMCAST-MIB.dic +3390 -0
  131. data/lib/mibs/ietf/IPMROUTE-STD-MIB.dic +1246 -0
  132. data/lib/mibs/ietf/IPOA-MIB.dic +2372 -0
  133. data/lib/mibs/ietf/IPS-AUTH-MIB.dic +1609 -0
  134. data/lib/mibs/ietf/IPSEC-SPD-MIB.dic +3989 -0
  135. data/lib/mibs/ietf/IPV6-FLOW-LABEL-MIB.dic +110 -0
  136. data/lib/mibs/ietf/IPV6-ICMP-MIB.dic +748 -0
  137. data/lib/mibs/ietf/IPV6-MIB.dic +2028 -0
  138. data/lib/mibs/ietf/IPV6-MLD-MIB.dic +659 -0
  139. data/lib/mibs/ietf/IPV6-TCP-MIB.dic +332 -0
  140. data/lib/mibs/ietf/IPV6-UDP-MIB.dic +209 -0
  141. data/lib/mibs/ietf/ISCSI-MIB.dic +4613 -0
  142. data/lib/mibs/ietf/ISDN-MIB.dic +1796 -0
  143. data/lib/mibs/ietf/ISIS-MIB.dic +6215 -0
  144. data/lib/mibs/ietf/ISNS-MIB.dic +6578 -0
  145. data/lib/mibs/ietf/ITU-ALARM-MIB.dic +665 -0
  146. data/lib/mibs/ietf/ITU-ALARM-TC-MIB.dic +137 -0
  147. data/lib/mibs/ietf/Job-Monitoring-MIB.dic +2519 -0
  148. data/lib/mibs/ietf/L2TP-MIB.dic +4050 -0
  149. data/lib/mibs/ietf/LANGTAG-TC-MIB.dic +104 -0
  150. data/lib/mibs/ietf/LISP-MIB.dic +4067 -0
  151. data/lib/mibs/ietf/LMP-MIB.dic +5166 -0
  152. data/lib/mibs/ietf/MALLOC-MIB.dic +2156 -0
  153. data/lib/mibs/ietf/MAU-MIB.dic +2619 -0
  154. data/lib/mibs/ietf/MIDCOM-MIB.dic +2856 -0
  155. data/lib/mibs/ietf/MIOX25-MIB.dic +828 -0
  156. data/lib/mibs/ietf/MIP-MIB.dic +3473 -0
  157. data/lib/mibs/ietf/MOBILEIPV6-MIB.dic +5228 -0
  158. data/lib/mibs/ietf/MPLS-FTN-STD-MIB.dic +1594 -0
  159. data/lib/mibs/ietf/MPLS-L3VPN-STD-MIB.dic +2548 -0
  160. data/lib/mibs/ietf/MPLS-LC-ATM-STD-MIB.dic +491 -0
  161. data/lib/mibs/ietf/MPLS-LC-FR-STD-MIB.dic +395 -0
  162. data/lib/mibs/ietf/MPLS-LDP-ATM-STD-MIB.dic +1019 -0
  163. data/lib/mibs/ietf/MPLS-LDP-FRAME-RELAY-STD-MIB.dic +862 -0
  164. data/lib/mibs/ietf/MPLS-LDP-GENERIC-STD-MIB.dic +445 -0
  165. data/lib/mibs/ietf/MPLS-LDP-STD-MIB.dic +3657 -0
  166. data/lib/mibs/ietf/MPLS-LSR-STD-MIB.dic +3103 -0
  167. data/lib/mibs/ietf/MPLS-TC-STD-MIB.dic +911 -0
  168. data/lib/mibs/ietf/MPLS-TE-STD-MIB.dic +3673 -0
  169. data/lib/mibs/ietf/MSDP-MIB.dic +1893 -0
  170. data/lib/mibs/ietf/MTA-MIB.dic +1898 -0
  171. data/lib/mibs/ietf/Modem-MIB.dic +2054 -0
  172. data/lib/mibs/ietf/NAT-MIB.dic +3866 -0
  173. data/lib/mibs/ietf/NETWORK-SERVICES-MIB.dic +1034 -0
  174. data/lib/mibs/ietf/NHDP-MIB.dic +3005 -0
  175. data/lib/mibs/ietf/NHRP-MIB.dic +3660 -0
  176. data/lib/mibs/ietf/NOTIFICATION-LOG-MIB.dic +1156 -0
  177. data/lib/mibs/ietf/NTPv4-MIB.dic +1535 -0
  178. data/lib/mibs/ietf/OPT-IF-MIB.dic +8972 -0
  179. data/lib/mibs/ietf/OSPF-MIB.dic +5963 -0
  180. data/lib/mibs/ietf/OSPF-TRAP-MIB.dic +1190 -0
  181. data/lib/mibs/ietf/OSPFV3-MIB.dic +5708 -0
  182. data/lib/mibs/ietf/P-BRIDGE-MIB.dic +1499 -0
  183. data/lib/mibs/ietf/PARALLEL-MIB.dic +476 -0
  184. data/lib/mibs/ietf/PIM-MIB.dic +1393 -0
  185. data/lib/mibs/ietf/PIM-STD-MIB.dic +6819 -0
  186. data/lib/mibs/ietf/PINT-MIB.dic +830 -0
  187. data/lib/mibs/ietf/PKTC-IETF-MTA-MIB.dic +3191 -0
  188. data/lib/mibs/ietf/PKTC-IETF-SIG-MIB.dic +4713 -0
  189. data/lib/mibs/ietf/PMIPV6-MIB.dic +3010 -0
  190. data/lib/mibs/ietf/PMIPV6-TC-MIB.dic +293 -0
  191. data/lib/mibs/ietf/POLICY-BASED-MANAGEMENT-MIB.dic +3316 -0
  192. data/lib/mibs/ietf/POWER-ETHERNET-MIB.dic +959 -0
  193. data/lib/mibs/ietf/PPP-BRIDGE-NCP-MIB.dic +587 -0
  194. data/lib/mibs/ietf/PPP-IP-NCP-MIB.dic +269 -0
  195. data/lib/mibs/ietf/PPP-LCP-MIB.dic +994 -0
  196. data/lib/mibs/ietf/PPP-SEC-MIB.dic +411 -0
  197. data/lib/mibs/ietf/PSAMP-MIB.dic +998 -0
  198. data/lib/mibs/ietf/PTOPO-MIB.dic +1135 -0
  199. data/lib/mibs/ietf/PW-ATM-MIB.dic +1642 -0
  200. data/lib/mibs/ietf/PW-CEP-STD-MIB.dic +3661 -0
  201. data/lib/mibs/ietf/PW-STD-MIB.dic +3592 -0
  202. data/lib/mibs/ietf/PW-TC-STD-MIB.dic +437 -0
  203. data/lib/mibs/ietf/PW-TDM-MIB.dic +1896 -0
  204. data/lib/mibs/ietf/PerfHist-TC-MIB.dic +152 -0
  205. data/lib/mibs/ietf/Printer-MIB.dic +6665 -0
  206. data/lib/mibs/ietf/Q-BRIDGE-MIB.dic +3115 -0
  207. data/lib/mibs/ietf/RADIUS-ACC-CLIENT-MIB.dic +991 -0
  208. data/lib/mibs/ietf/RADIUS-ACC-SERVER-MIB.dic +1183 -0
  209. data/lib/mibs/ietf/RADIUS-AUTH-CLIENT-MIB.dic +1073 -0
  210. data/lib/mibs/ietf/RADIUS-AUTH-SERVER-MIB.dic +1251 -0
  211. data/lib/mibs/ietf/RADIUS-DYNAUTH-CLIENT-MIB.dic +1116 -0
  212. data/lib/mibs/ietf/RADIUS-DYNAUTH-SERVER-MIB.dic +1003 -0
  213. data/lib/mibs/ietf/RAQMON-MIB.dic +2695 -0
  214. data/lib/mibs/ietf/RBRIDGE-MIB.dic +2981 -0
  215. data/lib/mibs/ietf/RDBMS-MIB.dic +1935 -0
  216. data/lib/mibs/ietf/RFC1065-SMI.dic +108 -0
  217. data/lib/mibs/ietf/RFC1155-SMI.dic +118 -0
  218. data/lib/mibs/ietf/RFC1158-MIB.dic +2440 -0
  219. data/lib/mibs/ietf/RFC1213-MIB.dic +3434 -0
  220. data/lib/mibs/ietf/RFC1269-MIB.dic +557 -0
  221. data/lib/mibs/ietf/RFC1271-MIB.dic +4135 -0
  222. data/lib/mibs/ietf/RFC1285-MIB.dic +2842 -0
  223. data/lib/mibs/ietf/RFC1316-MIB.dic +800 -0
  224. data/lib/mibs/ietf/RFC1381-MIB.dic +1347 -0
  225. data/lib/mibs/ietf/RFC1382-MIB.dic +3820 -0
  226. data/lib/mibs/ietf/RFC1414-MIB.dic +214 -0
  227. data/lib/mibs/ietf/RIPv2-MIB.dic +773 -0
  228. data/lib/mibs/ietf/RMON-MIB.dic +5551 -0
  229. data/lib/mibs/ietf/RMON2-MIB.dic +8224 -0
  230. data/lib/mibs/ietf/ROHC-MIB.dic +1613 -0
  231. data/lib/mibs/ietf/ROHC-RTP-MIB.dic +859 -0
  232. data/lib/mibs/ietf/ROHC-UNCOMPRESSED-MIB.dic +267 -0
  233. data/lib/mibs/ietf/RPKI-ROUTER-MIB.dic +1363 -0
  234. data/lib/mibs/ietf/RS-232-MIB.dic +1335 -0
  235. data/lib/mibs/ietf/RSERPOOL-MIB.dic +2501 -0
  236. data/lib/mibs/ietf/RSTP-MIB.dic +427 -0
  237. data/lib/mibs/ietf/RSVP-MIB.dic +4135 -0
  238. data/lib/mibs/ietf/RTP-MIB.dic +1376 -0
  239. data/lib/mibs/ietf/SCSI-MIB.dic +3804 -0
  240. data/lib/mibs/ietf/SCTP-MIB.dic +1924 -0
  241. data/lib/mibs/ietf/SFLOW-MIB.dic +568 -0
  242. data/lib/mibs/ietf/SIP-COMMON-MIB.dic +2769 -0
  243. data/lib/mibs/ietf/SIP-MIB.dic +1438 -0
  244. data/lib/mibs/ietf/SIP-SERVER-MIB.dic +1150 -0
  245. data/lib/mibs/ietf/SIP-TC-MIB.dic +257 -0
  246. data/lib/mibs/ietf/SIP-UA-MIB.dic +268 -0
  247. data/lib/mibs/ietf/SLAPM-MIB.dic +4527 -0
  248. data/lib/mibs/ietf/SMON-MIB.dic +1758 -0
  249. data/lib/mibs/ietf/SNA-NAU-MIB.dic +4042 -0
  250. data/lib/mibs/ietf/SNA-SDLC-MIB.dic +3858 -0
  251. data/lib/mibs/ietf/SNMP-COMMUNITY-MIB.dic +715 -0
  252. data/lib/mibs/ietf/SNMP-FRAMEWORK-MIB.dic +709 -0
  253. data/lib/mibs/ietf/SNMP-MPD-MIB.dic +230 -0
  254. data/lib/mibs/ietf/SNMP-NOTIFICATION-MIB.dic +859 -0
  255. data/lib/mibs/ietf/SNMP-PROXY-MIB.dic +414 -0
  256. data/lib/mibs/ietf/SNMP-REPEATER-MIB.dic +4335 -0
  257. data/lib/mibs/ietf/SNMP-SSH-TM-MIB.dic +447 -0
  258. data/lib/mibs/ietf/SNMP-TARGET-MIB.dic +924 -0
  259. data/lib/mibs/ietf/SNMP-TLS-TM-MIB.dic +1449 -0
  260. data/lib/mibs/ietf/SNMP-TSM-MIB.dic +315 -0
  261. data/lib/mibs/ietf/SNMP-USER-BASED-SM-MIB.dic +1164 -0
  262. data/lib/mibs/ietf/SNMP-USM-AES-MIB.dic +95 -0
  263. data/lib/mibs/ietf/SNMP-USM-DH-OBJECTS-MIB.dic +653 -0
  264. data/lib/mibs/ietf/SNMP-VIEW-BASED-ACM-MIB.dic +1202 -0
  265. data/lib/mibs/ietf/SNMPv2-MIB.dic +1382 -0
  266. data/lib/mibs/ietf/SNMPv2-SMI.dic +223 -0
  267. data/lib/mibs/ietf/SNMPv2-USEC-MIB.dic +405 -0
  268. data/lib/mibs/ietf/SONET-MIB.dic +3308 -0
  269. data/lib/mibs/ietf/SOURCE-ROUTING-MIB.dic +542 -0
  270. data/lib/mibs/ietf/SSPM-MIB.dic +1530 -0
  271. data/lib/mibs/ietf/SYSAPPL-MIB.dic +2092 -0
  272. data/lib/mibs/ietf/T11-FC-FABRIC-ADDR-MGR-MIB.dic +1779 -0
  273. data/lib/mibs/ietf/T11-FC-FABRIC-CONFIG-SERVER-MIB.dic +2822 -0
  274. data/lib/mibs/ietf/T11-FC-FABRIC-LOCK-MIB.dic +700 -0
  275. data/lib/mibs/ietf/T11-FC-FSPF-MIB.dic +1889 -0
  276. data/lib/mibs/ietf/T11-FC-NAME-SERVER-MIB.dic +1775 -0
  277. data/lib/mibs/ietf/T11-FC-ROUTE-MIB.dic +655 -0
  278. data/lib/mibs/ietf/T11-FC-RSCN-MIB.dic +1110 -0
  279. data/lib/mibs/ietf/T11-FC-VIRTUAL-FABRIC-MIB.dic +770 -0
  280. data/lib/mibs/ietf/T11-FC-ZONE-SERVER-MIB.dic +3886 -0
  281. data/lib/mibs/ietf/T11-TC-MIB.dic +110 -0
  282. data/lib/mibs/ietf/TCP-ESTATS-MIB.dic +3926 -0
  283. data/lib/mibs/ietf/TCP-MIB.dic +1319 -0
  284. data/lib/mibs/ietf/TCPIPX-MIB.dic +457 -0
  285. data/lib/mibs/ietf/TE-LINK-STD-MIB.dic +2876 -0
  286. data/lib/mibs/ietf/TE-MIB.dic +2924 -0
  287. data/lib/mibs/ietf/TED-MIB.dic +1749 -0
  288. data/lib/mibs/ietf/TIME-AGGREGATE-MIB.dic +550 -0
  289. data/lib/mibs/ietf/TN3270E-MIB.dic +2785 -0
  290. data/lib/mibs/ietf/TN3270E-RT-MIB.dic +1317 -0
  291. data/lib/mibs/ietf/TOKEN-RING-RMON-MIB.dic +2820 -0
  292. data/lib/mibs/ietf/TOKENRING-MIB.dic +1184 -0
  293. data/lib/mibs/ietf/TOKENRING-STATION-SR-MIB.dic +292 -0
  294. data/lib/mibs/ietf/TRANSPORT-ADDRESS-MIB.dic +610 -0
  295. data/lib/mibs/ietf/TRIP-MIB.dic +3159 -0
  296. data/lib/mibs/ietf/TRIP-TC-MIB.dic +241 -0
  297. data/lib/mibs/ietf/TUNNEL-MIB.dic +1095 -0
  298. data/lib/mibs/ietf/UDP-MIB.dic +751 -0
  299. data/lib/mibs/ietf/UDPLITE-MIB.dic +704 -0
  300. data/lib/mibs/ietf/UPS-MIB.dic +3088 -0
  301. data/lib/mibs/ietf/URI-TC-MIB.dic +193 -0
  302. data/lib/mibs/ietf/UUID-TC-MIB.dic +135 -0
  303. data/lib/mibs/ietf/VDSL-LINE-EXT-MCM-MIB.dic +989 -0
  304. data/lib/mibs/ietf/VDSL-LINE-EXT-SCM-MIB.dic +605 -0
  305. data/lib/mibs/ietf/VDSL-LINE-MIB.dic +4518 -0
  306. data/lib/mibs/ietf/VDSL2-LINE-MIB.dic +11029 -0
  307. data/lib/mibs/ietf/VDSL2-LINE-TC-MIB.dic +3152 -0
  308. data/lib/mibs/ietf/VPN-TC-STD-MIB.dic +121 -0
  309. data/lib/mibs/ietf/VRRP-MIB.dic +1163 -0
  310. data/lib/mibs/ietf/VRRPV3-MIB.dic +1403 -0
  311. data/lib/mibs/ietf/WWW-MIB.dic +1810 -0
  312. data/lib/mibs/logstash/iso.dic +18 -0
  313. data/logstash-integration-snmp.gemspec +40 -0
  314. data/spec/fixtures/RFC1213-MIB.dic +3445 -0
  315. data/spec/fixtures/collision.dic +25 -0
  316. data/spec/integration/inputs/snmp_spec.rb +443 -0
  317. data/spec/integration/inputs/snmptrap_spec.rb +383 -0
  318. data/spec/unit/inputs/common_spec.rb +264 -0
  319. data/spec/unit/inputs/snmp_spec.rb +510 -0
  320. data/spec/unit/inputs/snmptrap_spec.rb +141 -0
  321. data/vendor/jar-dependencies/org/logstash/integrations/plugin/4.0.0/plugin-4.0.0.jar +0 -0
  322. data/vendor/jar-dependencies/org/snakeyaml/snakeyaml-engine/2.7/snakeyaml-engine-2.7.jar +0 -0
  323. data/vendor/jar-dependencies/org/snmp4j/snmp4j/3.8.0/snmp4j-3.8.0.jar +0 -0
  324. metadata +523 -0
@@ -0,0 +1,383 @@
1
+ require 'logstash/devutils/rspec/spec_helper'
2
+ require 'logstash/inputs/snmptrap'
3
+ require 'logstash-integration-snmp_jars'
4
+ require 'timeout'
5
+ require 'socket'
6
+
7
+ describe LogStash::Inputs::Snmptrap, :integration => true do
8
+
9
+ java_import 'org.logstash.snmp.SnmpTestTrapSender'
10
+ java_import 'org.snmp4j.smi.OID'
11
+
12
+ PDU_METADATA = '[@metadata][input][snmptrap][pdu]'
13
+
14
+ let(:port) { rand(5000) + 1025 }
15
+ let(:target_address) { "udp:localhost/#{port}" }
16
+ let(:config) { { 'port' => port } }
17
+ let(:plugin) { LogStash::Inputs::Snmptrap.new(config) }
18
+
19
+ before(:all) do
20
+ @trap_sender = org.logstash.snmp.SnmpTestTrapSender.new(0)
21
+ end
22
+
23
+ after(:all) do
24
+ @trap_sender.close
25
+ end
26
+
27
+ describe 'traps receiver' do
28
+ shared_examples 'a plugin receiving a v1 trap message' do
29
+ it 'should process the message' do
30
+ queue = run_plugin_and_get_queue(plugin) do
31
+ @trap_sender.send_trap_v1(target_address, community, { '1.3.6.1.2.1.1.1.0' => 'It is a trap' })
32
+ end
33
+
34
+ expect(queue.size).to be(1)
35
+
36
+ trap_event = queue.pop
37
+
38
+ # fields
39
+ expect(trap_event.get('iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0')).to eq('It is a trap')
40
+
41
+ # metadata
42
+ expect(trap_event.get("#{PDU_METADATA}[version]")).to eq('1')
43
+ expect(trap_event.get("#{PDU_METADATA}[type]")).to eq('V1TRAP')
44
+ expect(trap_event.get("#{PDU_METADATA}[enterprise]")).to eq('0.0')
45
+ expect(trap_event.get("#{PDU_METADATA}[agent_addr]")).to eq('0.0.0.0')
46
+ expect(trap_event.get("#{PDU_METADATA}[generic_trap]")).to eq(0)
47
+ expect(trap_event.get("#{PDU_METADATA}[specific_trap]")).to eq(0)
48
+ expect(trap_event.get("#{PDU_METADATA}[timestamp]")).to be(0)
49
+ expect(trap_event.get("#{PDU_METADATA}[community]")).to eq(community)
50
+ expect(trap_event.get("#{PDU_METADATA}[variable_bindings]")).to match hash_including('1.3.6.1.2.1.1.1.0' => 'It is a trap')
51
+ expect(LogStash::Json.load(trap_event.get('message'))).to eq(trap_event.get("#{PDU_METADATA}"))
52
+ end
53
+ end
54
+
55
+ shared_examples 'a plugin receiving a v2c or v3 trap message' do |version|
56
+ it 'should process the message' do
57
+ queue = run_plugin_and_get_queue(plugin) do
58
+ bindings = { '1.3.6.1.2.1.1.1.0' => "It is a #{version} trap" }
59
+
60
+ if version == '2c'
61
+ @trap_sender.send_trap_v2c(target_address, 'public', bindings)
62
+ else
63
+ @trap_sender.send_trap_v3(target_address, security_name, auth_protocol, auth_pass, priv_protocol, priv_pass, security_level, bindings)
64
+ end
65
+ end
66
+
67
+ expect(queue.size).to be(1)
68
+
69
+ trap_event = queue.pop
70
+
71
+ # fields
72
+ expect(trap_event.get('iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0')).to eq("It is a #{version} trap" )
73
+
74
+ # metadata
75
+ expect(trap_event.get("#{PDU_METADATA}[version]")).to eq(version)
76
+ expect(trap_event.get("#{PDU_METADATA}[type]")).to eq('TRAP')
77
+ expect(trap_event.get("#{PDU_METADATA}[request_id]")).to be_a(Integer)
78
+ expect(trap_event.get("#{PDU_METADATA}[error_status]")).to eq(0)
79
+ expect(trap_event.get("#{PDU_METADATA}[error_status_text]")).to eq('Success')
80
+ expect(trap_event.get("#{PDU_METADATA}[error_index]")).to eq(0)
81
+ expect(trap_event.get("#{PDU_METADATA}[community]")).to eq('public') if version == '2c'
82
+ expect(trap_event.get("#{PDU_METADATA}[variable_bindings]")).to match hash_including('1.3.6.1.2.1.1.1.0' => "It is a #{version} trap")
83
+ expect(LogStash::Json.load(trap_event.get('message'))).to eq(trap_event.get("#{PDU_METADATA}"))
84
+ end
85
+ end
86
+
87
+ context 'SNMP v1' do
88
+ let(:config) { super().merge('supported_versions' => ['1']) }
89
+ let(:community) { 'public' }
90
+
91
+ context 'when receiving a message over TCP' do
92
+ let(:target_address) { "tcp:127.0.0.1/#{port}" }
93
+ let(:config) { super().merge('supported_transports' => ['tcp']) }
94
+
95
+ it_behaves_like 'a plugin receiving a v1 trap message'
96
+ end
97
+
98
+ context 'when receiving a message over UDP' do
99
+ let(:config) { super().merge('supported_transports' => ['udp']) }
100
+
101
+ it_behaves_like 'a plugin receiving a v1 trap message'
102
+ end
103
+
104
+ context 'when receiving a message with unknown community' do
105
+ let(:config) { super().merge('community' => "not-#{community}") }
106
+
107
+ it 'should not receive a message' do
108
+ queue = run_plugin_and_get_queue(plugin, timeout: 3) do
109
+ @trap_sender.send_trap_v1(target_address, community, { '1.3.6.1.2.1.1.1.0' => 'It is a trap' })
110
+ end
111
+
112
+ expect(queue.size).to eq(0)
113
+ end
114
+ end
115
+ end
116
+
117
+ context 'SNMP v2c' do
118
+ let(:community) { 'public' }
119
+
120
+ context 'when receiving a message over UDP' do
121
+ let(:config) { super().merge('supported_transports' => ['udp']) }
122
+
123
+ it_behaves_like 'a plugin receiving a v2c or v3 trap message', '2c'
124
+ end
125
+
126
+ context 'when receiving a message over TCP' do
127
+ let(:target_address) { "tcp:127.0.0.1/#{port}" }
128
+ let(:config) { super().merge('supported_transports' => ['tcp']) }
129
+
130
+ it_behaves_like 'a plugin receiving a v2c or v3 trap message', '2c'
131
+ end
132
+
133
+ context 'when receiving a message with unknown community' do
134
+ let(:config) { super().merge('community' => "not-#{community}") }
135
+
136
+ it 'should not process the message' do
137
+ queue = run_plugin_and_get_queue(plugin, timeout: 3) do
138
+ @trap_sender.send_trap_v2c(target_address, community, { '1.3.6.1.2.1.1.1.0' => 'It is a trap' })
139
+ end
140
+
141
+ expect(queue.size).to eq(0)
142
+ end
143
+ end
144
+ end
145
+
146
+ context 'SNMP v3' do
147
+ let(:security_name) { 'user' }
148
+ let(:auth_protocol) { 'md5' }
149
+ let(:auth_pass) { 'foo@@Bar' }
150
+ let(:priv_protocol) { 'aes' }
151
+ let(:priv_pass) { 'bar@@Foo' }
152
+ let(:security_level) { 'authPriv' }
153
+
154
+ let(:config) do
155
+ super().merge({
156
+ 'supported_versions' => ['3'],
157
+ 'security_name' => security_name,
158
+ 'auth_protocol' => auth_protocol,
159
+ 'auth_pass' => auth_pass,
160
+ 'priv_protocol' => priv_protocol,
161
+ 'priv_pass' => priv_pass,
162
+ 'security_level' => security_level
163
+ })
164
+ end
165
+
166
+ context 'when receiving a message over UDP' do
167
+ let(:config) { super().merge('supported_transports' => ['udp']) }
168
+
169
+ it_behaves_like 'a plugin receiving a v2c or v3 trap message', '3'
170
+ end
171
+
172
+ context 'when receiving a message over TCP' do
173
+ let(:target_address) { "tcp:127.0.0.1/#{port}" }
174
+ let(:config) { super().merge('supported_transports' => ['tcp']) }
175
+
176
+ it_behaves_like 'a plugin receiving a v2c or v3 trap message', '3'
177
+ end
178
+
179
+ context 'when receiving a request with invalid credentials' do
180
+ it 'should not process the message' do
181
+ queue = run_plugin_and_get_queue(plugin, timeout: 3) do
182
+ @trap_sender.send_trap_v3(target_address, security_name, auth_protocol, 'wrong@password', priv_protocol, priv_pass, security_level, {'1.1' => 'foo'})
183
+ end
184
+
185
+ expect(queue.size).to eq(0)
186
+ end
187
+ end
188
+ end
189
+
190
+ context 'with supported_versions' do
191
+ context 'with multiple versions enabled' do
192
+ let(:security_name) { 'user' }
193
+ let(:auth_protocol) { 'md5' }
194
+ let(:auth_pass) { 'foo@@Bar' }
195
+ let(:priv_protocol) { 'aes' }
196
+ let(:priv_pass) { 'bar@@Foo' }
197
+ let(:security_level) { 'authPriv' }
198
+ let(:config) do
199
+ super().merge({
200
+ 'supported_versions' => %w[1 2c 3],
201
+ 'security_name' => security_name,
202
+ 'auth_protocol' => auth_protocol,
203
+ 'auth_pass' => auth_pass,
204
+ 'priv_protocol' => priv_protocol,
205
+ 'priv_pass' => priv_pass,
206
+ 'security_level' => security_level
207
+ })
208
+ end
209
+
210
+ it 'should receive all messages' do
211
+ queue = run_plugin_and_get_queue(plugin, messages: 4) do
212
+ oid = '1.3.6.1.2.1.1.1.0'
213
+ @trap_sender.send_trap_v1(target_address, 'public', { "#{oid}" => '1' })
214
+ @trap_sender.send_trap_v1(target_address, 'public', { "#{oid}" => '1' })
215
+ @trap_sender.send_trap_v2c(target_address, 'public', { "#{oid}" => '2c' })
216
+ @trap_sender.send_trap_v3(target_address, security_name, auth_protocol, auth_pass, priv_protocol, priv_pass, security_level, { "#{oid}" => '3' })
217
+ end
218
+
219
+ expect(queue.size).to eq(4)
220
+
221
+ events_per_version = queue.group_by { |event| event.get("#{PDU_METADATA}[version]") }
222
+ expect(events_per_version['1'].size).to eq(2)
223
+ expect(events_per_version['2c'].size).to eq(1)
224
+ expect(events_per_version['3'].size).to eq(1)
225
+ end
226
+ end
227
+
228
+ context 'with specific version enabled' do
229
+ let(:config) { super().merge({ 'supported_versions' => ['1'] }) }
230
+
231
+ it 'should not process unsupported message versions' do
232
+ queue = run_plugin_and_get_queue(plugin, timeout: 3) do
233
+ @trap_sender.send_trap_v2c(target_address, 'public', { '1' => 'foo' })
234
+ end
235
+
236
+ expect(queue.size).to eq(0)
237
+ end
238
+ end
239
+ end
240
+
241
+ context 'with oid_mapping_format => dotted_string' do
242
+ let(:config) { super().merge({ 'oid_mapping_format' => 'dotted_string' }) }
243
+
244
+ it 'should have OID fields mapped as dotted string' do
245
+ event = run_plugin_and_get_queue(plugin) do
246
+ @trap_sender.send_trap_v1(target_address, 'public', { '1.3.6.1.2.1.1.1.0' => '1.0' })
247
+ end.pop
248
+
249
+ expect(event.get('1.3.6.1.2.1.1.1.0')).to eq('1.0')
250
+ end
251
+ end
252
+
253
+ context 'with oid_mapping_format => ruby_snmp' do
254
+ let(:config) { super().merge({ 'oid_mapping_format' => 'ruby_snmp', 'use_provided_mibs' => false }) }
255
+
256
+ it 'should have OID fields mapped as dotted string' do
257
+ event = run_plugin_and_get_queue(plugin) do
258
+ @trap_sender.send_trap_v1(target_address, 'public', { '1.3.6.1.2.1.1.1.0' => '1.0' })
259
+ end.pop
260
+
261
+ expect(event.get('SNMPv2-MIB::sysDescr.0')).to eq('1.0')
262
+ end
263
+ end
264
+
265
+ context 'with oid_map_field_values' do
266
+ context 'set to false' do
267
+ let(:config) { super().merge('oid_map_field_values' => false) }
268
+
269
+ it 'should not map OID field values' do
270
+ event = run_plugin_and_get_queue(plugin) do
271
+ @trap_sender.send_trap_v2c(target_address, 'public', { '1.3.6.1.2.1.1.2.0' => org.snmp4j.smi.OID.new('1.3.6.1.4.1.8072.3.2.10') })
272
+ end.pop
273
+
274
+ expect(event).to be_a(LogStash::Event)
275
+ expect(event.get('iso.org.dod.internet.mgmt.mib-2.system.sysObjectID.0')).to eq('1.3.6.1.4.1.8072.3.2.10')
276
+ end
277
+ end
278
+
279
+ context 'set to true' do
280
+ let(:config) { super().merge('oid_map_field_values' => true) }
281
+
282
+ it 'should map OID field values' do
283
+ event = run_plugin_and_get_queue(plugin) do
284
+ @trap_sender.send_trap_v2c(target_address, 'public', { '1.3.6.1.2.1.1.2.0' => org.snmp4j.smi.OID.new('1.3.6.1.4.1.8072.3.2.10') })
285
+ end.pop
286
+
287
+ expect(event).to be_a(LogStash::Event)
288
+ expect(event.get('iso.org.dod.internet.mgmt.mib-2.system.sysObjectID.0')).to eq('iso.org.dod.internet.private.enterprises.8072.3.2.10')
289
+ end
290
+ end
291
+ end
292
+
293
+ context 'with no MIBs provided' do
294
+ let(:config) { super().reject { |key, _| key == 'mib_paths' }.merge('use_provided_mibs' => false, 'oid_mapping_format' => 'ruby_snmp') }
295
+
296
+ it 'should load default ruby-snmp MIBs' do
297
+ event = run_plugin_and_get_queue(plugin) do
298
+ bindings = {
299
+ '1.3.6.1.2.1.1.2.0' => 'SNMPv2-SMI.dic',
300
+ '1.3' => 'SNMPv2-MIB.dic',
301
+ '1.3.6.1.2.1.2.1' => 'IF-MIB.dic',
302
+ '1.3.6.1.2.1.4' => 'IP-MIB.dic',
303
+ '1.3.6.1.2.1.6' => 'TCP-MIB.dic',
304
+ '1.3.6.1.2.1.7.1' => 'UDP-MIB.dic',
305
+ # non-default ACCOUNTING-CONTROL-MIB::accountingControlMIB
306
+ '1.3.6.1.2.1.60' => 'ACCOUNTING-CONTROL-MIB.dic'
307
+ }
308
+
309
+ @trap_sender.send_trap_v2c(target_address, 'public', bindings)
310
+ end.pop
311
+
312
+ expect(event).to be_a(LogStash::Event)
313
+ expect(event.get('SNMPv2-SMI::org')).to_not be_nil
314
+ expect(event.get('SNMPv2-MIB::sysObjectID.0')).to_not be_nil
315
+ expect(event.get('IF-MIB::ifNumber')).to_not be_nil
316
+ expect(event.get('IP-MIB::ip')).to_not be_nil
317
+ expect(event.get('TCP-MIB::tcp')).to_not be_nil
318
+ expect(event.get('UDP-MIB::udpInDatagrams')).to_not be_nil
319
+ expect(event.get('SNMPv2-SMI::mib-2.60')).to_not be_nil
320
+ end
321
+ end
322
+
323
+ context 'with host' do
324
+ context 'set to IP address' do
325
+ let(:ip_address) { IPSocket.getaddress(Socket.gethostname) }
326
+ let(:config) { super().merge('host' => ip_address, 'oid_mapping_format' => 'dotted_string')}
327
+
328
+ it "should only received message through configured host" do
329
+ queue = run_plugin_and_get_queue(plugin, messages: 2, timeout: 5) do
330
+ @trap_sender.send_trap_v2c("udp:#{ip_address}/#{port}", 'public', { '1.3.6.1.2.1.1.2.0' => ip_address })
331
+ @trap_sender.send_trap_v2c("udp:127.0.0.1/#{port}", 'public', { '1.3.6.1.2.1.1.2.0' => 'INVALID' })
332
+ end
333
+
334
+ expect(queue.size).to eq(1)
335
+ expect(queue.pop.get('1.3.6.1.2.1.1.2.0')).to eq(ip_address)
336
+ end
337
+ end
338
+
339
+ context 'set to any IPV6 address' do
340
+ let(:config) { super().merge('host' => '::', 'oid_mapping_format' => 'dotted_string') }
341
+
342
+ it "should received message through localhost" do
343
+ queue = run_plugin_and_get_queue(plugin, messages: 2, timeout: 5) do
344
+ @trap_sender.send_trap_v2c("udp:localhost/#{port}", 'public', { '1.3.6.1.2.1.1.2.0' => 'IPV6' })
345
+ end
346
+
347
+ expect(queue.size).to eq(1)
348
+ expect(queue.pop.get('1.3.6.1.2.1.1.2.0')).to eq('IPV6')
349
+ end
350
+ end
351
+ end
352
+ end
353
+
354
+ def run_plugin_and_get_queue(plugin, timeout: 30, register: true, messages: 1, &actions)
355
+ plugin.register if register
356
+
357
+ message_latch = Concurrent::CountDownLatch.new(messages)
358
+ allow(plugin).to receive(:consume_trap_message).and_wrap_original do |original_method, *args, &block|
359
+ original_method.call(*args, &block)
360
+ message_latch.count_down
361
+ end
362
+
363
+ Thread.new do
364
+ Timeout::timeout(5) do
365
+ until plugin.client_listening?
366
+ sleep 0.2
367
+ end
368
+ end
369
+
370
+ begin
371
+ actions.call
372
+ message_latch.wait(timeout)
373
+ ensure
374
+ plugin.do_close
375
+ plugin.do_stop
376
+ end
377
+ end
378
+
379
+ queue = Concurrent::Array.new
380
+ plugin.run(queue)
381
+ queue
382
+ end
383
+ end
@@ -0,0 +1,264 @@
1
+ require 'logstash/devutils/rspec/spec_helper'
2
+ require_relative '../../../lib/logstash/inputs/snmp'
3
+ require_relative '../../../lib/logstash/inputs/snmptrap'
4
+
5
+ shared_examples 'a common SNMP plugin' do
6
+ let(:mock_client) { double('org.logstash.snmp.SnmpClient') }
7
+
8
+ context 'oid_root_skip and oid_path_length validation' do
9
+ before(:each) do
10
+ allow(plugin).to receive(:build_client!).and_return(mock_client)
11
+ end
12
+
13
+ context 'with only `oid_root_skip` set' do
14
+ let(:config) { super().merge('oid_mapping_format' => 'default', 'oid_root_skip' => 1) }
15
+ it 'should not raise' do
16
+ expect { plugin.register }.to_not raise_error
17
+ end
18
+ end
19
+
20
+ context 'with only `oid_path_length` set' do
21
+ let(:config) { super().merge('oid_mapping_format' => 'default', 'oid_path_length' => 1) }
22
+ it 'should not raise' do
23
+ expect { plugin.register }.to_not raise_error
24
+ end
25
+ end
26
+
27
+ context 'with `oid_root_skip` and `oid_path_length` set' do
28
+ let(:config) { super().merge({ 'oid_mapping_format' => 'default', 'oid_root_skip' => 1, 'oid_path_length' => 1 }) }
29
+ it 'should raise' do
30
+ expect { plugin.register }.to raise_error(LogStash::ConfigurationError, 'Use either `oid_root_skip` or `oid_path_length`')
31
+ end
32
+ end
33
+ end
34
+
35
+ context 'oid_mapping_format validation' do
36
+ before(:each) do
37
+ allow(plugin).to receive(:build_client!).and_return(mock_client)
38
+ end
39
+
40
+ context 'with value set to `default`' do
41
+ let(:config) { super().merge('oid_mapping_format' => 'default') }
42
+ context 'and oid_root_skip set' do
43
+ let(:config) { super().merge('oid_root_skip' => 1) }
44
+ it 'should not raise' do
45
+ expect { plugin.register }.to_not raise_error
46
+ end
47
+ end
48
+
49
+ context 'and oid_path_length set' do
50
+ let(:config) { super().merge('oid_path_length' => 1) }
51
+ it 'should not raise' do
52
+ expect { plugin.register }.to_not raise_error
53
+ end
54
+ end
55
+ end
56
+
57
+ %w[ruby_snmp dotted_string].each do |format|
58
+ context "with value set to `#{format}`" do
59
+ let(:config) { super().merge('oid_mapping_format' => format) }
60
+
61
+ context 'and oid_root_skip set' do
62
+ let(:config) { super().merge('oid_root_skip' => 1) }
63
+ it 'should raise' do
64
+ expect { plugin.register }.to raise_error(LogStash::ConfigurationError, 'The `oid_root_skip` and `oid_path_length` requires setting `oid_mapping_format` to `default`')
65
+ end
66
+ end
67
+
68
+ context 'and oid_path_length set' do
69
+ let(:config) { super().merge('oid_path_length' => 1) }
70
+ it 'should raise' do
71
+ expect { plugin.register }.to raise_error(LogStash::ConfigurationError, 'The `oid_root_skip` and `oid_path_length` requires setting `oid_mapping_format` to `default`')
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ context 'build_mib_manager!' do
78
+ context 'with mib_paths set' do
79
+ let(:config) { super().merge('mib_paths' => %w[/foo /bar]) }
80
+ let(:mock_mib_manager) { double('org.logstash.snmp.mib.MibManager') }
81
+
82
+ it 'should add paths to MIB manager' do
83
+ allow(plugin).to receive(:new_mib_manager).and_return(mock_mib_manager)
84
+ allow(mock_mib_manager).to receive(:add)
85
+
86
+ mib_manager = plugin.build_mib_manager!
87
+
88
+ expect(mib_manager).to have_received(:add).with('/foo')
89
+ expect(mib_manager).to have_received(:add).with('/bar')
90
+ end
91
+ end
92
+
93
+ context 'with `use_provided_mibs` set to `true`' do
94
+ let(:config) { super().merge('use_provided_mibs' => true) }
95
+ let(:mock_mib_manager) { double('org.logstash.snmp.mib.MibManager') }
96
+
97
+ it 'should add provided paths to MIB manager' do
98
+ allow(plugin).to receive(:new_mib_manager).and_return(mock_mib_manager)
99
+ allow(mock_mib_manager).to receive(:add)
100
+
101
+ mib_manager = plugin.build_mib_manager!
102
+
103
+ LogStash::PluginMixins::Snmp::Common::MIB_PROVIDED_PATHS.each do |path|
104
+ expect(mib_manager).to have_received(:add).with(path)
105
+ end
106
+ end
107
+ end
108
+
109
+ context 'with `use_provided_mibs` set to `false`' do
110
+ let(:config) { super().merge('use_provided_mibs' => false) }
111
+ let(:mock_mib_manager) { double('org.logstash.snmp.mib.MibManager') }
112
+
113
+ it 'should not add provided paths to MIB manager' do
114
+ allow(plugin).to receive(:new_mib_manager).and_return(mock_mib_manager)
115
+ allow(mock_mib_manager).to receive(:add)
116
+
117
+ mib_manager = plugin.build_mib_manager!
118
+
119
+ expect(mib_manager).to_not have_received(:add)
120
+ end
121
+ end
122
+
123
+ { 'default' => org.logstash.snmp.DefaultOidFieldMapper,
124
+ 'ruby_snmp' => org.logstash.snmp.RubySnmpOidFieldMapper,
125
+ 'dotted_string' => org.logstash.snmp.DottedStringOidFieldMapper }.each do |format, expected_kind|
126
+ context "with `oid_mapping_format` set to `#{format}`" do
127
+ let(:config) { super().merge('oid_mapping_format' => format) }
128
+
129
+ it "should use `#{expected_kind}` field mapper" do
130
+ mib_manager = plugin.build_mib_manager!
131
+ expect(mib_manager.getFieldMapper).to be_a expected_kind
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
137
+
138
+ context '#build_snmp_client!' do
139
+ let(:client_builder) { double('org.logstash.snmp.SnmpClientBuilder') }
140
+
141
+ context 'with USM user validation' do
142
+ let(:config) { super().merge('security_name' => 'public') }
143
+
144
+ context 'with `security_name` not set' do
145
+ let(:config) { super().reject! { |k| k == 'security_name'} }
146
+
147
+ it 'should raise' do
148
+ error_message = '`security_name` is required when SNMP v3 is enabled'
149
+ expect { plugin.build_snmp_client!(client_builder, validate_usm_user: true) }.to raise_error(LogStash::ConfigurationError, error_message)
150
+ end
151
+ end
152
+
153
+ context 'with `security_level` set to `noAuthNoPriv`' do
154
+ let(:config) do
155
+ {
156
+ 'security_name' => 'foobar',
157
+ 'security_level' => 'noAuthNoPriv'
158
+ }
159
+ end
160
+
161
+ it 'should not raise' do
162
+ expect(client_builder).to receive(:addUsmUser)
163
+ expect(client_builder).to receive(:setMapOidVariableValues)
164
+ expect(client_builder).to receive(:build)
165
+ expect { plugin.build_snmp_client!(client_builder, validate_usm_user: true) }.to_not raise_error
166
+ end
167
+ end
168
+
169
+ [{ protocol: 'auth_protocol', pass: 'auth_pass', protocol_value: 'md5', security_levels: %w[authPriv authNoPriv]},
170
+ { protocol: 'priv_protocol', pass: 'priv_pass', protocol_value: 'des', security_levels: %w[authPriv] }].each do |config|
171
+ context "with only `#{config[:protocol]}` set" do
172
+ let(:config) { super().merge((config[:protocol]).to_s => (config[:protocol_value]).to_s ) }
173
+
174
+ it 'should raise' do
175
+ error_message = /Using `#{config[:protocol]}` requires the `#{config[:pass]}`/
176
+ expect { plugin.build_snmp_client!(client_builder, validate_usm_user: true) }.to raise_error(LogStash::ConfigurationError, error_message)
177
+ end
178
+ end
179
+
180
+ context "with only `#{config[:pass]}` set" do
181
+ let(:config) { super().merge((config[:pass]).to_s => 'foobar') }
182
+
183
+ it 'should raise' do
184
+ error_message = /`#{config[:protocol]}` is required when using `#{config[:pass]}`/
185
+ expect { plugin.build_snmp_client!(client_builder, validate_usm_user: true) }.to raise_error(LogStash::ConfigurationError, error_message)
186
+ end
187
+ end
188
+
189
+ context "with both `#{config[:protocol]}` and `#{config[:pass]}` set" do
190
+ let(:config) { super().merge({ "#{config[:protocol]}" => config[:protocol_value], "#{config[:pass]}" => '*' * 10 }) }
191
+
192
+ it 'should not raise' do
193
+ expect(client_builder).to receive(:addUsmUser)
194
+ expect(client_builder).to receive(:setMapOidVariableValues)
195
+ expect(client_builder).to receive(:build)
196
+ expect { plugin.build_snmp_client!(client_builder, validate_usm_user: true) }.to_not raise_error
197
+ end
198
+ end
199
+
200
+ context "with valid `#{config[:pass]}` length" do
201
+ let(:config) { super().merge({ "#{config[:protocol]}" => config[:protocol_value], "#{config[:pass]}" => '*' * 8 }) }
202
+
203
+ it 'should not raise' do
204
+ expect(client_builder).to receive(:addUsmUser)
205
+ expect(client_builder).to receive(:setMapOidVariableValues)
206
+ expect(client_builder).to receive(:build)
207
+ expect { plugin.build_snmp_client!(client_builder, validate_usm_user: true) }.to_not raise_error
208
+ end
209
+ end
210
+
211
+ context "with invalid `#{config[:pass]}` length" do
212
+ let(:config) { super().merge("#{config[:pass]}" => '**') }
213
+
214
+ it 'should raise' do
215
+ error_message = /`#{config[:pass]}` passphrase must be at least 8 bytes long/
216
+ expect { plugin.build_snmp_client!(client_builder, validate_usm_user: true) }.to raise_error(LogStash::ConfigurationError, error_message)
217
+ end
218
+ end
219
+
220
+ config[:security_levels].each do |security_level|
221
+ context "with `security_level` set to `#{security_level}`" do
222
+ let(:config) { super().merge('security_level' => security_level) }
223
+
224
+ context "and no `#{config[:protocol]}` set" do
225
+ let(:config) { super().reject { |k| k == config[:protocol] } }
226
+
227
+ it 'should raise' do
228
+ error_message = /Using `security_level` set to `#{security_level}` requires the configuration of `#{config[:protocol]}`/
229
+ expect { plugin.build_snmp_client!(client_builder, validate_usm_user: true) }.to raise_error(LogStash::ConfigurationError, error_message)
230
+ end
231
+ end
232
+ end
233
+ end
234
+ end
235
+ end
236
+ end
237
+
238
+ it 'should default `use_provided_mibs` to `true`' do
239
+ expect(plugin.config['use_provided_mibs']).to eql(true)
240
+ end
241
+
242
+ it 'should default `oid_mapping_format` to `default`' do
243
+ expect(plugin.config['oid_mapping_format']).to eql('default')
244
+ end
245
+
246
+ it 'should default `oid_map_field_values` to `false`' do
247
+ expect(plugin.config['oid_map_field_values']).to eql(false)
248
+ end
249
+ end
250
+
251
+ describe 'SNMP input plugins' do
252
+ let(:config) { {} }
253
+ subject(:plugin) { described_class.new(config) }
254
+
255
+ describe LogStash::Inputs::Snmp do
256
+ let(:config) { { 'get' => ['1.3.6.1.2.1.1.1.0'], 'hosts' => [{'host' => 'udp:127.0.0.1/161'}] } }
257
+
258
+ it_behaves_like 'a common SNMP plugin'
259
+ end
260
+
261
+ describe LogStash::Inputs::Snmptrap do
262
+ it_behaves_like 'a common SNMP plugin'
263
+ end
264
+ end