O guia definitivo para os iniciantes em Net-SNMP (6)

Introdução

No post anterior entendemos como criar a nossa MIB. Hoje iremos validar a MIB criada e prepará-la para uso como o Net-SNMP. Todos os testes foram realizados no Ubuntu 10.10 e também no Linux Mint 12, usando os pacotes originais de cada distribuição. Ambas usavam versões do Net-SNMP derivadas da versão original 5.4.3.

Instalando as dependências

O primeiro passo é instalar os programas necessários e também as MIBs oficiais. O comando abaixo deve resolver, já que as dependências do libsnmp-dev e snmp irão trazer os outros pacotes necessários. Já o pacote snmp-mibs-downloader faz a mágica de baixar todas as MIBs requeridas. Se este processo falhar, você pode tentar novamente executando o script /usr/bin/download-mibs diretamente.

sudo apt-get install snmp-mibs-downloader libsnmp-dev snmp

Preparando o ambiente

Como vamos realizar todas as tarefas dentro da conta usuário para evitar conflitos com versões de Net-SNMP do seu sistema, será necessário criar alguns diretórios. São eles:

mkdir -p ~/.snmp/mibs/
mkdir -p ~/snmp/src/

Copie a MIB que criamos no post anterior (EXEMPLO-MIB) para o diretório ~/.snmp/mibs/. Estamos assumindo que o arquivo da MIB será denominado de EXEMPLO-MIB, use exatamente este nome para poder reproduzir o conteúdo do post.

Verificando a instalação

Para se certificar de que tudo está certo, verifique como o Net-SNMP está procurando as informações de diretórios de MIBs com o comando:

net-snmp-config --default-mibdirs

A saída deve ser algo como abaixo:

/home/marcelo/.snmp/mibs:/usr/share/mibs/site:/usr/share/snmp/mibs:/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp

Teste também os caminhos de configuração com:

net-snmp-config --snmpconfpath

Saída:

/etc/snmp:/usr/share/snmp:/usr/lib/snmp:/home/marcelo/.snmp:/var/lib/snmp

Ou seja, ~/.snmp/mibs é mesmo um local de procura de MIBs e ~/.snmp um local de configuração (no meu caso, o diretório de usuário é /home/marcelo/)

Crie o arquivo ~/.snmp/snmp.conf, com o seguinte conteúdo

mibs +EXEMPLO-MIB

Isto irá permitir a carga da sua MIB de dentro da sua própria conta, sem precisar escrever em áreas onde somente o administrador da máquina teria acesso.

Validando a MIB

Para verificar se a MIB não tem nenhum erro, percorra-a com o snmptranslate:

snmptranslate -Tp -IR acme

Deverá ser produzida uma saída em árvore, evidenciando tudo que foi feito, como a seguir:

+--acme(54321)
   |
   +--exemplo(0)
      |
      +--leds(0)
      |  |
      |  +-- -R-- EnumVal   capsLock(0)
      |  |        Values: aceso(1), apagado(2)
      |  +-- -R-- EnumVal   numLock(1)
      |  |        Values: aceso(1), apagado(2)
      |  +-- -RW- EnumVal   scrollLock(2)
      |           Values: aceso(1), apagado(2)
      |
      +--sistema(1)
         |
         +-- -R-- Counter   runTime(3)

Fique atento aos seguinte detalhes:

  • O nome do arquivo da MIB e a definição inicial dentro do arquivo da MIB devem bater: “EXEMPLO-MIB” e “EXEMPLO-MIB DEFINITIONS …” (ver dentro do arquivo).
  • Ao rodar o comando snmptranslate, o que importa é o nome do OID. No caso, leia a MIB e verá que, dentro dela, existe um OID “exemplo”.

Aliás, você poderia inspecionar outro ponto qualquer da árvore. Por exemplo:

snmptranslate -Tp -IR leds

+--leds(0)
   |
   +-- -R-- EnumVal   capsLock(0)
   |        Values: aceso(1), apagado(2)
   +-- -R-- EnumVal   numLock(1)
   |        Values: aceso(1), apagado(2)
   +-- -RW- EnumVal   scrollLock(2)
            Values: aceso(1), apagado(2)

Se deu tudo certo até agora, o passo seguinte é começar a escrever o código de acesso aos dados da sua MIB.

Gerando código com mib2c

Felizmente o Net-SNMP tem um utilitário chamado mib2c que permite a geração automática de callbacks para acesso aos seus OIDs após analisar a sua MIB. Isto irá lhe fazer economizar um bom tempo.

O mib2c usa um perfil de geração de código (veja a lista completa com “ls /etc/snmp/mib2c.*“). O perfil a ser usado dependerá da complexidade da sua MIB e das respostas que ela precisa prover. No nosso caso, existirão apenas leituras simples de OIDs, sem tabelas ou outras estruturas mais complexas. Isto pode ser tranquilamente gerado pelo perfil “escalar”. O mib2c vai precisar ainda de um OID à partir do qual ele irá gerar os callbacks. Vamos usar o OID exemplo, o nome do móduloda nossa MIB:

cd ~/snmp/src
mib2c -c mib2c.scalar.conf exemplo

A saída deve ser algo como abaixo:

writing to exemplo.h
writing to exemplo.c
running indent on exemplo.c
running indent on exemplo.h

Este comando irá gerar um arquivo exemplo.c e outro exemplo.h, com todos os esqueletos de função e definições necessários. Como dever de casa, inspecione estes arquivos e verifique, por exemplo, os registros de OIDs. Parte do arquivo está abaixo, para os que não puderem rodar ainda o mib2c:

/** Initializes the exemplo module */
void
init_exemplo(void)
{
    static oid capsLock_oid[] = { 1,3,6,1,4,1,54321,0,0,0 };
    static oid numLock_oid[] = { 1,3,6,1,4,1,54321,0,0,1 };
    static oid scrollLock_oid[] = { 1,3,6,1,4,1,54321,0,0,2 };
    static oid runTime_oid[] = { 1,3,6,1,4,1,54321,0,1,3 };

  DEBUGMSGTL(("exemplo", "Initializing\n"));

    netsnmp_register_scalar(
        netsnmp_create_handler_registration("capsLock", handle_capsLock,
                               capsLock_oid, OID_LENGTH(capsLock_oid),
                               HANDLER_CAN_RONLY
        ));
    netsnmp_register_scalar(
        netsnmp_create_handler_registration("numLock", handle_numLock,
                               numLock_oid, OID_LENGTH(numLock_oid),
                               HANDLER_CAN_RONLY
        ));
    netsnmp_register_scalar(
        netsnmp_create_handler_registration("scrollLock", handle_scrollLock,
                               scrollLock_oid, OID_LENGTH(scrollLock_oid),
                               HANDLER_CAN_RWRITE
        ));
    netsnmp_register_scalar(
        netsnmp_create_handler_registration("runTime", handle_runTime,
                               runTime_oid, OID_LENGTH(runTime_oid),
                               HANDLER_CAN_RONLY
        ));
}

Basta agora preencher as funções e recompilar o net-snmp. Mas isto vai ficar para o próximo post. Não perca !

About these ads

, ,

  1. O guia definitivo para os iniciantes em Net-SNMP (7) « Jedizone
  2. O guia definitivo para os iniciantes em Net-SNMP (5) | Jedizone

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 508 outros seguidores

%d blogueiros gostam disto: