| ############################################################# -*- c -*- |
| ## generic include for XXX. Do not use directly. |
| ## |
| ## $Id$ |
| ######################################################################## |
| @if $m2c_mark_boundary == 1@ |
| /** START code generated by $RCSfile$ $Revision$ */ |
| @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$ */ |
| @end@ |