Editing SNMP MIB Implementation
Jump to navigation
Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 4: | Line 4: | ||
# Create a ASN.1 MIB script '''foo.mib''' (an ASCII text file) for the tree structure. | # Create a ASN.1 MIB script '''foo.mib''' (an ASCII text file) for the tree structure. | ||
# Convert foo.mib to binary file using '''mib2bin''' | # Convert foo.mib to binary file using '''mib2bin''' | ||
− | # Build [http://www.rane.com/note161.html | + | # Build [http://www.rane.com/note161.html snmp's PDU use BER (Base encoding rules)] encoder and decoder library to process data that's transfer between NMS and agents. |
− | # Build | + | # Build snmp API use [http://www.sics.se/~adam/uip/index.php/Main_Page uIP-stack] to communicate between NMS and Agents (open two ports: The manager speak to agents on one port, the agent responds manager on the other port). |
# Build binary MIB file reader library. | # Build binary MIB file reader library. | ||
# Build functions service oid tree. | # Build functions service oid tree. | ||
Line 13: | Line 13: | ||
==Create ASN.1 MIB Script== | ==Create ASN.1 MIB Script== | ||
* Build MIB file's written in [http://www.itu.int/ITU-T/studygroups/com17/languages/X.680-0207.pdf ANS.1 notation]. | * Build MIB file's written in [http://www.itu.int/ITU-T/studygroups/com17/languages/X.680-0207.pdf ANS.1 notation]. | ||
− | * | + | * <font color=red>Any tutorial to create this file?</font> |
− | |||
− | |||
− | |||
===Abstract Syntax Notation=== | ===Abstract Syntax Notation=== | ||
Line 24: | Line 21: | ||
==Convert MIB to Binary File== | ==Convert MIB to Binary File== | ||
− | * mib2bin tool is modified from [http://net-snmp.sourceforge.net/ net-snmp] to convert ASN.1 format file to | + | * mib2bin tool is modified from [http://net-snmp.sourceforge.net/ net-snmp] to convert ASN.1 format file to three files, because the microchip '''mib2bib''' converter only supports upto 255 OIDs. |
MIB compiler tools: '''mib2bin''' | MIB compiler tools: '''mib2bin''' | ||
− | [http://www.modtronix.com/products/sbc44ec/00870a.pdf foo.mib] (ANS.1 format) -----------------------------------> foo | + | [http://www.modtronix.com/products/sbc44ec/00870a.pdf foo.mib] (ANS.1 format) -----------------------------------> foo.bin + foo.h + foo_data.h |
* Syntax to use mib2bin tool: | * Syntax to use mib2bin tool: | ||
'''mib2bin <MIBfile>... | '''mib2bin <MIBfile>... | ||
* where MIBfile file is ASN.1 format file. MIBfile = <name>.<type> | * where MIBfile file is ASN.1 format file. MIBfile = <name>.<type> | ||
− | ** '''<name>.bin''' is the binary file storing information of OID tree. This file can be placed on an SD media card to be read by the | + | ** '''<name>.bin''' is the binary file storing information of OID tree. This file can be placed on an SD media card to be read by the FAT16 file system. |
− | |||
** '''<name>_data.h''' is C header file storing information of OID tree. This file is generated by converting mchip.bin file to the C header file. It's only used when a system don't have system file and place on program memory. | ** '''<name>_data.h''' is C header file storing information of OID tree. This file is generated by converting mchip.bin file to the C header file. It's only used when a system don't have system file and place on program memory. | ||
** '''<name>.h''' is C header file storing ID that's reference to function service of OID. | ** '''<name>.h''' is C header file storing ID that's reference to function service of OID. | ||
* Note: | * Note: | ||
** Subfolder '''mibs''' containing the basics MIB files (e.g.: RFC1155-SMI, RFC1213-MIB, RFC-1215, SNMPv2-MIB ... for us MIB file), must be present under the directory of execution. | ** Subfolder '''mibs''' containing the basics MIB files (e.g.: RFC1155-SMI, RFC1213-MIB, RFC-1215, SNMPv2-MIB ... for us MIB file), must be present under the directory of execution. | ||
− | ** If the | + | ** If the three files exist, mib2bin tool will overwrite the files. |
− | ===Binary File Format | + | ===Binary File Format=== |
* The binary file is an image of MIB file. It is generated by mib2bin tool. Agents will read binary file to respond NMS request. | * The binary file is an image of MIB file. It is generated by mib2bin tool. Agents will read binary file to respond NMS request. | ||
− | * In the binary file, A parent is stored first, followed by its | + | * In the binary file, A parent is stored first, followed by its last-child to first-child. Next, the structure of next this parent is stored. This structure is repeated until the entire tree is stored. |
* A parent or child is a record. Single record of binary file have format: | * A parent or child is a record. Single record of binary file have format: | ||
<oid>, <nodeInfo>, | <oid>, <nodeInfo>, | ||
− | [id], [siblingOffset] | + | [id], [siblingOffset], [distantSiblingOffset], [dataType], [dataLen], [data], |
− | [{< | + | [{<index_number>},{<IndexCount>, <IndexNodeInfo>, <indexDataType>} ...] |
− | + | ||
− | + | where: | |
− | + | fields indicated by angle brackets (< >) are always present | |
− | + | fields in square brackets ([ ]) are optional depending on characteristics of the current node. | |
+ | fields in braces ({}) are optional but always occur together. | ||
====<oid> field==== | ====<oid> field==== | ||
− | |||
* Format of OID: | * Format of OID: | ||
− | + | oid1 char(16) | |
− | + | oid2 char(16) | |
− | + | .... | |
− | + | * if oid_i < 254: oid_i = char (oid_i) | |
− | + | * else oid_i = char(255) + char(length of oid_i) + oid_i (base 255) + char(16) | |
− | + | * <font color=red>If this a standard representation, or is a workaround of the microchip format?</font> | |
− | * | + | This is an workaround to store oids, but this isn't a standard representation or the microchip format. |
− | + | * <font color=red>What does char(.) mean?</font> | |
− | + | char(x) that's mean get ascii of x. | |
− | + | char(16) is used to separate two oids. | |
− | + | char(255) is determined that oid geater than 254. | |
− | + | "length of oid_i" is length string of oid_i that's converted base 255. | |
====<nodeInfo> field==== | ====<nodeInfo> field==== | ||
* information of node | * information of node | ||
bit when (set = 1) | bit when (set = 1) | ||
− | 0 Node | + | 0 Node is a parent (0: node is a leaf) |
− | 1 Node | + | 1 Node is sequence |
− | 2 Node is | + | 2 Node is readable |
− | 3 Node is | + | 3 Node is writable |
− | 4 Node is | + | 4 Node is able to create |
− | 5 Node | + | 5 Node has default data |
− | 6 | + | 6 (if node is sequence, this is mean implied index node) |
− | 7 | + | 7 always set 1 |
====[id] field==== | ====[id] field==== | ||
* If this record is leaf, id that's reference to function services the record. | * If this record is leaf, id that's reference to function services the record. | ||
+ | * <font color=red>leaf means child?</font> | ||
+ | leaf means child, but child doesn't mean leaf. | ||
+ | the comment fixed. | ||
====[distantSiblingOffset] field==== | ====[distantSiblingOffset] field==== | ||
* If this record is a node [distantSiblingOffset] is enabled. Point to next node sibling. | * If this record is a node [distantSiblingOffset] is enabled. Point to next node sibling. | ||
− | * | + | * <font color=red>root node should have no sibling. How come the example (below) has a distant offset BC000000? Also, is it big-endian or little-endian?</font> |
− | + | distant offset point to next node sibling (that's "NULL" node).It's little-endian. | |
+ | To parse easier, The last node's distant offset is set to 0x00000000. | ||
====[siblingOffset] field==== | ====[siblingOffset] field==== | ||
* If this record is a leaf [siblingOffset] is enabled. Point to next leaf sibling. | * If this record is a leaf [siblingOffset] is enabled. Point to next leaf sibling. | ||
− | + | * <font color=red>I can see some child nodes in the example, but the table does not have any siblingOffset, can you explain?</font> | |
− | |||
− | |||
− | |||
− | |||
− | ====[dataType] | + | ====[dataType], [dataLen], [data] fields==== |
− | *If this record is a leaf | + | * If this record is a leaf and has default data |
** [dataType] is type of leaf's data. | ** [dataType] is type of leaf's data. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
** [dataLen] is length of data. | ** [dataLen] is length of data. | ||
** [data] is data on string. | ** [data] is data on string. | ||
+ | * <font color=red>How many dataType does it support?</font> | ||
− | ====[{< | + | ====[{<index_number>}]==== |
− | * If this record is sequence | + | * If this record is sequence, index_number is number of INDEXes in sequence. |
− | + | ** [{<IndexCount>, <IndexNodeInfo>, <indexDataType>}] | |
− | ** <IndexCount> | + | * If this record is sequence |
− | + | ** <IndexCount>: is index of INDEX in table | |
− | + | ** <IndexNodeInfo>: is info of index_node | |
− | + | ** <indexDataType>: is data type of index_node | |
− | * | + | * <font color=red>What kind of data will be a sequence node?</font> |
− | ** | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | ||
− | * | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | ||
− | * | ||
− | * | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===Example=== | ===Example=== | ||
− | + | * The example mchip.txt describe the OID tree given below: | |
− | |||
− | * | ||
[[File:Snmp mib oid tree example.jpg | thumb | center | 900px]] | [[File:Snmp mib oid tree example.jpg | thumb | center | 900px]] | ||
− | + | * The corresponding binary file is mchip.bin and it has data describe in table below: | |
− | * The corresponding binary file is | + | [[File:Snmp mib binary example.jpg | thumb | center | 900px]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | [[ | + | OID is <oid> fields. |
+ | Info is <nodeInfo> fields. | ||
+ | Dist is [distantSiblingOffset]/[siblingOffset] fields. | ||
+ | Id is [id] fields. | ||
+ | Defval is data fields, include [dataType], [dataLen], [data] fields. | ||
+ | Index is index fields of sequence, include [{index_number} , {<IndexCount>, <IndexNodeInfo>, <indexDataType>, ...}]. | ||
− | * The detail description of | + | * The detail description of mchip.bin is illuminated by structure diagram below <font color=red>can you upload a picture with higher resolution?</font>: |
− | + | This is picture with higher resolution. | |
− | |||
− | |||
[[File:Snmp mib binary detail example.jpg | thumb | center | 900px]] | [[File:Snmp mib binary detail example.jpg | thumb | center | 900px]] | ||
− | + | The hidden linear is oid tree structure. | |
− | + | The red and green continue linear is pointer of data. | |
− | + | The dist field point to next sibling record. After parent record is it's children. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | The | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |