Software Engineering Institute | Carnegie Mellon©
CERT NetSA Security Suite
Monitoring for Large-Scale Networks

fixbuf

Documentation

fixbuf

  • Documentation
  • Downloads
  • Main Page
  • Data Structures
  • Files
  • File List
  • Globals

public.h

Go to the documentation of this file.
00001 /*
00002  ** public.h
00003  ** fixbuf IPFIX Implementation Public Interface
00004  **
00005  ** ------------------------------------------------------------------------
00006  ** Copyright (C) 2006-2012 Carnegie Mellon University. All Rights Reserved.
00007  ** ------------------------------------------------------------------------
00008  ** Authors: Brian Trammell, Dan Ruef
00009  ** ------------------------------------------------------------------------
00010  ** Use of the libfixbuf system and related source code is subject to the terms
00011  ** of the following licenses:
00012  **
00013  ** GNU Lesser GPL (LGPL) Rights pursuant to Version 2.1, February 1999
00014  ** Government Purpose License Rights (GPLR) pursuant to DFARS 252.227.7013
00015  **
00016  ** NO WARRANTY
00017  **
00018  ** ANY INFORMATION, MATERIALS, SERVICES, INTELLECTUAL PROPERTY OR OTHER
00019  ** PROPERTY OR RIGHTS GRANTED OR PROVIDED BY CARNEGIE MELLON UNIVERSITY
00020  ** PURSUANT TO THIS LICENSE (HEREINAFTER THE "DELIVERABLES") ARE ON AN
00021  ** "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY
00022  ** KIND, EITHER EXPRESS OR IMPLIED AS TO ANY MATTER INCLUDING, BUT NOT
00023  ** LIMITED TO, WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE,
00024  ** MERCHANTABILITY, INFORMATIONAL CONTENT, NONINFRINGEMENT, OR ERROR-FREE
00025  ** OPERATION. CARNEGIE MELLON UNIVERSITY SHALL NOT BE LIABLE FOR INDIRECT,
00026  ** SPECIAL OR CONSEQUENTIAL DAMAGES, SUCH AS LOSS OF PROFITS OR INABILITY
00027  ** TO USE SAID INTELLECTUAL PROPERTY, UNDER THIS LICENSE, REGARDLESS OF
00028  ** WHETHER SUCH PARTY WAS AWARE OF THE POSSIBILITY OF SUCH DAMAGES.
00029  ** LICENSEE AGREES THAT IT WILL NOT MAKE ANY WARRANTY ON BEHALF OF
00030  ** CARNEGIE MELLON UNIVERSITY, EXPRESS OR IMPLIED, TO ANY PERSON
00031  ** CONCERNING THE APPLICATION OF OR THE RESULTS TO BE OBTAINED WITH THE
00032  ** DELIVERABLES UNDER THIS LICENSE.
00033  **
00034  ** Licensee hereby agrees to defend, indemnify, and hold harmless Carnegie
00035  ** Mellon University, its trustees, officers, employees, and agents from
00036  ** all claims or demands made against them (and any related losses,
00037  ** expenses, or attorney's fees) arising out of, or relating to Licensee's
00038  ** and/or its sub licensees' negligent use or willful misuse of or
00039  ** negligent conduct or willful misconduct regarding the Software,
00040  ** facilities, or other rights or assistance granted by Carnegie Mellon
00041  ** University under this License, including, but not limited to, any
00042  ** claims of product liability, personal injury, death, damage to
00043  ** property, or violation of any laws or regulations.
00044  **
00045  ** Carnegie Mellon University Software Engineering Institute authored
00046  ** documents are sponsored by the U.S. Department of Defense under
00047  ** Contract FA8721-05-C-0003. Carnegie Mellon University retains
00048  ** copyrights in all material produced under this contract. The U.S.
00049  ** Government retains a non-exclusive, royalty-free license to publish or
00050  ** reproduce these documents, or allow others to do so, for U.S.
00051  ** Government purposes only pursuant to the copyright license under the
00052  ** contract clause at 252.227.7013.
00053  **
00054  ** ------------------------------------------------------------------------
00055  */
00056 
00509 #ifndef _FB_PUBLIC_H_
00510 #define _FB_PUBLIC_H_
00511 #include <fixbuf/autoinc.h>
00512 
00513 #ifdef __cplusplus
00514 extern "C" {
00515 #endif
00516 
00517 #ident "$Id: public.h 18532 2012-09-06 15:10:01Z ecoff_svn $"
00518 
00519 /*
00520  * Error Handling Definitions
00521  */
00522 
00524 #define FB_ERROR_DOMAIN             g_quark_from_string("fixbufError")
00525 
00526 #define FB_ERROR_TMPL               1
00527 
00531 #define FB_ERROR_EOM                2
00532 
00537 #define FB_ERROR_EOF                3
00538 
00542 #define FB_ERROR_IPFIX              4
00543 
00548 #define FB_ERROR_BUFSZ              5
00549 
00550 #define FB_ERROR_IMPL               6
00551 
00552 #define FB_ERROR_IO                 7
00553 
00557 #define FB_ERROR_NLREAD             8
00558 
00563 #define FB_ERROR_NLWRITE            9
00564 
00567 #define FB_ERROR_NOELEMENT          10
00568 
00571 #define FB_ERROR_CONN               11
00572 
00576 #define FB_ERROR_NETFLOWV9          12
00577 
00580 #define FB_ERROR_TRANSMISC          13
00581 
00582 /*
00583  * Public Datatypes and Constants
00584  */
00585 
00586 struct fBuf_st;
00592 typedef struct fBuf_st fBuf_t;
00593 
00600 typedef struct fbVarfield_st {
00602     size_t      len;
00609     uint8_t     *buf;
00610 } fbVarfield_t;
00611 
00612 
00613 struct fbInfoModel_st;
00618 typedef struct fbInfoModel_st fbInfoModel_t;
00619 
00625 #define FB_IE_INIT(_name_, _ent_, _num_, _len_, _flags_) \
00626     { {.name = _name_}, 0, _ent_, _num_, _len_, _flags_ }
00627 
00633 #define FB_IE_NULL \
00634     { {.name = NULL}, 0, 0, 0, 0, 0 }
00635 
00640 #define FB_IE_F_NONE                            0x00000000
00641 
00646 #define FB_IE_F_ENDIAN                          0x00000001
00647 
00657 #define FB_IE_F_REVERSIBLE                      0x00000040
00658 
00666 #define FB_IE_F_ALIEN                           0x00000080
00667 
00671 #define FB_IE_VARLEN                            65535
00672 
00677 #define FB_IE_BASIC_LIST                        291
00678 
00682 #define FB_IE_SUBTEMPLATE_LIST                  292
00683 
00687 #define FB_IE_SUBTEMPLATE_MULTILIST             293
00688 
00696 #define FB_IE_PEN_REVERSE                       29305
00697 
00706 #define FB_IE_VENDOR_BIT_REVERSE                0x4000
00707 
00713 #define FB_CISCO_GENERIC                       9999
00714 
00721 #define FB_CISCO_ASA_EVENT_ID                  9998
00722 
00729 #define FB_CISCO_ASA_EVENT_XTRA                9997
00730 
00735 #define FB_IE_REVERSE_STR                       "reverse"
00736 
00738 #define FB_IE_REVERSE_STRLEN                    7
00739 
00748 typedef struct fbInfoElement_st {
00750     union {
00756         const struct fbInfoElement_st *canon;
00761         char                    *name;
00762     }  ref;
00763 
00769     uint32_t            midx;
00771     uint32_t            ent;
00776     uint16_t            num;
00778     uint16_t            len;
00780     uint32_t            flags;
00781 } fbInfoElement_t;
00782 
00787 #define FB_TID_AUTO         0
00788 
00792 #define FB_TID_TS           2
00793 
00797 #define FB_TID_OTS          3
00798 
00802 #define FB_TID_MIN_DATA     256
00803 
00804 struct fbTemplate_st;
00810 typedef struct fbTemplate_st fbTemplate_t;
00811 
00817 #define FB_IESPEC_NULL { NULL, 0, 0 }
00818 
00824 typedef struct fbInfoElementSpec_st {
00826     char                *name;
00831     uint16_t            len_override;
00838     uint32_t            flags;
00839 } fbInfoElementSpec_t;
00840 
00841 struct fbSession_st;
00848 typedef struct fbSession_st fbSession_t;
00849 
00851 typedef enum fbTransport_en {
00856     FB_SCTP,
00858     FB_TCP,
00860     FB_UDP,
00866     FB_DTLS_SCTP,
00871     FB_TLS_TCP,
00877     FB_DTLS_UDP,
00878 } fbTransport_t;
00879 
00884 typedef struct fbConnSpec_st {
00886     fbTransport_t       transport;
00888     char                *host;
00890     char                *svc;
00892     char                *ssl_ca_file;
00894     char                *ssl_cert_file;
00896     char                *ssl_key_file;
00898     char                *ssl_key_pass;
00903     void                *vai;
00908     void                *vssl_ctx;
00909 } fbConnSpec_t;
00910 
00914 #define FB_CONNSPEC_INIT { FB_SCTP, NULL, NULL,         \
00915                            NULL, NULL, NULL, NULL,      \
00916                            NULL, NULL }
00917 
00918 #if HAVE_SPREAD
00919 
00924 #define FB_SPREADPARAMS_INIT { 0, 0, 0 }
00925 
00926 typedef struct fbSpreadParams_st {
00929     fbSession_t * session;
00932     char *          daemon;
00935     char **         groups;
00936 } fbSpreadParams_t;
00937 
00938 #endif /* HAVE_SPREAD */
00939 
00940 struct fbExporter_st;
00946 typedef struct fbExporter_st fbExporter_t;
00947 
00948 struct fbCollector_st;
00956 typedef struct fbCollector_st fbCollector_t;
00957 
00958 struct fbListener_st;
00965 typedef struct fbListener_st fbListener_t;
00966 
00970 typedef struct fbListenerEntry_st fbListenerEntry_t;
00971 
00975 struct fbListenerEntry_st
00976 {
00978     fbListenerEntry_t  *next;
00980     fbListenerEntry_t  *prev;
00982     fbListener_t       *listener;
00983 };
00984 
00988 typedef struct fbListenerGroupResult_st fbListenerGroupResult_t;
00989 
00995 struct fbListenerGroupResult_st
00996 {
00998     fbListenerGroupResult_t *next;
01000     fbListener_t    *listener;
01002     fBuf_t          *fbuf;
01003 };
01004 
01008 typedef struct fbListenerGroup_st
01009 {
01011     fbListenerEntry_t   *head;
01013     void                *tableForDescriptorsToListeners;
01014 } fbListenerGroup_t;
01015 
01028 typedef gboolean (*fbAcceptCallback_fn) (
01029     fBuf_t                     *buf,
01030     fbListener_t               *listener,
01031     struct sockaddr            *sAddr,
01032     GError                    **err);
01033 
01044 typedef void (*fbNewTemplateCallback_fn) (
01045     fbSession_t    *session,
01046     uint16_t        tid,
01047     fbTemplate_t   *tmpl);
01048 
01052 #define UNDEFINED       0xFF
01053 
01056 #define NONE_OF         0x00
01057 
01060 #define EXACTLY_ONE_OF  0x01
01061 
01064 #define ONE_OR_MORE_OF  0x02
01065 
01068 #define ALL_OF          0x03
01069 
01072 #define ORDERED         0x04
01073 
01080 gboolean fbListValidSemantic(
01081     uint8_t semantic);
01082 
01083 /****** BASICLIST FUNCTIONS AND STRUCTS *******/
01089 typedef struct fbBasicList_st {
01091     uint8_t                 semantic;
01093     uint16_t                numElements;
01095     uint16_t                dataLength;
01097     const fbInfoElement_t  *infoElement;
01099     uint8_t                *dataPtr;
01100 } fbBasicList_t;
01101 
01102 
01108 fbBasicList_t*  fbBasicListAlloc(
01109     void);
01110 
01123 void* fbBasicListInit(
01124     fbBasicList_t          *basicListPtr,
01125     uint8_t                 semantic,
01126     const fbInfoElement_t  *infoElement,
01127     uint16_t                numElements);
01128 
01143 void* fbBasicListInitWithOwnBuffer(
01144     fbBasicList_t          *basicListPtr,
01145     uint8_t                 semantic,
01146     const fbInfoElement_t  *infoElement,
01147     uint16_t                numElements,
01148     uint16_t                dataLength,
01149     uint8_t                *dataPtr);
01150 
01163 void fbBasicListCollectorInit(
01164     fbBasicList_t  *basicListPtr);
01165 
01166 
01174 uint8_t fbBasicListGetSemantic(
01175     fbBasicList_t  *basicListPtr);
01176 
01185 void fbBasicListSetSemantic(
01186     fbBasicList_t  *basicListPtr,
01187     uint8_t         semantic);
01188 
01189 
01197 const fbInfoElement_t*  fbBasicListGetInfoElement(
01198      fbBasicList_t  *basicListPtr);
01199 
01205 void* fbBasicListGetDataPtr(
01206     fbBasicList_t   *basicListPtr);
01207 
01216 void* fbBasicListGetIndexedDataPtr(
01217     fbBasicList_t   *basicListPtr,
01218     uint16_t         index);
01219 
01228 void* fbBasicListGetNextPtr(
01229     fbBasicList_t   *basicListPtr,
01230     void            *currentPtr);
01231 
01241 void* fbBasicListRealloc(
01242     fbBasicList_t  *basicList,
01243     uint16_t        newNumElements);
01244 
01252 void* fbBasicListAddNewElements(
01253     fbBasicList_t  *basicList,
01254     uint16_t        numNewElements);
01255 
01261 void fbBasicListClear(
01262     fbBasicList_t  *basicListPtr);
01263 
01270 void fbBasicListClearWithoutFree(
01271     fbBasicList_t  *basicList);
01272 
01278 void fbBasicListFree(
01279     fbBasicList_t  *basicListPtr);
01280 
01281 /******* END OF BASICLIST ********/
01282 
01283 
01284 
01285 /******* SUBTEMPLATELIST FUNCTIONS ****/
01286 
01294 typedef struct fbSubTemplateList_st {
01296     uint8_t             semantic;
01298     uint16_t            tmplID;
01300     uint16_t            numElements;
01302     const fbTemplate_t *tmpl;
01305     union {
01306         size_t              length;
01307         uint64_t            extra;
01308     } dataLength;
01310     uint8_t            *dataPtr;
01311 } fbSubTemplateList_t;
01312 
01319 fbSubTemplateList_t* fbSubTemplateListAlloc(
01320     void);
01321 
01334 void*  fbSubTemplateListInit(
01335     fbSubTemplateList_t    *sTL,
01336     uint8_t                 semantic,
01337     uint16_t                tmplID,
01338     const fbTemplate_t     *tmpl,
01339     uint16_t                numElements);
01340 
01355 void* fbSubTemplateListInitWithOwnBuffer(
01356     fbSubTemplateList_t    *subTemplateList,
01357     uint8_t                 semantic,
01358     uint16_t                tmplID,
01359     const fbTemplate_t     *tmpl,
01360     uint16_t                numElements,
01361     uint16_t                dataLength,
01362     uint8_t                *dataPtr);
01363 
01374 void fbSubTemplateListCollectorInit(
01375     fbSubTemplateList_t    *STL);
01376 
01382 void* fbSubTemplateListGetDataPtr(
01383     const fbSubTemplateList_t  *subTemplateListPtr);
01384 
01392 void* fbSubTemplateListGetIndexedDataPtr(
01393     const fbSubTemplateList_t  *subTemplateListPtr,
01394     uint16_t                    index);
01395 
01407 void* fbSubTemplateListGetNextPtr(
01408     const fbSubTemplateList_t  *subTemplateListPtr,
01409     void                       *currentPtr);
01410 
01417 void fbSubTemplateListSetSemantic(
01418     fbSubTemplateList_t    *subTemplateListPtr,
01419     uint8_t                 semantic);
01420 
01426 uint8_t fbSubTemplateListGetSemantic(
01427     fbSubTemplateList_t    *subTemplateListPtr);
01428 
01434 const fbTemplate_t* fbSubTemplateListGetTemplate(
01435     fbSubTemplateList_t    *subTemplateListPtr);
01436 
01442 uint16_t fbSubTemplateListGetTemplateID(
01443     fbSubTemplateList_t    *subTemplateListPtr);
01444 
01455 void* fbSubTemplateListRealloc(
01456     fbSubTemplateList_t    *subTemplateList,
01457     uint16_t                newNumElements);
01458 
01467 void* fbSubTemplateListAddNewElements(
01468     fbSubTemplateList_t    *subTemplateList,
01469     uint16_t                numNewElements);
01470 
01484 void fbSubTemplateListClear(
01485     fbSubTemplateList_t    *subTemplateListPtr);
01486 
01495 void fbSubTemplateListClearWithoutFree(
01496     fbSubTemplateList_t    *subTemplateListPtr);
01497 
01505 void fbSubTemplateListFree(
01506     fbSubTemplateList_t    *subTemplateListPtr);
01507 
01508 /********* END OF SUBTEMPLATELIST **********/
01526 typedef struct fbSubTemplateMultiListEntry_st {
01528     uint16_t        tmplID;
01530     uint16_t        numElements;
01532     fbTemplate_t   *tmpl;
01534     size_t          dataLength;
01536     uint8_t        *dataPtr;
01537 } fbSubTemplateMultiListEntry_t;
01538 
01543 typedef struct fbSubTemplateMultiList_st {
01545     uint8_t                         semantic;
01547     uint16_t                        numElements;
01549     fbSubTemplateMultiListEntry_t  *firstEntry;
01550 } fbSubTemplateMultiList_t;
01551 
01561 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListInit(
01562     fbSubTemplateMultiList_t   *STML,
01563     uint8_t                     semantic,
01564     uint16_t                    numElements);
01565 
01572 void fbSubTemplateMultiListSetSemantic(
01573     fbSubTemplateMultiList_t   *STML,
01574     uint8_t                     semantic);
01575 
01581 uint8_t fbSubTemplateMultiListGetSemantic(
01582     fbSubTemplateMultiList_t   *STML);
01583 
01590 void fbSubTemplateMultiListClear(
01591     fbSubTemplateMultiList_t   *STML);
01592 
01602 void fbSubTemplateMultiListClearEntries(
01603     fbSubTemplateMultiList_t   *STML);
01604 
01610 void fbSubTemplateMultiListFree(
01611     fbSubTemplateMultiList_t   *STML);
01612 
01622 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListRealloc(
01623     fbSubTemplateMultiList_t   *STML,
01624     uint16_t                    newNumEntries);
01625 
01634 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListAddNewEntries(
01635     fbSubTemplateMultiList_t   *STML,
01636     uint16_t                    numNewEntries);
01637 
01643 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetFirstEntry(
01644     fbSubTemplateMultiList_t   *STML);
01645 
01653 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetIndexedEntry(
01654     fbSubTemplateMultiList_t   *STML,
01655     uint16_t                    index);
01656 
01668 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetNextEntry(
01669     fbSubTemplateMultiList_t       *STML,
01670     fbSubTemplateMultiListEntry_t  *currentEntry);
01671 
01683 void* fbSubTemplateMultiListEntryInit(
01684     fbSubTemplateMultiListEntry_t  *entry,
01685     uint16_t                        tmplID,
01686     fbTemplate_t                   *tmpl,
01687     uint16_t                        numElements);
01688 
01699 void *fbSubTemplateMultiListEntryRealloc(
01700     fbSubTemplateMultiListEntry_t  *entry,
01701     uint16_t                        newNumElements);
01702 
01709 void fbSubTemplateMultiListEntryClear(
01710     fbSubTemplateMultiListEntry_t   *entry);
01711 
01718 void* fbSubTemplateMultiListEntryGetDataPtr(
01719     fbSubTemplateMultiListEntry_t   *entry);
01720 
01732 void* fbSubTemplateMultiListEntryNextDataPtr(
01733     fbSubTemplateMultiListEntry_t   *entry,
01734     void                            *currentPtr);
01735 
01746 void* fbSubTemplateMultiListEntryGetIndexedPtr(
01747     fbSubTemplateMultiListEntry_t   *entry,
01748     uint16_t                         index);
01749 
01756 const fbTemplate_t* fbSubTemplateMultiListEntryGetTemplate(
01757     fbSubTemplateMultiListEntry_t   *entry);
01758 
01765 uint16_t fbSubTemplateMultiListEntryGetTemplateID(
01766     fbSubTemplateMultiListEntry_t   *entry);
01767 
01768 /************** END OF STML FUNCTIONS */
01769 
01775 fbListenerGroup_t* fbListenerGroupAlloc(
01776     void);
01777 
01787 int fbListenerGroupAddListener(
01788     fbListenerGroup_t          *group,
01789     const fbListener_t         *listener);
01790 
01800 int fbListenerGroupDeleteListener(
01801     fbListenerGroup_t          *group,
01802     const fbListener_t         *listener);
01803 
01814 fbListenerGroupResult_t* fbListenerGroupWait(
01815     fbListenerGroup_t          *group,
01816     GError                     **err);
01817 
01828 gboolean fbListenerWaitAcceptCallback(
01829     fbListener_t           *listener,
01830     fbAcceptCallback_fn     callback,
01831     GError                **err);
01832 
01845 gboolean fbListenerGroupWaitAcceptCallback(
01846     fbListenerGroup_t   *group,
01847     fbAcceptCallback_fn  callback,
01848     GError             **err);
01849 
01862 fBuf_t  *fbListenerOwnSocketCollectorTCP(
01863     fbListener_t   *listener,
01864     int             sock,
01865     GError        **err);
01866 
01876 fBuf_t  *fbListenerOwnSocketCollectorTLS(
01877     fbListener_t   *listener,
01878     int             sock,
01879     GError        **err);
01880 
01886 void    fBufInterruptSocket(
01887     fBuf_t         *fbuf);
01888 
01889 
01910 typedef gboolean        (*fbListenerAppInit_fn) (
01911     fbListener_t                *listener,
01912     void                        **ctx,
01913     int                         fd,
01914     struct sockaddr             *peer,
01915     size_t                      peerlen,
01916     GError                      **err);
01917 
01925 typedef void            (*fbListenerAppFree_fn) (
01926     void                        *ctx);
01927 
01928 /*
01929  * Public Function Calls. These calls will remain available and retain
01930  * their functionality in all subsequent versions of libfixbuf.
01931  */
01932 
01933 
01950 gboolean            fBufSetInternalTemplate(
01951     fBuf_t              *fbuf,
01952     uint16_t            int_tid,
01953     GError              **err);
01954 
01972 gboolean            fBufSetExportTemplate(
01973     fBuf_t              *fbuf,
01974     uint16_t            ext_tid,
01975     GError              **err);
01976 
01977 #if HAVE_SPREAD
01978 
01995 void                 fBufSetSpreadExportGroup(
01996     fBuf_t             *fbuf,
01997     char               **groups,
01998     int                num_groups,
01999     GError             **err);
02000 #endif
02001 
02016 void                fBufSetAutomaticMode(
02017     fBuf_t              *fbuf,
02018     gboolean            automatic);
02019 
02027 fbSession_t         *fBufGetSession(
02028     fBuf_t              *fbuf);
02029 
02038 void                fBufFree(
02039     fBuf_t              *fbuf);
02040 
02053 fBuf_t              *fBufAllocForExport(
02054     fbSession_t         *session,
02055     fbExporter_t        *exporter);
02056 
02066 fbExporter_t        *fBufGetExporter(
02067     fBuf_t              *fbuf);
02068 
02079 void                fBufSetExporter(
02080     fBuf_t              *fbuf,
02081     fbExporter_t        *exporter);
02082 
02083 
02107 gboolean            fBufAppend(
02108     fBuf_t              *fbuf,
02109     uint8_t             *recbase,
02110     size_t              recsize,
02111     GError              **err);
02112 
02122 gboolean            fBufEmit(
02123     fBuf_t              *fbuf,
02124     GError              **err);
02125 
02137 void                fBufSetExportTime(
02138     fBuf_t              *fbuf,
02139     uint32_t            extime);
02140 
02153 fBuf_t              *fBufAllocForCollection(
02154     fbSession_t         *session,
02155     fbCollector_t       *collector);
02156 
02166 fbCollector_t       *fBufGetCollector(
02167     fBuf_t              *fbuf);
02168 
02179 void                fBufSetCollector(
02180     fBuf_t              *fbuf,
02181     fbCollector_t       *collector);
02182 
02212 gboolean            fBufNext(
02213     fBuf_t              *fbuf,
02214     uint8_t             *recbase,
02215     size_t              *recsize,
02216     GError              **err);
02217 
02231 gboolean            fBufNextMessage(
02232     fBuf_t              *fbuf,
02233     GError              **err);
02234 
02242 uint32_t            fBufGetExportTime(
02243     fBuf_t              *fbuf);
02244 
02264 fbTemplate_t    *fBufGetCollectionTemplate(
02265     fBuf_t          *fbuf,
02266     uint16_t        *ext_tid);
02267 
02286 fbTemplate_t    *fBufNextCollectionTemplate(
02287     fBuf_t          *fbuf,
02288     uint16_t        *ext_tid,
02289     GError          **err);
02290 
02302 fbInfoModel_t       *fbInfoModelAlloc(void);
02303 
02312 void                fbInfoModelFree(
02313     fbInfoModel_t       *model);
02314 
02329 void                fbInfoModelAddElement(
02330     fbInfoModel_t       *model,
02331     fbInfoElement_t     *ie);
02332 
02347 void                fbInfoModelAddElementArray(
02348     fbInfoModel_t       *model,
02349     fbInfoElement_t     *ie);
02350 
02362 const fbInfoElement_t     *fbInfoModelGetElementByName(
02363     fbInfoModel_t       *model,
02364     const char          *name);
02365 
02378 const fbInfoElement_t    *fbInfoModelGetElementByID(
02379     fbInfoModel_t       *model,
02380     uint16_t            id,
02381     uint32_t            ent);
02382 
02400 fbTemplate_t        *fbTemplateAlloc(
02401     fbInfoModel_t       *model);
02402 
02419 gboolean            fbTemplateAppend(
02420     fbTemplate_t        *tmpl,
02421     fbInfoElement_t     *ex_ie,
02422     GError              **err);
02423 
02439 gboolean            fbTemplateAppendSpec(
02440     fbTemplate_t        *tmpl,
02441     fbInfoElementSpec_t *spec,
02442     uint32_t            flags,
02443     GError              **err);
02444 
02462 gboolean            fbTemplateAppendSpecArray(
02463     fbTemplate_t        *tmpl,
02464     fbInfoElementSpec_t *spec,
02465     uint32_t            flags,
02466     GError              **err);
02467 
02475 uint32_t            fbTemplateCountElements(
02476     fbTemplate_t        *tmpl);
02477 
02487 void                fbTemplateSetOptionsScope(
02488     fbTemplate_t        *tmpl,
02489     uint16_t            scope_count);
02490 
02498 uint32_t            fbTemplateGetOptionsScope(
02499     fbTemplate_t        *tmpl);
02500 
02512 gboolean           fbTemplateContainsElement(
02513     fbTemplate_t            *tmpl,
02514     const fbInfoElement_t   *ex_ie);
02515 
02525 gboolean           fbTemplateContainsElementByName(
02526     fbTemplate_t        *tmpl,
02527     fbInfoElementSpec_t *spec);
02528 
02538 gboolean           fbTemplateContainsAllElementsByName(
02539     fbTemplate_t        *tmpl,
02540     fbInfoElementSpec_t *spec);
02541 
02549 void                fbTemplateFreeUnused(
02550     fbTemplate_t        *tmpl);
02551 
02565 fbSession_t         *fbSessionAlloc(
02566     fbInfoModel_t       *model);
02567 
02581 void fbSessionAddTemplateCallback(
02582     fbSession_t                *session,
02583     fbNewTemplateCallback_fn    callback);
02584 
02596 void fbSessionAddTemplatePair(
02597     fbSession_t    *session,
02598     uint16_t        ent_tid,
02599     uint16_t        int_tid);
02600 
02610 void fbSessionRemoveTemplatePair(
02611     fbSession_t    *session,
02612     uint16_t        ext_tid);
02613 
02622 uint16_t    fbSessionLookupTemplatePair(
02623     fbSession_t    *session,
02624     uint16_t        ext_tid);
02625 
02635 void                fbSessionFree(
02636     fbSession_t         *session);
02637 
02650 void                fbSessionResetExternal(
02651     fbSession_t         *session);
02652 
02668 void                fbSessionSetDomain(
02669     fbSession_t         *session,
02670     uint32_t            domain);
02671 
02679 uint32_t            fbSessionGetDomain(
02680     fbSession_t         *session);
02681 
02682 #if HAVE_SPREAD
02683 
02704 gboolean        fbSessionAddTemplatesMulticast(
02705     fbSession_t      *session,
02706     char             **groups,
02707     gboolean         internal,
02708     uint16_t         tid,
02709     fbTemplate_t     *tmpl,
02710     GError           **err);
02711 
02712 #endif
02713 
02726 gboolean            fbSessionExportTemplate(
02727     fbSession_t         *session,
02728     uint16_t            tid,
02729     GError              **err);
02730 
02742 gboolean            fbSessionExportTemplates(
02743     fbSession_t         *session,
02744     GError              **err);
02745 
02761 uint16_t            fbSessionAddTemplate(
02762     fbSession_t         *session,
02763     gboolean            internal,
02764     uint16_t            tid,
02765     fbTemplate_t        *tmpl,
02766     GError              **err);
02767 
02780 gboolean            fbSessionRemoveTemplate(
02781     fbSession_t         *session,
02782     gboolean            internal,
02783     uint16_t            tid,
02784     GError              **err);
02785 
02797 fbTemplate_t        *fbSessionGetTemplate(
02798     fbSession_t         *session,
02799     gboolean            internal,
02800     uint16_t            tid,
02801     GError              **err);
02802 
02815 fbExporter_t        *fbExporterAllocNet(
02816     fbConnSpec_t        *spec);
02817 
02818 #if HAVE_SPREAD
02819 
02830 int fbCollectorGetSpreadReturnGroups(
02831     fbCollector_t *collector,
02832     char *groups[]);
02833 
02847 fbExporter_t        *fbExporterAllocSpread(
02848     fbSpreadParams_t      *params );
02849 
02850 #endif /* HAVE_SPREAD */
02851 
02863 fbExporter_t        *fbExporterAllocFile(
02864     const char          *path);
02865 
02874 fbExporter_t        *fbExporterAllocFP(
02875     FILE                *fp);
02876 
02889 void                fbExporterSetStream(
02890     fbExporter_t        *exporter,
02891     int                 sctp_stream);
02892 
02905 void                fbExporterAutoStream(
02906     fbExporter_t        *exporter);
02907 
02915 void                fbExporterClose(
02916     fbExporter_t       *exporter);
02917 
02930 fbCollector_t       *fbCollectorAllocFile(
02931     void                *ctx,
02932     const char          *path,
02933     GError              **err);
02934 
02945 fbCollector_t       *fbCollectorAllocFP(
02946     void                *ctx,
02947     FILE                *fp);
02948 
02949 
02950 #ifdef HAVE_SPREAD
02951 
02961 fbCollector_t       *fbCollectorAllocSpread (
02962     void                *ctx,
02963     fbSpreadParams_t    *params,
02964     GError              **err );
02965 
02966 #endif /* HAVE_SPREAD */
02967 
02978 void                *fbCollectorGetContext(
02979     fbCollector_t       *collector);
02980 
02991 void                fbCollectorClose(
02992     fbCollector_t       *collector);
02993 
02994 
03006 void                fbCollectorSetAcceptOnly(
03007     fbCollector_t       *collector,
03008     struct sockaddr     *address,
03009     size_t              address_length);
03010 
03036 fbListener_t        *fbListenerAlloc(
03037     fbConnSpec_t            *spec,
03038     fbSession_t             *session,
03039     fbListenerAppInit_fn    appinit,
03040     fbListenerAppFree_fn    appfree,
03041     GError                  **err);
03042 
03050 void                fbListenerFree(
03051     fbListener_t            *listener);
03052 
03074 fBuf_t              *fbListenerWait(
03075     fbListener_t            *listener,
03076     GError                  **err);
03077 
03088 fBuf_t              *fbListenerWaitNoCollectors(
03089     fbListener_t            *listener,
03090     GError                  **err);
03091 
03099 void                fbListenerInterrupt(
03100     fbListener_t            *listener);
03101 
03102 
03118 gboolean            fbListenerGetCollector(
03119     fbListener_t        *listener,
03120     fbCollector_t       **collector,
03121     GError              **err);
03122 
03123 
03124 
03125 
03141 gboolean    fbCollectorClearTranslator(
03142     fbCollector_t   *collector,
03143     GError          **err);
03144 
03145 
03161 gboolean    fbCollectorSetNetflowV9Translator(
03162     fbCollector_t               *collector,
03163     GError                      **err);
03164 
03171 struct sockaddr* fbCollectorGetPeer(
03172     fbCollector_t   *collector);
03173 
03180 uint32_t fbCollectorGetObservationDomain(
03181     fbCollector_t  *collector);
03182 
03195 void fbCollectorSetUDPMultiSession(
03196     fbCollector_t *collector,
03197     gboolean       multi_session);
03198 
03213 void fbCollectorManageUDPStreamByPort(
03214     fbCollector_t *collector,
03215     gboolean       manage_port);
03216 
03217 #ifdef __cplusplus
03218 } /* extern "C" */
03219 #endif
03220 
03221 #endif
© 2006-2012 Carnegie Mellon University