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-2013 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 
00528 #ifndef _FB_PUBLIC_H_
00529 #define _FB_PUBLIC_H_
00530 #include <fixbuf/autoinc.h>
00531 
00532 #ifdef __cplusplus
00533 extern "C" {
00534 #endif
00535 
00536 #ident "$Id: public.h 18744 2013-03-07 17:48:39Z ecoff_svn $"
00537 
00538 /*
00539  * Error Handling Definitions
00540  */
00541 
00543 #define FB_ERROR_DOMAIN             g_quark_from_string("fixbufError")
00544 
00545 #define FB_ERROR_TMPL               1
00546 
00550 #define FB_ERROR_EOM                2
00551 
00556 #define FB_ERROR_EOF                3
00557 
00561 #define FB_ERROR_IPFIX              4
00562 
00567 #define FB_ERROR_BUFSZ              5
00568 
00569 #define FB_ERROR_IMPL               6
00570 
00571 #define FB_ERROR_IO                 7
00572 
00576 #define FB_ERROR_NLREAD             8
00577 
00582 #define FB_ERROR_NLWRITE            9
00583 
00586 #define FB_ERROR_NOELEMENT          10
00587 
00590 #define FB_ERROR_CONN               11
00591 
00595 #define FB_ERROR_NETFLOWV9          12
00596 
00599 #define FB_ERROR_TRANSMISC          13
00600 
00601 /*
00602  * Public Datatypes and Constants
00603  */
00604 
00605 struct fBuf_st;
00611 typedef struct fBuf_st fBuf_t;
00612 
00619 typedef struct fbVarfield_st {
00621     size_t      len;
00628     uint8_t     *buf;
00629 } fbVarfield_t;
00630 
00631 
00632 struct fbInfoModel_st;
00637 typedef struct fbInfoModel_st fbInfoModel_t;
00638 
00644 #define FB_IE_INIT(_name_, _ent_, _num_, _len_, _flags_) \
00645     {{(const struct fbInfoElement_st*)_name_}, 0, _ent_, _num_, _len_, _flags_}
00646 
00652 #define FB_IE_NULL FB_IE_INIT(NULL, 0, 0, 0, 0)
00653 
00658 #define FB_IE_F_NONE                            0x00000000
00659 
00664 #define FB_IE_F_ENDIAN                          0x00000001
00665 
00675 #define FB_IE_F_REVERSIBLE                      0x00000040
00676 
00684 #define FB_IE_F_ALIEN                           0x00000080
00685 
00689 #define FB_IE_VARLEN                            65535
00690 
00695 #define FB_IE_BASIC_LIST                        291
00696 
00700 #define FB_IE_SUBTEMPLATE_LIST                  292
00701 
00705 #define FB_IE_SUBTEMPLATE_MULTILIST             293
00706 
00714 #define FB_IE_PEN_REVERSE                       29305
00715 
00724 #define FB_IE_VENDOR_BIT_REVERSE                0x4000
00725 
00731 #define FB_CISCO_GENERIC                       9999
00732 
00739 #define FB_CISCO_ASA_EVENT_ID                  9998
00740 
00747 #define FB_CISCO_ASA_EVENT_XTRA                9997
00748 
00753 #define FB_IE_REVERSE_STR                       "reverse"
00754 
00756 #define FB_IE_REVERSE_STRLEN                    7
00757 
00766 typedef struct fbInfoElement_st {
00768     union {
00774         const struct fbInfoElement_st *canon;
00779         const char                    *name;
00780     }  ref;
00781 
00787     uint32_t            midx;
00789     uint32_t            ent;
00794     uint16_t            num;
00796     uint16_t            len;
00798     uint32_t            flags;
00799 } fbInfoElement_t;
00800 
00805 #define FB_TID_AUTO         0
00806 
00810 #define FB_TID_TS           2
00811 
00815 #define FB_TID_OTS          3
00816 
00820 #define FB_TID_MIN_DATA     256
00821 
00822 struct fbTemplate_st;
00828 typedef struct fbTemplate_st fbTemplate_t;
00829 
00835 #define FB_IESPEC_NULL { NULL, 0, 0 }
00836 
00842 typedef struct fbInfoElementSpec_st {
00844     char                *name;
00849     uint16_t            len_override;
00856     uint32_t            flags;
00857 } fbInfoElementSpec_t;
00858 
00859 struct fbSession_st;
00866 typedef struct fbSession_st fbSession_t;
00867 
00869 typedef enum fbTransport_en {
00874     FB_SCTP,
00876     FB_TCP,
00878     FB_UDP,
00884     FB_DTLS_SCTP,
00889     FB_TLS_TCP,
00895     FB_DTLS_UDP,
00896 } fbTransport_t;
00897 
00902 typedef struct fbConnSpec_st {
00904     fbTransport_t       transport;
00906     char                *host;
00908     char                *svc;
00910     char                *ssl_ca_file;
00912     char                *ssl_cert_file;
00914     char                *ssl_key_file;
00916     char                *ssl_key_pass;
00921     void                *vai;
00926     void                *vssl_ctx;
00927 } fbConnSpec_t;
00928 
00932 #define FB_CONNSPEC_INIT { FB_SCTP, NULL, NULL,         \
00933                            NULL, NULL, NULL, NULL,      \
00934                            NULL, NULL }
00935 
00936 #if HAVE_SPREAD
00937 
00942 #define FB_SPREADPARAMS_INIT { 0, 0, 0 }
00943 
00944 typedef struct fbSpreadParams_st {
00947     fbSession_t * session;
00950     char *          daemon;
00953     char **         groups;
00954 } fbSpreadParams_t;
00955 
00956 #endif /* HAVE_SPREAD */
00957 
00958 struct fbExporter_st;
00964 typedef struct fbExporter_st fbExporter_t;
00965 
00966 struct fbCollector_st;
00974 typedef struct fbCollector_st fbCollector_t;
00975 
00976 struct fbListener_st;
00983 typedef struct fbListener_st fbListener_t;
00984 
00988 typedef struct fbListenerEntry_st fbListenerEntry_t;
00989 
00993 struct fbListenerEntry_st
00994 {
00996     fbListenerEntry_t  *next;
00998     fbListenerEntry_t  *prev;
01000     fbListener_t       *listener;
01001 };
01002 
01006 typedef struct fbListenerGroupResult_st fbListenerGroupResult_t;
01007 
01013 struct fbListenerGroupResult_st
01014 {
01016     fbListenerGroupResult_t *next;
01018     fbListener_t    *listener;
01020     fBuf_t          *fbuf;
01021 };
01022 
01026 typedef struct fbListenerGroup_st
01027 {
01029     fbListenerEntry_t   *head;
01031     void                *tableForDescriptorsToListeners;
01032 } fbListenerGroup_t;
01033 
01046 typedef gboolean (*fbAcceptCallback_fn) (
01047     fBuf_t                     *buf,
01048     fbListener_t               *listener,
01049     struct sockaddr            *sAddr,
01050     GError                    **err);
01051 
01062 typedef void (*fbNewTemplateCallback_fn) (
01063     fbSession_t    *session,
01064     uint16_t        tid,
01065     fbTemplate_t   *tmpl);
01066 
01070 #define UNDEFINED       0xFF
01071 
01074 #define NONE_OF         0x00
01075 
01078 #define EXACTLY_ONE_OF  0x01
01079 
01082 #define ONE_OR_MORE_OF  0x02
01083 
01086 #define ALL_OF          0x03
01087 
01090 #define ORDERED         0x04
01091 
01098 gboolean fbListValidSemantic(
01099     uint8_t semantic);
01100 
01101 /****** BASICLIST FUNCTIONS AND STRUCTS *******/
01107 typedef struct fbBasicList_st {
01109     const fbInfoElement_t   *infoElement;
01111     uint8_t                 *dataPtr;
01113     uint16_t                numElements;
01115     uint16_t                dataLength;
01117     uint8_t                 semantic;
01118 } fbBasicList_t;
01119 
01120 
01126 fbBasicList_t*  fbBasicListAlloc(
01127     void);
01128 
01141 void* fbBasicListInit(
01142     fbBasicList_t          *basicListPtr,
01143     uint8_t                 semantic,
01144     const fbInfoElement_t  *infoElement,
01145     uint16_t                numElements);
01146 
01161 void* fbBasicListInitWithOwnBuffer(
01162     fbBasicList_t          *basicListPtr,
01163     uint8_t                 semantic,
01164     const fbInfoElement_t  *infoElement,
01165     uint16_t                numElements,
01166     uint16_t                dataLength,
01167     uint8_t                *dataPtr);
01168 
01181 void fbBasicListCollectorInit(
01182     fbBasicList_t  *basicListPtr);
01183 
01184 
01192 uint8_t fbBasicListGetSemantic(
01193     fbBasicList_t  *basicListPtr);
01194 
01203 void fbBasicListSetSemantic(
01204     fbBasicList_t  *basicListPtr,
01205     uint8_t         semantic);
01206 
01207 
01215 const fbInfoElement_t*  fbBasicListGetInfoElement(
01216      fbBasicList_t  *basicListPtr);
01217 
01223 void* fbBasicListGetDataPtr(
01224     fbBasicList_t   *basicListPtr);
01225 
01234 void* fbBasicListGetIndexedDataPtr(
01235     fbBasicList_t   *basicListPtr,
01236     uint16_t         bl_index);
01237 
01246 void* fbBasicListGetNextPtr(
01247     fbBasicList_t   *basicListPtr,
01248     void            *currentPtr);
01249 
01259 void* fbBasicListRealloc(
01260     fbBasicList_t  *basicList,
01261     uint16_t        newNumElements);
01262 
01270 void* fbBasicListAddNewElements(
01271     fbBasicList_t  *basicList,
01272     uint16_t        numNewElements);
01273 
01279 void fbBasicListClear(
01280     fbBasicList_t  *basicListPtr);
01281 
01288 void fbBasicListClearWithoutFree(
01289     fbBasicList_t  *basicList);
01290 
01296 void fbBasicListFree(
01297     fbBasicList_t  *basicListPtr);
01298 
01299 /******* END OF BASICLIST ********/
01300 
01301 
01302 
01303 /******* SUBTEMPLATELIST FUNCTIONS ****/
01304 
01312 typedef struct fbSubTemplateList_st {
01315     union {
01316         size_t          length;
01317         uint64_t        extra;
01318     } dataLength;
01320     const fbTemplate_t  *tmpl;
01322     uint8_t             *dataPtr;
01324     uint16_t            tmplID;
01326     uint16_t            numElements;
01328     uint8_t             semantic;
01329 } fbSubTemplateList_t;
01330 
01337 fbSubTemplateList_t* fbSubTemplateListAlloc(
01338     void);
01339 
01352 void*  fbSubTemplateListInit(
01353     fbSubTemplateList_t    *sTL,
01354     uint8_t                 semantic,
01355     uint16_t                tmplID,
01356     const fbTemplate_t     *tmpl,
01357     uint16_t                numElements);
01358 
01373 void* fbSubTemplateListInitWithOwnBuffer(
01374     fbSubTemplateList_t    *subTemplateList,
01375     uint8_t                 semantic,
01376     uint16_t                tmplID,
01377     const fbTemplate_t     *tmpl,
01378     uint16_t                numElements,
01379     uint16_t                dataLength,
01380     uint8_t                *dataPtr);
01381 
01392 void fbSubTemplateListCollectorInit(
01393     fbSubTemplateList_t    *STL);
01394 
01400 void* fbSubTemplateListGetDataPtr(
01401     const fbSubTemplateList_t  *subTemplateListPtr);
01402 
01410 void* fbSubTemplateListGetIndexedDataPtr(
01411     const fbSubTemplateList_t  *subTemplateListPtr,
01412     uint16_t                    index);
01413 
01425 void* fbSubTemplateListGetNextPtr(
01426     const fbSubTemplateList_t  *subTemplateListPtr,
01427     void                       *currentPtr);
01428 
01435 void fbSubTemplateListSetSemantic(
01436     fbSubTemplateList_t    *subTemplateListPtr,
01437     uint8_t                 semantic);
01438 
01444 uint8_t fbSubTemplateListGetSemantic(
01445     fbSubTemplateList_t    *subTemplateListPtr);
01446 
01452 const fbTemplate_t* fbSubTemplateListGetTemplate(
01453     fbSubTemplateList_t    *subTemplateListPtr);
01454 
01460 uint16_t fbSubTemplateListGetTemplateID(
01461     fbSubTemplateList_t    *subTemplateListPtr);
01462 
01473 void* fbSubTemplateListRealloc(
01474     fbSubTemplateList_t    *subTemplateList,
01475     uint16_t                newNumElements);
01476 
01485 void* fbSubTemplateListAddNewElements(
01486     fbSubTemplateList_t    *subTemplateList,
01487     uint16_t                numNewElements);
01488 
01502 void fbSubTemplateListClear(
01503     fbSubTemplateList_t    *subTemplateListPtr);
01504 
01513 void fbSubTemplateListClearWithoutFree(
01514     fbSubTemplateList_t    *subTemplateListPtr);
01515 
01523 void fbSubTemplateListFree(
01524     fbSubTemplateList_t    *subTemplateListPtr);
01525 
01526 /********* END OF SUBTEMPLATELIST **********/
01544 typedef struct fbSubTemplateMultiListEntry_st {
01546     fbTemplate_t   *tmpl;
01548     uint8_t        *dataPtr;
01550     size_t          dataLength;
01552     uint16_t        tmplID;
01554     uint16_t        numElements;
01555 } fbSubTemplateMultiListEntry_t;
01556 
01561 typedef struct fbSubTemplateMultiList_st {
01563     fbSubTemplateMultiListEntry_t  *firstEntry;
01565     uint16_t                        numElements;
01567     uint8_t                         semantic;
01568 } fbSubTemplateMultiList_t;
01569 
01579 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListInit(
01580     fbSubTemplateMultiList_t   *STML,
01581     uint8_t                     semantic,
01582     uint16_t                    numElements);
01583 
01590 void fbSubTemplateMultiListSetSemantic(
01591     fbSubTemplateMultiList_t   *STML,
01592     uint8_t                     semantic);
01593 
01599 uint8_t fbSubTemplateMultiListGetSemantic(
01600     fbSubTemplateMultiList_t   *STML);
01601 
01608 void fbSubTemplateMultiListClear(
01609     fbSubTemplateMultiList_t   *STML);
01610 
01620 void fbSubTemplateMultiListClearEntries(
01621     fbSubTemplateMultiList_t   *STML);
01622 
01628 void fbSubTemplateMultiListFree(
01629     fbSubTemplateMultiList_t   *STML);
01630 
01640 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListRealloc(
01641     fbSubTemplateMultiList_t   *STML,
01642     uint16_t                    newNumEntries);
01643 
01652 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListAddNewEntries(
01653     fbSubTemplateMultiList_t   *STML,
01654     uint16_t                    numNewEntries);
01655 
01661 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetFirstEntry(
01662     fbSubTemplateMultiList_t   *STML);
01663 
01671 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetIndexedEntry(
01672     fbSubTemplateMultiList_t   *STML,
01673     uint16_t                    index);
01674 
01686 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetNextEntry(
01687     fbSubTemplateMultiList_t       *STML,
01688     fbSubTemplateMultiListEntry_t  *currentEntry);
01689 
01701 void* fbSubTemplateMultiListEntryInit(
01702     fbSubTemplateMultiListEntry_t  *entry,
01703     uint16_t                        tmplID,
01704     fbTemplate_t                   *tmpl,
01705     uint16_t                        numElements);
01706 
01717 void *fbSubTemplateMultiListEntryRealloc(
01718     fbSubTemplateMultiListEntry_t  *entry,
01719     uint16_t                        newNumElements);
01720 
01727 void fbSubTemplateMultiListEntryClear(
01728     fbSubTemplateMultiListEntry_t   *entry);
01729 
01736 void* fbSubTemplateMultiListEntryGetDataPtr(
01737     fbSubTemplateMultiListEntry_t   *entry);
01738 
01750 void* fbSubTemplateMultiListEntryNextDataPtr(
01751     fbSubTemplateMultiListEntry_t   *entry,
01752     void                            *currentPtr);
01753 
01764 void* fbSubTemplateMultiListEntryGetIndexedPtr(
01765     fbSubTemplateMultiListEntry_t   *entry,
01766     uint16_t                         index);
01767 
01774 const fbTemplate_t* fbSubTemplateMultiListEntryGetTemplate(
01775     fbSubTemplateMultiListEntry_t   *entry);
01776 
01783 uint16_t fbSubTemplateMultiListEntryGetTemplateID(
01784     fbSubTemplateMultiListEntry_t   *entry);
01785 
01786 /************** END OF STML FUNCTIONS */
01787 
01793 fbListenerGroup_t* fbListenerGroupAlloc(
01794     void);
01795 
01805 int fbListenerGroupAddListener(
01806     fbListenerGroup_t          *group,
01807     const fbListener_t         *listener);
01808 
01818 int fbListenerGroupDeleteListener(
01819     fbListenerGroup_t          *group,
01820     const fbListener_t         *listener);
01821 
01832 fbListenerGroupResult_t* fbListenerGroupWait(
01833     fbListenerGroup_t          *group,
01834     GError                     **err);
01835 
01846 gboolean fbListenerWaitAcceptCallback(
01847     fbListener_t           *listener,
01848     fbAcceptCallback_fn     callback,
01849     GError                **err);
01850 
01863 gboolean fbListenerGroupWaitAcceptCallback(
01864     fbListenerGroup_t   *group,
01865     fbAcceptCallback_fn  callback,
01866     GError             **err);
01867 
01880 fBuf_t  *fbListenerOwnSocketCollectorTCP(
01881     fbListener_t   *listener,
01882     int             sock,
01883     GError        **err);
01884 
01894 fBuf_t  *fbListenerOwnSocketCollectorTLS(
01895     fbListener_t   *listener,
01896     int             sock,
01897     GError        **err);
01898 
01904 void    fBufInterruptSocket(
01905     fBuf_t         *fbuf);
01906 
01907 
01928 typedef gboolean        (*fbListenerAppInit_fn) (
01929     fbListener_t                *listener,
01930     void                        **ctx,
01931     int                         fd,
01932     struct sockaddr             *peer,
01933     size_t                      peerlen,
01934     GError                      **err);
01935 
01943 typedef void            (*fbListenerAppFree_fn) (
01944     void                        *ctx);
01945 
01946 /*
01947  * Public Function Calls. These calls will remain available and retain
01948  * their functionality in all subsequent versions of libfixbuf.
01949  */
01950 
01951 
01968 gboolean            fBufSetInternalTemplate(
01969     fBuf_t              *fbuf,
01970     uint16_t            int_tid,
01971     GError              **err);
01972 
01990 gboolean            fBufSetExportTemplate(
01991     fBuf_t              *fbuf,
01992     uint16_t            ext_tid,
01993     GError              **err);
01994 
01995 #if HAVE_SPREAD
01996 
02013 void                 fBufSetSpreadExportGroup(
02014     fBuf_t             *fbuf,
02015     char               **groups,
02016     int                num_groups,
02017     GError             **err);
02018 #endif
02019 
02034 void                fBufSetAutomaticMode(
02035     fBuf_t              *fbuf,
02036     gboolean            automatic);
02037 
02045 fbSession_t         *fBufGetSession(
02046     fBuf_t              *fbuf);
02047 
02056 void                fBufFree(
02057     fBuf_t              *fbuf);
02058 
02071 fBuf_t              *fBufAllocForExport(
02072     fbSession_t         *session,
02073     fbExporter_t        *exporter);
02074 
02084 fbExporter_t        *fBufGetExporter(
02085     fBuf_t              *fbuf);
02086 
02097 void                fBufSetExporter(
02098     fBuf_t              *fbuf,
02099     fbExporter_t        *exporter);
02100 
02101 
02125 gboolean            fBufAppend(
02126     fBuf_t              *fbuf,
02127     uint8_t             *recbase,
02128     size_t              recsize,
02129     GError              **err);
02130 
02140 gboolean            fBufEmit(
02141     fBuf_t              *fbuf,
02142     GError              **err);
02143 
02155 void                fBufSetExportTime(
02156     fBuf_t              *fbuf,
02157     uint32_t            extime);
02158 
02171 fBuf_t              *fBufAllocForCollection(
02172     fbSession_t         *session,
02173     fbCollector_t       *collector);
02174 
02184 fbCollector_t       *fBufGetCollector(
02185     fBuf_t              *fbuf);
02186 
02197 void                fBufSetCollector(
02198     fBuf_t              *fbuf,
02199     fbCollector_t       *collector);
02200 
02230 gboolean            fBufNext(
02231     fBuf_t              *fbuf,
02232     uint8_t             *recbase,
02233     size_t              *recsize,
02234     GError              **err);
02235 
02249 gboolean            fBufNextMessage(
02250     fBuf_t              *fbuf,
02251     GError              **err);
02252 
02260 uint32_t            fBufGetExportTime(
02261     fBuf_t              *fbuf);
02262 
02282 fbTemplate_t    *fBufGetCollectionTemplate(
02283     fBuf_t          *fbuf,
02284     uint16_t        *ext_tid);
02285 
02304 fbTemplate_t    *fBufNextCollectionTemplate(
02305     fBuf_t          *fbuf,
02306     uint16_t        *ext_tid,
02307     GError          **err);
02308 
02320 fbInfoModel_t       *fbInfoModelAlloc(void);
02321 
02330 void                fbInfoModelFree(
02331     fbInfoModel_t       *model);
02332 
02347 void                fbInfoModelAddElement(
02348     fbInfoModel_t       *model,
02349     fbInfoElement_t     *ie);
02350 
02365 void                fbInfoModelAddElementArray(
02366     fbInfoModel_t       *model,
02367     fbInfoElement_t     *ie);
02368 
02380 const fbInfoElement_t     *fbInfoModelGetElementByName(
02381     fbInfoModel_t       *model,
02382     const char          *name);
02383 
02396 const fbInfoElement_t    *fbInfoModelGetElementByID(
02397     fbInfoModel_t       *model,
02398     uint16_t            id,
02399     uint32_t            ent);
02400 
02418 fbTemplate_t        *fbTemplateAlloc(
02419     fbInfoModel_t       *model);
02420 
02437 gboolean            fbTemplateAppend(
02438     fbTemplate_t        *tmpl,
02439     fbInfoElement_t     *ex_ie,
02440     GError              **err);
02441 
02457 gboolean            fbTemplateAppendSpec(
02458     fbTemplate_t        *tmpl,
02459     fbInfoElementSpec_t *spec,
02460     uint32_t            flags,
02461     GError              **err);
02462 
02480 gboolean            fbTemplateAppendSpecArray(
02481     fbTemplate_t        *tmpl,
02482     fbInfoElementSpec_t *spec,
02483     uint32_t            flags,
02484     GError              **err);
02485 
02493 uint32_t            fbTemplateCountElements(
02494     fbTemplate_t        *tmpl);
02495 
02505 void                fbTemplateSetOptionsScope(
02506     fbTemplate_t        *tmpl,
02507     uint16_t            scope_count);
02508 
02516 uint32_t            fbTemplateGetOptionsScope(
02517     fbTemplate_t        *tmpl);
02518 
02530 gboolean           fbTemplateContainsElement(
02531     fbTemplate_t            *tmpl,
02532     const fbInfoElement_t   *ex_ie);
02533 
02543 gboolean           fbTemplateContainsElementByName(
02544     fbTemplate_t        *tmpl,
02545     fbInfoElementSpec_t *spec);
02546 
02556 gboolean           fbTemplateContainsAllElementsByName(
02557     fbTemplate_t        *tmpl,
02558     fbInfoElementSpec_t *spec);
02559 
02567 void                fbTemplateFreeUnused(
02568     fbTemplate_t        *tmpl);
02569 
02583 fbSession_t         *fbSessionAlloc(
02584     fbInfoModel_t       *model);
02585 
02599 void fbSessionAddTemplateCallback(
02600     fbSession_t                *session,
02601     fbNewTemplateCallback_fn    callback);
02602 
02622 void fbSessionAddTemplatePair(
02623     fbSession_t    *session,
02624     uint16_t        ent_tid,
02625     uint16_t        int_tid);
02626 
02636 void fbSessionRemoveTemplatePair(
02637     fbSession_t    *session,
02638     uint16_t        ext_tid);
02639 
02648 uint16_t    fbSessionLookupTemplatePair(
02649     fbSession_t    *session,
02650     uint16_t        ext_tid);
02651 
02661 void                fbSessionFree(
02662     fbSession_t         *session);
02663 
02676 void                fbSessionResetExternal(
02677     fbSession_t         *session);
02678 
02694 void                fbSessionSetDomain(
02695     fbSession_t         *session,
02696     uint32_t            domain);
02697 
02705 uint32_t            fbSessionGetDomain(
02706     fbSession_t         *session);
02707 
02708 #if HAVE_SPREAD
02709 
02730 gboolean        fbSessionAddTemplatesMulticast(
02731     fbSession_t      *session,
02732     char             **groups,
02733     gboolean         internal,
02734     uint16_t         tid,
02735     fbTemplate_t     *tmpl,
02736     GError           **err);
02737 
02738 #endif
02739 
02752 gboolean            fbSessionExportTemplate(
02753     fbSession_t         *session,
02754     uint16_t            tid,
02755     GError              **err);
02756 
02768 gboolean            fbSessionExportTemplates(
02769     fbSession_t         *session,
02770     GError              **err);
02771 
02790 uint16_t            fbSessionAddTemplate(
02791     fbSession_t         *session,
02792     gboolean            internal,
02793     uint16_t            tid,
02794     fbTemplate_t        *tmpl,
02795     GError              **err);
02796 
02809 gboolean            fbSessionRemoveTemplate(
02810     fbSession_t         *session,
02811     gboolean            internal,
02812     uint16_t            tid,
02813     GError              **err);
02814 
02826 fbTemplate_t        *fbSessionGetTemplate(
02827     fbSession_t         *session,
02828     gboolean            internal,
02829     uint16_t            tid,
02830     GError              **err);
02831 
02844 fbExporter_t        *fbExporterAllocNet(
02845     fbConnSpec_t        *spec);
02846 
02847 #if HAVE_SPREAD
02848 
02859 int fbCollectorGetSpreadReturnGroups(
02860     fbCollector_t *collector,
02861     char *groups[]);
02862 
02876 fbExporter_t        *fbExporterAllocSpread(
02877     fbSpreadParams_t      *params );
02878 
02879 #endif /* HAVE_SPREAD */
02880 
02892 fbExporter_t        *fbExporterAllocFile(
02893     const char          *path);
02894 
02903 fbExporter_t        *fbExporterAllocFP(
02904     FILE                *fp);
02905 
02918 void                fbExporterSetStream(
02919     fbExporter_t        *exporter,
02920     int                 sctp_stream);
02921 
02934 void                fbExporterAutoStream(
02935     fbExporter_t        *exporter);
02936 
02944 void                fbExporterClose(
02945     fbExporter_t       *exporter);
02946 
02959 fbCollector_t       *fbCollectorAllocFile(
02960     void                *ctx,
02961     const char          *path,
02962     GError              **err);
02963 
02974 fbCollector_t       *fbCollectorAllocFP(
02975     void                *ctx,
02976     FILE                *fp);
02977 
02978 
02979 #ifdef HAVE_SPREAD
02980 
02990 fbCollector_t       *fbCollectorAllocSpread (
02991     void                *ctx,
02992     fbSpreadParams_t    *params,
02993     GError              **err );
02994 
02995 #endif /* HAVE_SPREAD */
02996 
03007 void                *fbCollectorGetContext(
03008     fbCollector_t       *collector);
03009 
03020 void                fbCollectorClose(
03021     fbCollector_t       *collector);
03022 
03023 
03035 void                fbCollectorSetAcceptOnly(
03036     fbCollector_t       *collector,
03037     struct sockaddr     *address,
03038     size_t              address_length);
03039 
03065 fbListener_t        *fbListenerAlloc(
03066     fbConnSpec_t            *spec,
03067     fbSession_t             *session,
03068     fbListenerAppInit_fn    appinit,
03069     fbListenerAppFree_fn    appfree,
03070     GError                  **err);
03071 
03079 void                fbListenerFree(
03080     fbListener_t            *listener);
03081 
03103 fBuf_t              *fbListenerWait(
03104     fbListener_t            *listener,
03105     GError                  **err);
03106 
03117 fBuf_t              *fbListenerWaitNoCollectors(
03118     fbListener_t            *listener,
03119     GError                  **err);
03120 
03128 void                fbListenerInterrupt(
03129     fbListener_t            *listener);
03130 
03131 
03147 gboolean            fbListenerGetCollector(
03148     fbListener_t        *listener,
03149     fbCollector_t       **collector,
03150     GError              **err);
03151 
03152 
03153 
03154 
03170 gboolean    fbCollectorClearTranslator(
03171     fbCollector_t   *collector,
03172     GError          **err);
03173 
03174 
03190 gboolean    fbCollectorSetNetflowV9Translator(
03191     fbCollector_t               *collector,
03192     GError                      **err);
03193 
03214 uint32_t fbCollectorGetNetflowMissed(
03215     fbCollector_t         *collector,
03216     struct sockaddr       *peer,
03217     size_t                 peerlen,
03218     uint32_t               obdomain);
03219 
03226 struct sockaddr* fbCollectorGetPeer(
03227     fbCollector_t   *collector);
03228 
03235 uint32_t fbCollectorGetObservationDomain(
03236     fbCollector_t  *collector);
03237 
03250 void fbCollectorSetUDPMultiSession(
03251     fbCollector_t *collector,
03252     gboolean       multi_session);
03253 
03268 void fbCollectorManageUDPStreamByPort(
03269     fbCollector_t *collector,
03270     gboolean       manage_port);
03271 
03272 #ifdef __cplusplus
03273 } /* extern "C" */
03274 #endif
03275 
03276 #endif
© 2006-2013 Carnegie Mellon University