diff options
Diffstat (limited to 'package/libipfix/patches/100-openimp_sync.patch')
-rw-r--r-- | package/libipfix/patches/100-openimp_sync.patch | 474 |
1 files changed, 0 insertions, 474 deletions
diff --git a/package/libipfix/patches/100-openimp_sync.patch b/package/libipfix/patches/100-openimp_sync.patch deleted file mode 100644 index 5b6e2e3793..0000000000 --- a/package/libipfix/patches/100-openimp_sync.patch +++ /dev/null @@ -1,474 +0,0 @@ ---- a/lib/ipfix.c -+++ b/lib/ipfix.c -@@ -37,6 +37,9 @@ $$LIC$$ - #ifdef SCTPSUPPORT - #include <netinet/sctp.h> - #endif -+#ifndef NOTHREADS -+#include <pthread.h> -+#endif - #include <fcntl.h> - #include <netdb.h> - -@@ -123,6 +126,18 @@ static uint16_t g_lasttid; - static ipfix_datarecord_t g_data = { NULL, NULL, 0 }; /* ipfix_export */ - - static ipfix_field_t *g_ipfix_fields; -+#ifndef NOTHREADS -+static pthread_mutex_t g_mutex; -+#define mod_lock() { \ -+ if ( pthread_mutex_lock( &g_mutex ) !=0 ) \ -+ mlogf( 0, "[ipfix] mutex_lock() failed: %s\n", \ -+ strerror( errno ) ); \ -+ } -+#define mod_unlock() { pthread_mutex_unlock( &g_mutex ); } -+#else -+#define mod_lock() -+#define mod_unlock() -+#endif - - /*----- prototypes -------------------------------------------------------*/ - -@@ -133,6 +148,7 @@ int _ipfix_send_message( ipfix_t *ifh, - ipfix_message_t *message ); - int _ipfix_write_msghdr( ipfix_t *ifh, ipfix_message_t *msg, iobuf_t *buf ); - void _ipfix_disconnect( ipfix_collector_t *col ); -+int _ipfix_export_flush( ipfix_t *ifh ); - - - /* name : do_writeselect -@@ -576,16 +592,18 @@ int ipfix_decode_float( void *in, void * - - int ipfix_snprint_float( char *str, size_t size, void *data, size_t len ) - { -- float tmp32; -- double tmp64; -+ uint32_t tmp32; -+ uint64_t tmp64; - - switch ( len ) { - case 4: -- ipfix_decode_float( data, &tmp32, 4); -- return snprintf( str, size, "%f", tmp32 ); -+ memcpy( &tmp32, data, len ); -+ tmp32 = htonl( tmp32 ); -+ return snprintf( str, size, "%f", (float)tmp32 ); - case 8: -- ipfix_decode_float( data, &tmp64, 8); -- return snprintf( str, size, "%lf", tmp64); -+ memcpy( &tmp64, data, len ); -+ tmp64 = HTONLL( tmp64 ); -+ return snprintf( str, size, "%lf", (double)tmp64 ); - default: - break; - } -@@ -682,12 +700,19 @@ int ipfix_get_eno_ieid( char *field, int - * parameters: - * remarks: init module, read field type info. - */ --int ipfix_init ( void ) -+int ipfix_init( void ) - { - if ( g_tstart ) { - ipfix_cleanup(); - } - -+#ifndef NOTHREADS -+ if ( pthread_mutex_init( &g_mutex, NULL ) !=0 ) { -+ mlogf( 0, "[ipfix] pthread_mutex_init() failed: %s\n", -+ strerror(errno) ); -+ return -1; -+ } -+#endif - g_tstart = time(NULL); - signal( SIGPIPE, SIG_IGN ); - g_lasttid = 255; -@@ -806,6 +831,9 @@ void ipfix_cleanup ( void ) - g_data.maxfields = 0; - g_data.lens = NULL; - g_data.addrs = NULL; -+#ifndef NOTHREADS -+ (void)pthread_mutex_destroy( &g_mutex ); -+#endif - } - - int _ipfix_connect ( ipfix_collector_t *col ) -@@ -1465,7 +1493,7 @@ int _ipfix_write_template( ipfix_t - default: - /* check space */ - if ( tsize+ifh->offset > IPFIX_DEFAULT_BUFLEN ) { -- if ( ipfix_export_flush( ifh ) < 0 ) -+ if ( _ipfix_export_flush( ifh ) < 0 ) - return -1; - if ( tsize+ifh->offset > IPFIX_DEFAULT_BUFLEN ) - return -1; -@@ -1474,6 +1502,8 @@ int _ipfix_write_template( ipfix_t - /* write template prior to data */ - if ( ifh->offset > 0 ) { - memmove( ifh->buffer + tsize, ifh->buffer, ifh->offset ); -+ if ( ifh->cs_tid ) -+ ifh->cs_header += tsize; - } - - buf = ifh->buffer; -@@ -1615,8 +1645,11 @@ int ipfix_open( ipfix_t **ipfixh, int so - return -1; - } - node->ifh = i; -+ -+ mod_lock(); - node->next = g_ipfixlist; - g_ipfixlist = node; -+ mod_unlock(); - - *ipfixh = i; - return 0; -@@ -1633,7 +1666,8 @@ void ipfix_close( ipfix_t *h ) - { - ipfix_node_t *l, *n; - -- ipfix_export_flush( h ); -+ mod_lock(); -+ _ipfix_export_flush( h ); - - while( h->collectors ) - _ipfix_drop_collector( (ipfix_collector_t**)&h->collectors ); -@@ -1659,6 +1693,7 @@ void ipfix_close( ipfix_t *h ) - #endif - free(h->buffer); - free(h); -+ mod_unlock(); - } - } - -@@ -2156,6 +2191,22 @@ void ipfix_release_template( ipfix_t *if - ipfix_delete_template( ifh, templ ); - } - -+static void _finish_cs( ipfix_t *ifh ) -+{ -+ size_t buflen; -+ uint8_t *buf; -+ -+ /* finish current dataset */ -+ if ( (buf=ifh->cs_header) ==NULL ) -+ return; -+ buflen = 0; -+ INSERTU16( buf+buflen, buflen, ifh->cs_tid ); -+ INSERTU16( buf+buflen, buflen, ifh->cs_bytes ); -+ ifh->cs_bytes = 0; -+ ifh->cs_header = NULL; -+ ifh->cs_tid = 0; -+} -+ - int ipfix_export( ipfix_t *ifh, ipfix_template_t *templ, ... ) - { - int i; -@@ -2199,13 +2250,14 @@ int ipfix_export( ipfix_t *ifh, ipfix_te - g_data.addrs, g_data.lens ); - } - --int ipfix_export_array( ipfix_t *ifh, -- ipfix_template_t *templ, -- int nfields, -- void **fields, -- uint16_t *lengths ) -+static int -+_ipfix_export_array( ipfix_t *ifh, -+ ipfix_template_t *templ, -+ int nfields, -+ void **fields, -+ uint16_t *lengths ) - { -- int i; -+ int i, newset_f=0; - size_t buflen, datasetlen; - uint8_t *p, *buf; - -@@ -2249,7 +2301,19 @@ int ipfix_export_array( ipfix_t - - /** get size of data set, check space - */ -- for ( i=0, datasetlen=4; i<nfields; i++ ) { -+ if ( templ->tid == ifh->cs_tid ) { -+ newset_f = 0; -+ datasetlen = 0; -+ } -+ else { -+ if ( ifh->cs_tid > 0 ) { -+ _finish_cs( ifh ); -+ } -+ newset_f = 1; -+ datasetlen = 4; -+ } -+ -+ for ( i=0; i<nfields; i++ ) { - if ( templ->fields[i].flength == IPFIX_FT_VARLEN ) { - if ( lengths[i]>254 ) - datasetlen += 3; -@@ -2263,21 +2327,29 @@ int ipfix_export_array( ipfix_t - } - datasetlen += lengths[i]; - } -- if ( ((ifh->offset + datasetlen) > IPFIX_DEFAULT_BUFLEN ) -- && (ipfix_export_flush( ifh ) <0) ) { -- return -1; -+ -+ if ( (ifh->offset + datasetlen) > IPFIX_DEFAULT_BUFLEN ) { -+ if ( ifh->cs_tid ) -+ _finish_cs( ifh ); -+ newset_f = 1; -+ -+ if ( _ipfix_export_flush( ifh ) <0 ) -+ return -1; - } - -- /* fill buffer -- */ -+ /* fill buffer */ - buf = (uint8_t*)(ifh->buffer) + ifh->offset; - buflen = 0; - -- /* insert data set -- */ -- ifh->nrecords ++; -- INSERTU16( buf+buflen, buflen, templ->tid ); -- INSERTU16( buf+buflen, buflen, datasetlen ); -+ if ( newset_f ) { -+ /* insert data set -+ */ -+ ifh->cs_bytes = 0; -+ ifh->cs_header = buf; -+ ifh->cs_tid = templ->tid; -+ INSERTU16( buf+buflen, buflen, templ->tid ); -+ INSERTU16( buf+buflen, buflen, 4 ); -+ } - - /* insert data record - */ -@@ -2303,7 +2375,9 @@ int ipfix_export_array( ipfix_t - buflen += lengths[i]; - } - -+ ifh->nrecords ++; - ifh->offset += buflen; -+ ifh->cs_bytes += buflen; - if ( ifh->version == IPFIX_VERSION ) - ifh->seqno ++; - return 0; -@@ -2313,7 +2387,7 @@ int ipfix_export_array( ipfix_t - * parameters: - * remarks: rewrite this func! - */ --int ipfix_export_flush( ipfix_t *ifh ) -+int _ipfix_export_flush( ipfix_t *ifh ) - { - iobuf_t *buf; - ipfix_collector_t *col; -@@ -2322,8 +2396,14 @@ int ipfix_export_flush( ipfix_t *ifh ) - if ( (ifh==NULL) || (ifh->offset==0) ) - return 0; - -- if ( (buf=_ipfix_getbuf()) ==NULL ) -+ if ( ifh->cs_tid > 0 ) { -+ /* finish current dataset */ -+ _finish_cs( ifh ); -+ } -+ -+ if ( (buf=_ipfix_getbuf()) ==NULL ) { - return -1; -+ } - - #ifdef DEBUG - mlogf( 0, "[ipfix_export_flush] msg has %d records, %d bytes\n", -@@ -2350,3 +2430,30 @@ int ipfix_export_flush( ipfix_t *ifh ) - _ipfix_freebuf( buf ); - return ret; - } -+ -+int ipfix_export_array( ipfix_t *ifh, -+ ipfix_template_t *templ, -+ int nfields, -+ void **fields, -+ uint16_t *lengths ) -+{ -+ int ret; -+ -+ mod_lock(); -+ ret = _ipfix_export_array( ifh, templ, nfields, fields, lengths ); -+ mod_unlock(); -+ -+ return ret; -+} -+ -+int ipfix_export_flush( ipfix_t *ifh ) -+{ -+ int ret; -+ -+ mod_lock(); -+ ret = _ipfix_export_flush( ifh ); -+ mod_unlock(); -+ -+ return ret; -+} -+ ---- a/lib/ipfix.h -+++ b/lib/ipfix.h -@@ -142,6 +142,12 @@ typedef struct - int nrecords; /* no. of records in buffer */ - size_t offset; /* output buffer fill level */ - uint32_t seqno; /* sequence no. of next message */ -+ -+ /* experimental */ -+ int cs_tid; /* template id of current dataset */ -+ int cs_bytes; /* size of current set */ -+ uint8_t *cs_header; /* start of current set */ -+ - } ipfix_t; - - /** exporter funcs ---- a/lib/ipfix_col.c -+++ b/lib/ipfix_col.c -@@ -897,6 +897,8 @@ int ipfix_decode_datarecord( ipfixt_node - return -1; - } - -+ n->ipfixt->fields[i].elem->decode(p,p,len); -+ - data->lens[i] = len; - data->addrs[i] = p; - -@@ -907,7 +909,7 @@ int ipfix_decode_datarecord( ipfixt_node - return 0; - } - --static void do_free_datarecord( ipfix_datarecord_t *data ) -+void ipfix_free_datarecord( ipfix_datarecord_t *data ) - { - if ( data ) { - if ( data->addrs ) -@@ -925,6 +927,7 @@ int ipfix_parse_msg( ipfix_input_t *inpu - ipfix_hdr_t hdr; /* ipfix packet header */ - ipfixs_node_t *s; - ipfix_datarecord_t data = { NULL, NULL, 0 }; -+ ipfixe_node_t *e; - uint8_t *buf; /* ipfix payload */ - uint16_t setid, setlen; /* set id, set lenght */ - int i, nread, offset; /* counter */ -@@ -1042,6 +1045,12 @@ int ipfix_parse_msg( ipfix_input_t *inpu - err_flag = 1; - } - else { -+ for ( e=g_exporter; e!=NULL; e=e->next ) { -+ if ( e->elem->export_dset ) -+ (void) e->elem->export_dset( t, buf+nread, setlen, -+ e->elem->data ); -+ } -+ - /** read data records - */ - for ( offset=nread, bytesleft=setlen; bytesleft>4; ) { -@@ -1076,11 +1085,11 @@ int ipfix_parse_msg( ipfix_input_t *inpu - goto errend; - - end: -- do_free_datarecord( &data ); -+ ipfix_free_datarecord( &data ); - return nread; - - errend: -- do_free_datarecord( &data ); -+ ipfix_free_datarecord( &data ); - return -1; - } - -@@ -1093,7 +1102,7 @@ void process_client_tcp( int fd, int mas - tcp_conn_t *tcon = (tcp_conn_t*)data; - char *func = "process_client_tcp"; - -- mlogf( 3, "[%s] fd %d mask %d called.\n", func, fd, mask ); -+ mlogf( 4, "[%s] fd %d mask %d called.\n", func, fd, mask ); - - /** read ipfix header - */ ---- a/lib/ipfix_col.h -+++ b/lib/ipfix_col.h -@@ -88,6 +88,7 @@ typedef struct ipfix_col_info - int (*export_newsource)(ipfixs_node_t*,void*); - int (*export_newmsg)(ipfixs_node_t*,ipfix_hdr_t*,void*); - int (*export_trecord)(ipfixs_node_t*,ipfixt_node_t*,void*); -+ int (*export_dset)(ipfixt_node_t*,uint8_t*,size_t,void*); - int (*export_drecord)(ipfixs_node_t*,ipfixt_node_t*, - ipfix_datarecord_t*,void*); - void (*export_cleanup)(void*); ---- a/lib/ipfix_col_files.c -+++ b/lib/ipfix_col_files.c -@@ -68,7 +68,7 @@ static int export_newsource_file( ipfixs - return -1; - } - snprintf( s->fname+strlen(s->fname), PATH_MAX-strlen(s->fname), -- "/%u", s->odid ); -+ "/%u", (unsigned int)s->odid ); - if ( (access( s->fname, R_OK ) <0 ) - && (mkdir( s->fname, S_IRWXU ) <0) ) { - mlogf( 0, "[%s] cannot access dir '%s': %s\n", ---- a/lib/ipfix_FOKUS_IEs.txt -+++ b/lib/ipfix_FOKUS_IEs.txt -@@ -24,6 +24,8 @@ - 196, IPFIX_FT_PKTID, 4, IPFIX_CODING_UINT, "pktId", "FOKUS packet id" - 197, IPFIX_FT_STARTTIME, 4, IPFIX_CODING_INT, "startTime", "FOKUS interval start" - 198, IPFIX_FT_ENDTIME, 4, IPFIX_CODING_INT, "endTime", "FOKUS interval end" -+199, IPFIX_FT_RTT_USEC, 8, IPFIX_CODING_UINT, "rtt_usec", "FOKUS rtt in us" -+ - 300, IPFIX_FT_FLOWCREATIONTIMEUSEC, 4, IPFIX_CODING_INT, "flowCreationTimeUsec", "FOKUS flow start usec fraction" - 301, IPFIX_FT_FLOWENDTIMEUSEC, 4, IPFIX_CODING_INT, "flowEndTimeUsec", "FOKUS flow end usec fraction" - 303, IPFIX_FT_TC_PACKETS, 4, IPFIX_CODING_UINT, "tcPackets", "DAIDALOS Packets seen" -@@ -39,3 +41,48 @@ - 313, IPFIX_FT_OWDVARMIN_NSEC, 4, IPFIX_CODING_INT, "owdvarmin_nsec", "FOKUS minimum owd variance in ns" - 314, IPFIX_FT_OWDVARMAX_NSEC, 4, IPFIX_CODING_INT, "owdvarmax_nsec", "FOKUS maximum ow variance in ns" - -+# Project INTERSECTION -+315, IPFIX_FT_SOURCEIPV4FANOUT, 4, IPFIX_CODING_UINT,"sourceIPv4FanOut", "FOKUS IPv4 fanout" -+316, IPFIX_FT_DESTINATIONIPV4FANIN, 4, IPFIX_CODING_UINT,"destinationIPv4FanIn", "FOKUS IPv4 fanin" -+ -+# Project PRISM -+ -+330, IPFIX_FT_PR_SESSIONID, 4, IPFIX_CODING_UINT, "sessionId", "PRISM Session ID" -+331, IPFIX_FT_PR_TRANSACTIONID, 4, IPFIX_CODING_UINT, "transactionId", "PRISM Transaction ID" -+332, IPFIX_FT_PR_ENCRYPTEDDATA, 65535, IPFIX_CODING_STRING, "encryptedData", "PRISM encrypted data" -+333, IPFIX_FT_PR_DECRYPTIONKEY, 65535, IPFIX_CODING_STRING, "decryptionKey", "PRISM decryption key" -+334, IPFIX_FT_PR_KEYSHARE, 65535, IPFIX_CODING_STRING, "keyShare", "PRISM key share" -+335, IPFIX_FT_PR_KEYSHAREADP, 65535, IPFIX_CODING_STRING, "keyShareAdp", "PRISM key share ADP" -+336, IPFIX_FT_PR_INITVECTOR, 65535, IPFIX_CODING_STRING, "cryptoInitVector", "PRISM crypto init vector" -+ -+ -+# these information elements have been defined by FOKUS for the Oracle project -+ -+402, IPFIX_FT_ORsignalBandwidth, 4, IPFIX_CODING_UINT, "ORsignalBandwidth", "signal bandwidth" -+403, IPFIX_FT_ORsignalPower, 2, IPFIX_CODING_UINT, "ORsignalPower", "ERIP" -+404, IPFIX_FT_ORmodulationType, 2, IPFIX_CODING_UINT, "ORmodulationType", "AM/FM,.." -+405, IPFIX_FT_ORsymbolRate, 2, IPFIX_CODING_UINT, "ORsymbolRate", "symbol rate" -+406, IPFIX_FT_ORmodulationOrder, 1, IPFIX_CODING_UINT, "ORmodulationOrder", "number of levels" -+407, IPFIX_FT_ORrolloffFactor, 2, IPFIX_CODING_UINT, "ORrolloffFactor", "roll of factor" -+408, IPFIX_FT_ORgeopositionLon, 4, IPFIX_CODING_UINT, "ORgeopositionLon", "GPS coordinate, resolution 1 cm" -+409, IPFIX_FT_ORgeopositionLat, 4, IPFIX_CODING_UINT, "ORgeopositionLat", "GPS coordinate, resolution 1 cm" -+410, IPFIX_FT_ORgeopositionElev, 4, IPFIX_CODING_UINT, "ORgeopositionElev", "GPS coordinate, resolution 1 cm" -+411, IPFIX_FT_ORpolicyRecord, 65535, IPFIX_CODING_STRING, "ORpolicyRecord", "policy record has variable length, First 8 bits in data describe the length (in bytes) of the field" -+420, IPFIX_FT_channel_status, 1, IPFIX_CODING_UINT, "channel_status", vacancy of the scanned channel (1: channel busy, 0: channel idle)" -+421, IPFIX_FT_sensing_value, 2, IPFIX_CODING_UINT, "sensing_value", "Cost function output" -+422, IPFIX_FT_sensing_threshold, 2, IPFIX_CODING_UINT, "sensing_threshold", "Decision threshold" -+423, IPFIX_FT_OR_terminal_id, 1, IPFIX_CODING_UINT, "OR_terminal_id", "terminal identifier" -+424, IPFIX_FT_OR_terminal_id_list, 65535, IPFIX_CODING_STRING, "OR_terminal_id_list", "terminal identifier list" -+425, IPFIX_FT_Infrastructure_network_id, 1, IPFIX_CODING_UINT, "Infrastructure_network_id", "network identifier" -+426, IPFIX_FT_Infrastructure_network_type, 1, IPFIX_CODING_UINT, "Infrastructure_network_type", "network type (GSM - 1, UMTS - 2, WiMAX - 3, WiFi - 4)" -+427, IPFIX_FT_Battery_lifetime_min, 1, IPFIX_CODING_UINT, "Battery_lifetime_min", "expected battery lifetime to provide requested services or functionalities, in minutes" -+428, IPFIX_FT_Battery_lifetime_h, 1, IPFIX_CODING_UINT, "Battery_lifetime_h", "expected battery lifetime to provide requested services or functionalities, in hours" -+429, IPFIX_FT_Battery_status, 1, IPFIX_CODING_UINT, "Battery_status", "expected battery lifetime to provide requested services or functionalities, 1 bit status flag, values 1 or 0" -+430, IPFIX_FT_Cell_id_number, 4, IPFIX_CODING_UINT, "Cell_id_number", "16-32 bit cell id number, identifier" -+431, IPFIX_FT_Spectral_allocation_vector, 1, IPFIX_CODING_UINT, "Spectral_allocation_vector", "binary vector to indicate whether a band is free 1 bit 0 or not 1 bit 1" -+432, IPFIX_FT_Spectral_allocation_profile, 2, IPFIX_CODING_UINT, "Spectral_allocation_profile", "received power spectral density vs. frequency to indicate spectral activity in the band of interest (8-16 bits per discrete frequency value)" -+433, IPFIX_FT_Center_frequency, 2, IPFIX_CODING_UINT, "Center_frequency", "Center frequency of the sensed band" -+434, IPFIX_FT_Bandwidth_of_CAP, 2, IPFIX_CODING_UINT, "Bandwidth_of_CAP", "Bandwidth of the spectral allocation profile" -+435, IPFIX_FT_ORmodulation, 1, IPFIX_CODING_UINT, "ORmodulation", "CREST factor" -+436, IPFIX_FT_ORprofileRecord, 65535, IPFIX_CODING_STRING, "ORprofileRecord", "profile record has variable length, First 8 bits in data describe the length (in bytes) of the field" -+ |