aboutsummaryrefslogtreecommitdiffstats
path: root/package/libipfix
diff options
context:
space:
mode:
authorblogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-10-05 10:12:53 +0000
committerblogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-10-05 10:12:53 +0000
commit5c105d9f3fd086aff195d3849dcf847d6b0bd927 (patch)
tree1229a11f725bfa58aa7c57a76898553bb5f6654a /package/libipfix
downloadopenwrt-5c105d9f3fd086aff195d3849dcf847d6b0bd927.tar.gz
openwrt-5c105d9f3fd086aff195d3849dcf847d6b0bd927.zip
branch Attitude Adjustment
git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@33625 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/libipfix')
-rw-r--r--package/libipfix/Makefile47
-rw-r--r--package/libipfix/extra/append-wprobe-ie.pl38
-rw-r--r--package/libipfix/extra/wprobe-ie.txt14
-rw-r--r--package/libipfix/patches/100-openimp_sync.patch474
-rw-r--r--package/libipfix/patches/110-wprobe_ie.patch44
-rw-r--r--package/libipfix/patches/120-ipfixmisc.patch27
6 files changed, 644 insertions, 0 deletions
diff --git a/package/libipfix/Makefile b/package/libipfix/Makefile
new file mode 100644
index 000000000..e4c931591
--- /dev/null
+++ b/package/libipfix/Makefile
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libipfix
+PKG_VERSION:=r51
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
+PKG_MD5SUM:=0e5b2871ea20ac48eda3f6006c5dba28
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME).$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libipfix
+ SECTION:=libs
+ CATEGORY:=Libraries
+ TITLE:=IP Flow Information Export Library
+ URL:=http://www.fokus.fraunhofer.de/de/net/more_about/download/ipfixlib.html
+ BUILDONLY:=1
+endef
+
+TARGET_CFLAGS += \
+ -ffunction-sections -fdata-sections
+
+define Build/Compile
+ $(MAKE) -C $(PKG_BUILD_DIR) \
+ CCOPT="$(TARGET_CFLAGS) -I$(BUILD_DIR)/linux/include" \
+ prefix="$(PKG_INSTALL_DIR)/usr" \
+ exec_prefix="$(PKG_INSTALL_DIR)/usr" \
+ all install
+ $(TARGET_CROSS)ranlib $(PKG_INSTALL_DIR)/usr/lib/libipfix.a
+ $(TARGET_CROSS)ranlib $(PKG_INSTALL_DIR)/usr/lib/libipfixmisc.a
+endef
+
+define Build/InstallDev
+ $(INSTALL_DIR) $(1)
+ $(CP) $(PKG_INSTALL_DIR)/* $(1)/
+endef
+
+$(eval $(call BuildPackage,libipfix))
diff --git a/package/libipfix/extra/append-wprobe-ie.pl b/package/libipfix/extra/append-wprobe-ie.pl
new file mode 100644
index 000000000..8bb658bbb
--- /dev/null
+++ b/package/libipfix/extra/append-wprobe-ie.pl
@@ -0,0 +1,38 @@
+use strict;
+
+my @fields = (
+ [ "_n", "UINT", " - Number of samples", 4 ],
+ [ "_s", "UINT", " - Sum of samples", 8 ],
+ [ "_ss", "UINT", " - Sum of squared samples", 8 ],
+);
+
+my $file = $ARGV[0] or die "Syntax: $0 <file> <start>\n";
+-f $file or die "File not found\n";
+my $start = $ARGV[1];
+$start =~ /^\d+$/ or die "Invalid start number";
+open FILE, "<$file" or die "Can't open file";
+while (<FILE>) {
+ /^(%?)(\w+),\s*(\w+),\s*(.+)$/ and do {
+ my $counter = $1;
+ my $rfield = $2;
+ my $nfield = $3;
+ my $descr = $4;
+ my @f;
+ if ($counter) {
+ @f = [ "", "UINT", "", 4];
+ } else {
+ @f = @fields;
+ }
+ foreach my $f (@f) {
+ my $nr = $start++;
+ my $n = $f->[0];
+ my $N = uc $n;
+ my $ftype = $f->[1];
+ my $fdesc = $f->[2];
+ my $size = $f->[3];
+ print "$nr, IPFIX_FT_WPROBE_$rfield$N, $size, IPFIX_CODING_$ftype, \"$nfield$n\", \"$descr$fdesc\"\n";
+ }
+ };
+}
+close FILE;
+
diff --git a/package/libipfix/extra/wprobe-ie.txt b/package/libipfix/extra/wprobe-ie.txt
new file mode 100644
index 000000000..26d64d213
--- /dev/null
+++ b/package/libipfix/extra/wprobe-ie.txt
@@ -0,0 +1,14 @@
+NOISE, global_noise, wprobe global noice floor
+PHY_BUSY, global_phy_busy, wprobe global airtime total
+PHY_RX, global_phy_rx, wprobe global airtime total from rx-frame
+PHY_TX, global_phy_tx, wprobe global airtime total from tx-frame
+RSSI, link_rssi, wprobe link received signal strength indication
+SIGNAL, link_signal, wprobe link signal strength in dB
+IEEE_RX_RATE, link_ieee_rx_rate, wprobe link IEEE 802.11 RX data rate
+IEEE_TX_RATE, link_ieee_tx_rate, wprobe link IEEE 802.11 TX data rate
+RETRANSMIT_200, link_retransmit_200, wprobe link total retransmissions per packet - <200 bytes
+RETRANSMIT_400, link_retransmit_400, wprobe link total retransmissions per packet - <400 bytes
+RETRANSMIT_800, link_retransmit_800, wprobe link total retransmissions per packet - <800 bytes
+RETRANSMIT_1600, link_retransmit_1600, wprobe link total retransmissions per packet - >800 bytes
+%FRAMES, global_frames, wprobe global number of 802.11 frames seen
+%PROBEREQ, global_probereq, wprobe global number of 802.11 probe requests seen
diff --git a/package/libipfix/patches/100-openimp_sync.patch b/package/libipfix/patches/100-openimp_sync.patch
new file mode 100644
index 000000000..5b6e2e379
--- /dev/null
+++ b/package/libipfix/patches/100-openimp_sync.patch
@@ -0,0 +1,474 @@
+--- 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"
++
diff --git a/package/libipfix/patches/110-wprobe_ie.patch b/package/libipfix/patches/110-wprobe_ie.patch
new file mode 100644
index 000000000..5e3728081
--- /dev/null
+++ b/package/libipfix/patches/110-wprobe_ie.patch
@@ -0,0 +1,44 @@
+--- a/lib/ipfix_FOKUS_IEs.txt
++++ b/lib/ipfix_FOKUS_IEs.txt
+@@ -86,3 +86,41 @@
+ 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"
+
++500, IPFIX_FT_WPROBE_NOISE_N, 4, IPFIX_CODING_UINT, "global_noise_n", "wprobe global noice floor - Number of samples"
++501, IPFIX_FT_WPROBE_NOISE_S, 8, IPFIX_CODING_UINT, "global_noise_s", "wprobe global noice floor - Sum of samples"
++502, IPFIX_FT_WPROBE_NOISE_SS, 8, IPFIX_CODING_UINT, "global_noise_ss", "wprobe global noice floor - Sum of squared samples"
++503, IPFIX_FT_WPROBE_PHY_BUSY_N, 4, IPFIX_CODING_UINT, "global_phy_busy_n", "wprobe global airtime total - Number of samples"
++504, IPFIX_FT_WPROBE_PHY_BUSY_S, 8, IPFIX_CODING_UINT, "global_phy_busy_s", "wprobe global airtime total - Sum of samples"
++505, IPFIX_FT_WPROBE_PHY_BUSY_SS, 8, IPFIX_CODING_UINT, "global_phy_busy_ss", "wprobe global airtime total - Sum of squared samples"
++506, IPFIX_FT_WPROBE_PHY_RX_N, 4, IPFIX_CODING_UINT, "global_phy_rx_n", "wprobe global airtime total from rx-frame - Number of samples"
++507, IPFIX_FT_WPROBE_PHY_RX_S, 8, IPFIX_CODING_UINT, "global_phy_rx_s", "wprobe global airtime total from rx-frame - Sum of samples"
++508, IPFIX_FT_WPROBE_PHY_RX_SS, 8, IPFIX_CODING_UINT, "global_phy_rx_ss", "wprobe global airtime total from rx-frame - Sum of squared samples"
++509, IPFIX_FT_WPROBE_PHY_TX_N, 4, IPFIX_CODING_UINT, "global_phy_tx_n", "wprobe global airtime total from tx-frame - Number of samples"
++510, IPFIX_FT_WPROBE_PHY_TX_S, 8, IPFIX_CODING_UINT, "global_phy_tx_s", "wprobe global airtime total from tx-frame - Sum of samples"
++511, IPFIX_FT_WPROBE_PHY_TX_SS, 8, IPFIX_CODING_UINT, "global_phy_tx_ss", "wprobe global airtime total from tx-frame - Sum of squared samples"
++512, IPFIX_FT_WPROBE_RSSI_N, 4, IPFIX_CODING_UINT, "link_rssi_n", "wprobe link received signal strength indication - Number of samples"
++513, IPFIX_FT_WPROBE_RSSI_S, 8, IPFIX_CODING_UINT, "link_rssi_s", "wprobe link received signal strength indication - Sum of samples"
++514, IPFIX_FT_WPROBE_RSSI_SS, 8, IPFIX_CODING_UINT, "link_rssi_ss", "wprobe link received signal strength indication - Sum of squared samples"
++515, IPFIX_FT_WPROBE_SIGNAL_N, 4, IPFIX_CODING_UINT, "link_signal_n", "wprobe link signal strength in dB - Number of samples"
++516, IPFIX_FT_WPROBE_SIGNAL_S, 8, IPFIX_CODING_UINT, "link_signal_s", "wprobe link signal strength in dB - Sum of samples"
++517, IPFIX_FT_WPROBE_SIGNAL_SS, 8, IPFIX_CODING_UINT, "link_signal_ss", "wprobe link signal strength in dB - Sum of squared samples"
++518, IPFIX_FT_WPROBE_IEEE_RX_RATE_N, 4, IPFIX_CODING_UINT, "link_ieee_rx_rate_n", "wprobe link IEEE 802.11 RX data rate - Number of samples"
++519, IPFIX_FT_WPROBE_IEEE_RX_RATE_S, 8, IPFIX_CODING_UINT, "link_ieee_rx_rate_s", "wprobe link IEEE 802.11 RX data rate - Sum of samples"
++520, IPFIX_FT_WPROBE_IEEE_RX_RATE_SS, 8, IPFIX_CODING_UINT, "link_ieee_rx_rate_ss", "wprobe link IEEE 802.11 RX data rate - Sum of squared samples"
++521, IPFIX_FT_WPROBE_IEEE_TX_RATE_N, 4, IPFIX_CODING_UINT, "link_ieee_tx_rate_n", "wprobe link IEEE 802.11 TX data rate - Number of samples"
++522, IPFIX_FT_WPROBE_IEEE_TX_RATE_S, 8, IPFIX_CODING_UINT, "link_ieee_tx_rate_s", "wprobe link IEEE 802.11 TX data rate - Sum of samples"
++523, IPFIX_FT_WPROBE_IEEE_TX_RATE_SS, 8, IPFIX_CODING_UINT, "link_ieee_tx_rate_ss", "wprobe link IEEE 802.11 TX data rate - Sum of squared samples"
++524, IPFIX_FT_WPROBE_RETRANSMIT_200_N, 4, IPFIX_CODING_UINT, "link_retransmit_200_n", "wprobe link total retransmissions per packet - <200 bytes - Number of samples"
++525, IPFIX_FT_WPROBE_RETRANSMIT_200_S, 8, IPFIX_CODING_UINT, "link_retransmit_200_s", "wprobe link total retransmissions per packet - <200 bytes - Sum of samples"
++526, IPFIX_FT_WPROBE_RETRANSMIT_200_SS, 8, IPFIX_CODING_UINT, "link_retransmit_200_ss", "wprobe link total retransmissions per packet - <200 bytes - Sum of squared samples"
++527, IPFIX_FT_WPROBE_RETRANSMIT_400_N, 4, IPFIX_CODING_UINT, "link_retransmit_400_n", "wprobe link total retransmissions per packet - <400 bytes - Number of samples"
++528, IPFIX_FT_WPROBE_RETRANSMIT_400_S, 8, IPFIX_CODING_UINT, "link_retransmit_400_s", "wprobe link total retransmissions per packet - <400 bytes - Sum of samples"
++529, IPFIX_FT_WPROBE_RETRANSMIT_400_SS, 8, IPFIX_CODING_UINT, "link_retransmit_400_ss", "wprobe link total retransmissions per packet - <400 bytes - Sum of squared samples"
++530, IPFIX_FT_WPROBE_RETRANSMIT_800_N, 4, IPFIX_CODING_UINT, "link_retransmit_800_n", "wprobe link total retransmissions per packet - <800 bytes - Number of samples"
++531, IPFIX_FT_WPROBE_RETRANSMIT_800_S, 8, IPFIX_CODING_UINT, "link_retransmit_800_s", "wprobe link total retransmissions per packet - <800 bytes - Sum of samples"
++532, IPFIX_FT_WPROBE_RETRANSMIT_800_SS, 8, IPFIX_CODING_UINT, "link_retransmit_800_ss", "wprobe link total retransmissions per packet - <800 bytes - Sum of squared samples"
++533, IPFIX_FT_WPROBE_RETRANSMIT_1600_N, 4, IPFIX_CODING_UINT, "link_retransmit_1600_n", "wprobe link total retransmissions per packet - >800 bytes - Number of samples"
++534, IPFIX_FT_WPROBE_RETRANSMIT_1600_S, 8, IPFIX_CODING_UINT, "link_retransmit_1600_s", "wprobe link total retransmissions per packet - >800 bytes - Sum of samples"
++535, IPFIX_FT_WPROBE_RETRANSMIT_1600_SS, 8, IPFIX_CODING_UINT, "link_retransmit_1600_ss", "wprobe link total retransmissions per packet - >800 bytes - Sum of squared samples"
++536, IPFIX_FT_WPROBE_FRAMES, 4, IPFIX_CODING_UINT, "global_frames", "wprobe global number of 802.11 frames seen"
++537, IPFIX_FT_WPROBE_PROBEREQ, 4, IPFIX_CODING_UINT, "global_probereq", "wprobe global number of 802.11 probe requests seen"
diff --git a/package/libipfix/patches/120-ipfixmisc.patch b/package/libipfix/patches/120-ipfixmisc.patch
new file mode 100644
index 000000000..e3f5a05c6
--- /dev/null
+++ b/package/libipfix/patches/120-ipfixmisc.patch
@@ -0,0 +1,27 @@
+Index: libipfix.r51/lib/Makefile.in
+===================================================================
+--- libipfix.r51.orig/lib/Makefile.in 2008-08-05 15:15:23.000000000 +0200
++++ libipfix.r51/lib/Makefile.in 2012-06-05 19:26:34.061692890 +0200
+@@ -41,7 +41,7 @@
+ INCLS = -I. -I..
+ CFLAGS = $(CCOPT) $(INCLS) $(DEFS)
+
+-TARGETS = libmisc.a libipfix.a
++TARGETS = libipfixmisc.a libipfix.a
+ OBJS = ipfix.o ipfix_col.o ipfix_print.o \
+ ipfix_col_files.o ipfix_col_db.o @IPFIX_DB_OBJ@ @IPFIX_SSL_OBJ@
+ DEPHDR = ipfix.h ipfix_def.h ipfix_fields.h ipfix_def_fokus.h ipfix_fields_fokus.h
+@@ -60,11 +60,11 @@
+ install:
+ @[ -d ${libdir} ] || (mkdir -p ${libdir}; chmod 755 ${libdir})
+ $(INSTALL_DATA) libipfix.a ${libdir}/
+- $(INSTALL_DATA) libmisc.a ${libdir}/
++ $(INSTALL_DATA) libipfixmisc.a ${libdir}/
+ @[ -d ${includedir} ] || (mkdir -p ${includedir}; chmod 755 ${includedir})
+ $(INSTALL_HEADER) ipfix*.h mlog.h mpoll.h ${includedir}/
+
+-libmisc.a: $(MISCOBJS) Makefile
++libipfixmisc.a: $(MISCOBJS) Makefile
+ @rm -f $@
+ $(AR) rc $@ $(MISCOBJS)
+