Skip to content

SNMP Driver

Stephen von Takach edited this page Aug 24, 2020 · 4 revisions
def on_load
  @session = SNMP::V3::Session.new("usr-md5-aes", "authkey1", "privkey1", priv_protocol: SNMP::V3::Security::PrivacyProtocol::AES)
end

def my_request
  validate_session
  do_send @session.get("1.3.6.1.2.1.1.4.0"), name: :my_request
end

def received(data, task)
  buffer = IO::Memory.new(data)

  if task.try &.name == "validation"
    session.validate buffer.read_bytes(ASN1::BER)
    return task.try &.success
  end

  response = @session.parse(buffer.read_bytes(ASN1::BER))

  case task.try &.name
  when "my_request"
    # process my_request response
    response_data = response.value.get_string
    task.try &.success(response_data)
  else
    # nothing to process
    task.try &.success
  end
end

protected def do_send(message, **options)
  queue(**options) do |task|
    if @session.must_revalidate?
      send(@session.engine_validation_probe.to_ber, name: :validation, priority: 999)
      task.retry("engine validation required")
    else
      transport.send(@session.prepare(message))
    end
  end
end
Clone this wiki locally