Commit 50b95529 authored by Michal Wasiak's avatar Michal Wasiak Committed by Adam Wujek

snmp/bridge_mib: generate dot1dBasePortTable

Generate dot1dBasePortTable with a command:
mib2c -c mib2c.mfd.conf BRIDGE-MIB::dot1dBasePortTable

The data in this table is static, it does not need a cache.
Signed-off-by: 's avatarMichal Wasiak <michal.wasiak@gmail.com>
parent e6582246
########################################################################
##
## mib2c node setting for dot1dBasePort
##
## 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 = 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 dot1dBasePortCircuit
##
## 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 = oid@
##
########################################################################
## 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 dot1dBasePortDelayExceededDiscards
##
## 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 dot1dBasePortIfIndex
##
## 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 = 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 dot1dBasePortMtuExceededDiscards
##
## 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 dot1dBasePortTable
##
## ########################################################################
##
## 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 = 0@
##
## ########################################################################
##
## 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 = 0@
##
## ########################################################################
##
## 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@
##
************************************************************************
dot1dBasePortTable 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 dot1dBasePortTable 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 : dot1dBasePortTable_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 dot1dBasePortTable_Makefile
File : dot1dBasePortTable_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:
dot1dBasePortTable-README-dot1dBasePortTable.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 : dot1dBasePortTable.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 : dot1dBasePortTable_oids.h
Purpose : C #define definitions of the tables, columns, and OIDs
File : dot1dBasePortTable_enums.h
Purpose : C #define definitions of the enumerated type values for
each column of each table that requires them.
File : dot1dBasePortTable_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 dot1dBasePortTable
*
* \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 "dot1dBasePortTable.h"
#include <net-snmp/agent/mib_modules.h>
#include "dot1dBasePortTable_interface.h"
const oid dot1dBasePortTable_oid[] = { DOT1DBASEPORTTABLE_OID };
const int dot1dBasePortTable_oid_size = OID_LENGTH(dot1dBasePortTable_oid);
dot1dBasePortTable_registration dot1dBasePortTable_user_context;
void initialize_table_dot1dBasePortTable(void);
void shutdown_table_dot1dBasePortTable(void);
/**
* Initializes the dot1dBasePortTable module
*/
void
init_dot1dBasePortTable(void)
{
DEBUGMSGTL(("verbose:dot1dBasePortTable:init_dot1dBasePortTable","called\n"));
/*
* TODO:300:o: Perform dot1dBasePortTable one-time module initialization.
*/
/*
* here we initialize all the tables we're planning on supporting
*/
if (should_init("dot1dBasePortTable"))
initialize_table_dot1dBasePortTable();
} /* init_dot1dBasePortTable */
/**
* Shut-down the dot1dBasePortTable module (agent is exiting)
*/
void
shutdown_dot1dBasePortTable(void)
{
if (should_init("dot1dBasePortTable"))
shutdown_table_dot1dBasePortTable();
}
/**
* Initialize the table dot1dBasePortTable
* (Define its contents and how it's structured)
*/
void
initialize_table_dot1dBasePortTable(void)
{
dot1dBasePortTable_registration * user_context;
u_long flags;
DEBUGMSGTL(("verbose:dot1dBasePortTable:initialize_table_dot1dBasePortTable","called\n"));
/*
* TODO:301:o: Perform dot1dBasePortTable one-time table initialization.
*/
/*
* TODO:302:o: |->Initialize dot1dBasePortTable 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("dot1dBasePortTable", NULL, NULL);
/*
* No support for any flags yet, but in the future you would
* set any flags here.
*/
flags = 0;
/*
* call interface initialization code
*/
_dot1dBasePortTable_initialize_interface(user_context, flags);
} /* initialize_table_dot1dBasePortTable */
/**
* Shutdown the table dot1dBasePortTable
*/
void
shutdown_table_dot1dBasePortTable(void)
{
/*
* call interface shutdown code
*/
_dot1dBasePortTable_shutdown_interface(&dot1dBasePortTable_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
dot1dBasePortTable_rowreq_ctx_init(dot1dBasePortTable_rowreq_ctx *rowreq_ctx,
void *user_init_ctx)
{
DEBUGMSGTL(("verbose:dot1dBasePortTable:dot1dBasePortTable_rowreq_ctx_init","called\n"));
netsnmp_assert(NULL != rowreq_ctx);
/*
* TODO:210:o: |-> Perform extra dot1dBasePortTable rowreq initialization. (eg DEFVALS)
*/
return MFD_SUCCESS;
} /* dot1dBasePortTable_rowreq_ctx_init */
/**
* extra context cleanup
*
*/
void dot1dBasePortTable_rowreq_ctx_cleanup(dot1dBasePortTable_rowreq_ctx *rowreq_ctx)
{
DEBUGMSGTL(("verbose:dot1dBasePortTable:dot1dBasePortTable_rowreq_ctx_cleanup","called\n"));
netsnmp_assert(NULL != rowreq_ctx);
/*
* TODO:211:o: |-> Perform extra dot1dBasePortTable rowreq cleanup.
*/
} /* dot1dBasePortTable_rowreq_ctx_cleanup */
/**
* pre-request callback
*
*
* @retval MFD_SUCCESS : success.
* @retval MFD_ERROR : other error
*/
int
dot1dBasePortTable_pre_request(dot1dBasePortTable_registration * user_context)
{
DEBUGMSGTL(("verbose:dot1dBasePortTable:dot1dBasePortTable_pre_request","called\n"));
/*
* TODO:510:o: Perform dot1dBasePortTable pre-request actions.
*/
return MFD_SUCCESS;
} /* dot1dBasePortTable_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
dot1dBasePortTable_post_request(dot1dBasePortTable_registration * user_context, int rc)
{
DEBUGMSGTL(("verbose:dot1dBasePortTable:dot1dBasePortTable_post_request","called\n"));
/*
* TODO:511:o: Perform dot1dBasePortTable post-request actions.
*/
return MFD_SUCCESS;
} /* dot1dBasePortTable_post_request */
/** @{ */
/*
* Note: this file originally auto-generated by mib2c using
* version $ of $
*
* $Id:$
*/
#ifndef DOT1DBASEPORTTABLE_H
#define DOT1DBASEPORTTABLE_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(BRIDGE-MIB)
config_require(BRIDGE-MIB/dot1dBasePortTable/dot1dBasePortTable_interface)
config_require(BRIDGE-MIB/dot1dBasePortTable/dot1dBasePortTable_data_access)
config_require(BRIDGE-MIB/dot1dBasePortTable/dot1dBasePortTable_data_get)
config_require(BRIDGE-MIB/dot1dBasePortTable/dot1dBasePortTable_data_set)
/* *INDENT-ON* */
/* OID and column number definitions for dot1dBasePortTable */
#include "dot1dBasePortTable_oids.h"
/* enum definions */
#include "dot1dBasePortTable_enums.h"
/* *********************************************************************
* function declarations
*/
void init_dot1dBasePortTable(void);
void shutdown_dot1dBasePortTable(void);
/* *********************************************************************
* Table declarations
*/
/**********************************************************************
**********************************************************************
***
*** Table dot1dBasePortTable
***
**********************************************************************
**********************************************************************/
/*
* BRIDGE-MIB::dot1dBasePortTable is subid 4 of dot1dBase.
* Its status is Current.
* OID: .1.3.6.1.2.1.17.1.4, length: 9
*/
/* *********************************************************************
* 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 dot1dBasePortTable registration context.
*/
typedef netsnmp_data_list dot1dBasePortTable_registration;
/**********************************************************************/
/*
* TODO:110:r: |-> Review dot1dBasePortTable data context structure.
* This structure is used to represent the data for dot1dBasePortTable.
*/
/*
* This structure contains storage for all the columns defined in the
* dot1dBasePortTable.
*/
typedef struct dot1dBasePortTable_data_s {
/*
* dot1dBasePortIfIndex(2)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
*/
long dot1dBasePortIfIndex;
/*
* dot1dBasePortCircuit(3)/OBJECTID/ASN_OBJECT_ID/oid(oid)//L/A/w/e/r/d/h
*/
oid dot1dBasePortCircuit[128];
size_t dot1dBasePortCircuit_len; /* # of oid elements, not bytes */
/*
* dot1dBasePortDelayExceededDiscards(4)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
*/
u_long dot1dBasePortDelayExceededDiscards;
/*
* dot1dBasePortMtuExceededDiscards(5)/COUNTER/ASN_COUNTER/u_long(u_long)//l/A/w/e/r/d/h
*/
u_long dot1dBasePortMtuExceededDiscards;
} dot1dBasePortTable_data;
/*
* TODO:120:r: |-> Review dot1dBasePortTable mib index.
* This structure is used to represent the index for dot1dBasePortTable.
*/
typedef struct dot1dBasePortTable_mib_index_s {
/*
* dot1dBasePort(1)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
*/
long dot1dBasePort;
} dot1dBasePortTable_mib_index;
/*
* TODO:121:r: | |-> Review dot1dBasePortTable max index length.
* If you KNOW that your indexes will never exceed a certain
* length, update this macro to that length.
*/
#define MAX_dot1dBasePortTable_IDX_LEN 1
/* *********************************************************************
* TODO:130:o: |-> Review dot1dBasePortTable Row request (rowreq) context.
* When your functions are called, you will be passed a
* dot1dBasePortTable_rowreq_ctx pointer.
*/
typedef struct dot1dBasePortTable_rowreq_ctx_s {
/** this must be first for container compare to work */
netsnmp_index oid_idx;
oid oid_tmp[MAX_dot1dBasePortTable_IDX_LEN];
dot1dBasePortTable_mib_index tbl_idx;
dot1dBasePortTable_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 dot1dBasePortTable rowreq context.
*/
/*
* storage for future expansion
*/
netsnmp_data_list *dot1dBasePortTable_data_list;
} dot1dBasePortTable_rowreq_ctx;
typedef struct dot1dBasePortTable_ref_rowreq_ctx_s {
dot1dBasePortTable_rowreq_ctx *rowreq_ctx;
} dot1dBasePortTable_ref_rowreq_ctx;
/* *********************************************************************
* function prototypes
*/
int dot1dBasePortTable_pre_request(dot1dBasePortTable_registration * user_context);
int dot1dBasePortTable_post_request(dot1dBasePortTable_registration * user_context,
int rc);
int dot1dBasePortTable_rowreq_ctx_init(dot1dBasePortTable_rowreq_ctx *rowreq_ctx,
void *user_init_ctx);
void dot1dBasePortTable_rowreq_ctx_cleanup(dot1dBasePortTable_rowreq_ctx *rowreq_ctx);
dot1dBasePortTable_rowreq_ctx *
dot1dBasePortTable_row_find_by_mib_index(dot1dBasePortTable_mib_index *mib_idx);
extern const oid dot1dBasePortTable_oid[];
extern const int dot1dBasePortTable_oid_size;
#include "dot1dBasePortTable_interface.h"
#include "dot1dBasePortTable_data_access.h"
#include "dot1dBasePortTable_data_get.h"
#include "dot1dBasePortTable_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 /* DOT1DBASEPORTTABLE_H */
/** @} */
CC=gcc
TABLE_PREFIX=dot1dBasePortTable
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 DOT1DBASEPORTTABLE_DATA_ACCESS_H
#define DOT1DBASEPORTTABLE_DATA_ACCESS_H
#ifdef __cplusplus
extern "C" {
#endif
/* *********************************************************************
* function declarations
*/
/* *********************************************************************
* Table declarations
*/
/**********************************************************************
**********************************************************************
***
*** Table dot1dBasePortTable
***
**********************************************************************
**********************************************************************/
/*
* BRIDGE-MIB::dot1dBasePortTable is subid 4 of dot1dBase.
* Its status is Current.
* OID: .1.3.6.1.2.1.17.1.4, length: 9
*/
int dot1dBasePortTable_init_data(dot1dBasePortTable_registration * dot1dBasePortTable_reg);
void dot1dBasePortTable_container_init(netsnmp_container **container_ptr_ptr);
void dot1dBasePortTable_container_shutdown(netsnmp_container *container_ptr);
int dot1dBasePortTable_container_load(netsnmp_container *container);
void dot1dBasePortTable_container_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 dot1dBasePortTable_row_prep( dot1dBasePortTable_rowreq_ctx *rowreq_ctx);
#ifdef __cplusplus
}
#endif
#endif /* DOT1DBASEPORTTABLE_DATA_ACCESS_H */
/*
* Note: this file originally auto-generated by mib2c using
* version $ of $
*
* $Id:$
*
* @file dot1dBasePortTable_data_get.h
*
* @addtogroup get
*
* Prototypes for get functions
*
* @{
*/
#ifndef DOT1DBASEPORTTABLE_DATA_GET_H
#define DOT1DBASEPORTTABLE_DATA_GET_H
#ifdef __cplusplus
extern "C" {
#endif
/* *********************************************************************
* GET function declarations
*/
/* *********************************************************************
* GET Table declarations
*/
/**********************************************************************
**********************************************************************
***
*** Table dot1dBasePortTable
***
**********************************************************************
**********************************************************************/
/*
* BRIDGE-MIB::dot1dBasePortTable is subid 4 of dot1dBase.
* Its status is Current.
* OID: .1.3.6.1.2.1.17.1.4, length: 9
*/
/*
* indexes
*/
int dot1dBasePortIfIndex_get( dot1dBasePortTable_rowreq_ctx *rowreq_ctx, long * dot1dBasePortIfIndex_val_ptr );
int dot1dBasePortCircuit_get( dot1dBasePortTable_rowreq_ctx *rowreq_ctx, oid **dot1dBasePortCircuit_val_ptr_ptr, size_t *dot1dBasePortCircuit_val_ptr_len_ptr );
int dot1dBasePortDelayExceededDiscards_get( dot1dBasePortTable_rowreq_ctx *rowreq_ctx, u_long * dot1dBasePortDelayExceededDiscards_val_ptr );
int dot1dBasePortMtuExceededDiscards_get( dot1dBasePortTable_rowreq_ctx *rowreq_ctx, u_long * dot1dBasePortMtuExceededDiscards_val_ptr );
int dot1dBasePortTable_indexes_set_tbl_idx(dot1dBasePortTable_mib_index *tbl_idx, long dot1dBasePort_val);
int dot1dBasePortTable_indexes_set(dot1dBasePortTable_rowreq_ctx *rowreq_ctx, long dot1dBasePort_val);
#ifdef __cplusplus
}
#endif
#endif /* DOT1DBASEPORTTABLE_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 "dot1dBasePortTable.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 DOT1DBASEPORTTABLE_DATA_SET_H
#define DOT1DBASEPORTTABLE_DATA_SET_H
#ifdef __cplusplus
extern "C" {
#endif
/* *********************************************************************
* SET function declarations
*/
/* *********************************************************************
* SET Table declarations
*/
#ifdef __cplusplus
}
#endif
#endif /* DOT1DBASEPORTTABLE_DATA_SET_H */
/*
* Note: this file originally auto-generated by mib2c using
* $
*
* $Id:$
*/
#ifndef DOT1DBASEPORTTABLE_ENUMS_H
#define DOT1DBASEPORTTABLE_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 dot1dBasePortTable
*
*************************************************************************
*************************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* DOT1DBASEPORTTABLE_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 DOT1DBASEPORTTABLE_INTERFACE_H
#define DOT1DBASEPORTTABLE_INTERFACE_H
#ifdef __cplusplus
extern "C" {
#endif
#include "dot1dBasePortTable.h"
/* ********************************************************************
* Table declarations
*/
/* PUBLIC interface initialization routine */
void _dot1dBasePortTable_initialize_interface(dot1dBasePortTable_registration * user_ctx,
u_long flags);
void _dot1dBasePortTable_shutdown_interface(dot1dBasePortTable_registration * user_ctx);
dot1dBasePortTable_registration *
dot1dBasePortTable_registration_get( void );
dot1dBasePortTable_registration *
dot1dBasePortTable_registration_set( dot1dBasePortTable_registration * newreg );
netsnmp_container *dot1dBasePortTable_container_get( void );
int dot1dBasePortTable_container_size( void );
dot1dBasePortTable_rowreq_ctx * dot1dBasePortTable_allocate_rowreq_ctx(void *);
void dot1dBasePortTable_release_rowreq_ctx(dot1dBasePortTable_rowreq_ctx *rowreq_ctx);
int dot1dBasePortTable_index_to_oid(netsnmp_index *oid_idx,
dot1dBasePortTable_mib_index *mib_idx);
int dot1dBasePortTable_index_from_oid(netsnmp_index *oid_idx,
dot1dBasePortTable_mib_index *mib_idx);
/*
* access to certain internals. use with caution!
*/
void dot1dBasePortTable_valid_columns_set(netsnmp_column_info *vc);
#ifdef __cplusplus
}
#endif
#endif /* DOT1DBASEPORTTABLE_INTERFACE_H */
/** @} */
/*
* Note: this file originally auto-generated by mib2c using
* $
*
* $Id:$
*/
#ifndef DOT1DBASEPORTTABLE_OIDS_H
#define DOT1DBASEPORTTABLE_OIDS_H
#ifdef __cplusplus
extern "C" {
#endif
/* column number definitions for table dot1dBasePortTable */
#define DOT1DBASEPORTTABLE_OID 1,3,6,1,2,1,17,1,4
#define COLUMN_DOT1DBASEPORT 1
#define COLUMN_DOT1DBASEPORTIFINDEX 2
#define COLUMN_DOT1DBASEPORTCIRCUIT 3
#define COLUMN_DOT1DBASEPORTDELAYEXCEEDEDDISCARDS 4
#define COLUMN_DOT1DBASEPORTMTUEXCEEDEDDISCARDS 5
#define DOT1DBASEPORTTABLE_MIN_COL COLUMN_DOT1DBASEPORT
#define DOT1DBASEPORTTABLE_MAX_COL COLUMN_DOT1DBASEPORTMTUEXCEEDEDDISCARDS
#ifdef __cplusplus
}
#endif
#endif /* DOT1DBASEPORTTABLE_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 "dot1dBasePortTable.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: dot1dBasePortTable [-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("dot1dBasePortTable"); /* register our .conf handlers */
init_dot1dBasePortTable();
init_snmp("dot1dBasePortTable");
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("dot1dBasePortTable");
/* init dot1dBasePortTable mib code */
init_dot1dBasePortTable();
/* read dot1dBasePortTable.conf files. */
init_snmp("dot1dBasePortTable");
/* 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("dot1dBasePortTable");
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