| @open -@ |
| mib2c has multiple configuration files depending on the type of |
| code you need to write. You must pick one depending on your need. |
| |
| You requested mib2c to be run on the following part of the MIB tree: |
| OID: $name |
| numeric translation: $name.objectID |
| @eval $num = count_scalars@ |
| number of scalars within: $num |
| @eval $num = count_tables@ |
| number of tables within: $num |
| @eval $num = count_notifications@ |
| number of notifications within: $num |
| |
| First, do you want to generate code that is compatible with the |
| ucd-snmp 4.X line of code, or code for the newer Net-SNMP 5.X code |
| base (which provides a much greater choice of APIs to pick from): |
| |
| 1) ucd-snmp style code |
| 2) Net-SNMP style code |
| |
| @prompt $ans Select your choice : @ |
| @if $ans == 1@ |
| ********************************************************************** |
| GENERATING CODE FOR THE 4.X LINE OF CODE (THE OLDER API) |
| ********************************************************************** |
| |
| using the mib2c.old-api.conf configuration file to generate your code. |
| @run mib2c.old-api.conf@ |
| |
| @elsif $ans != 2@ |
| Invalid answer. |
| @else@ |
| @if count_scalars() > 0@ |
| |
| ********************************************************************** |
| GENERATING CODE FOR SCALAR OBJECTS: |
| ********************************************************************** |
| |
| It looks like you have some scalars in the mib you requested, so I |
| will now generate code for them if you wish. You have two choices |
| for scalar API styles currently. Pick between them, or choose not |
| to generate any code for the scalars: |
| |
| 1) If you're writing code for some generic scalars |
| (by hand use: "mib2c -c mib2c.scalar.conf $name") |
| |
| 2) If you want to magically "tie" integer variables to integer |
| scalars |
| (by hand use: "mib2c -c mib2c.int_watch.conf $name") |
| |
| 3) Don't generate any code for the scalars |
| |
| @prompt $ans Select your choice: @ |
| @if $ans == 1@ |
| using the mib2c.scalar.conf configuration file to generate your code. |
| @run mib2c.scalar.conf@ |
| @elsif $ans == 2@ |
| using the mib2c.int_watch.conf configuration file to generate your code. |
| @run mib2c.int_watch.conf@ |
| @elsif $ans != 3@ |
| WARNING: Unknown response. Skipping code generation for scalars. |
| @end@ |
| @end@ # scalars |
| |
| @if count_tables() > 0@ |
| ********************************************************************** |
| GENERATING CODE FOR TABLES: |
| ********************************************************************** |
| |
| Your tables will likely either fall into one of two categories: |
| |
| 1) tables where the list of rows is external to the agent. |
| This is suited to MIBs which monitor or manipulate external |
| data (perhaps extracted from the operating system kernel |
| or other system interfaces), and where rows are typically |
| created or destroyed independently of the SNMP agent. |
| |
| 2) tables where the list of rows is held by the agent itself. |
| This is particularly suited to tables that are primarily |
| manipulated via SNMP, or where the rows of the table are |
| relatively static. |
| |
| 3) Do not generate code for the tables. |
| |
| @prompt $ans Select the option that best fits you: @ |
| @if $ans != 3@ |
| @if $ans == 1@ |
| |
| This style of table tends to use the iterator helper to instrument |
| the external data, so it can be represented by an SNMP table. |
| The main characteristic of this helper is the use of a pair |
| of "iteration hook" routines to loop through the rows in turn |
| (in the most natural order for the underlying data). |
| There are a couple of different template configurations that |
| can be used as a framework for this: |
| |
| 1) One based around a single handler, that includes code to handle |
| both GET and SET requests, as well as row creation and deletion. |
| This template defines a suitable data structure, and implements |
| the table as an internally-held linked list, but both of these |
| are mainly for illustration, and could reasonably be replaced by |
| code more appropriate for the table being implemented. |
| The same template can be generated using |
| mib2c -c mib2c.iterate.conf $name |
| |
| 2) An alternative framework, designed as an API wrapper on top of |
| the basic iterator helper, that seeks to separate the standard |
| processing of the syntax of a MIB table (which can be generated |
| automaticall), from the semantics of a given table (which cannot). |
| It generates a number of separate code files, but typically |
| only one or two of these will need to be edited. These contain |
| separate 'get_column()' and 'set_column()' functions for each |
| column in the table, plus some other routines for manipulating |
| rows (plus the standard iterator hook routines). |
| The same templates can be generated using |
| mib2c -c mib2c.iterate_access.conf $name |
| (See the agent/mibgroup/example/netSnmpHostsTable.c file for example) |
| |
| 3) An API layer (not based on the iterator helper) that attempts |
| to reduce the amount of SNMP specific knowledge required to |
| implement a module. It provides more APIs than 2, which are |
| (hopefully) smaller and more specific, with less SNMP terminology. |
| This API is also known as "MIBs for Dummies". Numerous tables |
| in the Net-SNMP agent have been re-written to use this API. |
| The same templates can be generated using |
| mib2c -c mib2c.mfd.conf $name |
| (See the agent/mibgroup/if-mib/ifTable/ifTable*.c files for examples) |
| |
| 4) Do not generate code for the tables. |
| |
| If you are unsure which option to pick, choices 2) or 3) are perhaps |
| more suited for those less familiar with the concepts behind the SNMP |
| protocol operations, while choice 1) gives more control over exactly |
| what is done. |
| |
| @prompt $ans Select the API style you wish to use: @ |
| @if $ans != 5@ |
| @if $ans == 1@ |
| using the mib2c.iterate.conf configuration file to generate your code. |
| @run mib2c.iterate.conf@ |
| @elsif $ans == 2@ |
| using the mib2c.iterate_access.conf configuration file to |
| generate your code. |
| @run mib2c.iterate_access.conf@ |
| @elsif $ans == 3@ |
| using the mib2c.mfd.conf configuration file to |
| generate your code. |
| @run mib2c.mfd.conf@ |
| @else@ |
| WARNING: Unknown response. Skipping code generation for tables. |
| @end@ |
| @end@ |
| @else@ |
| @if $ans == 2@ |
| This style of table holds a list of the table rows internally |
| within the agent itself. Typically this will tend to include |
| the column values for each particular row, and that is the |
| model used by the generated template code. But it should usually |
| be possible to read in some or all of the column values from an |
| external source, should this be necessary for a particular MIB table. |
| There are a number of different template configurations that |
| can be used as a framework for this: |
| |
| |
| 1) dataset storage: The data for the table is stored completely |
| within the agent, and the user-visible code does not need to |
| be concerned with the internal representation of an individual |
| row. This is most suited to MIB tables that are purely internal |
| to the agent, rather than modelling external data, or using |
| existing data structures. |
| The same template can be generated using |
| mib2c -c mib2c.create-dataset.conf $name |
| |
| 2) row-data storage: The data for the table is held by the agent, |
| but using an arbitrary (user-provided) data structure for the |
| representation of an individual row. This is suited for MIB |
| tables where there is a natural existing data structure, |
| or where the contents of the table may need to be interpreted |
| for some additional purpose, other than simply implementing |
| the table for SNMP requests. |
| The same template can be generated using |
| mib2c -c mib2c.table_data.conf $name |
| |
| 3) container storage: This is very similar to the previous row-data |
| mechanism, but uses a different (and slightly more efficient) |
| internal representation. The main practical effect is to |
| introduce a slight constraint on the form of the per-row data |
| structure. |
| The same template can be generated using |
| mib2c -c mib2c.container.conf $name |
| |
| All three of these templates generate a single code file, and |
| use a "single handler" format for the driving code. |
| |
| 4) sorted array: The data for the table is stored in a sorted |
| array. |
| (manually mib2c -c mib2c.array-user.conf ${name}) |
| |
| 5) Net-SNMP container: (Also known as "MIBs for Dummies", or MFD.) |
| The data for the table is stored via a |
| generic interface. Various types of containers may be |
| selected, including linked lists or binary arrays. |
| (manually mib2c -c mib2c.mfd.conf ${name}) |
| |
| 6) Do not generate code for the tables. |
| |
| All APIs are fully functional with little-to-no required code |
| to make the table operational on your end once the template |
| code is produced. The MFD and dataset APIs are a bit better |
| documented, but the sorted array is probably better tested |
| as it was used heavily in the net-policy sourceforge project. |
| The MFD API is the successor to the array-user API, and several |
| tables in the Net-SNMP agent have been re-written to use it. |
| The dataset API is used inside the snmptrapd application for |
| logging incoming traps. |
| |
| @prompt $ans Select the API style you wish to use: @ |
| @if $ans != 6@ |
| @if $ans == 1@ |
| using the mib2c.create-dataset.conf configuration file |
| to generate your code. |
| @run mib2c.create-dataset.conf@ |
| @elsif $ans == 2@ |
| using the mib2c.table_data.conf configuration file to |
| generate your code. |
| @run mib2c.table_data.conf@ |
| @elsif $ans == 3@ |
| using the mib2c.container.conf configuration file to |
| generate your code. |
| @run mib2c.container.conf@ |
| @elsif $ans == 4@ |
| using the mib2c.array-user.conf configuration file to |
| generate your code. |
| @run mib2c.array-user.conf@ |
| @elsif $ans == 5@ |
| using the mib2c.mfd.conf configuration file to generate your code. |
| @run mib2c.mfd.conf@ |
| @else@ |
| WARNING: Unknown response. Skipping code generation for tables. |
| @end@ |
| @else@ |
| WARNING: Unknown response. Skipping code generation for tables. |
| @end@ |
| @end@ |
| @end@ |
| @end@ # != 3 |
| @end@ # tables |
| |
| @if count_notifications() > 0@ |
| ********************************************************************** |
| GENERATING CODE FOR NOTIFICATIONS: |
| ********************************************************************** |
| |
| Would you like to generate code for sending notifications from within |
| the agent? |
| |
| @prompt $ans "y" or "n": @ |
| @if ("$ans" eq "y") or ("$ans" eq "yes")@ |
| using mib2c.notify.conf to generate code for sending notifications |
| @run mib2c.notify.conf@ |
| @end@ |
| |
| # GENERATING HEADER FILE DEFINITIONS |
| # |
| # To generate just a header with a define for each column number in |
| # your table: |
| # |
| # mib2c -c mib2c.column_defines.conf ${name} |
| # |
| # To generate just a header with a define for each enum for any |
| # column containing enums: |
| # |
| # mib2c -c mib2c.column_enums.conf ${name} |
| |
| @end@ # notifications |
| @end@ # new style code |
| |
| ********************************************************************** |
| * NOTE WELL: The code generated by mib2c is only a template. *YOU* * |
| * must fill in the code before it'll work most of the time. In many * |
| * cases, spots that MUST be edited within the files are marked with * |
| * /* XXX */ or /* TODO */ comments. * |
| ********************************************************************** |