1 /* 2 * Argus Software. Argus files - Output include file 3 * Copyright (c) 2000-2015 QoSient, LLC 4 * All rights reserved. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2, or (at your option) 9 * any later version. 10 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 * 20 */ 21 22 /* 23 * $Id: //depot/argus/argus/argus/ArgusOutput.h#23 $ 24 * $DateTime: 2015/04/06 10:38:44 $ 25 * $Change: 2973 $ 26 */ 27 28 29 30 #ifndef ArgusOutput_h 31 #define ArgusOutput_h 32 33 #define ARGUS_MONITORPORT 561 34 #define ARGUS_MAXLISTEN 10 35 36 #define ARGUS_CLIENT_STARTUP_TIMEOUT 5 37 38 #include <unistd.h> 39 #if defined(HAVE_STDLIB_H) 40 #include <stdlib.h> 41 #endif 42 #include <limits.h> 43 44 #include <sys/socket.h> 45 #include <netdb.h> 46 47 #include <stdio.h> 48 #include <errno.h> 49 #include <string.h> 50 #include <strings.h> 51 52 #include <sys/types.h> 53 #include <sys/stat.h> 54 #include <sys/socket.h> 55 56 #if defined(__NetBSD__) 57 #include <sys/sched.h> 58 #else 59 #include <sched.h> 60 #endif 61 62 #include <fcntl.h> 63 #include <signal.h> 64 65 #if !defined(ARGUS_TILERA) 66 #include <pcap.h> 67 #endif 68 69 #include <argus_filter.h> 70 71 #ifdef ARGUS_SASL 72 #include <sasl/sasl.h> 73 #endif 74 75 struct ArgusClientData { 76 struct ArgusQueueHeader qhdr; 77 int fd, type, ArgusClientStart; 78 int ArgusFilterInitialized; 79 struct timeval startime, lasttime; 80 struct ArgusSocketStruct *sock; 81 struct nff_program ArgusNFFcode; 82 char *filename, *hostname, *filter; 83 84 #if defined(HAVE_GETADDRINFO) 85 struct addrinfo *host; 86 #endif 87 88 #ifdef ARGUS_SASL 89 sasl_conn_t *sasl_conn; 90 struct { 91 char *ipremoteport; 92 char *iplocalport; 93 sasl_ssf_t ssf; 94 char *authid; 95 } saslprops; 96 #endif 97 }; 98 99 struct ArgusBindAddrStruct { 100 struct ArgusListObjectStruct *nxt; 101 char *addr; 102 }; 103 104 105 106 struct ArgusOutputStruct { 107 struct ArgusSourceStruct *ArgusSrc; 108 struct ArgusModelerStruct *ArgusModel; 109 struct ArgusListStruct *ArgusWfileList; 110 111 struct ArgusListStruct *ArgusOutputList; 112 struct ArgusListStruct *ArgusInputList; 113 114 struct ArgusQueueStruct *ArgusClients; 115 struct ArgusListStruct *ArgusBindAddrs; 116 struct ArgusRecord *ArgusInitMar; 117 118 long long ArgusTotalRecords, ArgusLastRecords; 119 120 int status; 121 122 #if defined(ARGUS_THREADS) 123 pthread_t thread; 124 pthread_mutex_t lock; 125 #endif 126 127 int ArgusWriteStdOut; 128 int ArgusOutputSequence; 129 130 #if defined(HAVE_GETADDRINFO) 131 struct addrinfo ArgusAddrInfo; 132 #endif 133 134 int ArgusPortNum; 135 int ArgusLfd[ARGUS_MAXLISTEN]; 136 int ArgusListens, nflag; 137 138 char *ArgusBindPort; 139 140 struct timeval ArgusGlobalTime; 141 struct timeval ArgusStartTime; 142 struct timeval ArgusReportTime; 143 struct timeval ArgusLastMarUpdateTime; 144 struct timeval ArgusMarReportInterval; 145 }; 146 147 struct ArgusWfileStruct { 148 struct ArgusListObjectStruct *nxt; 149 char *filename; 150 char *filter; 151 }; 152 153 154 #if defined(ArgusOutput) 155 156 struct ArgusOutputStruct *ArgusOutputTask = NULL; 157 158 struct ArgusOutputStruct *ArgusNewOutput (struct ArgusSourceStruct *, struct ArgusModelerStruct *); 159 160 void ArgusCloseOutput (struct ArgusOutputStruct *); 161 162 void ArgusInitOutput (struct ArgusOutputStruct *); 163 void ArgusInitOutputProcess(void); 164 165 void *ArgusOutputProcess(void *); 166 167 int ArgusEstablishListen (struct ArgusOutputStruct *, char *); 168 int ArgusTcpWrapper (int, struct sockaddr *); 169 170 void ArgusUsr1Sig (int); 171 void ArgusUsr2Sig (int); 172 void ArgusChildExit (int); 173 174 void ArgusClientError(void); 175 void ArgusInitClientProcess(struct ArgusClientData *, struct ArgusWfileStruct *); 176 177 #if defined(ARGUS_TILERA) 178 #else 179 extern char *ArgusFilterCompile(struct nff_program *, char *, int); 180 extern unsigned int argus_filter (struct bpf_insn *, unsigned char *); 181 #endif 182 extern int getArgusPortNum(void); 183 184 #else 185 186 #if defined(Argus) 187 int getArgusPortNum(struct ArgusOutputStruct *); 188 int getArgusPortType(struct ArgusOutputStruct *); 189 void setArgusPortNum(struct ArgusOutputStruct *, int); 190 191 void setArgusBindAddr (struct ArgusOutputStruct *, char *); 192 void setArgusBindPort (struct ArgusOutputStruct *, char *); 193 char *getArgusBindAddr (struct ArgusOutputStruct *); 194 char *getArgusBindPort (struct ArgusOutputStruct *); 195 #endif 196 197 extern struct timeval ArgusReportTime; 198 extern int ArgusPortNum; 199 extern char *ArgusBindAddr; 200 extern int ArgusOutfd; 201 202 extern struct ArgusOutputStruct *ArgusOutputTask; 203 extern struct ArgusOutputStruct *ArgusNewOutput (struct ArgusSourceStruct *, struct ArgusModelerStruct *); 204 extern void ArgusCloseOutput (struct ArgusOutputStruct *); 205 206 extern void ArgusInitOutput (struct ArgusOutputStruct *); 207 extern void ArgusInitOutputProcess(void); 208 209 extern void ArgusSendOutputData(int, struct ArgusRecord *); 210 extern int ArgusHandleData(struct ArgusSocketStruct *, unsigned char *, int, void *); 211 extern int ArgusHandleClientData(struct ArgusSocketStruct *, unsigned char *, int, void *); 212 213 extern void ArgusOutputProcess(void *); 214 extern void *ArgusClientProcess(struct ArgusClientData *, struct ArgusWfileStruct *); 215 216 extern char *getArgusWfile(void); 217 extern void setArgusWfile(char *, char *); 218 219 extern struct timeval *getArgusMarReportInterval(struct ArgusOutputStruct *); 220 extern void setArgusMarReportInterval(struct ArgusOutputStruct *, char *); 221 222 extern void ArgusCheckClientStatus (struct ArgusOutputStruct *, int); 223 extern int ArgusEstablishListen (struct ArgusOutputStruct *, char *); 224 extern int ArgusTcpWrapper (int, struct sockaddr *); 225 226 extern void ArgusCloseSocket (int); 227 extern void ArgusCloseClients (void); 228 229 extern void ArgusUsr1Sig (int); 230 extern void ArgusUsr2Sig (int); 231 232 extern void ArgusClientError(void); 233 extern void ArgusInitClientProcess(struct ArgusClientData *, struct ArgusWfileStruct *); 234 235 #endif 236 #endif /* #ifndef ArgusOutput_h */ 237 238