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-2011 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 Public License (GPL) Rights pursuant to Version 2, June 1991
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 
00418 #ifndef _FB_PUBLIC_H_
00419 #define _FB_PUBLIC_H_
00420 #include <fixbuf/autoinc.h>
00421 
00422 #ifdef __cplusplus
00423 extern "C" {
00424 #endif
00425 
00426 #ident "$Id: public.h 17705 2011-09-08 14:05:36Z ecoff_svn $"
00427 
00428 /* 
00429  * Error Handling Definitions
00430  */
00431 
00433 #define FB_ERROR_DOMAIN             g_quark_from_string("fixbufError")
00434 
00435 #define FB_ERROR_TMPL               1
00436 
00440 #define FB_ERROR_EOM                2
00441 
00446 #define FB_ERROR_EOF                3
00447 
00451 #define FB_ERROR_IPFIX              4
00452 
00457 #define FB_ERROR_BUFSZ              5
00458 
00459 #define FB_ERROR_IMPL               6
00460 
00461 #define FB_ERROR_IO                 7
00462 
00466 #define FB_ERROR_NLREAD             8
00467 
00472 #define FB_ERROR_NLWRITE            9
00473 
00476 #define FB_ERROR_NOELEMENT          10
00477 
00480 #define FB_ERROR_CONN               11
00481 
00485 #define FB_ERROR_NETFLOWV9          12
00486 
00489 #define FB_ERROR_TRANSMISC          13
00490 
00491 /*
00492  * Public Datatypes and Constants
00493  */
00494  
00495 struct fBuf_st;
00501 typedef struct fBuf_st fBuf_t;
00502 
00509 typedef struct fbVarfield_st {
00511     size_t      len;
00518     uint8_t     *buf;
00519 } fbVarfield_t;
00520 
00521 
00522 struct fbInfoModel_st;
00527 typedef struct fbInfoModel_st fbInfoModel_t;
00528 
00534 #define FB_IE_INIT(_name_, _ent_, _num_, _len_, _flags_) \
00535     { {.name = _name_}, 0, _ent_, _num_, _len_, _flags_ }
00536 
00542 #define FB_IE_NULL \
00543     { {.name = NULL}, 0, 0, 0, 0, 0 }
00544 
00549 #define FB_IE_F_NONE                            0x00000000
00550 
00555 #define FB_IE_F_ENDIAN                          0x00000001
00556 
00566 #define FB_IE_F_REVERSIBLE                      0x00000040
00567 
00575 #define FB_IE_F_ALIEN                           0x00000080
00576 
00580 #define FB_IE_VARLEN                            65535
00581 
00586 #define FB_IE_BASIC_LIST                        0x7FFD
00587 
00591 #define FB_IE_SUBTEMPLATE_LIST                  0x7FFE
00592 
00596 #define FB_IE_SUBTEMPLATE_MULTILIST             0x7FFF
00597 
00605 #define FB_IE_PEN_REVERSE                       29305
00606 
00615 #define FB_IE_VENDOR_BIT_REVERSE                0x4000
00616 
00622 #define FB_IE_REVERSE_STR                       "reverse"
00623 
00625 #define FB_IE_REVERSE_STRLEN                    7
00626 
00635 typedef struct fbInfoElement_st {
00637     union {
00643         const struct fbInfoElement_st *canon;
00648         char                    *name;
00649     }  ref;
00650 
00656     uint32_t            midx;
00658     uint32_t            ent;
00663     uint16_t            num;
00665     uint16_t            len;
00667     uint32_t            flags;
00668 } fbInfoElement_t;
00669 
00674 #define FB_TID_AUTO         0
00675 
00679 #define FB_TID_TS           2
00680 
00684 #define FB_TID_OTS          3
00685 
00689 #define FB_TID_MIN_DATA     256
00690 
00691 struct fbTemplate_st;
00697 typedef struct fbTemplate_st fbTemplate_t;
00698 
00704 #define FB_IESPEC_NULL { NULL, 0, 0 }
00705 
00711 typedef struct fbInfoElementSpec_st {
00713     char                *name;
00718     uint16_t            len_override;
00725     uint32_t            flags;
00726 } fbInfoElementSpec_t;
00727 
00728 struct fbSession_st;
00735 typedef struct fbSession_st fbSession_t;
00736 
00738 typedef enum fbTransport_en {
00743     FB_SCTP,
00745     FB_TCP,
00747     FB_UDP,
00753     FB_DTLS_SCTP,
00758     FB_TLS_TCP,
00764     FB_DTLS_UDP,
00765 } fbTransport_t;
00766 
00771 typedef struct fbConnSpec_st {
00773     fbTransport_t       transport;
00775     char                *host;
00777     char                *svc;
00779     char                *ssl_ca_file;
00781     char                *ssl_cert_file;
00783     char                *ssl_key_file;
00785     char                *ssl_key_pass;
00790     void                *vai;
00795     void                *vssl_ctx;
00796 } fbConnSpec_t;
00797 
00801 #define FB_CONNSPEC_INIT { FB_SCTP, NULL, NULL,         \
00802                            NULL, NULL, NULL, NULL,      \
00803                            NULL, NULL }
00804 
00805 #if HAVE_SPREAD
00806 
00811 #define FB_SPREADPARAMS_INIT { 0, 0, 0 }
00812 
00813 typedef struct fbSpreadParams_st {
00816     fbSession_t * session;
00819     char *          daemon;
00822     char **         groups;
00823 } fbSpreadParams_t;
00824 
00825 #endif /* HAVE_SPREAD */
00826 
00827 struct fbExporter_st;
00833 typedef struct fbExporter_st fbExporter_t;
00834 
00835 struct fbCollector_st;
00843 typedef struct fbCollector_st fbCollector_t;
00844 
00845 struct fbListener_st;
00852 typedef struct fbListener_st fbListener_t;
00853 
00857 typedef struct fbListenerEntry_st fbListenerEntry_t;
00858 
00862 struct fbListenerEntry_st
00863 {
00865     fbListenerEntry_t  *next;
00867     fbListenerEntry_t  *prev;
00869     fbListener_t       *listener;
00870 };
00871 
00875 typedef struct fbListenerGroupResult_st fbListenerGroupResult_t;
00876 
00882 struct fbListenerGroupResult_st
00883 {
00885     fbListenerGroupResult_t *next;
00887     fbListener_t    *listener;
00889     fBuf_t          *fbuf;
00890 };
00891 
00895 typedef struct fbListenerGroup_st
00896 {
00898     fbListenerEntry_t   *head;
00900     void                *tableForDescriptorsToListeners;
00901 } fbListenerGroup_t;
00902 
00915 typedef gboolean (*fbAcceptCallback_fn) (
00916     fBuf_t                     *buf,
00917     fbListener_t               *listener,
00918     struct sockaddr            *sAddr,
00919     GError                    **err);
00920 
00931 typedef void (*fbNewTemplateCallback_fn) (
00932     fbSession_t    *session,
00933     uint16_t        tid,
00934     fbTemplate_t   *tmpl);
00935 
00939 #define UNDEFINED       0xFF
00940 
00943 #define NONE_OF         0x00
00944 
00947 #define EXACTLY_ONE_OF  0x01
00948 
00951 #define ONE_OR_MORE_OF  0x02
00952 
00955 #define ALL_OF          0x03
00956 
00959 #define ORDERED         0x04
00960 
00967 gboolean fbListValidSemantic(
00968     uint8_t semantic);
00969 
00970 /****** BASICLIST FUNCTIONS AND STRUCTS *******/
00976 typedef struct fbBasicList_st {
00978     uint8_t                 semantic;
00980     uint16_t                numElements;
00982     uint16_t                dataLength;
00984     const fbInfoElement_t  *infoElement;
00986     uint8_t                *dataPtr;
00987 } fbBasicList_t;
00988 
00989 
00995 fbBasicList_t*  fbBasicListAlloc(
00996     void);
00997 
01010 void* fbBasicListInit(
01011     fbBasicList_t          *basicListPtr,
01012     uint8_t                 semantic,
01013     const fbInfoElement_t  *infoElement,
01014     uint16_t                numElements);
01015 
01030 void* fbBasicListInitWithOwnBuffer(
01031     fbBasicList_t          *basicListPtr,
01032     uint8_t                 semantic,
01033     const fbInfoElement_t  *infoElement,
01034     uint16_t                numElements,
01035     uint16_t                dataLength,
01036     uint8_t                *dataPtr);
01037 
01050 void fbBasicListCollectorInit(
01051     fbBasicList_t  *basicListPtr);
01052 
01053 
01061 uint8_t fbBasicListGetSemantic(
01062     fbBasicList_t  *basicListPtr);
01063 
01072 void fbBasicListSetSemantic(
01073     fbBasicList_t  *basicListPtr,
01074     uint8_t         semantic);
01075 
01076 
01084 const fbInfoElement_t*  fbBasicListGetInfoElement(
01085      fbBasicList_t  *basicListPtr);
01086 
01092 void* fbBasicListGetDataPtr(
01093     fbBasicList_t   *basicListPtr);
01094 
01103 void* fbBasicListGetIndexedDataPtr(
01104     fbBasicList_t   *basicListPtr,
01105     uint16_t         index);
01106 
01115 void* fbBasicListGetNextPtr(
01116     fbBasicList_t   *basicListPtr,
01117     void            *currentPtr);
01118 
01128 void* fbBasicListRealloc(
01129     fbBasicList_t  *basicList,
01130     uint16_t        newNumElements);
01131 
01139 void* fbBasicListAddNewElements(
01140     fbBasicList_t  *basicList,
01141     uint16_t        numNewElements);
01142 
01148 void fbBasicListClear(
01149     fbBasicList_t  *basicListPtr);
01150 
01157 void fbBasicListClearWithoutFree(
01158     fbBasicList_t  *basicList);
01159 
01165 void fbBasicListFree(
01166     fbBasicList_t  *basicListPtr);
01167 
01168 /******* END OF BASICLIST ********/
01169 
01170 
01171 
01172 /******* SUBTEMPLATELIST FUNCTIONS ****/
01173 
01181 typedef struct fbSubTemplateList_st {
01183     uint8_t             semantic;
01185     uint16_t            tmplID;
01187     uint16_t            numElements;
01189     const fbTemplate_t *tmpl;
01192     union {
01193     size_t              length;
01194     uint64_t            extra;
01195     } dataLength;
01197     uint8_t            *dataPtr;
01198 } fbSubTemplateList_t;
01199 
01206 fbSubTemplateList_t* fbSubTemplateListAlloc(
01207     void);
01208 
01221 void*  fbSubTemplateListInit(
01222     fbSubTemplateList_t    *sTL,
01223     uint8_t                 semantic,
01224     uint16_t                tmplID,
01225     const fbTemplate_t     *tmpl,
01226     uint16_t                numElements);
01227 
01242 void* fbSubTemplateListInitWithOwnBuffer(
01243     fbSubTemplateList_t    *subTemplateList,
01244     uint8_t                 semantic,
01245     uint16_t                tmplID,
01246     const fbTemplate_t     *tmpl,
01247     uint16_t                numElements,
01248     uint16_t                dataLength,
01249     uint8_t                *dataPtr);
01250 
01261 void fbSubTemplateListCollectorInit(
01262     fbSubTemplateList_t    *STL);
01263 
01269 void* fbSubTemplateListGetDataPtr(
01270     const fbSubTemplateList_t  *subTemplateListPtr);
01271 
01279 void* fbSubTemplateListGetIndexedDataPtr(
01280     const fbSubTemplateList_t  *subTemplateListPtr,
01281     uint16_t                    index);
01282 
01294 void* fbSubTemplateListGetNextPtr(
01295     const fbSubTemplateList_t  *subTemplateListPtr,
01296     void                       *currentPtr);
01297 
01304 void fbSubTemplateListSetSemantic(
01305     fbSubTemplateList_t    *subTemplateListPtr,
01306     uint8_t                 semantic);
01307 
01313 uint8_t fbSubTemplateListGetSemantic(
01314     fbSubTemplateList_t    *subTemplateListPtr);
01315 
01321 const fbTemplate_t* fbSubTemplateListGetTemplate(
01322     fbSubTemplateList_t    *subTemplateListPtr);
01323 
01329 uint16_t fbSubTemplateListGetTemplateID(
01330     fbSubTemplateList_t    *subTemplateListPtr);
01331 
01342 void* fbSubTemplateListRealloc(
01343     fbSubTemplateList_t    *subTemplateList,
01344     uint16_t                newNumElements);
01345 
01354 void* fbSubTemplateListAddNewElements(
01355     fbSubTemplateList_t    *subTemplateList,
01356     uint16_t                numNewElements);
01357 
01371 void fbSubTemplateListClear(
01372     fbSubTemplateList_t    *subTemplateListPtr);
01373 
01382 void fbSubTemplateListClearWithoutFree(
01383     fbSubTemplateList_t    *subTemplateListPtr);
01384 
01392 void fbSubTemplateListFree(
01393     fbSubTemplateList_t    *subTemplateListPtr);    
01394 
01395 /********* END OF SUBTEMPLATELIST **********/
01413 typedef struct fbSubTemplateMultiListEntry_st {
01415     uint16_t        tmplID;
01417     uint16_t        numElements;
01419     fbTemplate_t   *tmpl;
01421     size_t          dataLength;
01423     uint8_t        *dataPtr;
01424 } fbSubTemplateMultiListEntry_t;
01425 
01430 typedef struct fbSubTemplateMultiList_st {
01432     uint8_t                         semantic;
01434     uint16_t                        numElements;
01436     fbSubTemplateMultiListEntry_t  *firstEntry;
01437 } fbSubTemplateMultiList_t;
01438 
01448 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListInit(
01449     fbSubTemplateMultiList_t   *STML,
01450     uint8_t                     semantic,
01451     uint16_t                    numElements);
01452 
01459 void fbSubTemplateMultiListSetSemantic(
01460     fbSubTemplateMultiList_t   *STML,
01461     uint8_t                     semantic);
01462 
01468 uint8_t fbSubTemplateMultiListGetSemantic(
01469     fbSubTemplateMultiList_t   *STML);
01470 
01477 void fbSubTemplateMultiListClear(
01478     fbSubTemplateMultiList_t   *STML);
01479 
01489 void fbSubTemplateMultiListClearEntries(
01490     fbSubTemplateMultiList_t   *STML);
01491 
01497 void fbSubTemplateMultiListFree(
01498     fbSubTemplateMultiList_t   *STML);
01499 
01509 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListRealloc(
01510     fbSubTemplateMultiList_t   *STML,
01511     uint16_t                    newNumEntries);
01512 
01521 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListAddNewEntries(
01522     fbSubTemplateMultiList_t   *STML,
01523     uint16_t                    numNewEntries);
01524 
01530 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetFirstEntry(
01531     fbSubTemplateMultiList_t   *STML);
01532 
01540 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetIndexedEntry(
01541     fbSubTemplateMultiList_t   *STML,
01542     uint16_t                    index);
01543 
01555 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetNextEntry(
01556     fbSubTemplateMultiList_t       *STML,
01557     fbSubTemplateMultiListEntry_t  *currentEntry);
01558 
01570 void* fbSubTemplateMultiListEntryInit(
01571     fbSubTemplateMultiListEntry_t  *entry,
01572     uint16_t                        tmplID,
01573     fbTemplate_t                   *tmpl,
01574     uint16_t                        numElements);
01575 
01586 void *fbSubTemplateMultiListEntryRealloc(
01587     fbSubTemplateMultiListEntry_t  *entry,
01588     uint16_t                        newNumElements);
01589 
01596 void fbSubTemplateMultiListEntryClear(
01597     fbSubTemplateMultiListEntry_t   *entry);
01598 
01605 void* fbSubTemplateMultiListEntryGetDataPtr(
01606     fbSubTemplateMultiListEntry_t   *entry);
01607 
01619 void* fbSubTemplateMultiListEntryNextDataPtr(
01620     fbSubTemplateMultiListEntry_t   *entry,
01621     void                            *currentPtr);
01622 
01633 void* fbSubTemplateMultiListEntryGetIndexedPtr(
01634     fbSubTemplateMultiListEntry_t   *entry,
01635     uint16_t                         index);
01636 
01643 const fbTemplate_t* fbSubTemplateMultiListEntryGetTemplate(
01644     fbSubTemplateMultiListEntry_t   *entry);
01645 
01652 uint16_t fbSubTemplateMultiListEntryGetTemplateID(
01653     fbSubTemplateMultiListEntry_t   *entry);
01654 
01655 /************** END OF STML FUNCTIONS */
01656 
01662 fbListenerGroup_t* fbListenerGroupAlloc(
01663     void);
01664 
01674 int fbListenerGroupAddListener(
01675     fbListenerGroup_t          *group,
01676     const fbListener_t         *listener);
01677 
01687 int fbListenerGroupDeleteListener(
01688     fbListenerGroup_t          *group,
01689     const fbListener_t         *listener);
01690 
01701 fbListenerGroupResult_t* fbListenerGroupWait(
01702     fbListenerGroup_t          *group,
01703     GError                     **err);
01704 
01715 gboolean fbListenerWaitAcceptCallback(
01716     fbListener_t           *listener,
01717     fbAcceptCallback_fn     callback,
01718     GError                **err);
01719 
01732 gboolean fbListenerGroupWaitAcceptCallback(
01733     fbListenerGroup_t   *group,
01734     fbAcceptCallback_fn  callback,
01735     GError             **err);
01736 
01749 fBuf_t  *fbListenerOwnSocketCollectorTCP(
01750     fbListener_t   *listener,
01751     int             sock,
01752     GError        **err);
01753 
01763 fBuf_t  *fbListenerOwnSocketCollectorTLS(
01764     fbListener_t   *listener,
01765     int             sock,
01766     GError        **err);
01767 
01773 void    fBufInterruptSocket(
01774     fBuf_t         *fbuf);
01775 
01776  
01786 typedef gboolean        (*fbListenerAppInit_fn) (
01787     fbListener_t                *listener,
01788     void                        **ctx,
01789     int                         fd,
01790     struct sockaddr             *peer,
01791     size_t                      peerlen,
01792     GError                      **err);
01793 
01798 typedef void            (*fbListenerAppFree_fn) (
01799     void                        *ctx);
01800 
01801 /*
01802  * Public Function Calls. These calls will remain available and retain 
01803  * their functionality in all subsequent versions of libfixbuf.
01804  */
01805 
01806 
01823 gboolean            fBufSetInternalTemplate(
01824     fBuf_t              *fbuf,
01825     uint16_t            int_tid,
01826     GError              **err);
01827 
01845 gboolean            fBufSetExportTemplate(
01846     fBuf_t              *fbuf,
01847     uint16_t            ext_tid,
01848     GError              **err);
01849 
01850 #if HAVE_SPREAD
01851 
01868 void                 fBufSetSpreadExportGroup(
01869     fBuf_t             *fbuf,
01870     char               **groups,
01871     int                num_groups,
01872     GError             **err);
01873 #endif
01874 
01889 void                fBufSetAutomaticMode(
01890     fBuf_t              *fbuf,
01891     gboolean            automatic);
01892 
01900 fbSession_t         *fBufGetSession(
01901     fBuf_t              *fbuf);
01902 
01911 void                fBufFree(
01912     fBuf_t              *fbuf);
01913 
01926 fBuf_t              *fBufAllocForExport(
01927     fbSession_t         *session,
01928     fbExporter_t        *exporter);
01929 
01939 fbExporter_t        *fBufGetExporter(
01940     fBuf_t              *fbuf);
01941 
01952 void                fBufSetExporter(
01953     fBuf_t              *fbuf,
01954     fbExporter_t        *exporter);
01955 
01956 
01980 gboolean            fBufAppend(
01981     fBuf_t              *fbuf,
01982     uint8_t             *recbase,
01983     size_t              recsize,
01984     GError              **err);
01985 
01995 gboolean            fBufEmit(
01996     fBuf_t              *fbuf,
01997     GError              **err);
01998 
02010 void                fBufSetExportTime(
02011     fBuf_t              *fbuf,
02012     uint32_t            extime);
02013 
02026 fBuf_t              *fBufAllocForCollection(
02027     fbSession_t         *session,
02028     fbCollector_t       *collector);
02029     
02039 fbCollector_t       *fBufGetCollector(
02040     fBuf_t              *fbuf);
02041 
02052 void                fBufSetCollector(
02053     fBuf_t              *fbuf,
02054     fbCollector_t       *collector);
02055 
02085 gboolean            fBufNext(
02086     fBuf_t              *fbuf,
02087     uint8_t             *recbase,
02088     size_t              *recsize,
02089     GError              **err);
02090 
02104 gboolean            fBufNextMessage(
02105     fBuf_t              *fbuf,
02106     GError              **err);
02107     
02115 uint32_t            fBufGetExportTime(
02116     fBuf_t              *fbuf);
02117 
02137 fbTemplate_t    *fBufGetCollectionTemplate(
02138     fBuf_t          *fbuf,
02139     uint16_t        *ext_tid);
02140 
02159 fbTemplate_t    *fBufNextCollectionTemplate(
02160     fBuf_t          *fbuf,
02161     uint16_t        *ext_tid,
02162     GError          **err);
02163 
02175 fbInfoModel_t       *fbInfoModelAlloc();
02176 
02185 void                fbInfoModelFree(
02186     fbInfoModel_t       *model);
02187 
02202 void                fbInfoModelAddElement(
02203     fbInfoModel_t       *model,
02204     fbInfoElement_t     *ie);
02205 
02220 void                fbInfoModelAddElementArray(
02221     fbInfoModel_t       *model,
02222     fbInfoElement_t     *ie);
02223 
02235 const fbInfoElement_t     *fbInfoModelGetElementByName(
02236     fbInfoModel_t       *model,
02237     const char          *name);
02238 
02251 const fbInfoElement_t    *fbInfoModelGetElementByID(
02252     fbInfoModel_t       *model,
02253     uint16_t            id,
02254     uint32_t            ent);
02255 
02273 fbTemplate_t        *fbTemplateAlloc(
02274     fbInfoModel_t       *model);
02275 
02292 gboolean            fbTemplateAppend(
02293     fbTemplate_t        *tmpl,
02294     fbInfoElement_t     *ex_ie,
02295     GError              **err);
02296 
02312 gboolean            fbTemplateAppendSpec(
02313     fbTemplate_t        *tmpl,
02314     fbInfoElementSpec_t *spec,
02315     uint32_t            flags,
02316     GError              **err);
02317 
02335 gboolean            fbTemplateAppendSpecArray(
02336     fbTemplate_t        *tmpl,
02337     fbInfoElementSpec_t *spec,
02338     uint32_t            flags,
02339     GError              **err);
02340 
02348 uint32_t            fbTemplateCountElements(
02349     fbTemplate_t        *tmpl);
02350 
02360 void                fbTemplateSetOptionsScope(
02361     fbTemplate_t        *tmpl,
02362     uint16_t            scope_count);
02363 
02371 uint32_t            fbTemplateGetOptionsScope(
02372     fbTemplate_t        *tmpl);
02373 
02385 gboolean           fbTemplateContainsElement(
02386     fbTemplate_t            *tmpl,
02387     const fbInfoElement_t   *ex_ie);
02388 
02398 gboolean           fbTemplateContainsElementByName(
02399     fbTemplate_t        *tmpl,
02400     fbInfoElementSpec_t *spec);
02401 
02411 gboolean           fbTemplateContainsAllElementsByName(
02412     fbTemplate_t        *tmpl,
02413     fbInfoElementSpec_t *spec);
02414 
02422 void                fbTemplateFreeUnused(
02423     fbTemplate_t        *tmpl);
02424 
02438 fbSession_t         *fbSessionAlloc(
02439     fbInfoModel_t       *model);
02440 
02454 void fbSessionAddTemplateCallback(
02455     fbSession_t                *session,
02456     fbNewTemplateCallback_fn    callback);
02457 
02469 void fbSessionAddTemplatePair(
02470     fbSession_t    *session,
02471     uint16_t        ent_tid,
02472     uint16_t        int_tid);
02473 
02483 void fbSessionRemoveTemplatePair(
02484     fbSession_t    *session,
02485     uint16_t        ext_tid);
02486 
02495 uint16_t    fbSessionLookupTemplatePair(
02496     fbSession_t    *session,
02497     uint16_t        ext_tid);
02498 
02508 void                fbSessionFree(
02509     fbSession_t         *session);
02510 
02523 void                fbSessionResetExternal(
02524     fbSession_t         *session);
02525 
02541 void                fbSessionSetDomain(
02542     fbSession_t         *session,
02543     uint32_t            domain);
02544 
02552 uint32_t            fbSessionGetDomain(
02553     fbSession_t         *session);
02554 
02555 #if HAVE_SPREAD
02556 
02577 gboolean        fbSessionAddTemplatesMulticast(
02578     fbSession_t      *session,
02579     char             **groups,
02580     gboolean         internal,
02581     uint16_t         tid,
02582     fbTemplate_t     *tmpl,
02583     GError           **err);
02584 
02585 #endif
02586 
02599 gboolean            fbSessionExportTemplate(
02600     fbSession_t         *session,
02601     uint16_t            tid,
02602     GError              **err);
02603 
02615 gboolean            fbSessionExportTemplates(
02616     fbSession_t         *session,
02617     GError              **err);
02618 
02634 uint16_t            fbSessionAddTemplate(
02635     fbSession_t         *session,
02636     gboolean            internal,
02637     uint16_t            tid,
02638     fbTemplate_t        *tmpl,
02639     GError              **err);
02640 
02653 gboolean            fbSessionRemoveTemplate(
02654     fbSession_t         *session,
02655     gboolean            internal,
02656     uint16_t            tid,
02657     GError              **err);
02658 
02670 fbTemplate_t        *fbSessionGetTemplate(
02671     fbSession_t         *session,
02672     gboolean            internal,
02673     uint16_t            tid,
02674     GError              **err);
02675 
02688 fbExporter_t        *fbExporterAllocNet(
02689     fbConnSpec_t        *spec);
02690 
02691 #if HAVE_SPREAD
02692 
02703 int fbCollectorGetSpreadReturnGroups(
02704     fbCollector_t *collector,
02705     char *groups[]);
02706 
02720 fbExporter_t        *fbExporterAllocSpread(
02721     fbSpreadParams_t      *params );
02722 
02723 #endif /* HAVE_SPREAD */
02724 
02736 fbExporter_t        *fbExporterAllocFile(
02737     const char          *path);
02738 
02747 fbExporter_t        *fbExporterAllocFP(
02748     FILE                *fp);
02749     
02762 void                fbExporterSetStream(
02763     fbExporter_t        *exporter,
02764     int                 sctp_stream);
02765 
02778 void                fbExporterAutoStream(
02779     fbExporter_t        *exporter);
02780 
02788 void                fbExporterClose(
02789     fbExporter_t       *exporter);
02790 
02803 fbCollector_t       *fbCollectorAllocFile(
02804     void                *ctx,
02805     const char          *path,
02806     GError              **err);
02807 
02818 fbCollector_t       *fbCollectorAllocFP(
02819     void                *ctx,
02820     FILE                *fp);
02821 
02822 
02823 #ifdef HAVE_SPREAD
02824 
02834 fbCollector_t       *fbCollectorAllocSpread (
02835     void                *ctx,
02836     fbSpreadParams_t    *params,
02837     GError              **err );
02838 
02839 #endif /* HAVE_SPREAD */
02840 
02851 void                *fbCollectorGetContext(
02852     fbCollector_t       *collector);
02853 
02864 void                fbCollectorClose(
02865     fbCollector_t       *collector);
02866 
02867 
02868 
02894 fbListener_t        *fbListenerAlloc(
02895     fbConnSpec_t            *spec,
02896     fbSession_t             *session,
02897     fbListenerAppInit_fn    appinit,
02898     fbListenerAppFree_fn    appfree,
02899     GError                  **err);
02900 
02908 void                fbListenerFree(
02909     fbListener_t            *listener);
02910 
02932 fBuf_t              *fbListenerWait(
02933     fbListener_t            *listener,
02934     GError                  **err);
02935 
02946 fBuf_t              *fbListenerWaitNoCollectors(
02947     fbListener_t            *listener,
02948     GError                  **err);
02956 void                fbListenerInterrupt(
02957     fbListener_t            *listener);
02958 
02959 
02975 gboolean            fbListenerGetCollector(
02976     fbListener_t        *listener,
02977     fbCollector_t       **collector,
02978     GError              **err);
02979 
02980 
02981 
02982 
02998 gboolean    fbCollectorClearTranslator(
02999     fbCollector_t   *collector,
03000     GError          **err);
03001 
03002 
03018 gboolean    fbCollectorSetNetflowV9Translator(
03019     fbCollector_t               *collector,
03020     GError                      **err);
03021 
03028 struct sockaddr* fbCollectorGetPeer(
03029     fbCollector_t   *collector);
03030 
03031 
03032 
03033 #ifdef __cplusplus
03034 } /* extern "C" */
03035 #endif
03036 
03037 #endif
© 2006-2011 Carnegie Mellon University