SMI – Structure of Management Information
A SMI (estrutura de informações de gerenciamento) é um método para definir objetos gerenciados e os seus respectivos comportamentos, nesse contexto, a MIB pode ser considerada como um banco de dados de objetos gerenciados, que por sua vez, são consultados/manipulados pelos agentes SNMP.
Para entender melhor, imagine a MIB como uma tabela de um banco de dados, por exemplo, tabela de clientes, o objeto gerenciável (variável MIB) como um atributo da tabela, por exemplo, nome_cliente, e a SMI como a definição/documentação do tipo de dado a ser armazenado no atributo para representar o nome do cliente, por exemplo, varchar(50), ou seja, a SMI é o método para definir objetos gerenciados, enquanto a MIB é a definição (por meio da sintaxe SMI) dos próprios objetos. Como um dicionário, que mostra como pronunciar uma palavra e, em seguida, apresenta o significado ou a definição dessa mesma palavra, uma MIB define um nome em texto de um objeto gerenciado e explica o seu significado.
A SMIv1 (RFC 1155) define como os objetos gerenciados são nomeados e especifica os respectivos tipos de dados associados. A SMIv2 (RFC 2578) oferece otimizações para o SNMPv2.
Vejamos a SMIv1 e na sequencia abordaremos a SMIv2.
A definição dos objetos gerenciados pode ser fragmentada em 3 atributos, são eles:
- Nome
O nome ou identificador do objeto (OID – Object Identifier) define um nome único para um objeto gerenciado. O OID pode ser trabalhado em dois formatos: numérico e o simbólico (legível).
– Exemplo numérico: 1.3.6.1.2.1.1.1.0
– Exemplo simbólico: iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 - Tipo e sintaxe
O tipo de dado de um objeto gerenciado é definido por meio de um subconjunto da Abstract Syntax Notarion One (ASN.1), que é meio de especificar o modo como os dados são representados entre os agentes e gerentes num contexto SNMP. - Codificação
Uma única instancia de um objeto gerenciado é codificada em uma string de octetos por meio do método Basic Encoding Rules (BER). O método BER define o modo de codificação e decodificação dos objetos para que sejam transmitidos através de um meio de transporte, por exemplo, Ethernet.
Nomeando OIDs
Os objetos gerenciados são organizados em uma estrutura hierárquica em árvore. Um ID de objeto é formado por um conjunto de números inteiros baseados nos nós da árvore e separados por ponto (.). Há também a representação simbólica (por nomes) que nada mais é que a mesma representação numérica, mas utilizando os nomes das subárvores e folhas.
Na árvore de objetos, o nó posicionado no início da árvore é denominado raiz, tudo o que tiver filhos será uma subárvore e tudo que não tiver filhos será chamado de nó folha.
Definindo OIDs
O atributo SYNTAX utiliza os padrões da ASN.1 para definir o tipo de dado que será associado a um determinado objeto gerenciado. Os tipos de dados disponíveis são:
- INTEGER: Número de 32 bits
- OCTET STRING: 0 (zero) ou mais bytes para representação de strings de texto
- Counter: Número de 32 bits com valor mínimo de 0 e máximo de 232 – 1
- OBJECT IDENTIFIER: Uma string decimal de pontos que representa um objeto gerenciado na árvore de objetos. Por exemplo, 1.3.6.1.4.1.9
- NULL: Atualmente sem uso no SNMP
- SEQUENCE: Define listas que contem 0 ou mais tipos diferentes de dados da ASN.1
- SEQUENCE OF: Define um objeto gerenciado formado por uma SEQUENCE de tipos do ASN.1
- IpAddress: Representa um endereço do IPv4 de 32 bits.
- NetworkAddress: Idêntico ao tipo IpAddress, mas pode representar tipos diferentes de endereços de rede
- Gauge: Número inteiro de 32 bits que varia de 0 a 232 – 1. Um Gauge pode aumentar e diminuir aleatoriamente. Exemplo: medição da velocidade de uma interface de rede
- TimeTicks: Interiro de 32 bits utilizado para medida de tempo em centésimos de segundos
- Opaque: Permite o armazenamento de qualquer codificação do ASN.1 em uma OCTET STREAM
Extensões para SMI na versão 2
A SMIv2 estende a árvore de objetos da SMI ao adicionar a ramificação snmpV2 à subárvore internet, ao incluir diversos outros tipos de dados novos e ao efetuar algumas outras alterações.
Os novos tipos de dados da SMIv2 são:
- Integer32: Identico ao INTEGER
- Counter32: Identico a Counter
- Gauge32: Identico ao Gauge
- Unsigned32: Representa valores decimais no intervalo de 0 a 232 – 1, inclusive
- Counter64: Semelhante ao Counter32, mas o valor máximo é 264
- BITS: Uma lista de bits não negativos
As definições de um objeto na SMIv2 são similares aos da SMIv1. Veja abaixo um exemplo, onde as partes em negrito correspondem às novas definições.
<name> OBJECT-TYPE
SYNTAX <datatype>
UnitParts <Optional, veja detalhes abaixo>
MAX-ACCESS <veja detalhes abaixo>
STATUS <veja detalhes abaixo>
DESCRIPTION
“Descrição de texto para o objeto em questão”
AUGMENTS { <nome da tabela> }
:: = { <OID única que define este objeto > }
Aprimoramento na definição de objeto | Descrição |
UnitParts | Uma descrição em texto das unidades, por exemplo, segundos, milissegundos, etc. |
MAX-ACCESS | O ACCESS de um objeto pode ser MAX-ACCESS no SNMPv2. As opções válidas são read-only, read-write, read-create, not-accessible e accessible-for-notify |
STATUS | Esta clausula foi estendida para aceitar as palavras-chave current, obsolete e deprecated. Current no SNMPv2 equivale a mandatory em uma MIB do SNMPv1 |
AUGMENTS | Permite estender uma tabela adicionando uma ou mais colunas representadas por outros objetos. |
Parte do conteúdo do texto deste capítulo está de acordo com o livro SNMP Essencial, Editora O’Reilly
[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]
Muito bom o post, me ajudou muito.
Há uma maneira de gerenciar um dispositivo local (USB, ou Paralelo) como uma impressora?
Olá Leandro, tudo bom?
Legal que o post tenha lhe ajudado.
Não sei se entendi sua pergunta. Você poderia explicar melhor o que gostaria de fazer?
muito bom! parabéns!