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 
00420 #ifndef _FB_PUBLIC_H_
00421 #define _FB_PUBLIC_H_
00422 #include <fixbuf/autoinc.h>
00423 
00424 #ifdef __cplusplus
00425 extern "C" {
00426 #endif
00427 
00428 #ident "$Id: public.h 17098 2011-05-26 19:30:16Z ecoff_svn $"
00429 
00430 /* 
00431  * Error Handling Definitions
00432  */
00433 
00435 #define FB_ERROR_DOMAIN             g_quark_from_string("fixbufError")
00436 
00437 #define FB_ERROR_TMPL               1
00438 
00442 #define FB_ERROR_EOM                2
00443 
00448 #define FB_ERROR_EOF                3
00449 
00453 #define FB_ERROR_IPFIX              4
00454 
00459 #define FB_ERROR_BUFSZ              5
00460 
00461 #define FB_ERROR_IMPL               6
00462 
00463 #define FB_ERROR_IO                 7
00464 
00468 #define FB_ERROR_NLREAD             8
00469 
00474 #define FB_ERROR_NLWRITE            9
00475 
00478 #define FB_ERROR_NOELEMENT          10
00479 
00482 #define FB_ERROR_CONN               11
00483 
00487 #define FB_ERROR_NETFLOWV9          12
00488 
00491 #define FB_ERROR_TRANSMISC          13
00492 
00493 /*
00494  * Public Datatypes and Constants
00495  */
00496  
00497 struct fBuf_st;
00503 typedef struct fBuf_st fBuf_t;
00504 
00511 typedef struct fbVarfield_st {
00513     size_t      len;
00520     uint8_t     *buf;
00521 } fbVarfield_t;
00522 
00523 
00524 struct fbInfoModel_st;
00529 typedef struct fbInfoModel_st fbInfoModel_t;
00530 
00536 #define FB_IE_INIT(_name_, _ent_, _num_, _len_, _flags_) \
00537     { {.name = _name_}, 0, _ent_, _num_, _len_, _flags_ }
00538 
00544 #define FB_IE_NULL \
00545     { {.name = NULL}, 0, 0, 0, 0, 0 }
00546 
00551 #define FB_IE_F_NONE                            0x00000000
00552 
00557 #define FB_IE_F_ENDIAN                          0x00000001
00558 
00568 #define FB_IE_F_REVERSIBLE                      0x00000040
00569 
00577 #define FB_IE_F_ALIEN                           0x00000080
00578 
00582 #define FB_IE_VARLEN                            65535
00583 
00588 #define FB_IE_BASIC_LIST                        0x7FFD
00589 
00593 #define FB_IE_SUBTEMPLATE_LIST                  0x7FFE
00594 
00598 #define FB_IE_SUBTEMPLATE_MULTILIST             0x7FFF
00599 
00607 #define FB_IE_PEN_REVERSE                       29305
00608 
00617 #define FB_IE_VENDOR_BIT_REVERSE                0x4000
00618 
00624 #define FB_IE_REVERSE_STR                       "reverse"
00625 
00627 #define FB_IE_REVERSE_STRLEN                    7
00628 
00637 typedef struct fbInfoElement_st {
00639     union {
00645         const struct fbInfoElement_st *canon;
00650         char                    *name;
00651     }  ref;
00652 
00658     uint32_t            midx;
00660     uint32_t            ent;
00665     uint16_t            num;
00667     uint16_t            len;
00669     uint32_t            flags;
00670 } fbInfoElement_t;
00671 
00676 #define FB_TID_AUTO         0
00677 
00681 #define FB_TID_TS           2
00682 
00686 #define FB_TID_OTS          3
00687 
00691 #define FB_TID_MIN_DATA     256
00692 
00693 struct fbTemplate_st;
00699 typedef struct fbTemplate_st fbTemplate_t;
00700 
00706 #define FB_IESPEC_NULL { NULL, 0, 0 }
00707 
00713 typedef struct fbInfoElementSpec_st {
00715     char                *name;
00720     uint16_t            len_override;
00727     uint32_t            flags;
00728 } fbInfoElementSpec_t;
00729 
00730 struct fbSession_st;
00737 typedef struct fbSession_st fbSession_t;
00738 
00740 typedef enum fbTransport_en {
00745     FB_SCTP,
00747     FB_TCP,
00749     FB_UDP,
00755     FB_DTLS_SCTP,
00760     FB_TLS_TCP,
00766     FB_DTLS_UDP,
00767 } fbTransport_t;
00768 
00773 typedef struct fbConnSpec_st {
00775     fbTransport_t       transport;
00777     char                *host;
00779     char                *svc;
00781     char                *ssl_ca_file;
00783     char                *ssl_cert_file;
00785     char                *ssl_key_file;
00787     char                *ssl_key_pass;
00792     void                *vai;
00797     void                *vssl_ctx;
00798 } fbConnSpec_t;
00799 
00803 #define FB_CONNSPEC_INIT { FB_SCTP, NULL, NULL,         \
00804                            NULL, NULL, NULL, NULL,      \
00805                            NULL, NULL }
00806 
00807 #if HAVE_SPREAD
00808 
00813 #define FB_SPREADPARAMS_INIT { 0, 0, 0 }
00814 
00815 typedef struct fbSpreadParams_st {
00818     fbSession_t * session;
00821     char *          daemon;
00824     char **         groups;
00825 } fbSpreadParams_t;
00826 
00827 #endif /* HAVE_SPREAD */
00828 
00829 struct fbExporter_st;
00835 typedef struct fbExporter_st fbExporter_t;
00836 
00837 struct fbCollector_st;
00845 typedef struct fbCollector_st fbCollector_t;
00846 
00847 struct fbListener_st;
00854 typedef struct fbListener_st fbListener_t;
00855 
00859 typedef struct fbListenerEntry_st fbListenerEntry_t;
00860 
00864 struct fbListenerEntry_st
00865 {
00867     fbListenerEntry_t  *next;
00869     fbListenerEntry_t  *prev;
00871     fbListener_t       *listener;
00872 };
00873 
00877 typedef struct fbListenerGroupResult_st fbListenerGroupResult_t;
00878 
00884 struct fbListenerGroupResult_st
00885 {
00887     fbListenerGroupResult_t *next;
00889     fbListener_t    *listener;
00891     fBuf_t          *fbuf;
00892 };
00893 
00897 typedef struct fbListenerGroup_st
00898 {
00900     fbListenerEntry_t   *head;
00902     void                *tableForDescriptorsToListeners;
00903 } fbListenerGroup_t;
00904 
00917 typedef gboolean (*fbAcceptCallback_fn) (
00918     fBuf_t                     *buf,
00919     fbListener_t               *listener,
00920     struct sockaddr            *sAddr,
00921     GError                    **err);
00922 
00933 typedef void (*fbNewTemplateCallback_fn) (
00934     fbSession_t    *session,
00935     uint16_t        tid,
00936     fbTemplate_t   *tmpl);
00937 
00941 #define UNDEFINED       0xFF
00942 
00945 #define NONE_OF         0x00
00946 
00949 #define EXACTLY_ONE_OF  0x01
00950 
00953 #define ONE_OR_MORE_OF  0x02
00954 
00957 #define ALL_OF          0x03
00958 
00961 #define ORDERED         0x04
00962 
00969 gboolean fbListValidSemantic(
00970     uint8_t semantic);
00971 
00972 /****** BASICLIST FUNCTIONS AND STRUCTS *******/
00978 typedef struct fbBasicList_st {
00980     uint8_t                 semantic;
00982     uint16_t                numElements;
00984     uint16_t                dataLength;
00986     const fbInfoElement_t  *infoElement;
00988     uint8_t                *dataPtr;
00989 } fbBasicList_t;
00990 
00991 
00997 fbBasicList_t*  fbBasicListAlloc(
00998     void);
00999 
01012 void* fbBasicListInit(
01013     fbBasicList_t          *basicListPtr,
01014     uint8_t                 semantic,
01015     const fbInfoElement_t  *infoElement,
01016     uint16_t                numElements);
01017 
01032 void* fbBasicListInitWithOwnBuffer(
01033     fbBasicList_t          *basicListPtr,
01034     uint8_t                 semantic,
01035     const fbInfoElement_t  *infoElement,
01036     uint16_t                numElements,
01037     uint16_t                dataLength,
01038     uint8_t                *dataPtr);
01039 
01052 void fbBasicListCollectorInit(
01053     fbBasicList_t  *basicListPtr);
01054 
01055 
01063 uint8_t fbBasicListGetSemantic(
01064     fbBasicList_t  *basicListPtr);
01065 
01074 void fbBasicListSetSemantic(
01075     fbBasicList_t  *basicListPtr,
01076     uint8_t         semantic);
01077 
01078 
01086 const fbInfoElement_t*  fbBasicListGetInfoElement(
01087      fbBasicList_t  *basicListPtr);
01088 
01094 void* fbBasicListGetDataPtr(
01095     fbBasicList_t   *basicListPtr);
01096 
01105 void* fbBasicListGetIndexedDataPtr(
01106     fbBasicList_t   *basicListPtr,
01107     uint16_t         index);
01108 
01117 void* fbBasicListGetNextPtr(
01118     fbBasicList_t   *basicListPtr,
01119     void            *currentPtr);
01120 
01130 void* fbBasicListRealloc(
01131     fbBasicList_t  *basicList,
01132     uint16_t        newNumElements);
01133 
01141 void* fbBasicListAddNewElements(
01142     fbBasicList_t  *basicList,
01143     uint16_t        numNewElements);
01144 
01150 void fbBasicListClear(
01151     fbBasicList_t  *basicListPtr);
01152 
01159 void fbBasicListClearWithoutFree(
01160     fbBasicList_t  *basicList);
01161 
01167 void fbBasicListFree(
01168     fbBasicList_t  *basicListPtr);
01169 
01170 /******* END OF BASICLIST ********/
01171 
01172 
01173 
01174 /******* SUBTEMPLATELIST FUNCTIONS ****/
01175 
01183 typedef struct fbSubTemplateList_st {
01185     uint8_t             semantic;
01187     uint16_t            tmplID;
01189     uint16_t            numElements;
01191     const fbTemplate_t *tmpl;
01194     union {
01195     size_t              length;
01196     uint64_t            extra;
01197     } dataLength;
01199     uint8_t            *dataPtr;
01200 } fbSubTemplateList_t;
01201 
01208 fbSubTemplateList_t* fbSubTemplateListAlloc(
01209     void);
01210 
01223 void*  fbSubTemplateListInit(
01224     fbSubTemplateList_t    *sTL,
01225     uint8_t                 semantic,
01226     uint16_t                tmplID,
01227     const fbTemplate_t     *tmpl,
01228     uint16_t                numElements);
01229 
01244 void* fbSubTemplateListInitWithOwnBuffer(
01245     fbSubTemplateList_t    *subTemplateList,
01246     uint8_t                 semantic,
01247     uint16_t                tmplID,
01248     const fbTemplate_t     *tmpl,
01249     uint16_t                numElements,
01250     uint16_t                dataLength,
01251     uint8_t                *dataPtr);
01252 
01263 void fbSubTemplateListCollectorInit(
01264     fbSubTemplateList_t    *STL);
01265 
01271 void* fbSubTemplateListGetDataPtr(
01272     const fbSubTemplateList_t  *subTemplateListPtr);
01273 
01281 void* fbSubTemplateListGetIndexedDataPtr(
01282     const fbSubTemplateList_t  *subTemplateListPtr,
01283     uint16_t                    index);
01284 
01296 void* fbSubTemplateListGetNextPtr(
01297     const fbSubTemplateList_t  *subTemplateListPtr,
01298     void                       *currentPtr);
01299 
01306 void fbSubTemplateListSetSemantic(
01307     fbSubTemplateList_t    *subTemplateListPtr,
01308     uint8_t                 semantic);
01309 
01315 uint8_t fbSubTemplateListGetSemantic(
01316     fbSubTemplateList_t    *subTemplateListPtr);
01317 
01323 const fbTemplate_t* fbSubTemplateListGetTemplate(
01324     fbSubTemplateList_t    *subTemplateListPtr);
01325 
01331 uint16_t fbSubTemplateListGetTemplateID(
01332     fbSubTemplateList_t    *subTemplateListPtr);
01333 
01344 void* fbSubTemplateListRealloc(
01345     fbSubTemplateList_t    *subTemplateList,
01346     uint16_t                newNumElements);
01347 
01356 void* fbSubTemplateListAddNewElements(
01357     fbSubTemplateList_t    *subTemplateList,
01358     uint16_t                numNewElements);
01359 
01373 void fbSubTemplateListClear(
01374     fbSubTemplateList_t    *subTemplateListPtr);
01375 
01384 void fbSubTemplateListClearWithoutFree(
01385     fbSubTemplateList_t    *subTemplateListPtr);
01386 
01394 void fbSubTemplateListFree(
01395     fbSubTemplateList_t    *subTemplateListPtr);    
01396 
01397 /********* END OF SUBTEMPLATELIST **********/
01415 typedef struct fbSubTemplateMultiListEntry_st {
01417     uint16_t        tmplID;
01419     uint16_t        numElements;
01421     fbTemplate_t   *tmpl;
01423     size_t          dataLength;
01425     uint8_t        *dataPtr;
01426 } fbSubTemplateMultiListEntry_t;
01427 
01432 typedef struct fbSubTemplateMultiList_st {
01434     uint8_t                         semantic;
01436     uint16_t                        numElements;
01438     fbSubTemplateMultiListEntry_t  *firstEntry;
01439 } fbSubTemplateMultiList_t;
01440 
01450 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListInit(
01451     fbSubTemplateMultiList_t   *STML,
01452     uint8_t                     semantic,
01453     uint16_t                    numElements);
01454 
01461 void fbSubTemplateMultiListSetSemantic(
01462     fbSubTemplateMultiList_t   *STML,
01463     uint8_t                     semantic);
01464 
01470 uint8_t fbSubTemplateMultiListGetSemantic(
01471     fbSubTemplateMultiList_t   *STML);
01472 
01479 void fbSubTemplateMultiListClear(
01480     fbSubTemplateMultiList_t   *STML);
01481 
01491 void fbSubTemplateMultiListClearEntries(
01492     fbSubTemplateMultiList_t   *STML);
01493 
01499 void fbSubTemplateMultiListFree(
01500     fbSubTemplateMultiList_t   *STML);
01501 
01511 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListRealloc(
01512     fbSubTemplateMultiList_t   *STML,
01513     uint16_t                    newNumEntries);
01514 
01523 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListAddNewEntries(
01524     fbSubTemplateMultiList_t   *STML,
01525     uint16_t                    numNewEntries);
01526 
01532 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetFirstEntry(
01533     fbSubTemplateMultiList_t   *STML);
01534 
01542 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetIndexedEntry(
01543     fbSubTemplateMultiList_t   *STML,
01544     uint16_t                    index);
01545 
01557 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetNextEntry(
01558     fbSubTemplateMultiList_t       *STML,
01559     fbSubTemplateMultiListEntry_t  *currentEntry);
01560 
01572 void* fbSubTemplateMultiListEntryInit(
01573     fbSubTemplateMultiListEntry_t  *entry,
01574     uint16_t                        tmplID,
01575     fbTemplate_t                   *tmpl,
01576     uint16_t                        numElements);
01577 
01588 void *fbSubTemplateMultiListEntryRealloc(
01589     fbSubTemplateMultiListEntry_t  *entry,
01590     uint16_t                        newNumElements);
01591 
01598 void fbSubTemplateMultiListEntryClear(
01599     fbSubTemplateMultiListEntry_t   *entry);
01600 
01607 void* fbSubTemplateMultiListEntryGetDataPtr(
01608     fbSubTemplateMultiListEntry_t   *entry);
01609 
01621 void* fbSubTemplateMultiListEntryNextDataPtr(
01622     fbSubTemplateMultiListEntry_t   *entry,
01623     void                            *currentPtr);
01624 
01635 void* fbSubTemplateMultiListEntryGetIndexedPtr(
01636     fbSubTemplateMultiListEntry_t   *entry,
01637     uint16_t                         index);
01638 
01645 const fbTemplate_t* fbSubTemplateMultiListEntryGetTemplate(
01646     fbSubTemplateMultiListEntry_t   *entry);
01647 
01654 uint16_t fbSubTemplateMultiListEntryGetTemplateID(
01655     fbSubTemplateMultiListEntry_t   *entry);
01656 
01657 /************** END OF STML FUNCTIONS */
01658 
01664 fbListenerGroup_t* fbListenerGroupAlloc(
01665     void);
01666 
01676 int fbListenerGroupAddListener(
01677     fbListenerGroup_t          *group,
01678     const fbListener_t         *listener);
01679 
01689 int fbListenerGroupDeleteListener(
01690     fbListenerGroup_t          *group,
01691     const fbListener_t         *listener);
01692 
01703 fbListenerGroupResult_t* fbListenerGroupWait(
01704     fbListenerGroup_t          *group,
01705     GError                     **err);
01706 
01717 gboolean fbListenerWaitAcceptCallback(
01718     fbListener_t           *listener,
01719     fbAcceptCallback_fn     callback,
01720     GError                **err);
01721 
01734 gboolean fbListenerGroupWaitAcceptCallback(
01735     fbListenerGroup_t   *group,
01736     fbAcceptCallback_fn  callback,
01737     GError             **err);
01738 
01751 fBuf_t  *fbListenerOwnSocketCollectorTCP(
01752     fbListener_t   *listener,
01753     int             sock,
01754     GError        **err);
01755 
01765 fBuf_t  *fbListenerOwnSocketCollectorTLS(
01766     fbListener_t   *listener,
01767     int             sock,
01768     GError        **err);
01769 
01775 void    fBufInterruptSocket(
01776     fBuf_t         *fbuf);
01777 
01778  
01788 typedef gboolean        (*fbListenerAppInit_fn) (
01789     fbListener_t                *listener,
01790     void                        **ctx,
01791     int                         fd,
01792     struct sockaddr             *peer,
01793     size_t                      peerlen,
01794     GError                      **err);
01795 
01800 typedef void            (*fbListenerAppFree_fn) (
01801     void                        *ctx);
01802 
01803 /*
01804  * Public Function Calls. These calls will remain available and retain 
01805  * their functionality in all subsequent versions of libfixbuf.
01806  */
01807 
01808 
01825 gboolean            fBufSetInternalTemplate(
01826     fBuf_t              *fbuf,
01827     uint16_t            int_tid,
01828     GError              **err);
01829 
01847 gboolean            fBufSetExportTemplate(
01848     fBuf_t              *fbuf,
01849     uint16_t            ext_tid,
01850     GError              **err);
01851 
01852 #if HAVE_SPREAD
01853 
01870 void                 fBufSetSpreadExportGroup(
01871     fBuf_t             *fbuf,
01872     char               **groups,
01873     int                num_groups,
01874     GError             **err);
01875 #endif
01876 
01891 void                fBufSetAutomaticMode(
01892     fBuf_t              *fbuf,
01893     gboolean            automatic);
01894 
01902 fbSession_t         *fBufGetSession(
01903     fBuf_t              *fbuf);
01904 
01913 void                fBufFree(
01914     fBuf_t              *fbuf);
01915 
01928 fBuf_t              *fBufAllocForExport(
01929     fbSession_t         *session,
01930     fbExporter_t        *exporter);
01931 
01941 fbExporter_t        *fBufGetExporter(
01942     fBuf_t              *fbuf);
01943 
01954 void                fBufSetExporter(
01955     fBuf_t              *fbuf,
01956     fbExporter_t        *exporter);
01957 
01958 
01982 gboolean            fBufAppend(
01983     fBuf_t              *fbuf,
01984     uint8_t             *recbase,
01985     size_t              recsize,
01986     GError              **err);
01987 
01997 gboolean            fBufEmit(
01998     fBuf_t              *fbuf,
01999     GError              **err);
02000 
02012 void                fBufSetExportTime(
02013     fBuf_t              *fbuf,
02014     uint32_t            extime);
02015 
02028 fBuf_t              *fBufAllocForCollection(
02029     fbSession_t         *session,
02030     fbCollector_t       *collector);
02031     
02041 fbCollector_t       *fBufGetCollector(
02042     fBuf_t              *fbuf);
02043 
02054 void                fBufSetCollector(
02055     fBuf_t              *fbuf,
02056     fbCollector_t       *collector);
02057 
02087 gboolean            fBufNext(
02088     fBuf_t              *fbuf,
02089     uint8_t             *recbase,
02090     size_t              *recsize,
02091     GError              **err);
02092 
02106 gboolean            fBufNextMessage(
02107     fBuf_t              *fbuf,
02108     GError              **err);
02109     
02117 uint32_t            fBufGetExportTime(
02118     fBuf_t              *fbuf);
02119 
02139 fbTemplate_t    *fBufGetCollectionTemplate(
02140     fBuf_t          *fbuf,
02141     uint16_t        *ext_tid);
02142 
02161 fbTemplate_t    *fBufNextCollectionTemplate(
02162     fBuf_t          *fbuf,
02163     uint16_t        *ext_tid,
02164     GError          **err);
02165 
02177 fbInfoModel_t       *fbInfoModelAlloc();
02178 
02187 void                fbInfoModelFree(
02188     fbInfoModel_t       *model);
02189 
02204 void                fbInfoModelAddElement(
02205     fbInfoModel_t       *model,
02206     fbInfoElement_t     *ie);
02207 
02222 void                fbInfoModelAddElementArray(
02223     fbInfoModel_t       *model,
02224     fbInfoElement_t     *ie);
02225 
02237 const fbInfoElement_t     *fbInfoModelGetElementByName(
02238     fbInfoModel_t       *model,
02239     const char          *name);
02240 
02253 const fbInfoElement_t    *fbInfoModelGetElementByID(
02254     fbInfoModel_t       *model,
02255     uint16_t            id,
02256     uint32_t            ent);
02257 
02275 fbTemplate_t        *fbTemplateAlloc(
02276     fbInfoModel_t       *model);
02277 
02294 gboolean            fbTemplateAppend(
02295     fbTemplate_t        *tmpl,
02296     fbInfoElement_t     *ex_ie,
02297     GError              **err);
02298 
02314 gboolean            fbTemplateAppendSpec(
02315     fbTemplate_t        *tmpl,
02316     fbInfoElementSpec_t *spec,
02317     uint32_t            flags,
02318     GError              **err);
02319 
02337 gboolean            fbTemplateAppendSpecArray(
02338     fbTemplate_t        *tmpl,
02339     fbInfoElementSpec_t *spec,
02340     uint32_t            flags,
02341     GError              **err);
02342 
02350 uint32_t            fbTemplateCountElements(
02351     fbTemplate_t        *tmpl);
02352 
02362 void                fbTemplateSetOptionsScope(
02363     fbTemplate_t        *tmpl,
02364     uint16_t            scope_count);
02365 
02373 uint32_t            fbTemplateGetOptionsScope(
02374     fbTemplate_t        *tmpl);
02375 
02387 gboolean           fbTemplateContainsElement(
02388     fbTemplate_t            *tmpl,
02389     const fbInfoElement_t   *ex_ie);
02390 
02400 gboolean           fbTemplateContainsElementByName(
02401     fbTemplate_t        *tmpl,
02402     fbInfoElementSpec_t *spec);
02403 
02413 gboolean           fbTemplateContainsAllElementsByName(
02414     fbTemplate_t        *tmpl,
02415     fbInfoElementSpec_t *spec);
02416 
02424 void                fbTemplateFreeUnused(
02425     fbTemplate_t        *tmpl);
02426 
02440 fbSession_t         *fbSessionAlloc(
02441     fbInfoModel_t       *model);
02442 
02456 void fbSessionAddTemplateCallback(
02457     fbSession_t                *session,
02458     fbNewTemplateCallback_fn    callback);
02459 
02471 void fbSessionAddTemplatePair(
02472     fbSession_t    *session,
02473     uint16_t        ent_tid,
02474     uint16_t        int_tid);
02475 
02485 void fbSessionRemoveTemplatePair(
02486     fbSession_t    *session,
02487     uint16_t        ext_tid);
02488 
02497 uint16_t    fbSessionLookupTemplatePair(
02498     fbSession_t    *session,
02499     uint16_t        ext_tid);
02500 
02510 void                fbSessionFree(
02511     fbSession_t         *session);
02512 
02525 void                fbSessionResetExternal(
02526     fbSession_t         *session);
02527 
02543 void                fbSessionSetDomain(
02544     fbSession_t         *session,
02545     uint32_t            domain);
02546 
02554 uint32_t            fbSessionGetDomain(
02555     fbSession_t         *session);
02556 
02557 #if HAVE_SPREAD
02558 
02579 gboolean        fbSessionAddTemplatesMulticast(
02580     fbSession_t      *session,
02581     char             **groups,
02582     gboolean         internal,
02583     uint16_t         tid,
02584     fbTemplate_t     *tmpl,
02585     GError           **err);
02586 
02587 #endif
02588 
02601 gboolean            fbSessionExportTemplate(
02602     fbSession_t         *session,
02603     uint16_t            tid,
02604     GError              **err);
02605 
02617 gboolean            fbSessionExportTemplates(
02618     fbSession_t         *session,
02619     GError              **err);
02620 
02636 uint16_t            fbSessionAddTemplate(
02637     fbSession_t         *session,
02638     gboolean            internal,
02639     uint16_t            tid,
02640     fbTemplate_t        *tmpl,
02641     GError              **err);
02642 
02655 gboolean            fbSessionRemoveTemplate(
02656     fbSession_t         *session,
02657     gboolean            internal,
02658     uint16_t            tid,
02659     GError              **err);
02660 
02672 fbTemplate_t        *fbSessionGetTemplate(
02673     fbSession_t         *session,
02674     gboolean            internal,
02675     uint16_t            tid,
02676     GError              **err);
02677 
02690 fbExporter_t        *fbExporterAllocNet(
02691     fbConnSpec_t        *spec);
02692 
02693 #if HAVE_SPREAD
02694 
02705 int fbCollectorGetSpreadReturnGroups(
02706     fbCollector_t *collector,
02707     char *groups[]);
02708 
02722 fbExporter_t        *fbExporterAllocSpread(
02723     fbSpreadParams_t      *params );
02724 
02725 #endif /* HAVE_SPREAD */
02726 
02738 fbExporter_t        *fbExporterAllocFile(
02739     const char          *path);
02740 
02749 fbExporter_t        *fbExporterAllocFP(
02750     FILE                *fp);
02751     
02764 void                fbExporterSetStream(
02765     fbExporter_t        *exporter,
02766     int                 sctp_stream);
02767 
02780 void                fbExporterAutoStream(
02781     fbExporter_t        *exporter);
02782 
02790 void                fbExporterClose(
02791     fbExporter_t       *exporter);
02792 
02805 fbCollector_t       *fbCollectorAllocFile(
02806     void                *ctx,
02807     const char          *path,
02808     GError              **err);
02809 
02820 fbCollector_t       *fbCollectorAllocFP(
02821     void                *ctx,
02822     FILE                *fp);
02823 
02824 
02825 #ifdef HAVE_SPREAD
02826 
02836 fbCollector_t       *fbCollectorAllocSpread (
02837     void                *ctx,
02838     fbSpreadParams_t    *params,
02839     GError              **err );
02840 
02841 #endif /* HAVE_SPREAD */
02842 
02853 void                *fbCollectorGetContext(
02854     fbCollector_t       *collector);
02855 
02866 void                fbCollectorClose(
02867     fbCollector_t       *collector);
02868 
02869 
02870 
02896 fbListener_t        *fbListenerAlloc(
02897     fbConnSpec_t            *spec,
02898     fbSession_t             *session,
02899     fbListenerAppInit_fn    appinit,
02900     fbListenerAppFree_fn    appfree,
02901     GError                  **err);
02902 
02910 void                fbListenerFree(
02911     fbListener_t            *listener);
02912 
02934 fBuf_t              *fbListenerWait(
02935     fbListener_t            *listener,
02936     GError                  **err);
02937 
02948 fBuf_t              *fbListenerWaitNoCollectors(
02949     fbListener_t            *listener,
02950     GError                  **err);
02958 void                fbListenerInterrupt(
02959     fbListener_t            *listener);
02960 
02961 
02977 gboolean            fbListenerGetCollector(
02978     fbListener_t        *listener,
02979     fbCollector_t       **collector,
02980     GError              **err);
02981 
02982 
02983 
02984 
03000 gboolean    fbCollectorClearTranslator(
03001     fbCollector_t   *collector,
03002     GError          **err);
03003 
03004 
03020 gboolean    fbCollectorSetNetflowV9Translator(
03021     fbCollector_t               *collector,
03022     GError                      **err);
03023 
03030 struct sockaddr* fbCollectorGetPeer(
03031     fbCollector_t   *collector);
03032 
03033 
03034 
03035 #ifdef __cplusplus
03036 } /* extern "C" */
03037 #endif
03038 
03039 #endif
© 2006-2011 Carnegie Mellon University