Main Page   Namespace List   Alphabetical List   Compound List   File List   Compound Members   File Members  

common.h

Go to the documentation of this file.
00001 /***************************************************************************
00002                                  common.h
00003                              -------------------
00004     begin                : Fri Feb 1 2002
00005     copyright            : (C) 2002 by Constantinos A. Kotsokalis
00006     email                : ckotso@grnet.gr
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #ifndef COMMON_H
00019 #define COMMON_H
00020 
00021 #include <cc++/socket.h>
00022 
00023 #ifdef  CCXX_NAMESPACES
00024 using namespace std;
00025 using namespace ost;
00026 #endif
00027 
00028 #ifdef PACKAGE
00029 #undef PACKAGE
00030 #endif
00031 
00032 #ifdef VERSION
00033 #undef VERSION
00034 #endif
00035 
00036 #ifdef HAVE_CONFIG_H
00037 #include "config.h"
00038 #endif
00039 
00040 #ifdef HAVE_STRING_H
00041 #include <string.h>
00042 #endif
00043 
00044 #ifdef HAVE_STRINGS_H
00045 #include <strings.h>
00046 #endif
00047 
00048 // Only for syslog printing for the time being
00049 #define PANOPTIS_EXECNAME "panoptis"
00050 
00051 // The maximum length of a v9 packet body
00052 //bogart: #define MAX_V9_PACKET_BODY ?
00053 #define MAX_V9_PACKET_BODY 1
00054 
00055 // Type definitions for unchigned char/short/int
00056 typedef unsigned int uint32_t;
00057 typedef unsigned short int uint16_t;
00058 typedef unsigned char uint8_t;
00059 
00060 // Type definitions for V1/V5/V8 headers and bodies
00061 typedef struct V1Header {
00062     uint16_t version;
00063     uint16_t count;
00064     uint32_t SysUptime;
00065     uint32_t unix_secs;
00066     uint32_t unix_nsecs;
00067 } V1Header;
00068 
00069 typedef struct V5Header {
00070     uint16_t version;
00071     uint16_t count;
00072     uint32_t SysUptime;
00073     uint32_t unix_secs;
00074     uint32_t unix_nsecs;
00075     uint32_t flow_sequence;
00076     uint8_t engine_type;
00077     uint8_t engine_id;
00078 } V5Header;
00079 
00080 typedef struct V8Header {
00081     uint16_t version;
00082     uint16_t count;
00083     uint32_t SysUptime;
00084     uint32_t unix_secs;
00085     uint32_t unix_nsecs;
00086     uint32_t flow_sequence;
00087     uint8_t engine_type;
00088     uint8_t engine_id;
00089     uint8_t aggregation;
00090     uint8_t agg_version;
00091 } V8Header;
00092 
00093 typedef struct V9Header {
00094     uint16_t version;
00095     uint16_t count;
00096     uint32_t SysUptime;
00097     uint32_t unix_secs;
00098     uint32_t pck_sequence;
00099     uint32_t sourceId;
00100 } V9Header;
00101 
00102 typedef struct V1Body {
00103     uint32_t srcaddr;
00104     uint32_t dstaddr;
00105     uint32_t nexthop;
00106     uint16_t input;
00107     uint16_t output;
00108     uint32_t dPkts;
00109     uint32_t dOctets;
00110     uint32_t First;
00111     uint32_t Last;
00112     uint16_t srcport;
00113     uint16_t dstport;
00114     uint16_t pad;
00115     uint8_t prot;
00116     uint8_t tos;
00117     uint8_t tcp_flags;
00118     uint8_t pad2;
00119     uint16_t pad3;
00120     uint32_t reserved1;
00121     uint32_t reserved2;
00122 } V1Body;
00123 
00124 typedef struct V5Body {
00125     uint32_t srcaddr;
00126     uint32_t dstaddr;
00127     uint32_t nexthop;
00128     uint16_t input;
00129     uint16_t output;
00130     uint32_t dPkts;
00131     uint32_t dOctets;
00132     uint32_t First;
00133     uint32_t Last;
00134     uint16_t srcport;
00135     uint16_t dstport;
00136     uint8_t pad;
00137     uint8_t tcp_flags;
00138     uint8_t prot;
00139     uint8_t tos;
00140     uint16_t dst_as;
00141     uint16_t src_as;
00142     uint8_t dst_mask;
00143     uint8_t src_mask;
00144     uint16_t pad2;
00145 } V5Body;
00146 
00147 typedef struct V8BodyAS {
00148     uint32_t flows;
00149     uint32_t dPkts;
00150     uint32_t dOctets;
00151     uint32_t First;
00152     uint32_t Last;
00153     uint16_t src_as;
00154     uint16_t dst_as;
00155     uint16_t input;
00156     uint16_t output;
00157 } V8BodyAS;
00158 
00159 typedef struct V8BodyPP {
00160     uint32_t flows;
00161     uint32_t dPkts;
00162     uint32_t dOctets;
00163     uint32_t First;
00164     uint32_t Last;
00165     uint8_t prot;
00166     uint8_t pad;
00167     uint16_t reserved;
00168     uint16_t srcport;
00169     uint16_t dstport;
00170 } V8BodyPP;
00171 
00172 typedef struct V8BodySP {
00173     uint32_t flows;
00174     uint32_t dPkts;
00175     uint32_t dOctets;
00176     uint32_t First;
00177     uint32_t Last;
00178     uint32_t src_prefix;
00179     uint8_t src_mask;
00180     uint8_t pad;
00181     uint16_t src_as;
00182     uint16_t input;
00183 } V8BodySP;
00184 
00185 typedef struct V8BodyDP {
00186     uint32_t flows;
00187     uint32_t dPkts;
00188     uint32_t dOctets;
00189     uint32_t First;
00190     uint32_t Last;
00191     uint32_t dst_prefix;
00192     uint8_t dst_mask;
00193     uint8_t pad;
00194     uint16_t dst_as;
00195     uint16_t output;
00196 } V8BodyDP;
00197 
00198 typedef struct V8BodyPR {
00199     uint32_t flows;
00200     uint32_t dPkts;
00201     uint32_t dOctets;
00202     uint32_t First;
00203     uint32_t Last;
00204     uint32_t src_prefix;
00205     uint32_t dst_prefix;
00206     uint8_t dst_mask;
00207     uint8_t src_mask;
00208     uint16_t resrerved;
00209     uint16_t src_as;
00210     uint16_t dst_as;
00211     uint16_t input;
00212     uint16_t output;
00213 } V8BodyPR;
00214 
00215 typedef struct V9Body {
00216     uint8_t bytes[MAX_V9_PACKET_BODY];
00217 } V9Body;
00218 
00219 #define NETFLOW_V1 1
00220 #define NETFLOW_V5 5
00221 #define NETFLOW_V8 8
00222 #define NETFLOW_V9 9
00223 
00224 #define MAX(A, B) (A > B ? A : B)
00225 
00226 #define V1_HEADER_LEN sizeof(V1Header)
00227 #define V5_HEADER_LEN sizeof(V5Header)
00228 #define V8_HEADER_LEN sizeof(V8Header)
00229 #define V9_HEADER_LEN sizeof(V9Header)
00230 
00231 #define V1_BODY_LEN sizeof(V1Body)
00232 #define V5_BODY_LEN sizeof(V5Body)
00233 #define V8AS_BODY_LEN sizeof(V8BodyAS)
00234 #define V8PP_BODY_LEN sizeof(V8BodyPP)
00235 #define V8SP_BODY_LEN sizeof(V8BodySP)
00236 #define V8DP_BODY_LEN sizeof(V8BodyDP)
00237 #define V8PR_BODY_LEN sizeof(V8BodyPR)
00238 #define V9_BODY_LEN sizeof(V9Body)
00239 
00240 #define MAXBODY1 MAX(V1_BODY_LEN, V5_BODY_LEN)
00241 #define MAXBODY2 MAX(MAXBODY1, V8AS_BODY_LEN)
00242 #define MAXBODY3 MAX(MAXBODY2, V8PP_BODY_LEN)
00243 #define MAXBODY4 MAX(MAXBODY3, V8SP_BODY_LEN)
00244 #define MAXBODY5 MAX(MAXBODY4, V8DP_BODY_LEN)
00245 #define MAXBODY6 MAX(MAXBODY5, V8PR_BODY_LEN)
00246 
00247 #define MAX_FLOW_BODY MAX(MAXBODY6, V9_BODY_LEN)
00248 
00249 #define V1_MAX_FLOWS 25
00250 #define V5_MAX_FLOWS 30
00251 #define V8AS_MAX_FLOWS 51
00252 #define V8PP_MAX_FLOWS 51
00253 #define V8SP_MAX_FLOWS 44
00254 #define V8DP_MAX_FLOWS 44
00255 #define V8PR_MAX_FLOWS 35
00256 //TODO: bogart #define V9_MAX_FLOWS ? // UDP = 64Kbytes, Min Flowset = 20+12+N*6. Max Packet = 20+12+N*6 <=> N=(32-MAXPACKET)/6
00257 #define V9_MAX_FLOWS 1 // UDP = 64Kbytes, Min Flowset = 20+12+N*6. Max Packet = 20+12+N*6 <=> N=(32-MAXPACKET)/6
00258 
00259 #define MAXFL1 MAX(V1_MAX_FLOWS, V5_MAX_FLOWS)
00260 #define MAXFL2 MAX(MAXFL1, V8AS_MAX_FLOWS)
00261 #define MAXFL3 MAX(MAXFL2, V8PP_MAX_FLOWS)
00262 #define MAXFL4 MAX(MAXFL3, V8SP_MAX_FLOWS)
00263 #define MAXFL5 MAX(MAXFL4, V8DP_MAX_FLOWS)
00264 #define MAXFL6 MAX(MAXFL5, V8PR_MAX_FLOWS)
00265 
00266 #define MAX_FLOWS MAX(MAXFL5, V9_MAX_FLOWS)
00267 
00268 #define V1_MAX_DG_SIZE (V1_HEADER_LEN + V1_MAX_FLOWS * V1_BODY_LEN)
00269 #define V5_MAX_DG_SIZE (V5_HEADER_LEN + V5_MAX_FLOWS * V5_BODY_LEN)
00270 #define V8AS_MAX_DG_SIZE (V8_HEADER_LEN + V8AS_MAX_FLOWS * V8AS_BODY_LEN)
00271 #define V8PP_MAX_DG_SIZE (V8_HEADER_LEN + V8PP_MAX_FLOWS * V8PP_BODY_LEN)
00272 #define V8SP_MAX_DG_SIZE (V8_HEADER_LEN + V8SP_MAX_FLOWS * V8SP_BODY_LEN)
00273 #define V8DP_MAX_DG_SIZE (V8_HEADER_LEN + V8DP_MAX_FLOWS * V8DP_BODY_LEN)
00274 #define V8PR_MAX_DG_SIZE (V8_HEADER_LEN + V8PR_MAX_FLOWS * V8PR_BODY_LEN)
00275 #define V9_MAX_DG_SIZE (V9_HEADER_LEN + V9_MAX_FLOWS * V9_BODY_LEN)
00276 
00277 #define MAX8_1 MAX(V8AS_MAX_DG_SIZE, V8PP_MAX_DG_SIZE)
00278 #define MAX8_2 MAX(MAX8_1, V8SP_MAX_DG_SIZE)
00279 #define MAX8_3 MAX(MAX8_2, V8DP_MAX_DG_SIZE)
00280 #define MAX8 MAX(MAX8_3, V8PR_MAX_DG_SIZE)
00281 #define MAX8_9 MAX(MAX8, V9_MAX_DG_SIZE)
00282 #define MAX1_5 MAX(V1_MAX_DG_SIZE, V5_MAX_DG_SIZE)
00283 
00284 #define MAX_DATAGRAM_LEN MAX(MAX1_5, MAX8_9)
00285 
00286 #define AGGR_AS 0x01
00287 #define AGGR_PP 0x02
00288 #define AGGR_SP 0x03
00289 #define AGGR_DP 0x04
00290 #define AGGR_PR 0x05
00291 
00292 #define AS_ISSET(x) (AGGR_AS == x)
00293 #define PP_ISSET(x) (AGGR_PP == x)
00294 #define SP_ISSET(x) (AGGR_SP == x)
00295 #define DP_ISSET(x) (AGGR_DP == x)
00296 #define PR_ISSET(x) (AGGR_PR == x)
00297 
00298 // Constants for the getTopTalker() method
00299 #define TALK_FLOWS 1
00300 #define TALK_PACKETS 2
00301 
00302 #endif

Generated on Thu Jun 26 00:23:12 2003 for Panoptis by doxygen1.2.18