1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306
|
/* This defines some types commonly used. Do NOT include any other
* rsyslog runtime file.
*
* Begun 2010-11-25 RGerhards
*
* Copyright (C) 2005-2020 by Rainer Gerhards and Adiscon GmbH
*
* This file is part of the rsyslog runtime library.
*
* The rsyslog runtime library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The rsyslog runtime library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the rsyslog runtime library. If not, see <http://www.gnu.org/licenses/>.
*
* A copy of the GPL can be found in the file "COPYING" in this distribution.
* A copy of the LGPL can be found in the file "COPYING.LESSER" in this distribution.
*/
#ifndef INCLUDED_TYPEDEFS_H
#define INCLUDED_TYPEDEFS_H
#include <stdint.h>
#if defined(__FreeBSD__) || !defined(HAVE_LSEEK64)
#include <sys/types.h>
#endif
/* some universal fixed size integer defines ... */
#ifndef _AIX
typedef long long int64;
#endif
typedef long long unsigned uint64;
typedef int64 number_t; /* type to use for numbers - TODO: maybe an autoconf option? */
typedef char intTiny; /* 0..127! */
typedef unsigned char uintTiny; /* 0..255! */
/* define some base data types */
typedef uint16_t syslog_pri_t; /* to be used for syslog PRI values */
typedef unsigned char uchar;/* get rid of the unhandy "unsigned char" */
typedef struct aUsrp_s aUsrp_t;
typedef struct thrdInfo thrdInfo_t;
typedef struct obj_s obj_t;
typedef struct ruleset_s ruleset_t;
typedef struct rule_s rule_t;
typedef struct NetAddr netAddr_t;
typedef struct netstrms_s netstrms_t;
typedef struct netstrm_s netstrm_t;
typedef struct nssel_s nssel_t;
typedef enum nsdsel_waitOp_e nsdsel_waitOp_t;
typedef struct net_ossl_s net_ossl_t;
typedef struct nsd_ptcp_s nsd_ptcp_t;
typedef struct nsd_gtls_s nsd_gtls_t;
typedef struct nsd_ossl_s nsd_ossl_t;
typedef struct nsd_gsspi_s nsd_gsspi_t;
typedef struct nsd_nss_s nsd_nss_t;
typedef struct wti_s wti_t;
typedef struct msgPropDescr_s msgPropDescr_t;
typedef struct msg smsg_t;
typedef struct queue_s qqueue_t;
typedef struct prop_s prop_t;
typedef struct interface_s interface_t;
typedef struct objInfo_s objInfo_t;
typedef enum rsRetVal_ rsRetVal; /**< friendly type for global return value */
typedef rsRetVal (*errLogFunc_t)(uchar*);
/* this is a trick to store a function ptr to a function returning a function ptr... */
typedef struct permittedPeers_s permittedPeers_t;
/* this should go away in the long term -- rgerhards, 2008-05-19 */
typedef struct permittedPeerWildcard_s permittedPeerWildcard_t;
/* this should go away in the long term -- rgerhards, 2008-05-19 */
typedef struct tcpsrv_s tcpsrv_t;
typedef struct tcps_sess_s tcps_sess_t;
typedef struct strmsrv_s strmsrv_t;
typedef struct strms_sess_s strms_sess_t;
typedef struct vmstk_s vmstk_t;
typedef struct batch_obj_s batch_obj_t;
typedef struct batch_s batch_t;
typedef struct wtp_s wtp_t;
typedef struct modInfo_s modInfo_t;
typedef struct parser_s parser_t;
typedef struct parserList_s parserList_t;
typedef struct strgen_s strgen_t;
typedef struct strgenList_s strgenList_t;
typedef struct statsobj_s statsobj_t;
typedef void (*statsobj_read_notifier_t)(statsobj_t *, void *);
//typedef struct nsd_epworkset_s nsd_epworkset_t; // TODO: REMOVE
typedef struct tcpsrv_io_descr_s tcpsrv_io_descr_t; // i/o descriptor used for tcpsrv network i/o
typedef struct templates_s templates_t;
typedef struct parsers_s parsers_t;
typedef struct queuecnf_s queuecnf_t;
typedef struct parsercnf_s parsercnf_t;
typedef struct rulesets_s rulesets_t;
typedef struct globals_s globals_t;
typedef struct defaults_s defaults_t;
typedef struct actions_s actions_t;
typedef struct timezones_s timezones_t;
typedef struct rsconf_s rsconf_t;
typedef struct cfgmodules_s cfgmodules_t;
typedef struct cfgmodules_etry_s cfgmodules_etry_t;
typedef struct outchannels_s outchannels_t;
typedef struct modConfData_s modConfData_t;
typedef struct instanceConf_s instanceConf_t;
typedef struct ratelimit_s ratelimit_t;
typedef struct lookup_string_tab_entry_s lookup_string_tab_entry_t;
typedef struct lookup_string_tab_s lookup_string_tab_t;
typedef struct lookup_array_tab_s lookup_array_tab_t;
typedef struct lookup_sparseArray_tab_s lookup_sparseArray_tab_t;
typedef struct lookup_sparseArray_tab_entry_s lookup_sparseArray_tab_entry_t;
typedef struct lookup_tables_s lookup_tables_t;
typedef union lookup_key_u lookup_key_t;
typedef struct lookup_s lookup_t;
typedef struct lookup_ref_s lookup_ref_t;
typedef struct action_s action_t;
typedef int rs_size_t; /* we do never need more than 2Gig strings, signed permits to
* use -1 as a special flag. */
typedef rsRetVal (*prsf_t)(struct vmstk_s*, int); /* pointer to a RainerScript function */
typedef uint64 qDeqID; /* queue Dequeue order ID. 32 bits is considered dangerously few */
typedef struct tcpLstnParams_s tcpLstnParams_t;
typedef struct tcpLstnPortList_s tcpLstnPortList_t; // TODO: rename?
typedef struct strmLstnPortList_s strmLstnPortList_t; // TODO: rename?
typedef struct actWrkrIParams actWrkrIParams_t;
typedef struct dynstats_bucket_s dynstats_bucket_t;
typedef struct dynstats_buckets_s dynstats_buckets_t;
typedef struct perctile_buckets_s perctile_buckets_t;
typedef struct dynstats_ctr_s dynstats_ctr_t;
/* under Solaris (actually only SPARC), we need to redefine some types
* to be void, so that we get void* pointers. Otherwise, we will see
* alignment errors.
*/
#ifdef OS_SOLARIS
typedef void * obj_t_ptr;
typedef void nsd_t;
#else
typedef obj_t *obj_t_ptr;
typedef obj_t nsd_t;
#endif
#ifdef __hpux
typedef unsigned int u_int32_t; /* TODO: is this correct? */
typedef int socklen_t;
#endif
typedef struct epoll_event epoll_event_t;
typedef signed char sbool; /* (small bool) I intentionally use char, to keep it slim so that
many fit into the CPU cache! */
/* settings for flow control
* TODO: is there a better place for them? -- rgerhards, 2008-03-14
*/
typedef enum {
eFLOWCTL_NO_DELAY = 0, /**< UDP and other non-delayable sources */
eFLOWCTL_LIGHT_DELAY = 1, /**< some light delay possible, but no extended period of time */
eFLOWCTL_FULL_DELAY = 2 /**< delay possible for extended period of time */
} flowControl_t;
/* filter operations */
typedef enum {
FIOP_NOP = 0, /* do not use - No Operation */
FIOP_CONTAINS = 1, /* contains string? */
FIOP_ISEQUAL = 2, /* is (exactly) equal? */
FIOP_STARTSWITH = 3, /* starts with a string? */
FIOP_REGEX = 4, /* matches a (BRE) regular expression? */
FIOP_EREREGEX = 5, /* matches a ERE regular expression? */
FIOP_ISEMPTY = 6 /* string empty <=> strlen(s) == 0 ?*/
} fiop_t;
#ifndef HAVE_LSEEK64
# ifndef HAVE_OFF64_T
typedef off_t off64_t;
# endif
#endif
/* properties are now encoded as (tiny) integers. I do not use an enum as I would like
* to keep the memory footprint small (and thus cache hits high).
* rgerhards, 2009-06-26
*/
typedef uintTiny propid_t;
#define PROP_INVALID 0
#define PROP_MSG 1
#define PROP_TIMESTAMP 2
#define PROP_HOSTNAME 3
#define PROP_SYSLOGTAG 4
#define PROP_RAWMSG 5
#define PROP_INPUTNAME 6
#define PROP_FROMHOST 7
#define PROP_FROMHOST_IP 8
#define PROP_PRI 9
#define PROP_PRI_TEXT 10
#define PROP_IUT 11
#define PROP_SYSLOGFACILITY 12
#define PROP_SYSLOGFACILITY_TEXT 13
#define PROP_SYSLOGSEVERITY 14
#define PROP_SYSLOGSEVERITY_TEXT 15
#define PROP_TIMEGENERATED 16
#define PROP_PROGRAMNAME 17
#define PROP_PROTOCOL_VERSION 18
#define PROP_STRUCTURED_DATA 19
#define PROP_APP_NAME 20
#define PROP_PROCID 21
#define PROP_MSGID 22
#define PROP_PARSESUCCESS 23
#define PROP_JSONMESG 24
#define PROP_RAWMSG_AFTER_PRI 25
#define PROP_SYS_NOW 150
#define PROP_SYS_YEAR 151
#define PROP_SYS_MONTH 152
#define PROP_SYS_DAY 153
#define PROP_SYS_HOUR 154
#define PROP_SYS_HHOUR 155
#define PROP_SYS_QHOUR 156
#define PROP_SYS_MINUTE 157
#define PROP_SYS_MYHOSTNAME 158
#define PROP_SYS_BOM 159
#define PROP_SYS_UPTIME 160
#define PROP_UUID 161
#define PROP_SYS_NOW_UTC 162
#define PROP_SYS_YEAR_UTC 163
#define PROP_SYS_MONTH_UTC 164
#define PROP_SYS_DAY_UTC 165
#define PROP_SYS_HOUR_UTC 166
#define PROP_SYS_HHOUR_UTC 167
#define PROP_SYS_QHOUR_UTC 168
#define PROP_SYS_MINUTE_UTC 169
#define PROP_SYS_WDAY 170
#define PROP_SYS_WDAY_UTC 171
#define PROP_SYS_NOW_UXTIMESTAMP 173
#define PROP_CEE 200
#define PROP_CEE_ALL_JSON 201
#define PROP_LOCAL_VAR 202
#define PROP_GLOBAL_VAR 203
#define PROP_CEE_ALL_JSON_PLAIN 204
/* types of configuration handlers
*/
typedef enum cslCmdHdlrType {
eCmdHdlrInvalid = 0, /* invalid handler type - indicates a coding error */
eCmdHdlrCustomHandler, /* custom handler, just call handler function */
eCmdHdlrUID,
eCmdHdlrGID,
eCmdHdlrBinary,
eCmdHdlrFileCreateMode,
eCmdHdlrInt,
eCmdHdlrNonNegInt,
eCmdHdlrPositiveInt,
eCmdHdlrSize,
eCmdHdlrGetChar,
eCmdHdlrFacility,
eCmdHdlrSeverity,
eCmdHdlrGetWord,
eCmdHdlrString,
eCmdHdlrArray,
eCmdHdlrQueueType,
eCmdHdlrGoneAway /* statment existed, but is no longer supported */
} ecslCmdHdrlType;
/* the next type describes $Begin .. $End block object types
*/
typedef enum cslConfObjType {
eConfObjGlobal = 0, /* global directives */
eConfObjAction, /* action-specific directives */
/* now come states that indicate that we wait for a block-end. These are
* states that permit us to do some safety checks and they hopefully ease
* migration to a "real" parser/grammar.
*/
eConfObjActionWaitEnd,
eConfObjAlways /* always valid, very special case (guess $End only!) */
} ecslConfObjType;
/* multi-submit support.
* This is done via a simple data structure, which holds the number of elements
* as well as an array of to-be-submitted messages.
* rgerhards, 2009-06-16
*/
typedef struct multi_submit_s multi_submit_t;
struct multi_submit_s {
short maxElem; /* maximum number of Elements */
short nElem; /* current number of Elements, points to the next one FREE */
smsg_t **ppMsgs;
};
/* the following structure is a helper to describe a message property */
struct msgPropDescr_s {
propid_t id;
uchar *name; /* name and lenName are only set for dynamic */
int nameLen; /* properties (JSON) */
};
/* some forward-definitions from the grammar */
struct nvlst;
struct cnfobj;
#endif /* multi-include protection */
|