Skip to content

SNMP Kit for Elixir with SNMP Manager and Simulator

License

MIT, MIT licenses found

Licenses found

MIT
LICENSE
MIT
LICENSE.md
Notifications You must be signed in to change notification settings

awksedgreep/snmpkit

Repository files navigation

SnmpKit 🚀

IMPORTANT: Breaking changes in 1.0

  • Standardized result shape: all SNMP operations now return enriched maps per varbind: %{name?, oid, type, value, formatted?}
  • include_names: true by default (can be disabled per call or globally)
  • include_formatted: true by default (can be disabled to avoid formatting overhead)
  • Pretty helpers now preserve type and raw value and return the same enriched map shape
  • Migration guide: see docs/enriched-output-migration.md
  • Removed deprecated functions: get_with_type/3 and get_next_with_type/3 (use get/3 and get_next/3 which now always include type in the enriched map)
  • Multi-target APIs keep their outer return_format but inner items are enriched maps

Hex.pm Documentation License Elixir CI

A modern, comprehensive SNMP toolkit for Elixir - featuring a unified API, pure Elixir implementation, and powerful device simulation.

SnmpKit is a complete SNMP (Simple Network Management Protocol) solution built from the ground up in pure Elixir. It provides a clean, organized API for SNMP operations, MIB management, and realistic device simulation.

✨ Key Features

Performance and result toggles

  • include_names: true by default; set include_names: false per call or via application config to skip reverse lookup and speed up response processing
  • include_formatted: true by default; set include_formatted: false to skip formatting and return raw values only

Examples

  • High-throughput walk without formatting or name resolution:
{:ok, rows} = SnmpKit.SNMP.walk("192.168.1.1", "ifTable", include_names: false, include_formatted: false)
# rows: [%{oid: "1.3.6...", type: :integer, value: 1}, ...]

Multi-target defaults (1.0)

  • Concurrent Multi is the default for multi-target operations (get_multi, get_bulk_multi, walk_multi)
  • Default SNMP version for multi-target operations is :v2c (override with version: :v1 if needed)
  • No manual engine/service start is required — components are ensured at call time
  • Legacy/simple behavior is still available via strategy: :simple
  • Note: Single-target operations default to :v1 (configurable via SnmpKit.SnmpMgr.Config)
# Default: Concurrent Multi
{:ok, results} = SnmpKit.get_multi([{"h1", "sysDescr.0"}, {"h2", "sysUpTime.0"}])

# Legacy/simple path (opt-in)
{:ok, results} = SnmpKit.get_multi([{"h1", "sysDescr.0"}, {"h2", "sysUpTime.0"}], strategy: :simple)
  • 🎯 Unified API - Clean, context-based modules (SnmpKit.SNMP, SnmpKit.MIB, SnmpKit.Sim)
  • 🧬 Pure Elixir Implementation - No Erlang SNMP dependencies
  • 📋 Advanced MIB Support - Native parsing, compilation, and object resolution
  • 🖥️ Realistic Device Simulation - Create SNMP devices for testing and development
  • High Performance - Optimized for large-scale operations and concurrent requests
  • 🧪 Testing Friendly - Comprehensive test helpers and simulated devices

🚀 Quick Start

Installation

def deps do
  [
    {:snmpkit, "~> 1.3"}
  ]
end

Basic Usage

# Basic SNMP operations return enriched maps
{:ok, %{name: name, oid: oid, type: type, value: description, formatted: formatted}} =
  SnmpKit.SNMP.get("192.168.1.1", "sysDescr.0")

{:ok, system_info} = SnmpKit.SNMP.walk("192.168.1.1", "system")
# system_info: [
#   %{name: "sysDescr.0", oid: "1.3.6.1.2.1.1.1.0", type: :octet_string, value: "...", formatted: "..."},
#   ...
# ]

# MIB operations
{:ok, oid} = SnmpKit.MIB.resolve("sysDescr.0")
{:ok, name} = SnmpKit.MIB.reverse_lookup([1, 3, 6, 1, 2, 1, 1, 1, 0])

# Device simulation
device_profile = %{
  name: "Test Router",
  objects: %{[1, 3, 6, 1, 2, 1, 1, 1, 0] => "Test Router v1.0"}
}
{:ok, device} = SnmpKit.Sim.start_device(device_profile, port: 1161)

🏗️ Architecture

  • SnmpKit.SNMP - Complete SNMP manager protocol operations
  • SnmpKit.MIB - Comprehensive MIB management
  • SnmpKit.Sim - Realistic device simulation
  • SnmpKit - Direct access for convenience

📚 Documentation

🤝 Contributing

We welcome contributions! Please see the Contributing Guide for guidelines.

📄 License

SnmpKit is released under the MIT License.


Ready to simplify your SNMP operations? Get started with SnmpKit today! 🚀

About

SNMP Kit for Elixir with SNMP Manager and Simulator

Resources

License

MIT, MIT licenses found

Licenses found

MIT
LICENSE
MIT
LICENSE.md

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors