move a few unmaintained packages from trunk to /packages
[openwrt/svn-archive/archive.git] / package / libipfix / patches / 100-openimp_sync.patch
diff --git a/package/libipfix/patches/100-openimp_sync.patch b/package/libipfix/patches/100-openimp_sync.patch
deleted file mode 100644 (file)
index 5b6e2e3..0000000
+++ /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"
-+