Você está na página 1de 42

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (1) | Jedizone

Jedizone

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

Introduo
interessante observar como existem perguntas que so feitas repetidamente. Enquanto muito mais fcil assumir que quem pergunta no sabe perguntar ou no entende a resposta, por outro lado a frequncia da pergunta pode indicar que a resposta no boa. No meu ponto de vista, isto acontece com o Net-SNMP. Existem muitas fontes de informao, em geral dispersas. Vrios detalhes so respondidos via cdigo fonte apenas, o que pode atrapalhar tambm. Associe isto a um assunto com jargo e conceitos prprios e tudo fica ainda mais complexo. Foi pensando neste cenrio que resolvi escrever um tutorial de como iniciar com o Net-SNMP. No quero publicar um monte de cdigo fonte, como geralmente encontramos por a. Quero discutir os princpios envolvidos e levar o leitor para um ponto de entendimento verdadeiro, no um mero digitador de tutorial, um escriba digital. uma meta audaciosa, da o ttulo pretensioso da srie. No entanto, como j consegui realiz-la em outros tutoriais, como o super referenciado tutorial de VLAN em Linux (http://www.vivaolinux.com.br/artigo/Criando-Redes-Locais-Virtuais%28VLANs%29-com-Linux) ou sobre a srie criao de um RTOS (http://jedizone.wordpress.com/2010/08/11/ajude-a-divulgar-a-serie/), acredito que posso conseguir novamente. Contarei com a ajuda do meu amigo Alan Carvalho (http://acassis.wordpress.com/) como revisor desta srie. Como ambos j implementamos equipamentos com Net-SNMP, pode ser uma boa chance de diminuir possveis erros. Uma observao final: no espere encontrar tudo sobre SNMP nesta introduo. Na verdade, o objetivo justamente o inverso: espere encontrar apenas o necessrio para conseguir entender o prximo post. A ideia ir aumentando o conhecimento de forma gradual, omitindo detalhes que podem apenas tornar o primeiro passo mais difcil. Livros e RFCs podem ajudar a refinar os conceitos quando voc decidir que realmente a hora ou precisar de algo mais avanado.

O que o SNMP ?
jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/ 1/4

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (1) | Jedizone

A traduo livre de SNMP (Simple Network Management Protocol) pode ser Protocolo Simples de Gerenciamento de Rede [1]. Como o nome indica, ele foi criado com o foco em gerncia de rede, permitindo avaliar e monitorizar, em tempo real, as condies de switches, roteadores, impressoras, entre outros. O SNMP foi criado pelo IETF (Internet Engineering Task Force), sendo normatizado atravs de vrios RFC (Request For Comments), cada um descrevendo aspectos particulares do protocolo e da sua implementao, sendo que os mais antigos datam de 1990. Ao final do texto existe uma lista de RFCs relacionados ao SNMP. O SNMP no segue sempre o paradigma cliente/servidor e gera um jargo prprio para denominar os seus elementos. Em geral, os elementos envolvidos com o SNMP se dividem em managed devices (dispositivos gerenciados) e managers (gerentes). Os dispositivos gerenciados executam Agentes (agents, em ingls) que se comunicam com os Sistemas de Gesto de Redes (NetworkManagement Systems, em ingls). Esta comunicao, na maior parte do tempo cliente/servidor, com o sistema de gesto (cliente) pedindo ou enviando informaes para o agente (servidor). Por exemplo, existem comandos como GET, usado para pedir uma informao, ou SET, usado para enviar um novo valor de informao. No entanto, o agente pode tambm enviar informaes para o sistema de gesto, sem que este tenha requisitado, agindo como cliente e este ltimo como servidor, neste caso. Esta uma situao comum para envio de alarmes, denominados traps, em ingls. O seu roteador poderia ser configurado para enviar um alarme quando a taxa de utilizao do link atingisse um determinado valor, por exemplo, sem que o manager fizesse uma requisio explcita. Na figura a seguir temos um exemplo da comunicao entre um manager (executando num servidor) e de um agente, rodando num switch. Fluxos do tipo cliente/servidor e trap esto representados.

(http://jedizone.files.wordpress.com/2012/02/net-snmp-manager-agente.png)
jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/ 2/4

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (1) | Jedizone

Verses do SNMP
O SNMP vem sempre evoluindo, agregando mais segurana e funcionalidades com o decorrer do tempo. No entanto, caractersticas sofisticadas de segurana s so encontradas na verso mais recente, infelizmente nem to utilizada como as verses anteriores. De forma rpida, as verses esto listadas a seguir [3]: SNMP Version 1 (SNMPv1): verso inicial, definida no RFC 1157 e grandemente suportada. Pouco segura por usar passwords em texto puro. SNMP version 2 (SNMPv2): devinida nos RFC 3416, 3417 e 3418 e conhecida como SNMPv2c (c de community), com categorias de acesso ao agente definidas como comunidades. SNMP version 3 (SNMPv3), com grandes melhorias em segurana, tais como autenticao, criptografia, etc. Definida atravs de vrios RFCs: 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418 e 2576. Ainda relativamente pouco usada.

O que o Net-SNMP ?
O Net-SNMP um grande projeto de fonte aberta iniciado em 1992 e responsvel por um conjunto de programas usados para a implementao das vrias verses do SNMP e com suporte a IPv4 e IPv6. Licenciado por licenas que se assemelham a BSD (existem algumas pequenas variaes), o Net-SNMP pode ser executado em vrios sistemas Unix, Linux e at mesmo Windows. Ser atravs da infraestrutura do Net-SNMP que desenvolveremos todos os nossos exemplos. Est bom por hoje. No prximo post (jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-osiniciantes-em-net-snmp-2/), vamos discutir mais alguns conceitos, como MIBs e OIDs. Voc pode me seguir no twitter para receber notificaes dos futuros posts desta srie atravs do usurio @marcelobarros (http://twitter.com/marcelobarros). At l !

Referncias:
[1] SNMP: detalhes tcnicos, RFCs, etc: http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol (http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol) [2] Net-SNMP: http://www.net-snmp.org/ (http://www.net-snmp.org/) [3] Essential SNMP, 2nd Edition, Douglas Mauro, Kevin Schmidt, Editora OReilly Linux , NET-SNMP , SNMP About these ads (http://en.wordpress.com/aboutthese-ads/)
3/4

jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (1) | Jedizone

This entry was posted on fevereiro 2, 2012, 9:16 am and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (0) 1. 2. 3. 4. TRACKBACKS (4)

O guia definitivo para os iniciantes em Net-SNMP (2) Jedizone O guia definitivo para os iniciantes em Net-SNMP (3) Jedizone O guia definitivo para os iniciantes em Net-SNMP (4) Jedizone O guia definitivo para os iniciantes em Net-SNMP (5) Jedizone

Blog no WordPress.com. The Fusion Theme.

jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/

4/4

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (2) | Jedizone

Jedizone

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

MIBs e OIDs
De volta ao assunto Net-SNMP, vamos hoje discutir sobre como a informao organizada no SNMP. Se voc est comeando deste post melhor ler o post anterior (http://jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/) antes. Lembrando tambm que esta srie conta com a reviso do Alan Carvalho (http://acassis.wordpress.com). Toda informao gerenciada pelo agente descrita atravs de uma MIB (Management Information Base). A MIB pode ser entendida como a descrio da base de dados hierrquica que um agente est disponibilizando. A figura a seguir ilustra uma parte desta MIB, geralmente representada em forma de rvore. Cada novo nodo tem um nome e um nmero relacionado, como pode ser visto abaixo. A especificao do SNMP deixa claro como a organizao da rvore feita, assim como o nome dos nodos padronizados.

jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-os-iniciantes-em-net-snmp-2/

1/3

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (2) | Jedizone

(http://jedizone.files.wordpress.com/2012/02/mid_oid.png) Cada elemento descrito nesta base de dados possui um identificador, denominado de OID (Object Identifier, em ingls). Eles podem ser referenciados usando os nomes dos nodos separados por ponto ou atravs da sequncia de nmeros dos nodos. Por exemplo, considere o seguinte OID: . i s o . o r g . d o d . i n t e r n e t . p r i v a t e . e n t e r p r i s e s Usando os nmeros dos nodos, o endereo anterior poderia ser descrito como (procure os nmero na figura anterior, para entender): . 1 . 3 . 6 . 1 . 4 . 1 Os OIDs que comeam com pontos so considerados absolutos, isto , sempre referenciam a origem da hierarquia, a raiz. No entanto, possvel ter tambm OIDs relativos, cuja origem parte de um ponto especfico da hierarquia. Alm disso, existe uma terceira forma suportada pelo Net-SNMP onde empregada uma notao de escopo, geralmente relacionada a um ponto especfico da rvore bastante utilizado e referenciado na documentao do SNMP. A diferena entre as trs formas pode ser vista a seguir, onde um nodo da ramificao system usado: Notao absoluta: .1.3.6.1.2.1.1.1 ou .iso.org.dod.internet.mgmt.mib-2.system.sysDescr Notao relativa: system.sysDescr
jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-os-iniciantes-em-net-snmp-2/ 2/3

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (2) | Jedizone

Notao de escopo: SNMPv2-MIB::system.sysDescr No se preocupe muito com o contedo do OID ou com a rvore. Neste momento, basta saber como eles so organizados. Ao fazer o seu prprio exemplo isto vai ficar bem mais claro. Depois, com a descrio do tipo de dado de cada OID e a sua posio hierrquica na rvore, fica possvel que um gerente consiga fazer o acesso informao desejada na base de dados. Est bom por hoje. No prximo post (http://jedizone.wordpress.com/2012/02/15/o-guia-definitivopara-os-iniciantes-em-net-snmp-3/), vamos discutir os tipos de dados que podem ser usados e os passos iniciais para a criao de uma MIB personalizada. At l ! About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on fevereiro 9, 2012, 12:05 am and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (0) TRACKBACKS (3) Linux , NET-SNMP , SNMP

1. O guia definitivo para os iniciantes em Net-SNMP (3) Jedizone 2. O guia definitivo para os iniciantes em Net-SNMP (4) Jedizone 3. O guia definitivo para os iniciantes em Net-SNMP (5) Jedizone

Blog no WordPress.com. The Fusion Theme.

jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-os-iniciantes-em-net-snmp-2/

3/3

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (3) | Jedizone

Jedizone

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

Tipos de dados no SNMP


Continuando a srie (veja tambm os posts anteriores, I (http://jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/) e II (http://jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-os-iniciantes-em-net-snmp-2/)), se voc pretende criar um equipamento que tenha suporte a SNMP, vai ter que descrever a sua parte da rvore. Isto significa ter que aprender a linguagem que descreve uma MIB, chamada de ASN.1, ou Abstract Syntax Notation One, em ingls. O primeiro passo, neste caso, entender os tipos de dados que podem ser usados. Felizmente, a lista no grande, sendo resumida logo a seguir (ver RFC 1155 para detalhes): Tipos primitivos: OCTET STRING: uma string, de zero ou mais octetos. Lembrando que um octeto um byte de 8 bits. O octet string usado como uma forma geral de descrio j que pode conter textos legveis (pelo menos em codificaes ocidentais). O nome do equipamento, do responsvel ou mesmo o modelo se encaixam muito bem em octect string. COUNTER: um nmero de 32 bits, na faixa de [0,2^32-1] e que deve ser inicializado com zero. Caso este nmero ultrapasse o limite superior, ele deve continuar partir do zero. Ele deve ser sempre crescente, at que o limite superior seja alcanado e o contador reinicie. Este tipo de dado usado geralmente para contar eventos, como nmero de bytes transmitidos, frames recebidos, etc. INTEGER: apesar de ser tambm um nmero de 32 bits, o integer geralmente usado para se criar enumeraes, isto , um conjunto de valores numricos finito que descrevem estados, caractersticas, etc. Por exemplo, um LED poderia ter uma enumerao com dois valores: (1) para APAGADO e (2) para ACESO. O valor zero no deve ser usado na enumerao, por norma. Todos os valores usados na enumerao so documentados na MIB e existem testes para verificar a faixa. OBJECT IDENTIFIER: um tipo de dado que descreve um OID, aquela sequncia de nmeros separados por pontos, visto no post anterior. NULL: Indica um valor nulo. No usado na descrio da MIB, geralmente apenas na comunicao.
jedizone.wordpress.com/2012/02/15/o-guia-definitivo-para-os-iniciantes-em-net-snmp-3/ 1/3

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (3) | Jedizone

Tipos compostos tambm existem: SEQUENCE: um tipo de dado que especifica uma lista de elementos formados por tipos primitivos. Usado para descrever listas de valores e ajuda na formao de tabelas. SEQUENCE OF: Geralmente usado para a descrio de tabelas, onde cada coluna de um determinado tipo de dado primitivo e precisa-se enviar uma linha dessa tabela por vez. Neste caso, sequence of ir se referir a uma lista, ou seja, um dado do tipo sequence. Uma situao comum quando se envia uma tabela de interfaces de rede de um roteador, com colunas como nome, estado, frames recebidos. Cada linha desta tabela pode ser descrita por uma lista (sequence) de octect string (nome), Integer (estado) e Counter (frames recebidos) e a tabela como uma sequncia de sequncias (sequence of). Sim, um pouco confuso, vale a pena reler este ltimos dois tipos. IpAddress: um endereo IP de 32 bits, isto , IP verso 4 (IPv4). NetwordAddress: um endereo de rede de 32 bits, isto , IP verso 4 (IPv4). Gauge: apesar de ser um nmero de 32 bits como o counter, o gauge no precisa ser sempre crescente, basta obedecer a faixa [0,2^32-1]. Se voc tiver que especificar, por exemplo, o uso de banda instantneo, este seria um bom candidato. TimeTicks: este tipo de dado, tambm de 32 bits, representa um valor de tempo. Cada unidade representa um centsimo de segundo. Poderia ser usado para indicar, por exemplo, por quanto tempo um determinado servidor est em execuo. Opaque: um tipo de dado especial que permite que outros tipos possam ser representados para uma sequncias de bytes, isto , como um octect string. Imagine, por exemplo, que voc precise enviar um nmero de dupla preciso (ponto flutuante). Seria possvel fazer isto com o tipo opaque, ficando a decodificao/decodificao na responsabilidade dos agentes e gerentes. D para perceber que possvel colocar qualquer coisa aqui, no ? Com estes tipos j possvel pensar na representao dos dados da MIB. Como voc deve ter percebido, cada um deles tem um propsito bem especfico, no so simplesmente nmeros com faixas diferentes. Tentei mostrar isso ao dar exemplos de uso de cada um deles. Por exemplo, usar um Gauge no lugar de um Counter um erro grave j que o Counter precisa ser crescente. No fundo, o SNMP poderia trabalhar apenas a com diferena entre o valor atual e o anterior, o que faz sentido para o Counter mas no para o Gauge. Continuaremos com o assunto MIBs personalizadas no prximo post (http://jedizone.wordpress.com/2012/02/23/o-guia-definitivo-para-os-iniciantes-em-net-snmp-4/). At l ! About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on fevereiro 15, 2012, 8:00 pm and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (0) TRACKBACKS (3) Linux , NET-SNMP , SNMP

1. O guia definitivo para os iniciantes em Net-SNMP (4) Jedizone 2. O guia definitivo para os iniciantes em Net-SNMP (5) Jedizone 3. O guia definitivo para os iniciantes em Net-SNMP (2) | Jedizone
jedizone.wordpress.com/2012/02/15/o-guia-definitivo-para-os-iniciantes-em-net-snmp-3/ 2/3

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (3) | Jedizone

Blog no WordPress.com. The Fusion Theme.

jedizone.wordpress.com/2012/02/15/o-guia-definitivo-para-os-iniciantes-em-net-snmp-3/

3/3

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (4) | Jedizone

Jedizone

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

Planejando uma MIB


No leu os posts anteriores ? Por favor, ento faa isso agora, antes de continuar nesse post, para no perder a linha de raciocnio e conceitos bsicos (veja os links para os posts I (http://jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/), II (http://jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-os-iniciantes-em-net-snmp-2/) e III (http://jedizone.wordpress.com/2012/02/15/o-guia-definitivo-para-os-iniciantes-em-net-snmp-3/)). Neste post, o assunto como planejar a sua MIB personalizada. Como j comentamos, a parte personalizada da sua MIB deve estar abaixo do nodo enterprises. Ser necessrio requisitar um ponto de entrada na hierarquia da MIB para a sua empresa, caso ela ainda no tenha. Se quiser apenas testar, use um nmero ainda no alocado. Vale lembrar que o IANA registra (http://pen.iana.org/pen/PenApplication.page), gratuitamente, estes pontos de entrada (veja a lista completa aqui (http://www.iana.org/assignments/enterprise-numbers)). Por exemplo, suponha que a empresa fictcia ACME esteja listada como o nmero de enterprise privado 54321 (Private Enterprise Number, ou PEN). Teremos o seguinte ponto de entrada: absoluto: .iso.org.dod.internet.private.enterprise.acme absoluto (numrico): .1.3.6.1.4.1.54321 relativo: entreprises.54321 Abaixo desta entrada, quem manda voc. Eu recomendo que d uma olhada em como outras empresas pensaram a organizao do espao delas de MIB. Isto pode lhe ajudar a fazer uma distribuio mais racional e preparada para o futuro. muito comum ver ramos para produtos, ramos experimentais e de teste. Para um exemplo bem didtico e visual, resolvemos expor, atravs da nossa MIB exemplo, quatro elementos comuns de um sistema baseado em PC: O estado do led do caps lock (apenas leitura e com estados aceso ou apagado) O estado do led num lock (apenas leitura e com estados aceso ou apagado) O estado do led scroll lock (leitura e escrita e com estados aceso ou apagado). Como pouca se usa o scroll lock, acreditamos que no seja problema escrever nele.
jedizone.wordpress.com/2012/02/23/o-guia-definitivo-para-os-iniciantes-em-net-snmp-4/ 1/3

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (4) | Jedizone

O tempo de execuo do sistema (apenas leitura), em segundos Vamos colocar os leds dentro de um nodo leds e o tempo de execuo dentro de um nodo sistema. Alm disso, toda esta estrutura vai ficar abaixo de um nodo chamado exemplo, subordinado ao nodo acme. Graficamente, teremos:

(http://jedizone.files.wordpress.com/2012/02/mib-exemplo.png) MIB exemplo rvore Com esta MIB em mente, o OID do led scroll lock, por exemplo, pode ser escrito como: absoluto: .iso.org.dod.internet.private.enterprise.acme.examplo.leds.scrolllock absoluto (numrico): .1.3.6.1.4.1.54321.0.0.2 relativo: entreprises.54321.0.0.2 Notem que os nmeros dos nodos foram escolhidos pelo gerente de redes da empresa ACME (eu mesmo) e no precisariam ser necessariamente sequenciais. Com relao aos tipos de dados, j deu para perceber que os os leds sero do tipo INTEGER, com dois valores possveis (1 para aceso e 2 para apagado), e que o tempo de execuo ser do tipo COUNTER ? Se no ficou claro, recomendo reler o post anterior (http://jedizone.wordpress.com/2012/02/15/o-guia-definitivo-para-os-iniciantesem-net-snmp-3/). Muito bem. Com tudo definido hora de usar a linguagem ASN.1 (http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One), ou Abstract Syntax Notation One, para descrever a MIB que planejamos. Sim, no prximo post (http://jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/). Vejo vocs l. About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on fevereiro 23, 2012, 11:33 pm and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site.
jedizone.wordpress.com/2012/02/23/o-guia-definitivo-para-os-iniciantes-em-net-snmp-4/ 2/3

Linux , NET-SNMP , SNMP

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (4) | Jedizone

COMENTRIOS (0)

TRACKBACKS (2)

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

Blog no WordPress.com. The Fusion Theme.

jedizone.wordpress.com/2012/02/23/o-guia-definitivo-para-os-iniciantes-em-net-snmp-4/

3/3

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (5) | Jedizone

Jedizone

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

Introduo
Este o nosso ltimo post terico e vamos aprender nele como escrever a nossa MIB de exemplo na notao ASN.1. Antes de mais nada, j aviso que no sairo letrados nesta notao, apenas aprenderemos o necessrio para o exemplo. Afinal, uma srie para iniciantes, no ? Aumente seu nvel de concentrao pois teremos um post bem mais extenso aqui. Mos obra ! (Links para os posts anteriores: I (http://jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantesem-net-snmp-1/), II (http://jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-os-iniciantesem-net-snmp-2/), III (http://jedizone.wordpress.com/2012/02/15/o-guia-definitivo-para-os-iniciantesem-net-snmp-3/), e IV (http://jedizone.wordpress.com/2012/02/23/o-guia-definitivo-para-osiniciantes-em-net-snmp-4/))

Descrevendo a hierarquia
A primeira coisa a saber como derivar um nodo do outro na notao ASN.1, isto , como estabelecer as relaes de hierarquia entre os objetos (OIDs) na rvore. Para indicar isto, veja a seguinte notao: n o d o F i l h o: : ={n o d o P a in u m e r o D o N o d o F i l h o} Uma observao: o correto se referir ao nodo como OID ou objeto, mas vou usar nodo enquanto considerar que ele represente com mais clareza o conceito e ir mudando para OID no decorrer do texto. Perdoem a falta de rigor tcnico em favorecimento da aprendizagem. Voltando ao nosso caso, para indicar a relao de hierarquia entre o nodo acme, cujo suposto nmero privado foi 54321, e a sua origem, enterprises, fazemos a seguinte declarao: a c m e: : ={e n t e r p r i s e s5 4 3 2 1} Se voc esqueceu, a representao grfica da MIB est a seguir:
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/ 1/8

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (5) | Jedizone

(http://jedizone.files.wordpress.com/2012/02/mibexemplo.png) MIB exemplo rvore Observando a hierarquia, possvel notar que temos o nodo exemplo logo a seguir, com nmero zero. Ou seja: e x e m p l o: : ={a c m e0} Da mesma forma, os nodos leds e sistema, derivados de exemplo, so representados como abaixo, em plena conformidade com o nosso diagrama de MIB: l e d s : : ={e x e m p l o0} s i s t e m a: : ={e x e m p l o1} Finalmente, temos derivaes de leds e sistema, onde realmente se encontram os objetos que queremos ter acesso: c a p s L o c k : : ={l e d s0} n u m L o c k : : ={l e d s1} s c r o l l L o c k: : ={l e d s2} r u n T i m e : : ={s i s t e m a0} Colocando tudo junto, ficamos com a lista abaixo (compare este resultado com a figura que represente a MIB, caso tenha dvida): a c m e : : ={e n t e r p r i s e s5 4 3 2 1} e x e m p l o : : ={a c m e0} l e d s : : ={e x e m p l o0} s i s t e m a : : ={e x e m p l o1} c a p s L o c k : : ={l e d s0} n u m L o c k : : ={l e d s1} s c r o l l L o c k: : ={l e d s2} r u n T i m e : : ={s i s t e m a0} Fcil, nhein ? Mas no s isso. Precisamos ainda detalhar cada entrada dessas. Algumas delas so apenas relaes de hierarquia que precisam ser declaradas, outras so objetos que sero realmente lidos e precisam ter definidos os seus tipos de dados, direitos de acesso, descrio, etc. Tambm preciso prover uma informao geral sobre a MIB, como data de criao, verso, entre outras coisas.
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/ 2/8

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (5) | Jedizone

Detalhando a descrio do objeto


De uma forma geral, as declaraes anteriores sero modificadas para apresentar este detalhamento, ou melhor, esta caracterizao do objeto, segundo este novo modelo: n o d o F i l h oM A C R O D E C A R A C T E R I Z A C A O D O O B J E T O D E T A L H E 1v a l o r 1 D E T A L H E 2v a l o r 2 . . . D E T A L H E nv a l o r n : : ={n o d o P a in u m e r o D o N o d o F i l h o} Por exemplo, os objetos capsLock, numLock, scrollLock e runTime so os elementos que sero realmente acessados pelo gerente SNMP. Na realidade, eles devem ser declarados com a ajuda de uma macro chamada OBJECT-TYPE (ver RFC 1212), que ir permitir definir o tipo de dado, direitos de acesso, etc. Esta macro ir ser inserida entre o nome do objeto e sua declarao de herana. Vamos ver como ficaria a declarao completa do runTime para se ter uma ideia: r u n T i m eO B J E C T T Y P E S Y N T A XC o u n t e r 3 2 A C C E S Sr e a d o n l y S T A T U Sm a n d a t o r y D E S C R I P T I O N" C u r r e n tr u n n i n gt i m ei ns e c o n d s " : : ={s i s t e m a3} Note que foi definido o tipo de dado (Counter32), os direitos de acesso (read-only), a sua obrigatoriedade de implementao e a descrio do objeto. Recomendo fortemente que voc leia as RFCs citadas ao final deste post ou quando for precisar de criar a sua prpria MIB. Vamos ver outro exemplo, no caso para o led capsLock: c a p s L o c kO B J E C T T Y P E S Y N T A XI N T E G E R{a c e s o ( 1 ) ,a p a g a d o ( 2 )} A C C E S Sr e a d o n l y S T A T U Sm a n d a t o r y D E S C R I P T I O N " C a p sL o c kL e dS t a t u s : 1 :A c e s o 2 :A p a g a d o " : : ={l e d s0} O tipo de dado usado agora foi INTEGER, sendo tambm fornecida a faixa vlida de valores, 1 e 2, com seus respectivos rtulos, aceso e apagado. Isto lembra muito uma enumerao em linguagem C, com uma notao um pouco diferente, no caso rtulo(id). Caso queira declarar
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/ 3/8

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (5) | Jedizone

apenas uma faixa de valores, sem rtulos, voc pode usar algo como INTEGER(0..65536), indicando uma faixa de 0 a 65536. Tambm possvel usar o tipo Integer32 e no ter que especificar faixas (RFC 2578). Notou como simples colocar strings longas, de mltiplas linhas ? numLock segue o mesmo padro de capsLock, por ser somente leitura: n u m L o c kO B J E C T T Y P E S Y N T A XI N T E G E R{a c e s o ( 1 ) ,a p a g a d o ( 2 )} A C C E S Sr e a d o n l y S T A T U Sm a n d a t o r y D E S C R I P T I O N " N u mL o c kL e dS t a t u s : 1 :A c e s o 2 :A p a g a d o " : : ={l e d s1} Apenas scrollLock se altera, j que permite a escrita no objeto. No preciso ter midi-chlorians no sangue para chutar como ficaria: s c r o l l L o c kO B J E C T T Y P E S Y N T A XI N T E G E R{a c e s o ( 1 ) ,a p a g a d o ( 2 )} A C C E S Sr e a d w r i t e S T A T U Sm a n d a t o r y D E S C R I P T I O N " S c r o l lL o c kL e dS t a t u s : 1 :A c e s o 2 :A p a g a d o " : : ={l e d s2} Isto completa a descrio dos objetos que sero acessados mas faltam ainda trs coisas: 1. A descrio da MIB exemplo que estamos criando (autor, data, reviso, etc) 2. Detalhamento de nodos que so puramente para descrio da hierarquia (leds e sistema) 3. Sees de importao de macros, algo parecido com o que temos nos #includes em um programa em C.

Detalhando o mdulo
Para a descrio da MIB, a referncia a RFC 2578, que apresenta todos os detalhes. A grosso modo, a nossa definio poderia ser feita com a ajuda da macro MODULE-IDENTITY:

jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/

4/8

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (5) | Jedizone

e x e m p l oM O D U L E I D E N T I T Y L A S T U P D A T E D" 2 0 1 2 0 3 0 1 0 0 0 0 Z " O R G A N I Z A T I O N" A C M ES / A " C O N T A C T I N F O " M a r c e l oB a r r o sd eA l m e i d a S e r t a o z i n h o / S P B r a z i lh t t p : / / j e d i z o n e . w o r d p r e s s . c o m " D E S C R I P T I O N " e x e m p l oM I B ,i n i t i a lr e v i s i o n " : : ={a c m e0} Relativamente simples, no ? Caso a MIB mude, voc pode ir adicionando a descrio das revises com os campos REVISION e DESCRIPTION. Perceba tambm que a data segue o formato YYYYMMDDHHMMZ. O Z significa GMT e precisa estar no final. Os outros campos so auto-explicativos.

Detalhando a hierarquia
Objetos teis apenas para montagem da hierarquia, como leds e sistema, so definidos com a ajuda de OBJECT IDENTIFIER, sem muitos rodeios: a c m eO B J E C TI D E N T I F I E R : : ={e n t e r p r i s e s5 4 3 2 1} l e d sO B J E C TI D E N T I F I E R : : ={e x e m p l o0} s i s t e m aO B J E C TI D E N T I F I E R: : ={e x e m p l o1}

Detalhando a definio da MIB


Quase pronto. O toque final envelopar tudo que fizemos, indicando os includes necessrios, como pode ser visto abaixo. So as incluses que trazem a definio de cada macro utilizada e tambm passam a prover determinados tipos de dados. Aproveite para aprender que linhas comeando com significam comentrios e so excelentes para melhorar ainda mais a documentao da MIB:

jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/

5/8

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (5) | Jedizone

E X E M P L O M I BD E F I N I T I O N S: : =B E G I N I M P O R T S M O D U L E I D E N T I T Y , O B J E C T T Y P E , C o u n t e r 3 2F R O MS N M P v 2 S M I , e n t e r p r i s e sF R O MS N M P v 2 S M I ; -N o s s ad e c l a r a od eM I Bv a ia q u id e n t r o! E N D Fica um lembrete de que a conveno usar nomes de OIDs que comecem em letras minsculas e que o nome da MIB deve ser escrito em letras maisculas. Tambm no vlido usar _ na definio do nome, da a definio EXEMPLO-MIB. Finalmente, basta colocar tudo junto e teremos o arquivo de MIB que pode ser visto ao final do post. Salve-o com o nome EXEMPLO-MIB. Neste ponto, uma vez que voc j deve ter entendido a lgica da MIB, no difcil comear a planejar a sua MIB. De novo, no deixe de ler as RFCs pertinentes para aprender a usar outros tipos de dados e aprofundar-se nos detalhes (a lista de leituras est logo ao final). Por hoje s. No prximo post (http://jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-osiniciantes-em-net-snmp-6/) vamos dar uma pausa na teoria e fazer a instalao do Net-SNMP. Vamos precisar tambm do cdigo fonte para adicionar a nossa MIB no agente. At l !

Referncias
RFC4181 (http://www.ietf.org/rfc/rfc4181.txt): Guidelines for Authors and Reviewers of MIB Documents RFC2578 (http://www.ietf.org/rfc/rfc2578.txt): Structure of Management Information Version 2 (SMIv2) RFC1212 (http://www.ietf.org/rfc/rfc1212.txt): Concise MIB Definitions Dicas (http://www.mibdesigner.com/html/mibdesign.html)do que fazer e no fazer

Arquivo EXEMPLO-MIB
E X E M P L O M I BD E F I N I T I O N S: : =B E G I N I M P O R T S M O D U L E I D E N T I T Y , O B J E C T T Y P E , C o u n t e r 3 2F R O MS N M P v 2 S M I ,
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/ 6/8

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (5) | Jedizone

e n t e r p r i s e sF R O MS N M P v 2 S M I ; -D e s c r i od aM I Be x e m p l o e x e m p l oM O D U L E I D E N T I T Y L A S T U P D A T E D" 2 0 1 2 0 3 0 1 0 0 0 0 Z " O R G A N I Z A T I O N" A C M ES / A " C O N T A C T I N F O " M a r c e l oB a r r o sd eA l m e i d a S e r t a o z i n h o / S P B r a z i l-h t t p : / / j e d i z o n e . w o r d p r e s s . c o m " D E S C R I P T I O N " e x e m p l oM I B ,i n i t i a lr e v i s i o n . " : : ={a c m e0} -H i e r a r q u i aa u x i l i a r a c m e O B J E C TI D E N T I F I E R: : ={e n t e r p r i s e s5 4 3 2 1} l e d s O B J E C TI D E N T I F I E R: : ={e x e m p l o0} s i s t e m a O B J E C TI D E N T I F I E R: : ={e x e m p l o1} -O b j e t o se x p o r t a d o s c a p s L o c kO B J E C T T Y P E S Y N T A X I N T E G E R{a c e s o ( 1 ) ,a p a g a d o ( 2 )} A C C E S S r e a d o n l y S T A T U S m a n d a t o r y D E S C R I P T I O N " C a p sL o c kL e dS t a t u s : 1 :A c e s o 2 :A p a g a d o " : : ={l e d s0} n u m L o c kO B J E C T T Y P E S Y N T A X I N T E G E R{a c e s o ( 1 ) ,a p a g a d o ( 2 )} A C C E S S r e a d o n l y S T A T U S m a n d a t o r y D E S C R I P T I O N " N u mL o c kL e dS t a t u s : 1 :A c e s o 2 :A p a g a d o
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/ 7/8

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (5) | Jedizone

" : : ={l e d s1} s c r o l l L o c kO B J E C T T Y P E S Y N T A X I N T E G E R{a c e s o ( 1 ) ,a p a g a d o ( 2 )} A C C E S S r e a d w r i t e S T A T U S m a n d a t o r y D E S C R I P T I O N " S c r o l lL o c kL e dS t a t u s : 1 :A c e s o 2 :A p a g a d o " : : ={l e d s2} r u n T i m eO B J E C T T Y P E S Y N T A X C o u n t e r 3 2 A C C E S S r e a d o n l y S T A T U S m a n d a t o r y D E S C R I P T I O N" C u r r e n tr u n n i n gi m ei ns e c o n d s " : : ={s i s t e m a3} E N D About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on maro 2, 2012, 2:11 am and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (1) TRACKBACKS (2) Linux , NET-SNMP , SNMP

#1 por tales em setembro 19, 2013 - 3:11 pm Muito bom Estou comeando a implementao de um agente com MIBs personalizadas e este foi a melhor orientao que li at agora, fala detalhadamente sobre o assunto. Mais uma vez parabns. Se tiver mais informaes sobre SNMP, MIB ou gerenciamento de redes gostaria de ler tambm. 1. O guia definitivo para os iniciantes em Net-SNMP (6) Jedizone 2. O guia definitivo para os iniciantes em Net-SNMP (4) | Jedizone

Blog no WordPress.com. The Fusion Theme.

jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/

8/8

04/10/13

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

Jedizone

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

Introduo
No post anterior (http://jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-emnet-snmp-5/) 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 tambm no Linux Mint 12, usando os pacotes originais de cada distribuio. Ambas usavam verses do Net-SNMP derivadas da verso original 5.4.3.

Instalando as dependncias
O primeiro passo instalar os programas necessrios e tambm as MIBs oficiais. O comando abaixo deve resolver, j que as dependncias do libsnmp-dev e snmp iro trazer os outros pacotes necessrios. J o pacote snmp-mibs-downloader faz a mgica de baixar todas as MIBs requeridas. Se este processo falhar, voc pode tentar novamente executando o script /usr/bin/download-mibs diretamente. s u d oa p t g e ti n s t a l ls n m p m i b s d o w n l o a d e rl i b s n m p d e vs n m p

Preparando o ambiente
Como vamos realizar todas as tarefas dentro da conta usurio para evitar conflitos com verses de Net-SNMP do seu sistema, ser necessrio criar alguns diretrios. So eles: m k d i rp~ / . s n m p / m i b s / m k d i rp~ / s n m p / s r c /
jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-em-net-snmp-6/ 1/6

04/10/13

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

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

Verificando a instalao
Para se certificar de que tudo est certo, verifique como o Net-SNMP est procurando as informaes de diretrios de MIBs com o comando: n e t s n m p c o n f i gd e f a u l t m i b d i r s A sada deve ser algo como abaixo:

/ h o m e / m a r c e l o / . s n m p / m i b s : / u s r / s h a r e / m i b s / s i t e : / u s r / s h a r e / s n m p / m i b s : / u s r / s h a r e / m Teste tambm os caminhos de configurao com: n e t s n m p c o n f i gs n m p c o n f p a t h Sada: / e t c / s n m p : / u s r / s h a r e / s n m p : / u s r / l i b / s n m p : / h o m e / m a r c e l o / . s n m p : / v a r / l i b / s n m p Ou seja, ~/.snmp/mibs mesmo um local de procura de MIBs e ~/.snmp um local de configurao (no meu caso, o diretrio de usurio /home/marcelo/) Crie o arquivo ~/.snmp/snmp.conf, com o seguinte contedo m i b s+ E X E M P L O M I B Isto ir permitir a carga da sua MIB de dentro da sua prpria conta, sem precisar escrever em reas onde somente o administrador da mquina teria acesso.

Validando a MIB
Para verificar se a MIB no tem nenhum erro, percorra-a com o snmptranslate: s n m p t r a n s l a t eT pI Ra c m e Dever ser produzida uma sada em rvore, evidenciando tudo que foi feito, como a seguir:

jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-em-net-snmp-6/

2/6

04/10/13

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

+ a c m e ( 5 4 3 2 1 ) | + e x e m p l o ( 0 ) | + l e d s ( 0 ) | | | + -R -E n u m V a l c a p s L o c k ( 0 ) | | V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) | + -R -E n u m V a l n u m L o c k ( 1 ) | | V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) | + -R W -E n u m V a l s c r o l l L o c k ( 2 ) | V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) | + s i s t e m a ( 1 ) | + -R -C o u n t e r r u n T i m e ( 3 ) Fique atento aos seguinte detalhes: O nome do arquivo da MIB e a definio 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. Alis, voc poderia inspecionar outro ponto qualquer da rvore. Por exemplo: s n m p t r a n s l a t eT pI Rl e d s + l e d s ( 0 ) | + -R -E n u m V a l c a p s L o c k ( 0 ) | V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) + -R -E n u m V a l n u m L o c k ( 1 ) | V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) + -R W -E n u m V a l s c r o l l L o c k ( 2 ) V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) Se deu tudo certo at agora, o passo seguinte comear a escrever o cdigo de acesso aos dados da sua MIB.

Gerando cdigo com mib2c


Felizmente o Net-SNMP tem um utilitrio chamado mib2c que permite a gerao automtica de callbacks para acesso aos seus OIDs aps analisar a sua MIB. Isto ir lhe fazer economizar um bom tempo.
jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-em-net-snmp-6/ 3/6

04/10/13

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

O mib2c usa um perfil de gerao de cdigo (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, existiro 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 mduloda nossa MIB: c d~ / s n m p / s r c m i b 2 ccm i b 2 c . s c a l a r . c o n fe x e m p l o A sada deve ser algo como abaixo: w r i t i n gt oe x e m p l o . h w r i t i n gt oe x e m p l o . c r u n n i n gi n d e n to ne x e m p l o . c r u n n i n gi n d e n to ne x e m p l o . h Este comando ir gerar um arquivo exemplo.c e outro exemplo.h, com todos os esqueletos de funo e definies necessrios. Como dever de casa, inspecione estes arquivos e verifique, por exemplo, os registros de OIDs. Parte do arquivo est abaixo, para os que no puderem rodar ainda o mib2c:

jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-em-net-snmp-6/

4/6

04/10/13

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

/ * *I n i t i a l i z e st h ee x e m p l om o d u l e* / v o i d i n i t _ e x e m p l o ( v o i d ) { s t a t i co i dc a p s L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 0} ; s t a t i co i dn u m L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 1} ; s t a t i co i ds c r o l l L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 2} ; s t a t i co i dr u n T i m e _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 1 , 3} ; D E B U G M S G T L ( ( " e x e m p l o " ," I n i t i a l i z i n g \ n " ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " c a p s L o c k " ,h a n d l e _ c a p s L o c k , c a p s L o c k _ o i d ,O I D _ L E N G T H ( c a p s L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " n u m L o c k " ,h a n d l e _ n u m L o c k , n u m L o c k _ o i d ,O I D _ L E N G T H ( n u m L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " s c r o l l L o c k " ,h a n d l e _ s c r o l l L o c k , s c r o l l L o c k _ o i d ,O I D _ L E N G T H ( s c r o l l L o c k _ o i d ) , H A N D L E R _ C A N _ R W R I T E ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " r u n T i m e " ,h a n d l e _ r u n T i m e , r u n T i m e _ o i d ,O I D _ L E N G T H ( r u n T i m e _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; } Basta agora preencher as funes e recompilar o net-snmp. Mas isto vai ficar para o prximo post (http://jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/). No perca ! About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on maro 8, 2012, 11:45 pm and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (0) TRACKBACKS (2) Linux , NET-SNMP , SNMP

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

jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-em-net-snmp-6/

5/6

04/10/13

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

Blog no WordPress.com. The Fusion Theme.

jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-em-net-snmp-6/

6/6

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

Jedizone

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

Introduo
No post anterior (http://jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-emnet-snmp-6/) usamos o aplicativo mib2c para gerar o esqueleto de cdigo da nossa MIB. Neste post discutiremos como rechear o esqueleto de cdigo gerado. No fundo, a quantidade de cdigo necessria bem pequena quando se usa o modelo escalar de gerao, facilitando bastante uma primeira implementao do agente. Recomendo que leiam depois o tutorial (http://www.netsnmp.org/wiki/index.php/TUT:Writing_a_MIB_Module) disponvel no site do Net-SNMP para maiores esclarecimento e dicas. Tambm recomendo que olhem a implementao de outras mdulos para aprenderem um pouco mais atravs de exemplos (os fontes do Net-SNMP podem ajudar).

Preenchendo os callabcks da MIB exemplo


Se voc observar, vai notar que foram criadas cinco funes dentro de exemplo.c (ao final do texto). Em cada uma delas voc ir preencher um pequeno pedao. A primeira funo a inicializao da MIB, chamada na partida do snmpd, e que deve conter o que for necessrio para inicializar o seu mdulo: v o i di n i t _ e x e m p l o ( ) J as outras quatro so os callbacks dos OIDs presentes na MIB propriamente ditos, e que devem ser preenchidos adequadamente, de acordo com o esperado para o tipo de dado. i n th a n d l e _ c a p s L o c k ( ) i n th a n d l e _ n u m L o c k ( ) i n th a n d l e _ s c r o l l L o c k ( ) i n th a n d l e _ r u n T i m e ( ) A seguir, vamos dar uma descrio sumria sobre as funes geradas e o seu preenchimento.
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 1/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

Inicializando a MIB
Para cada mdulo gerado com o mib2c usando a opo escalar, ser gerada uma funo de inicializao com o prottipo abaixo, chamada apenas uma vez, na partida. v o i di n i t _ n o m e d o m o d u l o ( v o i d ) Dentro desta funo voc deve inicializar os dados que pretende usar posteriormente e registrar cada OID que tenha um callback associado com ajuda da funo netsnmp_register_scalar (http://www.net-snmp.org/dev/agent/group__scalar.html). No nosso caso, foi feita a seguinte inicializao e registro (o cdigo foi generosamente criado pelo nosso revisor e colaborador, Alan Carvalho (http://acassis.wordpress.com/)): # i n c l u d e< t i m e . h > # i n c l u d e< s t d i o . h > # i n c l u d e< X 1 1 / X l i b . h > # i n c l u d e< X 1 1 / X K B l i b . h > # i n c l u d e< n e t s n m p / n e t s n m p c o n f i g . h > # i n c l u d e< n e t s n m p / n e t s n m p i n c l u d e s . h > # i n c l u d e< n e t s n m p / a g e n t / n e t s n m p a g e n t i n c l u d e s . h > # i n c l u d e" e x e m p l o . h " # d e f i n eC A P S L O C K1 # d e f i n eN U M L O C K2 # d e f i n eS C R L O C K4 s t a t i ci n tc a p s L o c k L E D=0 ; s t a t i ci n tn u m L o c k L E D=0 ; s t a t i ci n ts c r o l l L o c k L E D=0 ; u n s i g n e di n tk b d ; D i s p l a y* d i s p=N U L L ; / * *I n i t i a l i z e st h ee x e m p l om o d u l e* / v o i d i n i t _ e x e m p l o ( v o i d ) { s t a t i co i dc a p s L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 0} ; s t a t i co i dn u m L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 1} ; s t a t i co i ds c r o l l L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 2} ; s t a t i co i dr u n T i m e _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 1 , 3} ; D E B U G M S G T L ( ( " e x e m p l o " ," I n i t i a l i z i n g \ n " ) ) ;
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 2/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

/ *O p e nXD i s p l a yt or e a dk e y b o a r ds t a t u sl a t e r* / d i s p=X O p e n D i s p l a y ( N U L L ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " c a p s L o c k " ,h a n d l e _ c a p s L o c k , c a p s L o c k _ o i d ,O I D _ L E N G T H ( c a p s L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " n u m L o c k " ,h a n d l e _ n u m L o c k , n u m L o c k _ o i d ,O I D _ L E N G T H ( n u m L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " s c r o l l L o c k " ,h a n d l e _ s c r o l l L o c k , s c r o l l L o c k _ o i d ,O I D _ L E N G T H ( s c r o l l L o c k _ o i d ) , H A N D L E R _ C A N _ R W R I T E ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " r u n T i m e " ,h a n d l e _ r u n T i m e , r u n T i m e _ o i d ,O I D _ L E N G T H ( r u n T i m e _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; } Em azul est a parte efetivamente criada pelo Alan, para que vocs tenham um noo do trabalho. D pra perceber que ficou a cargo do programador basicamente a inicializao da varivel disp e de variveis internas do mdulo.

Criando callbacks somente de leitura


Callbacks somente de leitura tambm so simples de serem feitos, bastando implementar o mtodo GET. O mib2c j gera o esqueleto e voc precisa apenas preencher adequadamente a rea indicada pelo ponteiro passado na requisio, respeitando o tipo de dado. Abaixo, o callback para o caps lock, com comentrios logo depois.

jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/

3/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

i n t h a n d l e _ c a p s L o c k ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / i f( d i s p ) { X k b G e t I n d i c a t o r S t a t e ( d i s p ,X k b U s e C o r e K b d ,& k b d ) ; / *ai n s t a n c eh a n d l e ra l s oo n l yh a n d su so n er e q u e s ta tat i m e ,s o w ed o n ' tn e e dt ol o o po v e ral i s to fr e q u e s t s ;w e ' l lo n l yg e to n e .* / s w i t c h ( r e q i n f o > m o d e ){

c a s eM O D E _ G E T : s n m p _ s e t _ v a r _ t y p e d _ v a l u e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R , ( u _ c h a r* )& c a p s L o c k L E D ,s i z e o f ( c a p s L o c k L E b r e a k ;

d e f a u l t : / *w es h o u l dn e v e rg e th e r e ,s ot h i si sar e a l l yb a de r r o r* / s n m p _ l o g ( L O G _ E R R ," u n k n o w nm o d e( % d )i nh a n d l e _ c a p s L o c k \ n " ,r e q i n f o r e t u r nS N M P _ E R R _ G E N E R R ; } r e t u r nS N M P _ E R R _ N O E R R O R ; } O switch permite identificar o tipo de requisio via reqinfo->mode e a funo snmp_set_var_typed_value() realiza a cpia do valor desejado (contedo da varivel capsLockLED) dentro do buffer de resposta. Se voc for investigar a estrutura netsnmp_request_info (http://www.netsnmp.org/dev/agent/structnetsnmp__request__info__s.html), vai notar que requestvb, do tipo netsnmp_variable_list (http://www.net-snmp.org/dev/agent/structvariable__list.html), possui o campo de dados (val (http://www.net-snmp.org/dev/agent/structvariable__list.html)) definido como uma unio dos diversos tipos de dados (http://www.netsnmp.org/dev/agent/unionnetsnmp__vardata.html) do Net-SNMP. a estratgia para tratar tipos diferentes de dados com uma mesma interface (union). Estratgia, alis, bastante comum em C.

Criando callbacks de leitura e escrita


No caso de leitura e escrita, existe trabalho adicional. Isto acontece porque o Net-SNMP assume que, ao pedir a escrita de um OID (mtodo SET), ele deve fazer isto da maneira mais segura possvel. Antes de fazer a escrita propriamente dita, ele pede que o agente verifique o tipo de dado a
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 4/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

ser gravado (estado RESERVE1 da mquina de estados abaixo, retirada do site do Net-SNMP (http://www.net-snmp.org/wiki/images/5/5c/Set-actions.jpg)), aloque espao para ele (estado RESERVE2) e s ento requisita a escrita (estado ACTION). O valor s efetivado posteriormente, com o estado COMMIT (qualquer semelhana com uma base de dados no mera coincidncia). Perceba que existem estados para tratar as falhas tambm, como no caso de no existir espao para o recurso (sada pelo estado FREE) ou em falha da escrita (estado UNDO, que desfaz tudo e retorna ao valor anterior).

Felizmente o nosso caso bastante simples e possvel ignorar a maioria dos estados e implementar apenas o estado ACTION para o mtodo SET. Obviamente, tambm necessrio implementar o mtodo GET. Veja como ficou ento o callback para o scroll lock: i n t h a n d l e _ s c r o l l L o c k ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { i n tr e t ; X K e y b o a r d C o n t r o lv a l u e s ; / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / i f( d i s p ) { X k b G e t I n d i c a t o r S t a t e ( d i s p ,X k b U s e C o r e K b d ,& k b d ) ; s c r o l l L o c k L E D=( k b d&S C R L O C K )= =S C R L O C K ; }
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 5/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

/ *ai n s t a n c eh a n d l e ra l s oo n l yh a n d su so n er e q u e s ta tat i m e ,s o w ed o n ' tn e e dt ol o o po v e ral i s to fr e q u e s t s ;w e ' l lo n l yg e to n e .* / s w i t c h ( r e q i n f o > m o d e ){

c a s eM O D E _ G E T : s n m p _ s e t _ v a r _ t y p e d _ v a l u e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R , ( u _ c h a r* )& s c r o l l L o c k L E D ,s i z e o f ( s c r o l l L o b r e a k ;

/ * *S E TR E Q U E S T * *m u l t i p l es t a t e si nt h et r a n s a c t i o n . S e e : *h t t p : / / w w w . n e t s n m p . o r g / t u t o r i a l 5 / t o o l k i t / m i b _ m o d u l e / s e t a c t i o n s . j p * / c a s eM O D E _ S E T _ R E S E R V E 1 : / *o ry o uc o u l du s en e t s n m p _ c h e c k _ v b _ t y p e _ a n d _ s i z ei n s t e a d* / r e t=n e t s n m p _ c h e c k _ v b _ t y p e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R ) ; i f(r e t! =S N M P _ E R R _ N O E R R O R){ n e t s n m p _ s e t _ r e q u e s t _ e r r o r ( r e q i n f o ,r e q u e s t s ,r e t) ; } b r e a k ; c a s eM O D E _ S E T _ R E S E R V E 2 : / *X X Xm a l l o c" u n d o "s t o r a g eb u f f e r* / b r e a k ; c a s eM O D E _ S E T _ F R E E : / *X X X :f r e er e s o u r c e sa l l o c a t e di nR E S E R V E 1a n d / o r R E S E R V E 2 . S o m e t h i n gf a i l e ds o m e w h e r e ,a n dt h es t a t e s b e l o ww o n ' tb ec a l l e d .* / b r e a k ; c a s eM O D E _ S E T _ A C T I O N : / *X X X :p e r f o r mt h ev a l u ec h a n g eh e r e* / / *S e t u pS c r o l l L o c kL E D* / / *S C R O L LL O C Ki sv a l u e3i nXG r a p h i cm o d e* / v a l u e s . l e d=S C R L O C K-1 ; / *l e d _ m o d e=0i sL E DO F F .l e d _ m o d e=1i sL E DO N .* / v a l u e s . l e d _ m o d e=* ( r e q u e s t s > r e q u e s t v b > v a l . i n t e g e r ) ; / *C h a n g es t a t u so fS c r o l l L o c kL E D* / X C h a n g e K e y b o a r d C o n t r o l ( d i s p ,K B L e d|K B L e d M o d e ,& v a l u e s ) ; / *S y n c r o n i z ei m e d i a t e l y* / X S y n c ( d i s p ,0 ) ;
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 6/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

b r e a k ; c a s eM O D E _ S E T _ C O M M I T : / *X X X :d e l e t et e m p o r a r ys t o r a g e* / b r e a k ; c a s eM O D E _ S E T _ U N D O : / *X X X :U N D Oa n dr e t u r nt op r e v i o u sv a l u ef o rt h eo b j e c t* / b r e a k ;

d e f a u l t : / *w es h o u l dn e v e rg e th e r e ,s ot h i si sar e a l l yb a de r r o r* / s n m p _ l o g ( L O G _ E R R ," u n k n o w nm o d e( % d )i nh a n d l e _ s c r o l l L o c k \ n " ,r e q i n r e t u r nS N M P _ E R R _ G E N E R R ; } r e t u r nS N M P _ E R R _ N O E R R O R ; } Moleza, nhein ? Basicamente cdigo para acesso ao led, sendo que o valor recebido veio atravs da unio citada anteriormente (requests->requestvb->val.integer ).

Listagem final
A seguir esto os arquivos exemplo.c e exemplo.h, para referncia. No prximo post vamos recompilar o Net-SNMP usando estes arquivos. Aproveite para ler um pouco a wiki do Net-SNMP (http://www.net-snmp.org/wiki/). Ela levemente confusa mas com muita informao til. At l !

exemplo.h

jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/

7/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

/ * *N o t e :t h i sf i l eo r i g i n a l l ya u t o g e n e r a t e db ym i b 2 cu s i n g * :m i b 2 c . s c a l a r . c o n f1 1 8 0 52 0 0 5 0 1 0 70 9 : 3 7 : 1 8 Zd t s 1 2$ * / # i f n d e fE X E M P L O _ H # d e f i n eE X E M P L O _ H / *f u n c t i o nd e c l a r a t i o n s* / v o i di n i t _ e x e m p l o ( v o i d ) ; N e t s n m p _ N o d e _ H a n d l e rh a n d l e _ c a p s L o c k ; N e t s n m p _ N o d e _ H a n d l e rh a n d l e _ n u m L o c k ; N e t s n m p _ N o d e _ H a n d l e rh a n d l e _ s c r o l l L o c k ; N e t s n m p _ N o d e _ H a n d l e rh a n d l e _ r u n T i m e ; # e n d i f/ *E X E M P L O _ H* /

exemplo.c
/ * *N o t e :t h i sf i l eo r i g i n a l l ya u t o g e n e r a t e db ym i b 2 cu s i n g * :m i b 2 c . s c a l a r . c o n f1 1 8 0 52 0 0 5 0 1 0 70 9 : 3 7 : 1 8 Zd t s 1 2$ * / # i n c l u d e< t i m e . h > # i n c l u d e< s t d i o . h > # i n c l u d e< X 1 1 / X l i b . h > # i n c l u d e< X 1 1 / X K B l i b . h > # i n c l u d e< n e t s n m p / n e t s n m p c o n f i g . h > # i n c l u d e< n e t s n m p / n e t s n m p i n c l u d e s . h > # i n c l u d e< n e t s n m p / a g e n t / n e t s n m p a g e n t i n c l u d e s . h > # i n c l u d e" e x e m p l o . h " # d e f i n eC A P S L O C K1 # d e f i n eN U M L O C K2 # d e f i n eS C R L O C K4 s t a t i ci n tc a p s L o c k L E D=0 ; s t a t i ci n tn u m L o c k L E D=0 ; s t a t i ci n ts c r o l l L o c k L E D=0 ; u n s i g n e di n tk b d ; D i s p l a y* d i s p=N U L L ; / * *I n i t i a l i z e st h ee x e m p l om o d u l e* / v o i d
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 8/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

i n i t _ e x e m p l o ( v o i d ) { s t a t i co i dc a p s L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 0} ; s t a t i co i dn u m L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 1} ; s t a t i co i ds c r o l l L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 2} ; s t a t i co i dr u n T i m e _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 1 , 3} ; D E B U G M S G T L ( ( " e x e m p l o " ," I n i t i a l i z i n g \ n " ) ) ; / *O p e nXD i s p l a yt or e a dk e y b o a r ds t a t u sl a t e r* / d i s p=X O p e n D i s p l a y ( N U L L ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " c a p s L o c k " ,h a n d l e _ c a p s L o c k , c a p s L o c k _ o i d ,O I D _ L E N G T H ( c a p s L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " n u m L o c k " ,h a n d l e _ n u m L o c k , n u m L o c k _ o i d ,O I D _ L E N G T H ( n u m L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " s c r o l l L o c k " ,h a n d l e _ s c r o l l L o c k , s c r o l l L o c k _ o i d ,O I D _ L E N G T H ( s c r o l l L o c k _ o i d ) , H A N D L E R _ C A N _ R W R I T E ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " r u n T i m e " ,h a n d l e _ r u n T i m e , r u n T i m e _ o i d ,O I D _ L E N G T H ( r u n T i m e _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; } i n t h a n d l e _ c a p s L o c k ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / i f( d i s p ) { X k b G e t I n d i c a t o r S t a t e ( d i s p ,X k b U s e C o r e K b d ,& k b d ) ; c a p s L o c k L E D=( k b d&C A P S L O C K )= =C A P S L O C K ; }
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 9/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

/ *ai n s t a n c eh a n d l e ra l s oo n l yh a n d su so n er e q u e s ta tat i m e ,s o w ed o n ' tn e e dt ol o o po v e ral i s to fr e q u e s t s ;w e ' l lo n l yg e to n e .* / s w i t c h ( r e q i n f o > m o d e ){

c a s eM O D E _ G E T : s n m p _ s e t _ v a r _ t y p e d _ v a l u e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R , ( u _ c h a r* )& c a p s L o c k L E D ,s i z e o f ( c a p s L o c k L E b r e a k ;

d e f a u l t : / *w es h o u l dn e v e rg e th e r e ,s ot h i si sar e a l l yb a de r r o r* / s n m p _ l o g ( L O G _ E R R ," u n k n o w nm o d e( % d )i nh a n d l e _ c a p s L o c k \ n " ,r e q i n f o r e t u r nS N M P _ E R R _ G E N E R R ; } r e t u r nS N M P _ E R R _ N O E R R O R ; } i n t h a n d l e _ n u m L o c k ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / i f( d i s p ) { X k b G e t I n d i c a t o r S t a t e ( d i s p ,X k b U s e C o r e K b d ,& k b d ) ; n u m L o c k L E D=( k b d&N U M L O C K )= =N U M L O C K ; } / *ai n s t a n c eh a n d l e ra l s oo n l yh a n d su so n er e q u e s ta tat i m e ,s o w ed o n ' tn e e dt ol o o po v e ral i s to fr e q u e s t s ;w e ' l lo n l yg e to n e .* / s w i t c h ( r e q i n f o > m o d e ){

c a s eM O D E _ G E T : s n m p _ s e t _ v a r _ t y p e d _ v a l u e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R , ( u _ c h a r* )& n u m L o c k L E D ,s i z e o f ( n u m L o c k L E D ) b r e a k ;

d e f a u l t : / *w es h o u l dn e v e rg e th e r e ,s ot h i si sar e a l l yb a de r r o r* / s n m p _ l o g ( L O G _ E R R ," u n k n o w nm o d e( % d )i nh a n d l e _ n u m L o c k \ n " ,r e q i n f o r e t u r nS N M P _ E R R _ G E N E R R ; } r e t u r nS N M P _ E R R _ N O E R R O R ;


jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 10/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

} i n t h a n d l e _ s c r o l l L o c k ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { i n tr e t ; X K e y b o a r d C o n t r o lv a l u e s ; / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / i f( d i s p ) { X k b G e t I n d i c a t o r S t a t e ( d i s p ,X k b U s e C o r e K b d ,& k b d ) ; s c r o l l L o c k L E D=( k b d&S C R L O C K )= =S C R L O C K ; } / *ai n s t a n c eh a n d l e ra l s oo n l yh a n d su so n er e q u e s ta tat i m e ,s o w ed o n ' tn e e dt ol o o po v e ral i s to fr e q u e s t s ;w e ' l lo n l yg e to n e .* / s w i t c h ( r e q i n f o > m o d e ){

c a s eM O D E _ G E T : s n m p _ s e t _ v a r _ t y p e d _ v a l u e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R , ( u _ c h a r* )& s c r o l l L o c k L E D ,s i z e o f ( s c r o l l L o b r e a k ;

/ * *S E TR E Q U E S T * *m u l t i p l es t a t e si nt h et r a n s a c t i o n . S e e : *h t t p : / / w w w . n e t s n m p . o r g / t u t o r i a l 5 / t o o l k i t / m i b _ m o d u l e / s e t a c t i o n s . j p * / c a s eM O D E _ S E T _ R E S E R V E 1 : / *o ry o uc o u l du s en e t s n m p _ c h e c k _ v b _ t y p e _ a n d _ s i z ei n s t e a d* / r e t=n e t s n m p _ c h e c k _ v b _ t y p e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R ) ; i f(r e t! =S N M P _ E R R _ N O E R R O R){ n e t s n m p _ s e t _ r e q u e s t _ e r r o r ( r e q i n f o ,r e q u e s t s ,r e t) ; } b r e a k ; c a s eM O D E _ S E T _ R E S E R V E 2 : / *X X Xm a l l o c" u n d o "s t o r a g eb u f f e r* / b r e a k ; c a s eM O D E _ S E T _ F R E E : / *X X X :f r e er e s o u r c e sa l l o c a t e di nR E S E R V E 1a n d / o r


jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 11/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

R E S E R V E 2 . S o m e t h i n gf a i l e ds o m e w h e r e ,a n dt h es t a t e s b e l o ww o n ' tb ec a l l e d .* / b r e a k ; c a s eM O D E _ S E T _ A C T I O N : / *X X X :p e r f o r mt h ev a l u ec h a n g eh e r e* / / *S e t u pS c r o l l L o c kL E D* / / *S C R O L LL O C Ki sv a l u e3i nXG r a p h i cm o d e* / v a l u e s . l e d=S C R L O C K-1 ; / *l e d _ m o d e=0i sL E DO F F .l e d _ m o d e=1i sL E DO N .* / v a l u e s . l e d _ m o d e=* ( r e q u e s t s > r e q u e s t v b > v a l . i n t e g e r ) ; / *C h a n g es t a t u so fS c r o l l L o c kL E D* / X C h a n g e K e y b o a r d C o n t r o l ( d i s p ,K B L e d|K B L e d M o d e ,& v a l u e s ) ; / *S y n c r o n i z ei m e d i a t e l y* / X S y n c ( d i s p ,0 ) ; b r e a k ; c a s eM O D E _ S E T _ C O M M I T : / *X X X :d e l e t et e m p o r a r ys t o r a g e* / b r e a k ; c a s eM O D E _ S E T _ U N D O : / *X X X :U N D Oa n dr e t u r nt op r e v i o u sv a l u ef o rt h eo b j e c t* / b r e a k ;

d e f a u l t : / *w es h o u l dn e v e rg e th e r e ,s ot h i si sar e a l l yb a de r r o r* / s n m p _ l o g ( L O G _ E R R ," u n k n o w nm o d e( % d )i nh a n d l e _ s c r o l l L o c k \ n " ,r e q i n r e t u r nS N M P _ E R R _ G E N E R R ; } r e t u r nS N M P _ E R R _ N O E R R O R ; } i n t h a n d l e _ r u n T i m e ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / t i m e _ tn o w=0 ; / *ai n s t a n c eh a n d l e ra l s oo n l yh a n d su so n er e q u e s ta tat i m e ,s o
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 12/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

w ed o n ' tn e e dt ol o o po v e ral i s to fr e q u e s t s ;w e ' l lo n l yg e to n e .* / n o w=t i m e ( N U L L ) ; s w i t c h ( r e q i n f o > m o d e ){ c a s eM O D E _ G E T : s n m p _ s e t _ v a r _ t y p e d _ v a l u e ( r e q u e s t s > r e q u e s t v b ,A S N _ C O U N T E R , ( u _ c h a r* )n o w ,s i z e o f ( n o w ) ) ; b r e a k ;

d e f a u l t : / *w es h o u l dn e v e rg e th e r e ,s ot h i si sar e a l l yb a de r r o r* / s n m p _ l o g ( L O G _ E R R ," u n k n o w nm o d e( % d )i nh a n d l e _ r u n T i m e \ n " ,r e q i n f o r e t u r nS N M P _ E R R _ G E N E R R ; } r e t u r nS N M P _ E R R _ N O E R R O R ; } About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on maro 21, 2012, 8:16 am and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (12) TRACKBACKS (2) Linux , NET-SNMP , SNMP

#1 por acassis em maro 24, 2012 - 10:37 am Marcelo, A linha destacada em azul no inicio do seu post: if (disp) { XkbGetIndicatorState(disp, XkbUseCoreKbd, &kbd); capsLockLED = (kbd & CAPSLOCK) == CAPSLOCK; } deveria ter quebra de linha, ficou tudo na mesma linha. []s Alan #2 por Marcelo Barros em maro 24, 2012 - 12:17 pm Pois , pena que o wordpress no programa em C. Eu altero, ele acerta. Depois ele vai e muda sozinho se edito o post novamente. Tem um bug nele. No sei bem o que fazer neste caso . :/ #3 por Thiago Neves em julho 27, 2012 - 9:13 pm

jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/

Oi Marcelo, descobri a pouco tempo esse seu blog e estou achando bastante til para aprender13/15 a

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

Oi Marcelo, descobri a pouco tempo esse seu blog e estou achando bastante til para aprender a mexer no net-snmp Existem planos para um post 8? Abcs. #4 por Marcelo Barros em julho 28, 2012 - 12:23 am Sim, mais uns dois ou trs. Aguarde que o oitavo t semi pronto. #5 por Thiago Neves em julho 30, 2012 - 8:05 pm Caro Marcelo, uma dvida. Nesse ltimo post voc mostrou como gerar uma MIB com a estrutura SMIv2 e gerar um cdigo C relativo a essa estrutura. Esse cdigo em C possui funes GET e SET. Minha dvida , onde eu incorporaria essas funes GET e SET? Imagino que seja em algum programa que eu queira que seja visvel para o gerente snmp. isso mesmo? Abcs. #6 por cleitonbueno em julho 30, 2012 - 9:26 pm Talvez isso possa ajuda.. http://cleitonbueno.wordpress.com/2012/05/22/codigos-de-programacao-nos-posts-dowordpress/ #7 por Marcelo Barros em julho 31, 2012 - 12:04 am Thiago, Sim, voc vai ter que alimentar estes GET e SET de algum lugar. Existem algumas formas, que vo depender de como pretende fazer a sua integrao com o net-snmp. A mais simples o tratamento entrar dentro do cdigo final do net-snmp, ao escrev-lo dentro do arquivo gerado pelo net-snmp, algo que pretendo mostrar em breve. Mas existem outras formas. Voc pode implementar uma lib que carregada pelo net-snmp e que usada para fornecer os valores ou ainda possvel usar comunicao entre processos. Nestes casos, a complexidade cresce bastante. Eu acho mais simples deixar parte do seu cdigo dentro do net-snmp mesmo e ler/setar coisas em arquivos do /proc. O /proc seria uma espcie de gateway entre a manipulao do get/set e o grosso do seu programa. Isto pode no ser bom, dependendo das licenas que pretenda usar, da a comunicao entre processos o caminho. Tem exemplos disso no site do net-snmp. #8 por Marcelo Barros em julho 31, 2012 - 12:08 am Obrigado pela dica, Cleiton. Vou us-la daqui pra diante ! #9 por Renan Carlos em agosto 23, 2012 - 6:26 pm Ol, quando sai a prxima parte do tutorial? Abcs. #10 por Marcelo Barros (@marcelobarros) em agosto 23, 2012 - 7:48 pm Nos prximos dias, texto praticamente pronto, preciso apenas validar #11 por joao em abril 27, 2013 - 12:14 pm Ola. aonde consigo mais destas informaes ? estou aguardando o proximo post, porem estou em fase de implementao e preciso fazer funcionar. muito grato. joao
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 14/15

04/10/13

O guia definitivo para os iniciantes em Net-SNMP (7) | Jedizone

#12 por lasacochehomme.com em junho 30, 2013 - 2:44 pm An outstanding share! Ive just forwarded this onto a co-worker who was conducting a little research on this. And he actually bought me lunch due to the fact that I discovered it for him lol. So allow me to reword this. Thank YOU for the meal!! But yeah, thanx for spending some time to talk about this topic here on your website. 1. O guia definitivo para os iniciantes em Net-SNMP (6) | Jedizone 2. O guia definitivo para os iniciantes em Net-SNMP (8) | Jedizone

Blog no WordPress.com. The Fusion Theme.

jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/

15/15

Você também pode gostar