260 lines
10 KiB
C
260 lines
10 KiB
C
############################################################# -*- c -*-
|
|
## Defaults
|
|
########################################################################
|
|
@if "$m2c_node_name" ne "$node"@
|
|
## if $node.accessible != 1, might be inaccessible index node
|
|
@ eval $m2c_node_name = $node@
|
|
@ eval $m2c_node_skip_mapping = $m2c_table_skip_mapping@
|
|
@ eval $m2c_node_needlength = $node.needlength@
|
|
@ eval $m2c_node_get_comments = ""@
|
|
@ eval $m2c_node_set_comments = ""@
|
|
@ eval $m2c_node_skip_get = 0@
|
|
##//how should a function handle a pointer to a buffer that is to small?
|
|
@ eval $m2c_node_realloc = 0@ // 0=fail, 1=realloc, 2=malloc
|
|
########################################################################
|
|
## fix some declarations
|
|
########################################################################
|
|
@ if $node.enums == 1@
|
|
##
|
|
@ if $m2c_node_skip_mapping == -1@
|
|
@ eval $m2c_node_skip_mapping = 0@
|
|
@ end@
|
|
##
|
|
## validate some assumptions
|
|
##
|
|
@ if ("$node.perltype" ne "INTEGER") && ("$node.perltype" ne "BITS")@
|
|
@ print "$node had enums, but isn't INTEGER or BITS! ($node.perltype)\n"@
|
|
@ exit@
|
|
@ end@
|
|
@ if $node.ranges == 1@
|
|
@ print "$node has enums and ranges!\n"@
|
|
@ exit@
|
|
@ end@
|
|
##
|
|
## for a TC, prefix definition w/syntax to reduce collisions
|
|
##
|
|
@ if $node.syntax ne $node.perltype@
|
|
@ eval $m2c_de_pfx = "${m2c_const_pfx}$node.syntax"@
|
|
@ else@
|
|
@ eval $m2c_de_pfx = "${m2c_const_pfx}$node"@
|
|
@ end@
|
|
@ if $m2c_const_lc == 0@
|
|
@ eval $m2c_de_pfx = uc($m2c_de_pfx)@
|
|
@ end@
|
|
@ if "$node.perltype" eq "BITS"@
|
|
@ eval $m2c_enum_sfx="_flag"@
|
|
@ eval $m2c_enum_mask="${m2c_de_pfx}_flag"@
|
|
@ if $m2c_const_lc == 0@
|
|
@ eval $m2c_enum_sfx = uc($m2c_enum_sfx)@
|
|
@ eval $m2c_enum_mask = uc($m2c_enum_mask)@
|
|
@ end@
|
|
@ else@
|
|
@ eval $m2c_enum_sfx=""@
|
|
@ end@
|
|
##
|
|
## use longs for enums (w/out length)
|
|
##
|
|
@ eval $m2c_decl = "u_long"@
|
|
@ eval $m2c_node_needlength = 0@
|
|
@ if "$node.perltype" eq "BITS"@
|
|
@ eval $m2c_node_skip_get = 1@
|
|
@ end@
|
|
@ else@
|
|
@ eval $m2c_decl = $node.decl@
|
|
@ end@ // enums
|
|
########################################################################
|
|
## find max size
|
|
########################################################################
|
|
@ if $node.ranges == 1@
|
|
##
|
|
## I do not *think* you can have both...
|
|
##
|
|
@ if $node.enums == 1@
|
|
@ print "$node has enums and ranges!\n"@
|
|
@ exit@
|
|
@ end@
|
|
@ eval $m2c_node_maxlen = 0@
|
|
@ foreach $a $b range $node@
|
|
@ eval $m2c_node_maxlen = max($m2c_node_maxlen,$b)@
|
|
@ end@
|
|
@ elsif "$node.type" eq "ASN_OBJECT_ID"@
|
|
@ eval $m2c_node_maxlen = 128@
|
|
@ else@ #ranges
|
|
@ eval $m2c_node_maxlen = 65535@
|
|
@ end@ #ranges
|
|
##/*####################################################################
|
|
## set up extra params, based on if we need length
|
|
########################################################################
|
|
## VAR_VAL : variable value.
|
|
## VAR_VAL_PTR : pointer to variable value.
|
|
## VAR_REF : variable reference. (pointer to pointer to variable value)
|
|
##*/
|
|
@ if "x$m2c_node_var_name" eq "x"@
|
|
@ eval $m2c_node_var_name="var->"@
|
|
@ end@
|
|
@ eval $m2c_node_var_val_ptr = "($m2c_decl *)${m2c_node_var_name}val.string"@
|
|
@ if $m2c_node_needlength == 1@
|
|
@ eval $m2c_XX = "($m2c_decl **)&${m2c_node_var_name}val.string,"@
|
|
@ eval $m2c_node_var_ref = "$m2c_XX &${m2c_node_var_name}val_len"@
|
|
@ eval $m2c_node_var_val = "$m2c_node_var_val_ptr, ${m2c_node_var_name}val_len"@
|
|
@ else@
|
|
@ eval $m2c_node_var_ref = "($m2c_decl *)${m2c_node_var_name}val.string"@
|
|
@ eval $m2c_node_var_val = "*($m2c_node_var_val_ptr)"@
|
|
@ end@
|
|
##
|
|
##
|
|
@ eval $m2c_node_param_val_name = "${node}_val"@
|
|
@ eval $m2c_node_param_val_lname = "${m2c_node_param_val_name}_len"@
|
|
@ eval $m2c_node_param_ref_name = "${m2c_node_param_val_name}_ptr"@
|
|
@ if $m2c_node_needlength == 1@
|
|
@ eval $m2c_node_param_val_name = "${m2c_node_param_val_name}_ptr"@
|
|
@ eval $m2c_node_param_val_lname = "${m2c_node_param_val_name}_len"@
|
|
@ eval $m2c_node_param_val_call = "${m2c_node_param_val_name}, ${m2c_node_param_val_lname}"@
|
|
@ eval $m2c_node_param_ref_name = "${m2c_node_param_ref_name}_ptr"@
|
|
@ eval $m2c_node_param_ref_lname = "${m2c_node_param_val_lname}_ptr"@
|
|
@ eval $m2c_XX = "$m2c_decl **$m2c_node_param_ref_name,"@
|
|
@ eval $m2c_node_param_ref = "$m2c_XX size_t *$m2c_node_param_ref_lname"@
|
|
@ eval $m2c_XX = "$m2c_decl *$m2c_node_param_val_name,"@
|
|
@ eval $m2c_node_param_val = "$m2c_XX size_t $m2c_node_param_val_lname"@
|
|
@ else@
|
|
@ eval $m2c_node_param_ref = "$m2c_decl * $m2c_node_param_ref_name"@
|
|
@ eval $m2c_node_param_val = "$m2c_decl $m2c_node_param_val_name"@
|
|
@ eval $m2c_node_param_val_call = "$m2c_node_param_val_name"@
|
|
##
|
|
@ end@
|
|
##
|
|
########################################################################
|
|
## include user overrides
|
|
########################################################################
|
|
@ include -ifexists ${m2c_defaults_dir}node-${node}.m2d@
|
|
########################################################################
|
|
##
|
|
########################################################################
|
|
@ if $m2c_get_use_temp == 1@
|
|
@ eval $m2c_node_lh = "temp_$node"@
|
|
@ eval $m2c_node_lhs = "temp_${node}_len"@
|
|
@ else@
|
|
@ eval $m2c_node_lh = "(* $m2c_node_param_ref_name )"@
|
|
@ eval $m2c_node_lhs = "(* $m2c_node_param_ref_lname )"@
|
|
@ end@
|
|
@ eval $m2c_ctx_lh="$m2c_node_lh"@
|
|
@ eval $m2c_ctx_lhs="$m2c_node_lhs"@
|
|
@ eval $m2c_ctx_lhu="bytes"@
|
|
@ eval $m2c_ctx_rh="${m2c_data_item}${node}"@
|
|
@ eval $m2c_ctx_rhs="${m2c_data_item}${node}_len"@
|
|
@ eval $m2c_ctx_rhu="elements"@
|
|
########################################################################
|
|
##
|
|
########################################################################
|
|
@ if $m2c_node_skip_mapping != 1@
|
|
@ if $m2c_node_needlength == 1@
|
|
@ eval $m2c_XX="$m2c_decl **mib_$m2c_node_param_ref_name,"@
|
|
@ eval $m2c_XX="$m2c_XX size_t *mib_$m2c_node_param_ref_lname,"@
|
|
@ eval $m2c_XX="$m2c_XX $m2c_decl *raw_$m2c_node_param_val_name,"@
|
|
@ eval $m2c_XX="$m2c_XX size_t raw_$m2c_node_param_val_lname,"@
|
|
@ eval $m2c_node_map_param="$m2c_XX int allow_realloc"@
|
|
@ else@
|
|
@ eval $m2c_XX="$m2c_decl *mib_$m2c_node_param_ref_name,"@
|
|
@ eval $m2c_node_map_param="$m2c_XX $m2c_decl raw_$m2c_node_param_val_name"@
|
|
@ end@
|
|
@ end@
|
|
########################################################################
|
|
##
|
|
########################################################################
|
|
@ eval $m2c_node_srh = "$m2c_node_param_val_name"@
|
|
@ eval $m2c_node_srhs = "$m2c_node_param_val_lname"@
|
|
@end@
|
|
########################################################################
|
|
##
|
|
@eval $m2c_node_summary="$node($node.subid)/$node.syntax/$node.type/$node.decl($m2c_decl)/"@
|
|
@if $node.needlength == 0@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/l"@
|
|
@else@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/L"@
|
|
@end@
|
|
@if $node.noaccess == 0@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/A"@
|
|
@else@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/a"@
|
|
@end@
|
|
@if $node.settable == 0@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/w"@
|
|
@else@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/W"@
|
|
@end@
|
|
@if $node.enums == 0@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/e"@
|
|
@else@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/E"@
|
|
@end@
|
|
@if $node.ranges == 0@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/r"@
|
|
@else@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/R"@
|
|
@end@
|
|
@if $node.hasdefval == 0@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/d"@
|
|
@else@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/D"@
|
|
@end@
|
|
@if $node.hashint == 0@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/h"@
|
|
@else@
|
|
@ eval $m2c_node_summary="$m2c_node_summary/H"@
|
|
@end@
|
|
########################################################################
|
|
@ ifconf ${m2c_defaults_dir}node-${node}.m2d@
|
|
@ else@
|
|
@ push@
|
|
@ open ${m2c_defaults_dir}node-${node}.m2d@
|
|
@ eval $m2c_conf_comment = "##"@
|
|
@ eval $m2c_conf_comment_divider = "########################################################################"@
|
|
$m2c_conf_comment_divider
|
|
$m2c_conf_comment
|
|
$m2c_conf_comment mib2c node setting for $node
|
|
$m2c_conf_comment
|
|
$m2c_conf_comment Remove the '##' comment delimeter to change settings
|
|
$m2c_conf_comment
|
|
$m2c_conf_comment_divider
|
|
$m2c_conf_comment Node declaration type? This is the C type to be used when
|
|
$m2c_conf_comment declaring a variable to hold a value for this column. It
|
|
$m2c_conf_comment is strongly recommended that you do not change this value.
|
|
$m2c_conf_comment If you do, it is likely to break lots of generated code that
|
|
$m2c_conf_comment you will have to fix.
|
|
$m2c_conf_comment
|
|
$m2c_conf_comment @eval $@m2c_decl = $m2c_decl@
|
|
$m2c_conf_comment
|
|
$m2c_conf_comment_divider
|
|
$m2c_conf_comment Generate/use mapping functions? Useful if the MIB defines
|
|
$m2c_conf_comment a different format or enumerations than you data store uses.
|
|
$m2c_conf_comment
|
|
$m2c_conf_comment @eval $@m2c_node_skip_mapping = $m2c_node_skip_mapping@
|
|
$m2c_conf_comment
|
|
$m2c_conf_comment_divider
|
|
$m2c_conf_comment Need a length for the value? Most OCTET-STRING based values will
|
|
$m2c_conf_comment need a length, most other types will not. Do not change this one
|
|
$m2c_conf_comment unless you know what you are doing! You will almost certainly need
|
|
$m2c_conf_comment to fix lots of generated code if you do.
|
|
$m2c_conf_comment
|
|
$m2c_conf_comment @eval $@m2c_node_needlength = $m2c_node_needlength@
|
|
$m2c_conf_comment
|
|
$m2c_conf_comment_divider
|
|
$m2c_conf_comment Skip get? Set this to 1 if you do not want to implement a value
|
|
$m2c_conf_comment for this column.
|
|
$m2c_conf_comment
|
|
$m2c_conf_comment @eval $@m2c_node_skip_get = $m2c_node_skip_get@
|
|
$m2c_conf_comment
|
|
@ if $m2c_node_needlength == 1@
|
|
$m2c_conf_comment_divider
|
|
$m2c_conf_comment Allow realloc when data size exceeds length? If your data
|
|
$m2c_conf_comment store for this node is a pointer allocated with one of the
|
|
$m2c_conf_comment alloc family functions, you can set this to 1 to use realloc
|
|
$m2c_conf_comment when a new value length exceeds the old lenght. If you are
|
|
$m2c_conf_comment using a fixed size buffer, this value should be 0.
|
|
$m2c_conf_comment
|
|
$m2c_conf_comment @eval $@m2c_node_realloc = $m2c_node_realloc@
|
|
@ end@
|
|
@ close ${m2c_defaults_dir}node-${node}.m2d@
|
|
@ pop@
|
|
@ end@
|