m2c_setup_node.m2i
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:10k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #############################################################  -*- c -*-
  2. ## Defaults
  3. ## $Id: m2c_setup_node.m2i,v 1.17 2004/09/28 00:18:39 rstory Exp $
  4. ########################################################################
  5. @if "$m2c_node_name" ne "$node"@
  6. ## if $node.accessible != 1, might be inaccessible index node
  7. @  eval $m2c_node_name = $node@
  8. @  eval $m2c_node_skip_mapping = $m2c_table_skip_mapping@
  9. @  eval $m2c_node_needlength = $node.needlength@
  10. @  eval $m2c_node_get_comments = ""@
  11. @  eval $m2c_node_set_comments = ""@
  12. @  eval $m2c_node_skip_get = 0@
  13. ##//how should a function handle a pointer to a buffer that is to small?
  14. @  eval $m2c_node_realloc = 0@ // 0=fail, 1=realloc, 2=malloc
  15. ########################################################################
  16. ## fix some declarations
  17. ########################################################################
  18. @  if $node.enums == 1@
  19. ##
  20. @    if $m2c_node_skip_mapping == -1@
  21. @       eval $m2c_node_skip_mapping = 0@
  22. @    end@
  23. ##
  24. ## validate some assumptions
  25. ##
  26. @    if ("$node.perltype" ne "INTEGER") && ("$node.perltype" ne "BITS")@
  27. @       print "$node had enums, but isn't INTEGER or BITS! ($node.perltype)n"@
  28. @       exit@
  29. @    end@
  30. @    if $node.ranges == 1@
  31. @       print "$node has enums and ranges!n"@
  32. @       exit@
  33. @    end@
  34. ##
  35. ##   for a TC, prefix definition w/syntax to reduce collisions
  36. ##
  37. @    if $node.syntax ne $node.perltype@
  38. @       eval $m2c_de_pfx = "${m2c_const_pfx}$node.syntax"@
  39. @    else@
  40. @       eval $m2c_de_pfx = "${m2c_const_pfx}$node"@
  41. @    end@
  42. @    if $m2c_const_lc == 0@
  43. @       eval $m2c_de_pfx = uc($m2c_de_pfx)@
  44. @    end@
  45. @    if "$node.perltype" eq "BITS"@
  46. @       eval $m2c_enum_mask="${m2c_de_pfx}_MASK"@
  47. @       if $m2c_const_lc == 0@
  48. @          eval $m2c_enum_mask = uc($m2c_enum_mask)@
  49. @       end@
  50. @    end@
  51. ##
  52. ##   use longs for enums (w/out length)
  53. ##
  54. @    eval $m2c_decl = "u_long"@
  55. @    eval $m2c_node_needlength = 0@
  56. @    if "$node.perltype" eq "BITS"@
  57. @      eval $m2c_node_skip_get = 1@
  58. @    end@
  59. @  else@
  60. @    eval $m2c_decl = $node.decl@
  61. @  end@
  62. ########################################################################
  63. ## find max size
  64. ########################################################################
  65. @  if $node.ranges == 1@
  66. ##
  67. ## I do not *think* you can have both...
  68. ##
  69. @    if $node.enums == 1@
  70. @       print "$node has enums and ranges!n"@
  71. @       exit@
  72. @    end@
  73. @    eval $m2c_node_maxlen = 0@
  74. @    foreach $a $b range $node@
  75. @      eval $m2c_node_maxlen = max($m2c_node_maxlen,$b)@
  76. @    end@
  77. @  elsif "$node.type" eq "ASN_OBJECT_ID"@
  78. @    eval $m2c_node_maxlen = 128@
  79. @  else@ #ranges
  80. @    eval $m2c_node_maxlen = 65535@
  81. @  end@ #ranges
  82. ##/*####################################################################
  83. ## set up extra params, based on if we need length
  84. ########################################################################
  85. ## VAR_VAL     : variable value.
  86. ## VAR_VAL_PTR : pointer to variable value.
  87. ## VAR_REF     : variable reference. (pointer to pointer to variable value)
  88. ##*/
  89. @  if "x$m2c_node_var_name" eq "x"@
  90. @    eval $m2c_node_var_name="var->"@
  91. @  end@
  92. @  eval $m2c_node_var_val_ptr = "($m2c_decl *)${m2c_node_var_name}val.string"@
  93. @  if $m2c_node_needlength == 1@
  94. @    eval $m2c_XX = "($m2c_decl **)&${m2c_node_var_name}val.string,"@
  95. @    eval $m2c_node_var_ref = "$m2c_XX &${m2c_node_var_name}val_len"@
  96. @    eval $m2c_node_var_val = "$m2c_node_var_val_ptr, ${m2c_node_var_name}val_len"@
  97. @  else@
  98. @    eval $m2c_node_var_ref = "($m2c_decl *)${m2c_node_var_name}val.string"@
  99. @    eval $m2c_node_var_val = "*($m2c_node_var_val_ptr)"@
  100. @  end@
  101. ##
  102. ##
  103. @  eval $m2c_node_param_val_name = "${node}_val"@
  104. @  eval $m2c_node_param_val_lname = "${m2c_node_param_val_name}_len"@
  105. @  eval $m2c_node_param_ref_name = "${m2c_node_param_val_name}_ptr"@
  106. @  if $m2c_node_needlength == 1@
  107. @    eval $m2c_node_param_val_name = "${m2c_node_param_val_name}_ptr"@
  108. @    eval $m2c_node_param_val_lname = "${m2c_node_param_val_name}_len"@
  109. @    eval $m2c_node_param_val_call = "${m2c_node_param_val_name}, ${m2c_node_param_val_lname}"@
  110. @    eval $m2c_node_param_ref_name = "${m2c_node_param_ref_name}_ptr"@
  111. @    eval $m2c_node_param_ref_lname = "${m2c_node_param_val_lname}_ptr"@
  112. @    eval $m2c_XX = "$m2c_decl **$m2c_node_param_ref_name,"@
  113. @    eval $m2c_node_param_ref = "$m2c_XX size_t *$m2c_node_param_ref_lname"@
  114. @    eval $m2c_XX = "$m2c_decl *$m2c_node_param_val_name,"@
  115. @    eval $m2c_node_param_val = "$m2c_XX  size_t $m2c_node_param_val_lname"@
  116. @  else@
  117. @    eval $m2c_node_param_ref = "$m2c_decl * $m2c_node_param_ref_name"@
  118. @    eval $m2c_node_param_val = "$m2c_decl $m2c_node_param_val_name"@
  119. @    eval $m2c_node_param_val_call = "$m2c_node_param_val_name"@
  120. ##
  121. @  end@
  122. ##
  123. ########################################################################
  124. ## include user overrides
  125. ########################################################################
  126. @  include -ifexists default-node-${node}.m2d@
  127. ########################################################################
  128. ##
  129. ########################################################################
  130. @  if $m2c_get_use_temp == 1@
  131. @    eval $m2c_node_lh = "temp_$node"@
  132. @    eval $m2c_node_lhs = "temp_${node}_len"@
  133. @  else@
  134. @    eval $m2c_node_lh = "(* $m2c_node_param_ref_name )"@
  135. @    eval $m2c_node_lhs = "(* $m2c_node_param_ref_lname )"@
  136. @  end@
  137. @  eval $m2c_ctx_lh="$m2c_node_lh"@
  138. @  eval $m2c_ctx_lhs="$m2c_node_lhs"@
  139. @  eval $m2c_ctx_rh="${m2c_data_item}${node}"@
  140. @  eval $m2c_ctx_rhs="${m2c_data_item}${node}_len"@
  141. ########################################################################
  142. ##
  143. ########################################################################
  144. @  if $m2c_node_skip_mapping != 1@
  145. @    if $m2c_node_needlength == 1@
  146. @      eval $m2c_XX="$m2c_decl **mib_$m2c_node_param_ref_name,"@
  147. @      eval $m2c_XX="$m2c_XX size_t *mib_$m2c_node_param_ref_lname,"@
  148. @      eval $m2c_XX="$m2c_XX $m2c_decl *raw_$m2c_node_param_val_name,"@
  149. @      eval $m2c_XX="$m2c_XX size_t raw_$m2c_node_param_val_lname,"@
  150. @      eval $m2c_node_map_param="$m2c_XX int allow_realloc"@
  151. @    else@
  152. @      eval $m2c_XX="$m2c_decl *mib_$m2c_node_param_ref_name,"@
  153. @      eval $m2c_node_map_param="$m2c_XX $m2c_decl raw_$m2c_node_param_val_name"@
  154. @    end@
  155. @  end@
  156. ########################################################################
  157. ##
  158. ########################################################################
  159. @  eval $m2c_node_srh = "$m2c_node_param_val_name"@
  160. @  eval $m2c_node_srhs = "$m2c_node_param_val_lname"@
  161. @end@
  162. ########################################################################
  163. ##
  164. @eval $m2c_node_summary="$node($node.subid)/$node.syntax/$node.type/$node.decl($m2c_decl)/"@
  165. @if $node.needlength == 0@
  166. @   eval $m2c_node_summary="$m2c_node_summary/l"@
  167. @else@
  168. @   eval $m2c_node_summary="$m2c_node_summary/L"@
  169. @end@
  170. @if $node.noaccess == 0@
  171. @   eval $m2c_node_summary="$m2c_node_summary/A"@
  172. @else@
  173. @   eval $m2c_node_summary="$m2c_node_summary/a"@
  174. @end@
  175. @if $node.settable == 0@
  176. @   eval $m2c_node_summary="$m2c_node_summary/w"@
  177. @else@
  178. @   eval $m2c_node_summary="$m2c_node_summary/W"@
  179. @end@
  180. @if $node.enums == 0@
  181. @   eval $m2c_node_summary="$m2c_node_summary/e"@
  182. @else@
  183. @   eval $m2c_node_summary="$m2c_node_summary/E"@
  184. @end@
  185. @if $node.ranges == 0@
  186. @   eval $m2c_node_summary="$m2c_node_summary/r"@
  187. @else@
  188. @   eval $m2c_node_summary="$m2c_node_summary/R"@
  189. @end@
  190. @if $node.hasdefval == 0@
  191. @   eval $m2c_node_summary="$m2c_node_summary/d"@
  192. @else@
  193. @   eval $m2c_node_summary="$m2c_node_summary/D"@
  194. @end@
  195. @if $node.hashint == 0@
  196. @   eval $m2c_node_summary="$m2c_node_summary/h"@
  197. @else@
  198. @   eval $m2c_node_summary="$m2c_node_summary/H"@
  199. @end@
  200. ########################################################################
  201. @if "$m2c_data_context" eq "generated"@
  202. @   eval $m2c_nvv_sizeof = "$m2c_data_item$node"@
  203. @end@
  204. ########################################################################
  205. @  ifconf default-node-${node}.m2d@
  206. @  else@
  207. @    push@
  208. @    open default-node-${node}.m2d@
  209. @    eval $m2c_conf_comment = "##"@
  210. @    eval $m2c_conf_comment_divider = "########################################################################"@
  211. $m2c_conf_comment_divider
  212. $m2c_conf_comment
  213. $m2c_conf_comment mib2c node setting for $node
  214. $m2c_conf_comment
  215. $m2c_conf_comment Remove the '##' comment delimeter to change settings
  216. $m2c_conf_comment
  217. $m2c_conf_comment_divider
  218. $m2c_conf_comment Node declaration type? This is the C type to be used when
  219. $m2c_conf_comment declaring a variable to hold a value for this column. It
  220. $m2c_conf_comment is strongly recommended that you do not change this value.
  221. $m2c_conf_comment If you do, it is likely to break lots of generated code that
  222. $m2c_conf_comment you will have to fix.
  223. $m2c_conf_comment
  224. $m2c_conf_comment @eval $@m2c_decl = $m2c_decl@
  225. $m2c_conf_comment
  226. $m2c_conf_comment_divider
  227. $m2c_conf_comment Generate/use mapping functions? Useful if the MIB defines
  228. $m2c_conf_comment a different format or enumerations than you data store uses.
  229. $m2c_conf_comment
  230. $m2c_conf_comment @eval $@m2c_node_skip_mapping = $m2c_node_skip_mapping@
  231. $m2c_conf_comment
  232. $m2c_conf_comment_divider
  233. $m2c_conf_comment Need a length for the value? Most OCTET-STRING based values will
  234. $m2c_conf_comment need a length, most other types will not. Do not change this one
  235. $m2c_conf_comment unless you know what you are doing! You will almost certainly need
  236. $m2c_conf_comment to fix lots of generated code if you do.
  237. $m2c_conf_comment
  238. $m2c_conf_comment @eval $@m2c_node_needlength = $m2c_node_needlength@
  239. $m2c_conf_comment
  240. $m2c_conf_comment_divider
  241. $m2c_conf_comment Skip get? Set this to 1 if you do not want to implement a value
  242. $m2c_conf_comment for this column.
  243. $m2c_conf_comment
  244. $m2c_conf_comment @eval $@m2c_node_skip_get = $m2c_node_skip_get@
  245. $m2c_conf_comment
  246. @      if $m2c_node_needlength == 1@
  247. $m2c_conf_comment_divider
  248. $m2c_conf_comment Allow realloc when data size exceeds length? If your data
  249. $m2c_conf_comment store for this node is a pointer allocated with one of the
  250. $m2c_conf_comment alloc family functions, you can set this to 1 to use realloc
  251. $m2c_conf_comment when a new value length exceeds the old lenght. If you are
  252. $m2c_conf_comment using a fixed size buffer, this value should be 0.
  253. $m2c_conf_comment
  254. $m2c_conf_comment @eval $@m2c_node_realloc = $m2c_node_realloc@
  255. @      end@
  256. @    close default-node-${node}.m2d@
  257. @    pop@
  258. @  end@