| ############################################################# -*- c -*- |
| ## Defaults |
| ## $Id$ |
| ######################################################################## |
| @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@ |