logstash-integration-snmp 4.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
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