# 
# Define types of data by mib type, and translate into needed C code.
#

############################################################################
# source variable typing information:
include: mib2c.vartypes.conf

# Begin code template section
############################################################################
# variable statemnts used in a couple of places below
############################################################################
type:	code-varInits
code:	  /* variables we may use later */
code:	  static long long_ret;
code:	  static unsigned char string[SPRINT_MAX_LEN];
code:	  static oid objid[MAX_OID_LEN];
code:	  static struct counter64 c64;


############################################################################
# The .h file
############################################################################
type:	code-dot-h
code:	//==========================================================================
code:	//
code:	//      snmp/snmpagent/current/include/mibgroup/mibII/$outputName.h
code:	//
code:	//
code:	//==========================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
code:	//####UCDSNMPCOPYRIGHTBEGIN####
code:	//
code:	// -------------------------------------------
code:	//
code:	// Portions of this software may have been derived from the UCD-SNMP
code:	// project,  <http://ucd-snmp.ucdavis.edu/>  from the University of
code:	// California at Davis, which was originally based on the Carnegie Mellon
code:	// University SNMP implementation.  Portions of this software are therefore
code:	// covered by the appropriate copyright disclaimers included herein.
code:	//
code:	// The release used was version 4.1.2 of May 2000.  \"ucd-snmp-4.1.2\"
code:	// -------------------------------------------
code:	//
code:	//####UCDSNMPCOPYRIGHTEND####
code:	//==========================================================================
code:	//#####DESCRIPTIONBEGIN####
code:	//
code:	// Author(s):    hmt
code:	// Contributors: hmt
code:	// Date:         2000-05-30
code:	// Purpose:      Port of UCD-SNMP distribution to eCos.
code:	// Description:  
code:	//              
code:	//
code:	//####DESCRIPTIONEND####
code:	//
code:	//==========================================================================
code:	/********************************************************************
code:	       Copyright 1989, 1991, 1992 by Carnegie Mellon University
code:	\ 
code:	                          Derivative Work -
code:	Copyright 1996, 1998, 1999, 2000 The Regents of the University of California
code:	\ 
code:	                         All Rights Reserved
code:	\ 
code:	Permission to use, copy, modify and distribute this software and its
code:	documentation for any purpose and without fee is hereby granted,
code:	provided that the above copyright notice appears in all copies and
code:	that both that copyright notice and this permission notice appear in
code:	supporting documentation, and that the name of CMU and The Regents of
code:	the University of California not be used in advertising or publicity
code:	pertaining to distribution of the software without specific written
code:	permission.
code:	\ 
code:	CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA DISCLAIM ALL
code:	WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
code:	WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL CMU OR
code:	THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL,
code:	INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
code:	FROM THE LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
code:	CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
code:	CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
code:	*********************************************************************/
code:	/* This file was generated by mib2c and is intended for use as a mib module
code:	  for the ucd-snmp snmpd agent. */
code:	
code:	#ifndef _MIBGROUP_${OUTPUTNAME}_H
code:	#define _MIBGROUP_${OUTPUTNAME}_H
code:	
code:	/* we may use header_generic and header_simple_table from the util_funcs module */
code:	
code:	config_require(util_funcs)
code:
code:	/* function prototypes */
code:	
code:	void   init_$outputName(void);
code:	FindVarMethod var_$outputName;
code:	$variables{'code-var_table-decl'}{'processed'}
code:	$variables{'code-write-func-decl'}{'processed'}
code:	
code:	#endif /* _MIBGROUP_${OUTPUTNAME}_H */

############################################################################
# The .c file, top
############################################################################
type:	code-main-part
code:	//==========================================================================
code:	//
code:	//      snmp/snmpagent/current/src/mibgroup/mibII/$outputName.c
code:	//
code:	//
code:	//==========================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
code:	//####UCDSNMPCOPYRIGHTBEGIN####
code:	//
code:	// -------------------------------------------
code:	//
code:	// Portions of this software may have been derived from the UCD-SNMP
code:	// project,  <http://ucd-snmp.ucdavis.edu/>  from the University of
code:	// California at Davis, which was originally based on the Carnegie Mellon
code:	// University SNMP implementation.  Portions of this software are therefore
code:	// covered by the appropriate copyright disclaimers included herein.
code:	//
code:	// The release used was version 4.1.2 of May 2000.  \"ucd-snmp-4.1.2\"
code:	// -------------------------------------------
code:	//
code:	//####UCDSNMPCOPYRIGHTEND####
code:	//==========================================================================
code:	//#####DESCRIPTIONBEGIN####
code:	//
code:	// Author(s):    hmt
code:	// Contributors: hmt
code:	// Date:         2000-05-30
code:	// Purpose:      Port of UCD-SNMP distribution to eCos.
code:	// Description:  
code:	//              
code:	//
code:	//####DESCRIPTIONEND####
code:	//
code:	//==========================================================================
code:	/********************************************************************
code:	       Copyright 1989, 1991, 1992 by Carnegie Mellon University
code:	\ 
code:	                          Derivative Work -
code:	Copyright 1996, 1998, 1999, 2000 The Regents of the University of California
code:	\ 
code:	                         All Rights Reserved
code:	\ 
code:	Permission to use, copy, modify and distribute this software and its
code:	documentation for any purpose and without fee is hereby granted,
code:	provided that the above copyright notice appears in all copies and
code:	that both that copyright notice and this permission notice appear in
code:	supporting documentation, and that the name of CMU and The Regents of
code:	the University of California not be used in advertising or publicity
code:	pertaining to distribution of the software without specific written
code:	permission.
code:	\ 
code:	CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA DISCLAIM ALL
code:	WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
code:	WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL CMU OR
code:	THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL,
code:	INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
code:	FROM THE LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
code:	CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
code:	CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
code:	*********************************************************************/
code:	/* This file was generated by mib2c and is intended for use as a mib module
code:	   for the ucd-snmp snmpd agent. */
code:	
code:	/* This should always be included first before anything else */
code:	#include <config.h>
code:	
code:	/* minimal include directives */
code:	#include \"mibincl.h\"
code:	#include \"mibgroup/util_funcs.h\"
code:	#include \"mibgroup/mibII/$outputName.h\"
code:	
code:	/* 
code:	 * ${outputName}_variables_oid:
code:	 *   this is the top level oid that we want to register under.  This
code:	 *   is essentially a prefix, with the suffix appearing in the
code:	 *   variable below.
code:	 */
code:	
code:	oid ${outputName}_variables_oid[] = { $commaoid };
code:	
code:	/* 
code:	 * variable$varlen ${outputName}_variables:
code:	 *   this variable defines function callbacks and type return information 
code:	 *   for the $outputName mib section 
code:	 */
code:	
code:	struct variable$varlen ${outputName}_variables[] = {
code:	/*  magic number        , variable type , ro/rw , callback fn  , L, oidsuffix */
code:	$variables{'variable-structure-info'}{'processed'}
code:	};
code:	/*    (L = length of the oidsuffix) */
code:	
code:	/*
code:	 * init_$outputName():
code:	 *   Initialization routine.  This is called when the agent starts up.
code:	 *   At a minimum, registration of your variables should take place here.
code:	 */
code:	void init_$outputName(void) {
code:	
code:	  /* register ourselves with the agent to handle our mib tree */
code:	  REGISTER_MIB(\"$outputName\", ${outputName}_variables, variable$varlen,\
code:	               ${outputName}_variables_oid);
code:	
code:	  /* place any other initialization junk you need here */
code:	}
code:	
code:	/*
code:	 * var_$outputName():
code:	 *   This function is called every time the agent gets a request for
code:	 *   a scalar variable that might be found within your mib section
code:	 *   registered above.  It is up to you to do the right thing and
code:	 *   return the correct value.
code:	 *     You should also correct the value of \"var_len\" if necessary.
code:	 *
code:	 *   Please see the documentation for more information about writing
code:	 *   module extensions, and check out the examples in the examples
code:	 *   and mibII directories.
code:	 */
code:	unsigned char *
code:	var_$outputName(struct variable *vp, 
code:	                oid     *name, 
code:	                size_t  *length, 
code:	                int     exact, 
code:	                size_t  *var_len, 
code:	                WriteMethod **write_method)
code:	{
code:	
code:	$variables{'code-varInits'}{'code'}
code:	
code:	  if (header_generic(vp,name,length,exact,var_len,write_method)
code:	                                  == MATCH_FAILED )
code:	    return NULL;
code:	
code:	  /* 
code:	   * this is where we do the value assignments for the mib results.
code:	   */
code:	  switch(vp->magic) {\n\n
code:	$variables{$outputName}{'code-case-statements'}{'processed'}
code:	    default:
code:	      ERROR_MSG(\"\");
code:	  }
code:	  return NULL;
code:	}
code:
code:	$variables{'code-var_table'}{'processed'}
code:
code:	$variables{'code-write-func'}{'processed'}

############################################################################
# var_ function for tables, which is handled specially and used above
#
#   Note: $vtable is set to the table name in the processtable loop.
############################################################################

#
# header file defs first
#
type:		code-var_table-decl
processtable:	code-var_table-decl

code:	FindVarMethod var_$vtable;

#
# Code code per table
#
type:		code-var_table
processtable:	code-var_table

code:	/*
code:	 * var_$vtable():
code:	 *   Handle this table separately from the scalar value case.
code:	 *   The workings of this are basically the same as for var_$outputName above.
code:	 */
code:	unsigned char *
code:	var_$vtable(struct variable *vp,
code:	    	    oid     *name,
code:	    	    size_t  *length,
code:	    	    int     exact,
code:	    	    size_t  *var_len,
code:	    	    WriteMethod **write_method)
code:	{
code:	
code:	$variables{'code-varInits'}{'code'}
code:	
code:	  /* 
code:	   * This assumes that the table is a \'simple\' table.
code:	   *	See the implementation documentation for the meaning of this.
code:	   *	You will need to provide the correct value for the TABLE_SIZE parameter
code:	   *
code:	   * If this table does not meet the requirements for a simple table,
code:	   *	you will need to provide the replacement code yourself.
code:	   *	Mib2c is not smart enough to write this for you.
code:	   *    Again, see the implementation documentation for what is required.
code:	   */
code:	  if (header_simple_table(vp,name,length,exact,var_len,write_method, TABLE_SIZE)
code:	                                                == MATCH_FAILED )
code:	    return NULL;
code:	
code:	  /* 
code:	   * this is where we do the value assignments for the mib results.
code:	   */
code:	  switch(vp->magic) {\n\n
code:	$variables{$vtable}{'code-case-statements'}{'processed'}
code:	    default:
code:	      ERROR_MSG(\"\");
code:	  }
code:	  return NULL;
code:	}


############################################################################
# case statement sections
############################################################################
type:		code-case-statements
process:	code-case-statements
skipif:		$mib->{'access'} =~ /NoAccess/

code:		    case $NAME:
code:		        " . (($mib->{'access'} =~ /ReadWrite|WriteOnly|Create/) ? "*write_method = write_$mib->{label};" : "") . "
code:		$variables{$mib->{'type'}}{'case'}
code:		

############################################################################
# storage structure information
############################################################################
type:		variable-structure-info
process:	variable-structure-info
skipif:		$mib->{'access'} =~ /NoAccess/
code:		" . sprintf("#define   %-20s  $count", $NAME) . "
code:		" . sprintf("  { %-20s, %-14s, %-6.6s, %s, %d, { %s } },", $NAME, $variables{$mib->{'type'}}{'asnType'}, $accessToUCD{$mib->{'access'}}, "var_$vroutine", $depth-1, $subid) . "

############################################################################
# write function defitition, also appended to the end of the .c file.
############################################################################
#
# Header info: declair write functions for set processing
#
process:	code-write-func-decl
type:		code-write-func-decl
skipif:		$mib->{'access'} !~ /Write|Create/
code:		WriteMethod write_$name;
#
# C code
#
type:		code-write-func
process:	code-write-func
skipif:		$mib->{'access'} !~ /Write|Create/
code:	int
code:	write_$name(int      action,
code:	            u_char   *var_val,
code:	            u_char   var_val_type,
code:	            size_t   var_val_len,
code:	            u_char   *statP,
code:	            oid      *name,
code:	            size_t   name_len)
code:	{
code:	  $variables{$mib->{'type'}}{writeInit}
code:	  int size;
code:	
code:	  switch ( action ) {
code:	        case RESERVE1:
code:	          if (var_val_type != $variables{$mib->{'type'}}{asnType}){
code:	              fprintf(stderr, \"write to $name not $variables{$mib->{'type'}}{asnType}\\n\");
code:	              return SNMP_ERR_WRONGTYPE;
code:	          }
code:	          if (var_val_len > sizeof($variables{$mib->{'type'}}{variable})){
code:	              fprintf(stderr,\"write to $name: bad length\\n\");
code:	              return SNMP_ERR_WRONGLENGTH;
code:	          }
code:	          break;
code:	
code:	        case RESERVE2:
code:	          size = var_val_len;
code:	          $variables{$mib->{'type'}}{variable} = ($variables{$mib->{'type'}}{cast}) var_val;
code:	
code:	          break;
code:	
code:	        case FREE:
code:	             /* Release any resources that have been allocated */
code:	          break;
code:	
code:	        case ACTION:
code:	             /* The variable has been stored in $variables{$mib->{'type'}}{variable} for
code:	             you to use, and you have just been asked to do something with
code:	             it.  Note that anything done here must be reversable in the UNDO case */
code:	          break;
code:	
code:	        case UNDO:
code:	             /* Back out any changes made in the ACTION case */
code:	          break;
code:	
code:	        case COMMIT:
code:	             /* Things are working well, so it's now safe to make the change
code:	             permanently.  Make sure that anything done here can't fail! */
code:	          break;
code:	  }
code:	  return SNMP_ERR_NOERROR;
code:	}
code:
code:
