diff options
Diffstat (limited to 'local/mib2c-conf.d/generic-value-map-func.m2i')
-rw-r--r-- | local/mib2c-conf.d/generic-value-map-func.m2i | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/local/mib2c-conf.d/generic-value-map-func.m2i b/local/mib2c-conf.d/generic-value-map-func.m2i new file mode 100644 index 0000000..49ed332 --- /dev/null +++ b/local/mib2c-conf.d/generic-value-map-func.m2i @@ -0,0 +1,104 @@ +############################################################# -*- c -*- +## generic include for XXX. Do not use directly. +## +## $Id: generic-value-map-func.m2i 12095 2005-04-18 22:14:01Z rstory $ +######################################################################## +@if $m2c_mark_boundary == 1@ +/** START code generated by $RCSfile$ $Revision: 12095 $ */ +@end@ +######################################################################## +## } +/** + * map a value from its original native format to the MIB format. + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : Any other error + * + * @note parameters follow the memset convention (dest, src). + * + * @note generation and use of this function can be turned off by re-running + * mib2c after adding the following line to the file + * ${m2c_defaults_dir}node-${node}.m2d : + * @eval $@m2c_node_skip_mapping = 1@ + * + * @remark + * If the values for your data type don't exactly match the + * possible values defined by the mib, you should map them here. + * Otherwise, just do a direct copy. + */ +int +${node}_map($m2c_node_map_param) +{ +@if $m2c_node_needlength == 1@ + int converted_len; + + netsnmp_assert(NULL != raw_$m2c_node_param_val_name); + netsnmp_assert((NULL != mib_$m2c_node_param_ref_name) && (NULL != mib_$m2c_node_param_ref_lname)); +@else@ + netsnmp_assert(NULL != mib_$m2c_node_param_ref_name); +@end@ + + DEBUGMSGTL(("verbose:${context}:${node}_map","called\n")); + +@if $m2c_node_needlength == 1@ + /* + * TODO:241:r: |-> Implement $node non-integer mapping + * it is hard to autogenerate code for mapping types that are not simple + * integers, so here is an idea of what you might need to do. It will + * probably need some tweaking to get right. + */ + /* + * if the length of the raw data doesn't directly correspond with + * the length of the mib data, set converted_len to the + * space required. + */ + converted_len = raw_$m2c_node_param_val_lname; /* assume equal */ + if((NULL == *mib_$m2c_node_param_ref_name) || (*mib_$m2c_node_param_ref_lname < converted_len)) { + if(! allow_realloc) { + snmp_log(LOG_ERR,"not enough space for value mapping\n"); + return SNMP_ERR_GENERR; + } + *mib_$m2c_node_param_ref_name = realloc( *mib_$m2c_node_param_ref_name, converted_len * sizeof(**mib_$m2c_node_param_ref_name)); + if(NULL == *mib_$m2c_node_param_ref_name) { + snmp_log(LOG_ERR,"could not allocate memory\n"); + return SNMP_ERR_GENERR; + } + } + *mib_$m2c_node_param_ref_lname = converted_len; + memcpy( *mib_$m2c_node_param_ref_name, raw_$m2c_node_param_val_name, converted_len ); +## +@elsif ($node.enums == 1) && ("$node.perltype" eq "INTEGER")@ + /* + * TODO:241:o: |-> Implement $node enum mapping. + * uses INTERNAL_* macros defined in the header files + */ + switch(raw_$m2c_node_param_val_name) { +@ foreach $e $v enum@ +@ include m2c_setup_enum.m2i@ + case INTERNAL_$context.uc_$m2c_iname: + *mib_$m2c_node_param_ref_name = $m2c_ename; + break; + +@ end@ # foreach + default: + snmp_log(LOG_ERR, "couldn't map value %ld for $node\n", raw_$m2c_node_param_val_name ); + return MFD_ERROR; + } +## +@else@ + /* + * TODO:241:o: |-> Implement $node mapping. + * If the values for your data type don't exactly match the + * possible values defined by the mib, you should map them here. + */ + (*mib_$m2c_node_param_ref_name) = raw_$m2c_node_param_val_name; +@end@ + + return MFD_SUCCESS; +} /* ${node}_map */ + +## +######################################################################## +@if $m2c_mark_boundary == 1@ +/** END code generated by $RCSfile$ $Revision: 12095 $ */ +@end@ |