/*- * Copyright (c) 2003 Andrey Simonenko * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @(#)$Id: confcommon.h,v 1.1.4.3 2007/05/11 16:29:59 simon Exp $ */ #ifndef IPA_CONFCOMMON_H #define IPA_CONFCOMMON_H #ifndef SYM_PREFIX # if defined (__GNUC__) && !defined(__ELF__) # define SYM_PREFIX "_" # endif #endif #ifndef CONF_INDENT # define CONF_INDENT 4 #endif struct get_arg_tbl { void *argp; int (*get_arg)(void *); regex_t *reg; }; #ifndef CONF_SECT_BUCKETS # define CONF_SECT_BUCKETS 32 /* Must be power of 2. */ #endif struct conf_sect_hentry { SLIST_ENTRY(conf_sect_hentry) link; u_int hash_value; /* Hashed value of sect_name. */ const char *sect_name; /* The same as sect_name in ipa_conf_sect{}. */ u_int idx; /* Index of section description in sections table. */ }; SLIST_HEAD(conf_sect_hash, conf_sect_hentry); #ifndef CONF_PARAM_BUCKETS # define CONF_PARAM_BUCKETS 64 /* Must be power of 2. */ #endif struct conf_param_hentry { SLIST_ENTRY(conf_param_hentry) link; u_int hash_value; /* Hashed value of param_name. */ const char *param_name; /* The same as param_name in ipa_conf_param{}. */ u_int idx; /* Index of parameter description in parameters table. */ }; SLIST_HEAD(conf_param_hash, conf_param_hentry); #define CONF_SECT_HENTRY_NSIZE 32 #define CONF_SECT_HENTRY_NALLOC 16 #define CONF_PARAM_HENTRY_NSIZE 64 #define CONF_PARAM_HENTRY_NALLOC 32 #define MONTHES_IN_YEAR 12 #define HOURS_IN_DAY 24 #define DAYS_IN_WEEK 7 #define SECONDS_IN_MINUTE (60) #define MINUTES_IN_HOUR (60) #define SECONDS_IN_HOUR (MINUTES_IN_HOUR * SECONDS_IN_MINUTE) #define SECONDS_IN_DAY (HOURS_IN_DAY * SECONDS_IN_HOUR) #define SECONDS_IN_WEEK (DAYS_IN_WEEK * SECONDS_IN_DAY) #define KBYTE UINT64_C(1024) #define MBYTE (UINT64_C(1024) * KBYTE) #define GBYTE (UINT64_C(1024) * MBYTE) #define TBYTE (UINT64_C(1024) * GBYTE) #define PAT_TIME "^([[:digit:]]+[smh] ?)+$" #define PAT_BYTES "^([[:digit:]]+[BKMGT] ?)+$" extern const char *const conf_event_msg[]; extern regex_t reg_time; extern regex_t reg_bytes; extern const struct get_arg_tbl get_arg_tbl[]; #define RE_ERRBUF_SIZ 100 extern int re_errcode; extern char re_errbuf[RE_ERRBUF_SIZ]; extern void re_form_errbuf(void); extern const char *curmodfile; extern const char *curparam; extern const char *cursect; extern void logconferr(const char *, ...) ATTR_FORMAT(printf, 1, 2); extern void logconferrx(const char *, ...) ATTR_FORMAT(printf, 1, 2); extern void mod_logconferr(const char *, int, const char *, va_list); extern void mod_conf_regfree(ipa_conf_param *, ipa_conf_sect *); extern int mod_conf_regcomp(const char *, ipa_conf_param *, ipa_conf_sect *); extern int strto_uint32(uint32_t *, const char *, char **); extern int strto_u_int(u_int *, const char *, char **); extern int get_arg_uint64(void *); extern int get_arg_time(void *); extern int get_arg_bytes(void *); extern int get_arg_per_cent(void *); extern int need_nl; extern int was_space; extern int conf_indent; extern int mod_indent; extern void set_indent(int); extern void print_space(void); extern void print_time(const uint64_t *); extern void print_value(const uint64_t *, u_int); extern void print_boolean(int); extern void print_bytes(const uint64_t *); extern void print_string(const char *); extern void print_param_name(const char *, const char *); extern void print_args(const char *, va_list); extern void print_eol(void); extern void print_nl(void); extern void print_param_end(void); extern void print_sect_name(const char *, const char *); extern void print_sect_begin(void); extern void print_sect_end(void); extern void *conf_sect_hentry_mzone; extern void *conf_param_hentry_mzone; extern int init_conf_tbls(const char *, int, ipa_conf_sect *, struct conf_sect_hash **, ipa_conf_param *, struct conf_param_hash **); extern void deinit_conf_tbls(int, ipa_conf_sect *, struct conf_sect_hash *, ipa_conf_param *, struct conf_param_hash *); extern const ipa_conf_sect *find_conf_sect(const ipa_conf_sect *, const struct conf_sect_hash *, const char *); extern const ipa_conf_param *find_conf_param(const ipa_conf_param *, const struct conf_param_hash *, const char *); extern int build_conf_regexp(void); extern void *dl_lookup_sym(dl_handle, const char *); #endif /* !IPA_CONFCOMMON_H */