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

SNMP编程

开发平台:

Unix_Linux

  1. .TH "parsing various configuration files at run time" 3 "28 Nov 2005" "Version 5.2.1.rc3" "net-snmp" " -*- nroff -*-
  2. .ad l
  3. .nh
  4. .SH NAME
  5. parsing various configuration files at run time - The read_config related functions are a fairly extensible system of parsing various configuration files at the run time.  
  6. .PP
  7. .SS "Defines"
  8. .in +1c
  9. .ti -1c
  10. .RI "#define fBSNMP_CONFIG_DELIMETERSfP   ' \t='"
  11. .br
  12. .in -1c
  13. .SS "Functions"
  14. .in +1c
  15. .ti -1c
  16. .RI "fBconfig_linefP * fBregister_prenetsnmp_mib_handlerfP (const char *type, const char *token, void(*parser)(const char *, char *), void(*releaser)(void), const char *help)"
  17. .br
  18. .ti -1c
  19. .RI "fBconfig_linefP * fBregister_app_prenetsnmp_mib_handlerfP (const char *token, void(*parser)(const char *, char *), void(*releaser)(void), const char *help)"
  20. .br
  21. .ti -1c
  22. .RI "fBconfig_linefP * fBregister_config_handlerfP (const char *type_param, const char *token, void(*parser)(const char *, char *), void(*releaser)(void), const char *help)"
  23. .br
  24. .RI "fIregister_config_handler registers handlers for certain tokens specified in certain types of files. fP"
  25. .ti -1c
  26. .RI "fBconfig_linefP * fBregister_app_config_handlerfP (const char *token, void(*parser)(const char *, char *), void(*releaser)(void), const char *help)"
  27. .br
  28. .ti -1c
  29. .RI "void fBunregister_config_handlerfP (const char *type_param, const char *token)"
  30. .br
  31. .RI "fIuregister_config_handler un-registers handlers given a specific type_param and token. fP"
  32. .ti -1c
  33. .RI "void fBunregister_app_config_handlerfP (const char *token)"
  34. .br
  35. .ti -1c
  36. .RI "void fBunregister_all_config_handlersfP ()"
  37. .br
  38. .ti -1c
  39. .RI "fBconfig_linefP * fBread_config_get_handlersfP (const char *type)"
  40. .br
  41. .ti -1c
  42. .RI "void fBread_config_with_type_whenfP (const char *filename, const char *type, int when)"
  43. .br
  44. .ti -1c
  45. .RI "void fBread_config_with_typefP (const char *filename, const char *type)"
  46. .br
  47. .ti -1c
  48. .RI "fBconfig_linefP * fBread_config_find_handlerfP (struct fBconfig_linefP *line_handlers, const char *token)"
  49. .br
  50. .ti -1c
  51. .RI "int fBrun_config_handlerfP (struct fBconfig_linefP *lptr, const char *token, char *cptr, int when)"
  52. .br
  53. .ti -1c
  54. .RI "int fBsnmp_config_whenfP (char *line, int when)"
  55. .br
  56. .ti -1c
  57. .RI "int fBnetsnmp_configfP (char *line)"
  58. .br
  59. .ti -1c
  60. .RI "void fBnetsnmp_config_remember_in_listfP (char *line, struct fBread_config_memoryfP **mem)"
  61. .br
  62. .ti -1c
  63. .RI "void fBnetsnmp_config_remember_free_listfP (struct fBread_config_memoryfP **mem)"
  64. .br
  65. .ti -1c
  66. .RI "void fBnetsnmp_config_process_memory_listfP (struct fBread_config_memoryfP **memp, int when, int clear)"
  67. .br
  68. .ti -1c
  69. .RI "void fBnetsnmp_config_rememberfP (char *line)"
  70. .br
  71. .ti -1c
  72. .RI "void fBnetsnmp_config_process_memoriesfP (void)"
  73. .br
  74. .ti -1c
  75. .RI "void fBnetsnmp_config_process_memories_whenfP (int when, int clear)"
  76. .br
  77. .ti -1c
  78. .RI "void fBread_configfP (const char *filename, struct fBconfig_linefP *line_handler, int when)"
  79. .br
  80. .ti -1c
  81. .RI "void fBfree_configfP (void)"
  82. .br
  83. .ti -1c
  84. .RI "void fBread_configs_optionalfP (const char *optional_config, int when)"
  85. .br
  86. .ti -1c
  87. .RI "void fBread_configsfP (void)"
  88. .br
  89. .ti -1c
  90. .RI "void fBread_premib_configsfP (void)"
  91. .br
  92. .ti -1c
  93. .RI "void fBset_configuration_directoryfP (const char *dir)"
  94. .br
  95. .ti -1c
  96. .RI "const char * fBget_configuration_directoryfP ()"
  97. .br
  98. .ti -1c
  99. .RI "void fBset_persistent_directoryfP (const char *dir)"
  100. .br
  101. .ti -1c
  102. .RI "const char * fBget_persistent_directoryfP ()"
  103. .br
  104. .ti -1c
  105. .RI "void fBset_temp_file_patternfP (const char *pattern)"
  106. .br
  107. .ti -1c
  108. .RI "const char * fBget_temp_file_patternfP ()"
  109. .br
  110. .ti -1c
  111. .RI "void fBread_config_filesfP (int when)"
  112. .br
  113. .ti -1c
  114. .RI "void fBread_config_print_usagefP (const char *lead)"
  115. .br
  116. .ti -1c
  117. .RI "void fBread_config_storefP (const char *type, const char *line)"
  118. .br
  119. .RI "fIread_config_store intended for use by applications to store permenant configuration information generated by sets or persistent counters. fP"
  120. .ti -1c
  121. .RI "void fBread_app_config_storefP (const char *line)"
  122. .br
  123. .ti -1c
  124. .RI "void fBsnmp_save_persistentfP (const char *type)"
  125. .br
  126. .ti -1c
  127. .RI "void fBsnmp_clean_persistentfP (const char *type)"
  128. .br
  129. .ti -1c
  130. .RI "void fBconfig_perrorfP (const char *str)"
  131. .br
  132. .ti -1c
  133. .RI "void fBconfig_pwarnfP (const char *str)"
  134. .br
  135. .ti -1c
  136. .RI "char * fBskip_whitefP (char *ptr)"
  137. .br
  138. .ti -1c
  139. .RI "char * fBskip_not_whitefP (char *ptr)"
  140. .br
  141. .ti -1c
  142. .RI "char * fBskip_tokenfP (char *ptr)"
  143. .br
  144. .ti -1c
  145. .RI "char * fBcopy_nwordfP (char *from, char *to, int len)"
  146. .br
  147. .ti -1c
  148. .RI "char * fBcopy_wordfP (char *from, char *to)"
  149. .br
  150. .ti -1c
  151. .RI "char * fBread_config_save_octet_stringfP (char *saveto, u_char *str, size_t len)"
  152. .br
  153. .ti -1c
  154. .RI "char * fBread_config_read_octet_stringfP (char *readfrom, u_char **str, size_t *len)"
  155. .br
  156. .ti -1c
  157. .RI "char * fBread_config_save_objidfP (char *saveto, oid *objid, size_t len)"
  158. .br
  159. .ti -1c
  160. .RI "char * fBread_config_read_objidfP (char *readfrom, oid **objid, size_t *len)"
  161. .br
  162. .ti -1c
  163. .RI "char * fBread_config_read_datafP (int type, char *readfrom, void *dataptr, size_t *len)"
  164. .br
  165. .RI "fIread_config_read_data reads data of a given type from a token(s) on a configuration line. fP"
  166. .ti -1c
  167. .RI "char * fBread_config_read_memoryfP (int type, char *readfrom, char *dataptr, size_t *len)"
  168. .br
  169. .ti -1c
  170. .RI "char * fBread_config_store_datafP (int type, char *storeto, void *dataptr, size_t *len)"
  171. .br
  172. .RI "fIread_config_store_data stores data of a given type to a configuration line into the storeto buffer. fP"
  173. .ti -1c
  174. .RI "char * fBread_config_store_data_prefixfP (char prefix, int type, char *storeto, void *dataptr, size_t len)"
  175. .br
  176. .in -1c
  177. .SS "Variables"
  178. .in +1c
  179. .ti -1c
  180. .RI "fBconfig_filesfP * fBconfig_filesfP = NULL"
  181. .br
  182. .ti -1c
  183. .RI "int fBlinecountfP"
  184. .br
  185. .ti -1c
  186. .RI "const char * fBcurfilenamefP"
  187. .br
  188. .in -1c
  189. .SH "Detailed Description"
  190. .PP 
  191. The read_config related functions are a fairly extensible system of parsing various configuration files at the run time. 
  192. .PP
  193. The idea is that the calling application is able to register handlers for certain tokens specified in certain types of files. The read_configs function can then be called to look for all the files that it has registrations for, find the first word on each line, and pass the remainder to the appropriately registered handler.
  194. .PP
  195. For persistent configuration storage you will need to use the read_config_read_data, read_config_store, and read_config_store_data APIs in conjunction with first registering a callback so when the agent shutsdown for whatever reason data is written to your configuration files. The following explains in more detail the sequence to make this happen.
  196. .PP
  197. This is the callback registration API, you need to call this API with the appropriate parameters in order to configure persistent storage needs.
  198. .PP
  199. int snmp_register_callback(int major, int minor, SNMPCallback *new_callback, void *arg);
  200. .PP
  201. You will need to set major to SNMP_CALLBACK_LIBRARY, minor to SNMP_CALLBACK_STORE_DATA. arg is whatever you want.
  202. .PP
  203. Your callback function's prototype is: int (SNMPCallback) (int majorID, int minorID, void *serverarg, void *clientarg);
  204. .PP
  205. The majorID, minorID and clientarg are what you passed in the callback registration above. When the callback is called you have to essentially transfer all your state from memory to disk. You do this by generating configuration lines into a buffer. The lines are of the form token followed by token parameters.
  206. .PP
  207. Finally storing is done using read_config_store(type, buffer); type is the application name this can be obtained from:
  208. .PP
  209. netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_APPTYPE);
  210. .PP
  211. Now, reading back the data: This is done by registering a config handler for your token using the register_config_handler function. Your handler will be invoked and you can parse in the data using the read_config_read APIs.
  212. .SH "Function Documentation"
  213. .PP 
  214. .SS "char* read_config_read_data (int type, char * readfrom, void * dataptr, size_t * len)"
  215. .PP
  216. read_config_read_data reads data of a given type from a token(s) on a configuration line. 
  217. .PP
  218. The supported types are:
  219. .PP
  220. .IP "(bu" 2
  221. ASN_INTEGER
  222. .IP "(bu" 2
  223. ASN_TIMETICKS
  224. .IP "(bu" 2
  225. ASN_UNSIGNED
  226. .IP "(bu" 2
  227. ASN_OCTET_STR
  228. .IP "(bu" 2
  229. ASN_BIT_STR
  230. .IP "(bu" 2
  231. ASN_OBJECT_ID
  232. .PP
  233. .PP
  234. fBParameters:fP
  235. .RS 4
  236. fItypefP the asn data type to be read in.
  237. .br
  238. fIreadformfP the configuration line data to be read.
  239. .br
  240. fIdataptrfP an allocated pointer expected to match the type being read (int *, u_int *, char **, oid **)
  241. .br
  242. fIlenfP is the length of an asn oid or octet/bit string, not required for the asn integer, unsigned integer, and timeticks types
  243. .RE
  244. .PP
  245. fBReturns:fP
  246. .RS 4
  247. the next token in the configuration line. NULL if none left or if an unknown type.
  248. .RE
  249. .PP
  250. .PP
  251. Definition at line 1745 of file read_config.c.
  252. .PP
  253. References NULL, read_config_read_objid(), read_config_read_octet_string(), and skip_token().
  254. .PP
  255. Referenced by netsnmp_read_data_callback().
  256. .SS "void read_config_store (const char * type, const char * line)"
  257. .PP
  258. read_config_store intended for use by applications to store permenant configuration information generated by sets or persistent counters. 
  259. .PP
  260. Appends line to a file named either ENV(SNMP_PERSISTENT_FILE) or '<PERSISTENT_DIRECTORY>/<type>.conf'. Adds a trailing newline to the stored file if necessary.
  261. .PP
  262. fBParameters:fP
  263. .RS 4
  264. fItypefP is the application name 
  265. .br
  266. fIlinefP is the configuration line written to the application name's configuration file
  267. .RE
  268. .PP
  269. fBReturns:fP
  270. .RS 4
  271. void
  272. .RE
  273. .PP
  274. .PP
  275. Definition at line 1203 of file read_config.c.
  276. .PP
  277. References get_persistent_directory(), netsnmp_ds_get_boolean(), netsnmp_getenv(), NULL, and snmp_log().
  278. .PP
  279. Referenced by netsnmp_oid_stash_store(), netsnmp_save_all_data(), read_app_config_store(), and snmp_save_persistent().
  280. .SS "char* read_config_store_data (int type, char * storeto, void * dataptr, size_t * len)"
  281. .PP
  282. read_config_store_data stores data of a given type to a configuration line into the storeto buffer. 
  283. .PP
  284. Calls read_config_store_data_prefix with the prefix parameter set to a char space. The supported types are:
  285. .PP
  286. .IP "(bu" 2
  287. ASN_INTEGER
  288. .IP "(bu" 2
  289. ASN_TIMETICKS
  290. .IP "(bu" 2
  291. ASN_UNSIGNED
  292. .IP "(bu" 2
  293. ASN_OCTET_STR
  294. .IP "(bu" 2
  295. ASN_BIT_STR
  296. .IP "(bu" 2
  297. ASN_OBJECT_ID
  298. .PP
  299. .PP
  300. fBParameters:fP
  301. .RS 4
  302. fItypefP the asn data type to be stored
  303. .br
  304. fIstoretofP a pre-allocated char buffer which will contain the data to be stored
  305. .br
  306. fIdataptrfP contains the value to be stored, the supported pointers: (int *, u_int *, char **, oid **)
  307. .br
  308. fIlenfP is the length of the pre-allocated storeto buffer, not required for the asn integer, unsigned integer, and timeticks types.
  309. .RE
  310. .PP
  311. fBReturns:fP
  312. .RS 4
  313. character pointer to the end of the line. NULL if an unknown type.
  314. .RE
  315. .PP
  316. .PP
  317. Definition at line 1873 of file read_config.c.
  318. .PP
  319. References read_config_store_data_prefix().
  320. .SS "struct fBconfig_linefP* register_config_handler (const char * type_param, const char * token, void(*)(const char *, char *) parser, void(*)(void) releaser, const char * help)"
  321. .PP
  322. register_config_handler registers handlers for certain tokens specified in certain types of files. 
  323. .PP
  324. Allows a module writer use/register multiple configuration files based off of the type parameter. A module writer may want to set up multiple configuration files to separate out related tasks/variables or just for management of where to put tokens as the module or modules get more complex in regard to handling token registrations.
  325. .PP
  326. fBParameters:fP
  327. .RS 4
  328. fItypefP the configuration file used, e.g., if snmp.conf is the file where the token is located use 'snmp' here. If NULL the configuration file used will be snmpd.conf.
  329. .br
  330. fItokenfP the token being parsed from the file. Must be non-NULL.
  331. .br
  332. fIparserfP the handler function pointer that use the specified token and the rest of the line to do whatever is required Should be non-NULL in order to make use of this API.
  333. .br
  334. fIreleaserfP if non-NULL, the function specified is called if and when the configuration files are re-read. This function should free any resources allocated by the token handler function.
  335. .br
  336. fIhelpfP if non-NULL, used to display help information on the expected arguments after the token.
  337. .RE
  338. .PP
  339. fBReturns:fP
  340. .RS 4
  341. Pointer to a new config line entry or NULL on error.
  342. .RE
  343. .PP
  344. .PP
  345. Definition at line 196 of file read_config.c.
  346. .PP
  347. References netsnmp_ds_get_string(), NULL, and register_config_handler().
  348. .PP
  349. Referenced by netsnmp_ds_register_config(), netsnmp_register_save_list(), register_app_config_handler(), register_config_handler(), register_mib_handlers(), and register_prenetsnmp_mib_handler().
  350. .SS "void unregister_config_handler (const char * type_param, const char * token)"
  351. .PP
  352. uregister_config_handler un-registers handlers given a specific type_param and token. 
  353. .PP
  354. fBParameters:fP
  355. .RS 4
  356. fItype_paramfP the configuration file used where the token is located. Used to lookup the config file entry
  357. .br
  358. fItokenfP the token that is being unregistered
  359. .RE
  360. .PP
  361. fBReturns:fP
  362. .RS 4
  363. void
  364. .RE
  365. .PP
  366. .PP
  367. Definition at line 301 of file read_config.c.
  368. .PP
  369. References netsnmp_ds_get_string(), config_line::next, NULL, SNMP_FREE, and unregister_config_handler().
  370. .PP
  371. Referenced by netsnmp_ds_shutdown(), unregister_all_config_handlers(), unregister_app_config_handler(), and unregister_config_handler().