Commit 1023ec3e authored by Michal Wasiak's avatar Michal Wasiak Committed by Adam Wujek

snmp/bridge_mib: generate dot1qVlanCurrentTable

Generate dot1qVlanCurrentTable with a command:
mib2c -c mib2c.mfd.conf Q-BRIDGE-MIB::dot1qVlanCurrentTable
Signed-off-by: 's avatarMichal Wasiak <michal.wasiak@gmail.com>
parent a18cd324
########################################################################
##
## mib2c node setting for dot1qVlanCreationTime
##
## Remove the '##' comment delimeter to change settings
##
########################################################################
## Node declaration type? This is the C type to be used when
## declaring a variable to hold a value for this column. It
## is strongly recommended that you do not change this value.
## If you do, it is likely to break lots of generated code that
## you will have to fix.
##
## @eval $m2c_decl = u_long@
##
########################################################################
## Generate/use mapping functions? Useful if the MIB defines
## a different format or enumerations than you data store uses.
##
## @eval $m2c_node_skip_mapping = -1@
##
########################################################################
## Need a length for the value? Most OCTET-STRING based values will
## need a length, most other types will not. Do not change this one
## unless you know what you are doing! You will almost certainly need
## to fix lots of generated code if you do.
##
## @eval $m2c_node_needlength = 0@
##
########################################################################
## Skip get? Set this to 1 if you do not want to implement a value
## for this column.
##
## @eval $m2c_node_skip_get = 0@
##
########################################################################
##
## mib2c node setting for dot1qVlanCurrentEgressPorts
##
## Remove the '##' comment delimeter to change settings
##
########################################################################
## Node declaration type? This is the C type to be used when
## declaring a variable to hold a value for this column. It
## is strongly recommended that you do not change this value.
## If you do, it is likely to break lots of generated code that
## you will have to fix.
##
## @eval $m2c_decl = char@
##
########################################################################
## Generate/use mapping functions? Useful if the MIB defines
## a different format or enumerations than you data store uses.
##
## @eval $m2c_node_skip_mapping = -1@
##
########################################################################
## Need a length for the value? Most OCTET-STRING based values will
## need a length, most other types will not. Do not change this one
## unless you know what you are doing! You will almost certainly need
## to fix lots of generated code if you do.
##
## @eval $m2c_node_needlength = 1@
##
########################################################################
## Skip get? Set this to 1 if you do not want to implement a value
## for this column.
##
## @eval $m2c_node_skip_get = 0@
##
########################################################################
## Allow realloc when data size exceeds length? If your data
## store for this node is a pointer allocated with one of the
## alloc family functions, you can set this to 1 to use realloc
## when a new value length exceeds the old lenght. If you are
## using a fixed size buffer, this value should be 0.
##
## @eval $m2c_node_realloc = 0@
########################################################################
##
## mib2c node setting for dot1qVlanCurrentUntaggedPorts
##
## Remove the '##' comment delimeter to change settings
##
########################################################################
## Node declaration type? This is the C type to be used when
## declaring a variable to hold a value for this column. It
## is strongly recommended that you do not change this value.
## If you do, it is likely to break lots of generated code that
## you will have to fix.
##
## @eval $m2c_decl = char@
##
########################################################################
## Generate/use mapping functions? Useful if the MIB defines
## a different format or enumerations than you data store uses.
##
## @eval $m2c_node_skip_mapping = -1@
##
########################################################################
## Need a length for the value? Most OCTET-STRING based values will
## need a length, most other types will not. Do not change this one
## unless you know what you are doing! You will almost certainly need
## to fix lots of generated code if you do.
##
## @eval $m2c_node_needlength = 1@
##
########################################################################
## Skip get? Set this to 1 if you do not want to implement a value
## for this column.
##
## @eval $m2c_node_skip_get = 0@
##
########################################################################
## Allow realloc when data size exceeds length? If your data
## store for this node is a pointer allocated with one of the
## alloc family functions, you can set this to 1 to use realloc
## when a new value length exceeds the old lenght. If you are
## using a fixed size buffer, this value should be 0.
##
## @eval $m2c_node_realloc = 0@
########################################################################
##
## mib2c node setting for dot1qVlanFdbId
##
## Remove the '##' comment delimeter to change settings
##
########################################################################
## Node declaration type? This is the C type to be used when
## declaring a variable to hold a value for this column. It
## is strongly recommended that you do not change this value.
## If you do, it is likely to break lots of generated code that
## you will have to fix.
##
## @eval $m2c_decl = u_long@
##
########################################################################
## Generate/use mapping functions? Useful if the MIB defines
## a different format or enumerations than you data store uses.
##
## @eval $m2c_node_skip_mapping = -1@
##
########################################################################
## Need a length for the value? Most OCTET-STRING based values will
## need a length, most other types will not. Do not change this one
## unless you know what you are doing! You will almost certainly need
## to fix lots of generated code if you do.
##
## @eval $m2c_node_needlength = 0@
##
########################################################################
## Skip get? Set this to 1 if you do not want to implement a value
## for this column.
##
## @eval $m2c_node_skip_get = 0@
##
########################################################################
##
## mib2c node setting for dot1qVlanIndex
##
## Remove the '##' comment delimeter to change settings
##
########################################################################
## Node declaration type? This is the C type to be used when
## declaring a variable to hold a value for this column. It
## is strongly recommended that you do not change this value.
## If you do, it is likely to break lots of generated code that
## you will have to fix.
##
## @eval $m2c_decl = u_long@
##
########################################################################
## Generate/use mapping functions? Useful if the MIB defines
## a different format or enumerations than you data store uses.
##
## @eval $m2c_node_skip_mapping = -1@
##
########################################################################
## Need a length for the value? Most OCTET-STRING based values will
## need a length, most other types will not. Do not change this one
## unless you know what you are doing! You will almost certainly need
## to fix lots of generated code if you do.
##
## @eval $m2c_node_needlength = 0@
##
########################################################################
## Skip get? Set this to 1 if you do not want to implement a value
## for this column.
##
## @eval $m2c_node_skip_get = 0@
##
########################################################################
##
## mib2c node setting for dot1qVlanStatus
##
## Remove the '##' comment delimeter to change settings
##
########################################################################
## Node declaration type? This is the C type to be used when
## declaring a variable to hold a value for this column. It
## is strongly recommended that you do not change this value.
## If you do, it is likely to break lots of generated code that
## you will have to fix.
##
## @eval $m2c_decl = u_long@
##
########################################################################
## Generate/use mapping functions? Useful if the MIB defines
## a different format or enumerations than you data store uses.
##
## @eval $m2c_node_skip_mapping = 0@
##
########################################################################
## Need a length for the value? Most OCTET-STRING based values will
## need a length, most other types will not. Do not change this one
## unless you know what you are doing! You will almost certainly need
## to fix lots of generated code if you do.
##
## @eval $m2c_node_needlength = 0@
##
########################################################################
## Skip get? Set this to 1 if you do not want to implement a value
## for this column.
##
## @eval $m2c_node_skip_get = 0@
##
########################################################################
##
## mib2c node setting for dot1qVlanTimeMark
##
## Remove the '##' comment delimeter to change settings
##
########################################################################
## Node declaration type? This is the C type to be used when
## declaring a variable to hold a value for this column. It
## is strongly recommended that you do not change this value.
## If you do, it is likely to break lots of generated code that
## you will have to fix.
##
## @eval $m2c_decl = u_long@
##
########################################################################
## Generate/use mapping functions? Useful if the MIB defines
## a different format or enumerations than you data store uses.
##
## @eval $m2c_node_skip_mapping = -1@
##
########################################################################
## Need a length for the value? Most OCTET-STRING based values will
## need a length, most other types will not. Do not change this one
## unless you know what you are doing! You will almost certainly need
## to fix lots of generated code if you do.
##
## @eval $m2c_node_needlength = 0@
##
########################################################################
## Skip get? Set this to 1 if you do not want to implement a value
## for this column.
##
## @eval $m2c_node_skip_get = 0@
##
## ########################################################################
##
## mib2c Table setting for dot1qVlanCurrentTable
##
## ########################################################################
##
## User context structure type
##
@eval $m2c_context_reg = "netsnmp_data_list"@
##
## ########################################################################
##
## Allocate data structure in row structure? (vs embedd)
##
@eval $m2c_data_allocate = 0@
##
## ########################################################################
##
## Generate code to cache data?
##
@eval $m2c_data_cache = 1@
##
## ########################################################################
##
## Data context structure type
##
@eval $m2c_data_context = "generated"@ [generated|NAME]
##
## ########################################################################
##
## Generate function to initialize row context when created?
##
@eval $m2c_data_init = 1@
##
## ########################################################################
##
## Persistence of data context
## // 0:persistent, 1:semi-transient, 2:transient
##
@eval $m2c_data_transient = 2@
##
## ########################################################################
##
## Include some example code?
##
@eval $m2c_include_examples = 1@
##
## ########################################################################
##
## Generate code for irreversible_commit mode?
##
@eval $m2c_irreversible_commit = 0@
##
## ########################################################################
##
## Data access method
##
@eval $m2c_table_access = "container-cached"@
##
## ########################################################################
##
## Generate row dependency function?
##
@eval $m2c_table_dependencies = 0@
##
## ########################################################################
##
## Generate data store/restore functions for persistent storage?
##
@eval $m2c_table_persistent = 0@
##
## ########################################################################
##
## Generate code for dynamic row creation?
##
@eval $m2c_table_row_creation = 0@
##
## ########################################################################
##
## Generate code for settable objects?
##
@eval $m2c_table_settable = 0@
##
## ########################################################################
##
## Skip mapping between data context and MIB formats?
## // 0:generate maps, 1:skip maps, -1:skip unless enum/oid
##
@eval $m2c_table_skip_mapping = -1@
##
## ########################################################################
##
## Generate code for sparse tables?
##
@eval $m2c_table_sparse = 0@
##
## ########################################################################
##
## Generate Makefile/AgentX code?
##
@eval $mfd_generate_makefile = 1@
@eval $mfd_generate_subagent = 1@
##
************************************************************************
dot1qVlanCurrentTable README
------------------------------------------------------------------------
This document describes the results of the mib2c code generation
system using the mfd code generation template. The resulting files
are documented both in this README file as well as per-table specific
README files. All of the files generated by this run of mib2c will
begin with the dot1qVlanCurrentTable prefix.
Quick Start
-----------
For those interested in a quick start, to get a pseudo-todo list, try
this command in directory with the generated code:
grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\) \(.*\)TODO\(.*\)/\3 (\1)/' | sort -n
Key:
:o: Optional
:r: Recommended
:M: Mandatory
:A: Advanced users
This will give you and ordered list of places in the code that you
may (or must) take a closer look at).
You may also want to take a look at the on-line tutorial, found here:
http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mfd/index.html
MIBs For Dummies Overview
-------------------------
The MIBs For Dummies (MFD) configuration files have been written to help
SNMP novices implement SNMP MIBs. This section will be a brief
introduction to some of the general concepts you should be familar with.
Managed Information Base (MIB)
------------------------------
A SNMP MIB (Managed information base) is a text file that describes the
syntax for some set of data objects. The MIB creates a correlation
between an ASCII name for an object and a number OID (Object Identifier).
The SNMP protocol communicates information using the OIDs, and the MIB
allows tools to display a name, which we humans find easier to deal with.
To use an analogy, a MIB is much like a menu at a restaurant. If you've
ever been to a reataurant and ordered a meal, and later received a bill
that simply had '#6' on it, you get the idea. The name is easier for
the customers to remember, and the waiters and chefs use the number for
efficency.
Scalars
-------
A scalar variable is a unique object in a MIB which can represent
a single value. For example, the SNMP standard MIB-II defines a
variable, sysContact.0, which is a string containing the contact
information for the person in charge of a particular agent. Note
that scalar variable always end with '.0'.
Rows and Tables
---------------
When a group of related attributes occur more than once, they can be
grouped together in a table. A table has an index, which uniquely
identifies a particular row, and data columns, which contain the
attributes for that row.
For example, the SNMP standard MIB-II defines a table, ifTable, which
contains information on the ethernet interfaces on a system.
Data Structures
---------------
The code generated by the MFD configuration files has a few important
structures.
The Data Context
----------------
The data context structure should contain the necessary information
to provide the data for the columns in a given row. As long as you
can extract the data for a column for the data context, the data context
can be anything you want: a pointer to an existing structure, the
parameters needed for a function call or an actual copy of the data.
By default, a data context structure is generated with storage for
all the data in a row. Information on changing the default is presented
later on in this help.
The MIB Context
---------------
The MIB context structure is generated with storage for all the
indexes of a table. This data will be used when searching for the
correct row to process for a request.
The Row Request Context
-----------------------
Each table will have a unique data structure for holding data during
the processing of a particular row. The row request context contains
the registration context (that you supply during initilization),
the data context, the MIB context, the undo context (for settable
tables) and other data. There is also a netsnmp_data_list, which can
be used to temporary storage during processing.
The Table Registration Pointer
------------------------------
During initilization, you may provide a pointer to arbitrary data for
you own use. This pointer will be saved in the row request context,
and is passed as a parameter to several functions. It is not required,
and is provided as a way for you to access table specific data in
the generated code.
These files are top-level files potentially useful for all the tables:
------------------------------------------------------------------------
File : dot1qVlanCurrentTable_Makefile
----------------------------------------------------------------------
Purpose : Make file for compiling a (sub)agent. This file is only
useful if you don't want to compile your code directly
into the Net-SNMP master agent.
Editable: Optional
Usage : make -f dot1qVlanCurrentTable_Makefile
File : dot1qVlanCurrentTable_subagent.c
----------------------------------------------------------------------
Purpose : This file contains a main() function for an agent or
sub-agent and is compiled using the Makefile above.
Table specific README files
------------------------------------------------------------------------
Each table for which code was generated has its own README file
describing the files specifically associated with each table. You
should probably read these next:
dot1qVlanCurrentTable-README-dot1qVlanCurrentTable.txt
These are miscellaneous auto-generated code files you generally
shouldn't edit. They contain code that ties your code together with
the Net-SNMP agent.
------------------------------------------------------------------------
File : dot1qVlanCurrentTable.h
Purpose : Header file for the module set. Includes config_require
macros to auto-load the other code pieces when compiled
into the agent.
File : dot1qVlanCurrentTable_oids.h
Purpose : C #define definitions of the tables, columns, and OIDs
File : dot1qVlanCurrentTable_enums.h
Purpose : C #define definitions of the enumerated type values for
each column of each table that requires them.
File : dot1qVlanCurrentTable_interface.c
Purpose : MFD interface to Net-SNMP. This auto-generated code ties the
functions you will fill out to the code that the agent needs.
/*
* Note: this file originally auto-generated by mib2c using
* version $ of $
*
* $Id:$
*/
/** \page MFD helper for dot1qVlanCurrentTable
*
* \section intro Introduction
* Introductory text.
*
*/
/* standard Net-SNMP includes */
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-features.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
/* include our parent header */
#include "dot1qVlanCurrentTable.h"
#include <net-snmp/agent/mib_modules.h>
#include "dot1qVlanCurrentTable_interface.h"
const oid dot1qVlanCurrentTable_oid[] = { DOT1QVLANCURRENTTABLE_OID };
const int dot1qVlanCurrentTable_oid_size = OID_LENGTH(dot1qVlanCurrentTable_oid);
dot1qVlanCurrentTable_registration dot1qVlanCurrentTable_user_context;
void initialize_table_dot1qVlanCurrentTable(void);
void shutdown_table_dot1qVlanCurrentTable(void);
/**
* Initializes the dot1qVlanCurrentTable module
*/
void
init_dot1qVlanCurrentTable(void)
{
DEBUGMSGTL(("verbose:dot1qVlanCurrentTable:init_dot1qVlanCurrentTable","called\n"));
/*
* TODO:300:o: Perform dot1qVlanCurrentTable one-time module initialization.
*/
/*
* here we initialize all the tables we're planning on supporting
*/
if (should_init("dot1qVlanCurrentTable"))
initialize_table_dot1qVlanCurrentTable();
} /* init_dot1qVlanCurrentTable */
/**
* Shut-down the dot1qVlanCurrentTable module (agent is exiting)
*/
void
shutdown_dot1qVlanCurrentTable(void)
{
if (should_init("dot1qVlanCurrentTable"))
shutdown_table_dot1qVlanCurrentTable();
}
/**
* Initialize the table dot1qVlanCurrentTable
* (Define its contents and how it's structured)
*/
void
initialize_table_dot1qVlanCurrentTable(void)
{
dot1qVlanCurrentTable_registration * user_context;
u_long flags;
DEBUGMSGTL(("verbose:dot1qVlanCurrentTable:initialize_table_dot1qVlanCurrentTable","called\n"));
/*
* TODO:301:o: Perform dot1qVlanCurrentTable one-time table initialization.
*/
/*
* TODO:302:o: |->Initialize dot1qVlanCurrentTable user context
* if you'd like to pass in a pointer to some data for this
* table, allocate or set it up here.
*/
/*
* a netsnmp_data_list is a simple way to store void pointers. A simple
* string token is used to add, find or remove pointers.
*/
user_context = netsnmp_create_data_list("dot1qVlanCurrentTable", NULL, NULL);
/*
* No support for any flags yet, but in the future you would
* set any flags here.
*/
flags = 0;
/*
* call interface initialization code
*/
_dot1qVlanCurrentTable_initialize_interface(user_context, flags);
} /* initialize_table_dot1qVlanCurrentTable */
/**
* Shutdown the table dot1qVlanCurrentTable
*/
void
shutdown_table_dot1qVlanCurrentTable(void)
{
/*
* call interface shutdown code
*/
_dot1qVlanCurrentTable_shutdown_interface(&dot1qVlanCurrentTable_user_context);
}
/**
* extra context initialization (eg default values)
*
* @param rowreq_ctx : row request context
* @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
*
* @retval MFD_SUCCESS : no errors
* @retval MFD_ERROR : error (context allocate will fail)
*/
int
dot1qVlanCurrentTable_rowreq_ctx_init(dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx,
void *user_init_ctx)
{
DEBUGMSGTL(("verbose:dot1qVlanCurrentTable:dot1qVlanCurrentTable_rowreq_ctx_init","called\n"));
netsnmp_assert(NULL != rowreq_ctx);
/*
* TODO:210:o: |-> Perform extra dot1qVlanCurrentTable rowreq initialization. (eg DEFVALS)
*/
return MFD_SUCCESS;
} /* dot1qVlanCurrentTable_rowreq_ctx_init */
/**
* extra context cleanup
*
*/
void dot1qVlanCurrentTable_rowreq_ctx_cleanup(dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx)
{
DEBUGMSGTL(("verbose:dot1qVlanCurrentTable:dot1qVlanCurrentTable_rowreq_ctx_cleanup","called\n"));
netsnmp_assert(NULL != rowreq_ctx);
/*
* TODO:211:o: |-> Perform extra dot1qVlanCurrentTable rowreq cleanup.
*/
} /* dot1qVlanCurrentTable_rowreq_ctx_cleanup */
/**
* pre-request callback
*
*
* @retval MFD_SUCCESS : success.
* @retval MFD_ERROR : other error
*/
int
dot1qVlanCurrentTable_pre_request(dot1qVlanCurrentTable_registration * user_context)
{
DEBUGMSGTL(("verbose:dot1qVlanCurrentTable:dot1qVlanCurrentTable_pre_request","called\n"));
/*
* TODO:510:o: Perform dot1qVlanCurrentTable pre-request actions.
*/
return MFD_SUCCESS;
} /* dot1qVlanCurrentTable_pre_request */
/**
* post-request callback
*
* Note:
* New rows have been inserted into the container, and
* deleted rows have been removed from the container and
* released.
*
* @param user_context
* @param rc : MFD_SUCCESS if all requests succeeded
*
* @retval MFD_SUCCESS : success.
* @retval MFD_ERROR : other error (ignored)
*/
int
dot1qVlanCurrentTable_post_request(dot1qVlanCurrentTable_registration * user_context, int rc)
{
DEBUGMSGTL(("verbose:dot1qVlanCurrentTable:dot1qVlanCurrentTable_post_request","called\n"));
/*
* TODO:511:o: Perform dot1qVlanCurrentTable post-request actions.
*/
return MFD_SUCCESS;
} /* dot1qVlanCurrentTable_post_request */
/** @{ */
/*
* Note: this file originally auto-generated by mib2c using
* version $ of $
*
* $Id:$
*/
#ifndef DOT1QVLANCURRENTTABLE_H
#define DOT1QVLANCURRENTTABLE_H
#ifdef __cplusplus
extern "C" {
#endif
/** @addtogroup misc misc: Miscellaneous routines
*
* @{
*/
#include <net-snmp/library/asn1.h>
/* other required module components */
/* *INDENT-OFF* */
config_add_mib(Q-BRIDGE-MIB)
config_require(Q-BRIDGE-MIB/dot1qVlanCurrentTable/dot1qVlanCurrentTable_interface)
config_require(Q-BRIDGE-MIB/dot1qVlanCurrentTable/dot1qVlanCurrentTable_data_access)
config_require(Q-BRIDGE-MIB/dot1qVlanCurrentTable/dot1qVlanCurrentTable_data_get)
config_require(Q-BRIDGE-MIB/dot1qVlanCurrentTable/dot1qVlanCurrentTable_data_set)
/* *INDENT-ON* */
/* OID and column number definitions for dot1qVlanCurrentTable */
#include "dot1qVlanCurrentTable_oids.h"
/* enum definions */
#include "dot1qVlanCurrentTable_enums.h"
/* *********************************************************************
* function declarations
*/
void init_dot1qVlanCurrentTable(void);
void shutdown_dot1qVlanCurrentTable(void);
/* *********************************************************************
* Table declarations
*/
/**********************************************************************
**********************************************************************
***
*** Table dot1qVlanCurrentTable
***
**********************************************************************
**********************************************************************/
/*
* Q-BRIDGE-MIB::dot1qVlanCurrentTable is subid 2 of dot1qVlan.
* Its status is Current.
* OID: .1.3.6.1.2.1.17.7.1.4.2, length: 11
*/
/* *********************************************************************
* When you register your mib, you get to provide a generic
* pointer that will be passed back to you for most of the
* functions calls.
*
* TODO:100:r: Review all context structures
*/
/*
* TODO:101:o: |-> Review dot1qVlanCurrentTable registration context.
*/
typedef netsnmp_data_list dot1qVlanCurrentTable_registration;
/**********************************************************************/
/*
* TODO:110:r: |-> Review dot1qVlanCurrentTable data context structure.
* This structure is used to represent the data for dot1qVlanCurrentTable.
*/
/*
* This structure contains storage for all the columns defined in the
* dot1qVlanCurrentTable.
*/
typedef struct dot1qVlanCurrentTable_data_s {
/*
* dot1qVlanFdbId(3)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
*/
u_long dot1qVlanFdbId;
/*
* dot1qVlanCurrentEgressPorts(4)/PortList/ASN_OCTET_STR/char(char)//L/A/w/e/r/d/h
*/
char dot1qVlanCurrentEgressPorts[65535];
size_t dot1qVlanCurrentEgressPorts_len; /* # of char elements, not bytes */
/*
* dot1qVlanCurrentUntaggedPorts(5)/PortList/ASN_OCTET_STR/char(char)//L/A/w/e/r/d/h
*/
char dot1qVlanCurrentUntaggedPorts[65535];
size_t dot1qVlanCurrentUntaggedPorts_len; /* # of char elements, not bytes */
/*
* dot1qVlanStatus(6)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
*/
u_long dot1qVlanStatus;
/*
* dot1qVlanCreationTime(7)/TICKS/ASN_TIMETICKS/u_long(u_long)//l/A/w/e/r/d/h
*/
u_long dot1qVlanCreationTime;
} dot1qVlanCurrentTable_data;
/*
* TODO:120:r: |-> Review dot1qVlanCurrentTable mib index.
* This structure is used to represent the index for dot1qVlanCurrentTable.
*/
typedef struct dot1qVlanCurrentTable_mib_index_s {
/*
* dot1qVlanTimeMark(1)/TimeFilter/ASN_TIMETICKS/u_long(u_long)//l/a/w/e/r/d/h
*/
u_long dot1qVlanTimeMark;
/*
* dot1qVlanIndex(2)/VlanIndex/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/r/d/H
*/
u_long dot1qVlanIndex;
} dot1qVlanCurrentTable_mib_index;
/*
* TODO:121:r: | |-> Review dot1qVlanCurrentTable max index length.
* If you KNOW that your indexes will never exceed a certain
* length, update this macro to that length.
*/
#define MAX_dot1qVlanCurrentTable_IDX_LEN 2
/* *********************************************************************
* TODO:130:o: |-> Review dot1qVlanCurrentTable Row request (rowreq) context.
* When your functions are called, you will be passed a
* dot1qVlanCurrentTable_rowreq_ctx pointer.
*/
typedef struct dot1qVlanCurrentTable_rowreq_ctx_s {
/** this must be first for container compare to work */
netsnmp_index oid_idx;
oid oid_tmp[MAX_dot1qVlanCurrentTable_IDX_LEN];
dot1qVlanCurrentTable_mib_index tbl_idx;
dot1qVlanCurrentTable_data data;
/*
* flags per row. Currently, the first (lower) 8 bits are reserved
* for the user. See mfd.h for other flags.
*/
u_int rowreq_flags;
/*
* TODO:131:o: | |-> Add useful data to dot1qVlanCurrentTable rowreq context.
*/
/*
* storage for future expansion
*/
netsnmp_data_list *dot1qVlanCurrentTable_data_list;
} dot1qVlanCurrentTable_rowreq_ctx;
typedef struct dot1qVlanCurrentTable_ref_rowreq_ctx_s {
dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx;
} dot1qVlanCurrentTable_ref_rowreq_ctx;
/* *********************************************************************
* function prototypes
*/
int dot1qVlanCurrentTable_pre_request(dot1qVlanCurrentTable_registration * user_context);
int dot1qVlanCurrentTable_post_request(dot1qVlanCurrentTable_registration * user_context,
int rc);
int dot1qVlanCurrentTable_rowreq_ctx_init(dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx,
void *user_init_ctx);
void dot1qVlanCurrentTable_rowreq_ctx_cleanup(dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx);
dot1qVlanCurrentTable_rowreq_ctx *
dot1qVlanCurrentTable_row_find_by_mib_index(dot1qVlanCurrentTable_mib_index *mib_idx);
extern const oid dot1qVlanCurrentTable_oid[];
extern const int dot1qVlanCurrentTable_oid_size;
#include "dot1qVlanCurrentTable_interface.h"
#include "dot1qVlanCurrentTable_data_access.h"
#include "dot1qVlanCurrentTable_data_get.h"
#include "dot1qVlanCurrentTable_data_set.h"
/*
* DUMMY markers, ignore
*
* TODO:099:x: *************************************************************
* TODO:199:x: *************************************************************
* TODO:299:x: *************************************************************
* TODO:399:x: *************************************************************
* TODO:499:x: *************************************************************
*/
#ifdef __cplusplus
}
#endif
#endif /* DOT1QVLANCURRENTTABLE_H */
/** @} */
CC=gcc
TABLE_PREFIX=dot1qVlanCurrentTable
NETSNMPCONFIG=net-snmp-config
# uncomment this if you have GNU make
#NETSNMPCFLAGS := $(shell $(NETSNMPCONFIG) --base-cflags)
#NETSNMPLIBS := $(shell $(NETSNMPCONFIG) --agent-libs)
NETSNMPCFLAGS=`$(NETSNMPCONFIG) --base-cflags`
NETSNMPLIBS=`$(NETSNMPCONFIG) --agent-libs`
LIBS=$(NETSNMPLIBS)
STRICT_FLAGS = -Wall -Wstrict-prototypes
CFLAGS=-I. $(NETSNMPCFLAGS) $(STRICT_FLAGS)
USER_SRCS = \
$(TABLE_PREFIX)_data_get.c \
$(TABLE_PREFIX)_data_set.c \
$(TABLE_PREFIX)_data_access.c
SRCS = $(USER_SRCS) \
$(TABLE_PREFIX).c \
$(TABLE_PREFIX)_subagent.c \
$(TABLE_PREFIX)_interface.c
USER_OBJS = \
$(TABLE_PREFIX)_data_get.o \
$(TABLE_PREFIX)_data_set.o \
$(TABLE_PREFIX)_data_access.o
OBJS = $(USER_OBJS) \
$(TABLE_PREFIX).o \
$(TABLE_PREFIX)_subagent.o \
$(TABLE_PREFIX)_interface.o
TARGETS=$(TABLE_PREFIX)
.SUFFIXES:
.SUFFIXES: .c .o .deps
all: $(TARGETS)
user: $(USER_OBJS)
$(TARGETS): $(LIB_DEPS)
$(TABLE_PREFIX): $(OBJS) $(TABLE_PREFIX)_Makefile
$(CC) -o $(TABLE_PREFIX) $(OBJS) $(LIBS)
clean:
rm -f $(OBJS) $(TARGETS)
/*
* Note: this file originally auto-generated by mib2c using
* version $ of $
*
* $Id:$
*/
#ifndef DOT1QVLANCURRENTTABLE_DATA_ACCESS_H
#define DOT1QVLANCURRENTTABLE_DATA_ACCESS_H
#ifdef __cplusplus
extern "C" {
#endif
/* *********************************************************************
* function declarations
*/
/* *********************************************************************
* Table declarations
*/
/**********************************************************************
**********************************************************************
***
*** Table dot1qVlanCurrentTable
***
**********************************************************************
**********************************************************************/
/*
* Q-BRIDGE-MIB::dot1qVlanCurrentTable is subid 2 of dot1qVlan.
* Its status is Current.
* OID: .1.3.6.1.2.1.17.7.1.4.2, length: 11
*/
int dot1qVlanCurrentTable_init_data(dot1qVlanCurrentTable_registration * dot1qVlanCurrentTable_reg);
/*
* TODO:180:o: Review dot1qVlanCurrentTable cache timeout.
* The number of seconds before the cache times out
*/
#define DOT1QVLANCURRENTTABLE_CACHE_TIMEOUT 60
void dot1qVlanCurrentTable_container_init(netsnmp_container **container_ptr_ptr,
netsnmp_cache *cache);
void dot1qVlanCurrentTable_container_shutdown(netsnmp_container *container_ptr);
int dot1qVlanCurrentTable_container_load(netsnmp_container *container);
void dot1qVlanCurrentTable_container_free(netsnmp_container *container);
int dot1qVlanCurrentTable_cache_load(netsnmp_container *container);
void dot1qVlanCurrentTable_cache_free(netsnmp_container *container);
/*
***************************************************
*** START EXAMPLE CODE ***
***---------------------------------------------***/
/* *********************************************************************
* Since we have no idea how you really access your data, we'll go with
* a worst case example: a flat text file.
*/
#define MAX_LINE_SIZE 256
/*
***---------------------------------------------***
*** END EXAMPLE CODE ***
***************************************************/
int dot1qVlanCurrentTable_row_prep( dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx);
#ifdef __cplusplus
}
#endif
#endif /* DOT1QVLANCURRENTTABLE_DATA_ACCESS_H */
/*
* Note: this file originally auto-generated by mib2c using
* version $ of $
*
* $Id:$
*
* @file dot1qVlanCurrentTable_data_get.h
*
* @addtogroup get
*
* Prototypes for get functions
*
* @{
*/
#ifndef DOT1QVLANCURRENTTABLE_DATA_GET_H
#define DOT1QVLANCURRENTTABLE_DATA_GET_H
#ifdef __cplusplus
extern "C" {
#endif
/* *********************************************************************
* GET function declarations
*/
/* *********************************************************************
* GET Table declarations
*/
/**********************************************************************
**********************************************************************
***
*** Table dot1qVlanCurrentTable
***
**********************************************************************
**********************************************************************/
/*
* Q-BRIDGE-MIB::dot1qVlanCurrentTable is subid 2 of dot1qVlan.
* Its status is Current.
* OID: .1.3.6.1.2.1.17.7.1.4.2, length: 11
*/
/*
* indexes
*/
int dot1qVlanTimeMark_map(u_long *mib_dot1qVlanTimeMark_val_ptr, u_long raw_dot1qVlanTimeMark_val);
int dot1qVlanIndex_map(u_long *mib_dot1qVlanIndex_val_ptr, u_long raw_dot1qVlanIndex_val);
int dot1qVlanFdbId_map(u_long *mib_dot1qVlanFdbId_val_ptr, u_long raw_dot1qVlanFdbId_val);
int dot1qVlanFdbId_get( dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx, u_long * dot1qVlanFdbId_val_ptr );
int dot1qVlanCurrentEgressPorts_map(char **mib_dot1qVlanCurrentEgressPorts_val_ptr_ptr, size_t *mib_dot1qVlanCurrentEgressPorts_val_ptr_len_ptr, char *raw_dot1qVlanCurrentEgressPorts_val_ptr, size_t raw_dot1qVlanCurrentEgressPorts_val_ptr_len, int allow_realloc);
int dot1qVlanCurrentEgressPorts_get( dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx, char **dot1qVlanCurrentEgressPorts_val_ptr_ptr, size_t *dot1qVlanCurrentEgressPorts_val_ptr_len_ptr );
int dot1qVlanCurrentUntaggedPorts_map(char **mib_dot1qVlanCurrentUntaggedPorts_val_ptr_ptr, size_t *mib_dot1qVlanCurrentUntaggedPorts_val_ptr_len_ptr, char *raw_dot1qVlanCurrentUntaggedPorts_val_ptr, size_t raw_dot1qVlanCurrentUntaggedPorts_val_ptr_len, int allow_realloc);
int dot1qVlanCurrentUntaggedPorts_get( dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx, char **dot1qVlanCurrentUntaggedPorts_val_ptr_ptr, size_t *dot1qVlanCurrentUntaggedPorts_val_ptr_len_ptr );
int dot1qVlanStatus_map(u_long *mib_dot1qVlanStatus_val_ptr, u_long raw_dot1qVlanStatus_val);
int dot1qVlanStatus_get( dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx, u_long * dot1qVlanStatus_val_ptr );
int dot1qVlanCreationTime_map(u_long *mib_dot1qVlanCreationTime_val_ptr, u_long raw_dot1qVlanCreationTime_val);
int dot1qVlanCreationTime_get( dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx, u_long * dot1qVlanCreationTime_val_ptr );
int dot1qVlanCurrentTable_indexes_set_tbl_idx(dot1qVlanCurrentTable_mib_index *tbl_idx, u_long dot1qVlanTimeMark_val, u_long dot1qVlanIndex_val);
int dot1qVlanCurrentTable_indexes_set(dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx, u_long dot1qVlanTimeMark_val, u_long dot1qVlanIndex_val);
#ifdef __cplusplus
}
#endif
#endif /* DOT1QVLANCURRENTTABLE_DATA_GET_H */
/** @} */
/*
* Note: this file originally auto-generated by mib2c using
* version $ of $
*
* $Id:$
*
*/
/* standard Net-SNMP includes */
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-features.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
/* include our parent header */
#include "dot1qVlanCurrentTable.h"
/** @defgroup data_set data_set: Routines to set data
*
* These routines are used to set the value for individual objects. The
* row context is passed, along with the new value.
*
* @{
*/
/** @} */
/*
* Note: this file originally auto-generated by mib2c using
* version $ of $
*
* $Id:$
*/
#ifndef DOT1QVLANCURRENTTABLE_DATA_SET_H
#define DOT1QVLANCURRENTTABLE_DATA_SET_H
#ifdef __cplusplus
extern "C" {
#endif
/* *********************************************************************
* SET function declarations
*/
/* *********************************************************************
* SET Table declarations
*/
#ifdef __cplusplus
}
#endif
#endif /* DOT1QVLANCURRENTTABLE_DATA_SET_H */
/*
* Note: this file originally auto-generated by mib2c using
* $
*
* $Id:$
*/
#ifndef DOT1QVLANCURRENTTABLE_ENUMS_H
#define DOT1QVLANCURRENTTABLE_ENUMS_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* NOTES on enums
* ==============
*
* Value Mapping
* -------------
* If the values for your data type don't exactly match the
* possible values defined by the mib, you should map them
* below. For example, a boolean flag (1/0) is usually represented
* as a TruthValue in a MIB, which maps to the values (1/2).
*
*/
/*************************************************************************
*************************************************************************
*
* enum definitions for table dot1qVlanCurrentTable
*
*************************************************************************
*************************************************************************/
/*************************************************************
* constants for enums for the MIB node
* dot1qVlanStatus (INTEGER / ASN_INTEGER)
*
* since a Textual Convention may be referenced more than once in a
* MIB, protect againt redefinitions of the enum values.
*/
#ifndef DOT1QVLANSTATUS_ENUMS
#define DOT1QVLANSTATUS_ENUMS
#define DOT1QVLANSTATUS_OTHER 1
#define DOT1QVLANSTATUS_PERMANENT 2
#define DOT1QVLANSTATUS_DYNAMICGVRP 3
#endif /* DOT1QVLANSTATUS_ENUMS */
/*
* TODO:140:o: Define your interal representation of dot1qVlanStatus enums.
* (used for value mapping; see notes at top of file)
*/
#define INTERNAL_DOT1QVLANCURRENTTABLE_DOT1QVLANSTATUS_OTHER 1
#define INTERNAL_DOT1QVLANCURRENTTABLE_DOT1QVLANSTATUS_PERMANENT 2
#define INTERNAL_DOT1QVLANCURRENTTABLE_DOT1QVLANSTATUS_DYNAMICGVRP 3
#ifdef __cplusplus
}
#endif
#endif /* DOT1QVLANCURRENTTABLE_ENUMS_H */
/*
* Note: this file originally auto-generated by mib2c using
* version $ of $
*
* $Id:$
*/
/** @ingroup interface: Routines to interface to Net-SNMP
*
* \warning This code should not be modified, called directly,
* or used to interpret functionality. It is subject to
* change at any time.
*
* @{
*/
/*
* *********************************************************************
* *********************************************************************
* *********************************************************************
* *** ***
* *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
* *** ***
* *** ***
* *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
* *** ***
* *** ***
* *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
* *** ***
* *** ***
* *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
* *** ***
* *** ***
* *********************************************************************
* *********************************************************************
* *********************************************************************
*/
#ifndef DOT1QVLANCURRENTTABLE_INTERFACE_H
#define DOT1QVLANCURRENTTABLE_INTERFACE_H
#ifdef __cplusplus
extern "C" {
#endif
#include "dot1qVlanCurrentTable.h"
/* ********************************************************************
* Table declarations
*/
/* PUBLIC interface initialization routine */
void _dot1qVlanCurrentTable_initialize_interface(dot1qVlanCurrentTable_registration * user_ctx,
u_long flags);
void _dot1qVlanCurrentTable_shutdown_interface(dot1qVlanCurrentTable_registration * user_ctx);
dot1qVlanCurrentTable_registration *
dot1qVlanCurrentTable_registration_get( void );
dot1qVlanCurrentTable_registration *
dot1qVlanCurrentTable_registration_set( dot1qVlanCurrentTable_registration * newreg );
netsnmp_container *dot1qVlanCurrentTable_container_get( void );
int dot1qVlanCurrentTable_container_size( void );
dot1qVlanCurrentTable_rowreq_ctx * dot1qVlanCurrentTable_allocate_rowreq_ctx(void *);
void dot1qVlanCurrentTable_release_rowreq_ctx(dot1qVlanCurrentTable_rowreq_ctx *rowreq_ctx);
int dot1qVlanCurrentTable_index_to_oid(netsnmp_index *oid_idx,
dot1qVlanCurrentTable_mib_index *mib_idx);
int dot1qVlanCurrentTable_index_from_oid(netsnmp_index *oid_idx,
dot1qVlanCurrentTable_mib_index *mib_idx);
/*
* access to certain internals. use with caution!
*/
void dot1qVlanCurrentTable_valid_columns_set(netsnmp_column_info *vc);
#ifdef __cplusplus
}
#endif
#endif /* DOT1QVLANCURRENTTABLE_INTERFACE_H */
/** @} */
/*
* Note: this file originally auto-generated by mib2c using
* $
*
* $Id:$
*/
#ifndef DOT1QVLANCURRENTTABLE_OIDS_H
#define DOT1QVLANCURRENTTABLE_OIDS_H
#ifdef __cplusplus
extern "C" {
#endif
/* column number definitions for table dot1qVlanCurrentTable */
#define DOT1QVLANCURRENTTABLE_OID 1,3,6,1,2,1,17,7,1,4,2
#define COLUMN_DOT1QVLANTIMEMARK 1
#define COLUMN_DOT1QVLANINDEX 2
#define COLUMN_DOT1QVLANFDBID 3
#define COLUMN_DOT1QVLANCURRENTEGRESSPORTS 4
#define COLUMN_DOT1QVLANCURRENTUNTAGGEDPORTS 5
#define COLUMN_DOT1QVLANSTATUS 6
#define COLUMN_DOT1QVLANCREATIONTIME 7
#define DOT1QVLANCURRENTTABLE_MIN_COL COLUMN_DOT1QVLANFDBID
#define DOT1QVLANCURRENTTABLE_MAX_COL COLUMN_DOT1QVLANCREATIONTIME
#ifdef __cplusplus
}
#endif
#endif /* DOT1QVLANCURRENTTABLE_OIDS_H */
/*
* Note: this file originally auto-generated by mib2c using
* version $ of $
*/
/* standard Net-SNMP includes */
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-features.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
/* include our parent header */
#include "dot1qVlanCurrentTable.h"
#include <signal.h>
/*
* If compiling within the net-snmp source code, this will trigger the feature
* detection mechansim to ensure the agent_check_and_process() function
* is left available even if --enable-minimialist is turned on. If you
* have configured net-snmp using --enable-minimialist and want to compile
* this code externally to the Net-SNMP code base, then please add
* --with-features="agent_check_and_process enable_stderrlog" to your
* configure line.
*/
netsnmp_feature_require(agent_check_and_process)
netsnmp_feature_require(enable_stderrlog)
static int keep_running;
static RETSIGTYPE
stop_server(int a) {
keep_running = 0;
}
static void usage(void) {
printf("usage: dot1qVlanCurrentTable [-D<tokens>] [-f] [-L] [-M] [-H] [LISTENING ADDRESSES]\n"
"\t-f Do not fork() from the calling shell.\n"
"\t-DTOKEN[,TOKEN,...]\n"
"\t\tTurn on debugging output for the given TOKEN(s).\n"
"\t\tWithout any tokens specified, it defaults to printing\n"
"\t\tall the tokens (which is equivalent to the keyword 'ALL').\n"
"\t\tYou might want to try ALL for extremely verbose output.\n"
"\t\tNote: You can't put a space between the -D and the TOKENs.\n"
"\t-H\tDisplay a list of configuration file directives\n"
"\t\tunderstood by the agent and then exit.\n"
"\t-M\tRun as a normal SNMP Agent instead of an AgentX sub-agent.\n"
"\t-x ADDRESS\tconnect to master agent at ADDRESS (default /var/agentx/master).\n"
"\t-L\tDo not open a log file; print all messages to stderr.\n");
exit(0);
}
int
main (int argc, char **argv) {
int agentx_subagent=1; /* change this if you want to be a SNMP master agent */
/* Defs for arg-handling code: handles setting of policy-related variables */
int ch;
extern char *optarg;
int dont_fork = 0, use_syslog = 0;
char *agentx_socket = NULL;
while ((ch = getopt(argc, argv, "D:fHLMx:")) != EOF)
switch(ch) {
case 'D':
debug_register_tokens(optarg);
snmp_set_do_debugging(1);
break;
case 'f':
dont_fork = 1;
break;
case 'H':
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
NETSNMP_DS_AGENT_NO_ROOT_ACCESS, 1);
init_agent("dot1qVlanCurrentTable"); /* register our .conf handlers */
init_dot1qVlanCurrentTable();
init_snmp("dot1qVlanCurrentTable");
fprintf(stderr, "Configuration directives understood:\n");
read_config_print_usage(" ");
exit(0);
case 'M':
agentx_subagent = 0;
break;
case 'L':
use_syslog = 0; /* use stderr */
break;
case 'x':
agentx_socket = optarg;
break;
default:
fprintf(stderr,"unknown option %c\n", ch);
usage();
}
if (optind < argc) {
int i;
/*
* There are optional transport addresses on the command line.
*/
DEBUGMSGTL(("snmpd/main", "optind %d, argc %d\n", optind, argc));
for (i = optind; i < argc; i++) {
char *c, *astring;
if ((c = netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
NETSNMP_DS_AGENT_PORTS))) {
astring = malloc(strlen(c) + 2 + strlen(argv[i]));
if (astring == NULL) {
fprintf(stderr, "malloc failure processing argv[%d]\n", i);
exit(1);
}
sprintf(astring, "%s,%s", c, argv[i]);
netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
NETSNMP_DS_AGENT_PORTS, astring);
SNMP_FREE(astring);
} else {
netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
NETSNMP_DS_AGENT_PORTS, argv[i]);
}
}
DEBUGMSGTL(("snmpd/main", "port spec: %s\n",
netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
NETSNMP_DS_AGENT_PORTS)));
}
/* we're an agentx subagent? */
if (agentx_subagent) {
/* make us a agentx client. */
netsnmp_enable_subagent();
if (NULL != agentx_socket)
netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
NETSNMP_DS_AGENT_X_SOCKET, agentx_socket);
}
snmp_disable_log();
if (use_syslog)
snmp_enable_calllog();
else
snmp_enable_stderrlog();
/* daemonize */
if(!dont_fork) {
int rc = netsnmp_daemonize(1,!use_syslog);
if(rc)
exit(-1);
}
/* initialize tcp/ip if necessary */
SOCK_STARTUP;
/* initialize the agent library */
init_agent("dot1qVlanCurrentTable");
/* init dot1qVlanCurrentTable mib code */
init_dot1qVlanCurrentTable();
/* read dot1qVlanCurrentTable.conf files. */
init_snmp("dot1qVlanCurrentTable");
/* If we're going to be a snmp master agent, initial the ports */
if (!agentx_subagent)
init_master_agent(); /* open the port to listen on (defaults to udp:161) */
/* In case we recevie a request to stop (kill -TERM or kill -INT) */
keep_running = 1;
signal(SIGTERM, stop_server);
signal(SIGINT, stop_server);
/* you're main loop here... */
while(keep_running) {
/* if you use select(), see snmp_select_info() in snmp_api(3) */
/* --- OR --- */
agent_check_and_process(1); /* 0 == don't block */
}
/* at shutdown time */
snmp_shutdown("dot1qVlanCurrentTable");
SOCK_CLEANUP;
exit(0);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment