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 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 
00441 #ifndef _FB_PUBLIC_H_
00442 #define _FB_PUBLIC_H_
00443 #include <fixbuf/autoinc.h>
00444 
00445 #ifdef __cplusplus
00446 extern "C" {
00447 #endif
00448 
00449 #ident "$Id: public.h 18071 2011-11-18 20:27:39Z ecoff_svn $"
00450 
00451 /*
00452  * Error Handling Definitions
00453  */
00454 
00456 #define FB_ERROR_DOMAIN             g_quark_from_string("fixbufError")
00457 
00458 #define FB_ERROR_TMPL               1
00459 
00463 #define FB_ERROR_EOM                2
00464 
00469 #define FB_ERROR_EOF                3
00470 
00474 #define FB_ERROR_IPFIX              4
00475 
00480 #define FB_ERROR_BUFSZ              5
00481 
00482 #define FB_ERROR_IMPL               6
00483 
00484 #define FB_ERROR_IO                 7
00485 
00489 #define FB_ERROR_NLREAD             8
00490 
00495 #define FB_ERROR_NLWRITE            9
00496 
00499 #define FB_ERROR_NOELEMENT          10
00500 
00503 #define FB_ERROR_CONN               11
00504 
00508 #define FB_ERROR_NETFLOWV9          12
00509 
00512 #define FB_ERROR_TRANSMISC          13
00513 
00514 /*
00515  * Public Datatypes and Constants
00516  */
00517 
00518 struct fBuf_st;
00524 typedef struct fBuf_st fBuf_t;
00525 
00532 typedef struct fbVarfield_st {
00534     size_t      len;
00541     uint8_t     *buf;
00542 } fbVarfield_t;
00543 
00544 
00545 struct fbInfoModel_st;
00550 typedef struct fbInfoModel_st fbInfoModel_t;
00551 
00557 #define FB_IE_INIT(_name_, _ent_, _num_, _len_, _flags_) \
00558     { {.name = _name_}, 0, _ent_, _num_, _len_, _flags_ }
00559 
00565 #define FB_IE_NULL \
00566     { {.name = NULL}, 0, 0, 0, 0, 0 }
00567 
00572 #define FB_IE_F_NONE                            0x00000000
00573 
00578 #define FB_IE_F_ENDIAN                          0x00000001
00579 
00589 #define FB_IE_F_REVERSIBLE                      0x00000040
00590 
00598 #define FB_IE_F_ALIEN                           0x00000080
00599 
00603 #define FB_IE_VARLEN                            65535
00604 
00609 #define FB_IE_BASIC_LIST                        291
00610 
00614 #define FB_IE_SUBTEMPLATE_LIST                  292
00615 
00619 #define FB_IE_SUBTEMPLATE_MULTILIST             293
00620 
00628 #define FB_IE_PEN_REVERSE                       29305
00629 
00638 #define FB_IE_VENDOR_BIT_REVERSE                0x4000
00639 
00645 #define FB_CISCO_GENERIC                       9999
00646 
00653 #define FB_CISCO_ASA_EVENT_ID                  9998
00654 
00661 #define FB_CISCO_ASA_EVENT_XTRA                9997
00662 
00668 #define FB_IE_REVERSE_STR                       "reverse"
00669 
00671 #define FB_IE_REVERSE_STRLEN                    7
00672 
00681 typedef struct fbInfoElement_st {
00683     union {
00689         const struct fbInfoElement_st *canon;
00694         char                    *name;
00695     }  ref;
00696 
00702     uint32_t            midx;
00704     uint32_t            ent;
00709     uint16_t            num;
00711     uint16_t            len;
00713     uint32_t            flags;
00714 } fbInfoElement_t;
00715 
00720 #define FB_TID_AUTO         0
00721 
00725 #define FB_TID_TS           2
00726 
00730 #define FB_TID_OTS          3
00731 
00735 #define FB_TID_MIN_DATA     256
00736 
00737 struct fbTemplate_st;
00743 typedef struct fbTemplate_st fbTemplate_t;
00744 
00750 #define FB_IESPEC_NULL { NULL, 0, 0 }
00751 
00757 typedef struct fbInfoElementSpec_st {
00759     char                *name;
00764     uint16_t            len_override;
00771     uint32_t            flags;
00772 } fbInfoElementSpec_t;
00773 
00774 struct fbSession_st;
00781 typedef struct fbSession_st fbSession_t;
00782 
00784 typedef enum fbTransport_en {
00789     FB_SCTP,
00791     FB_TCP,
00793     FB_UDP,
00799     FB_DTLS_SCTP,
00804     FB_TLS_TCP,
00810     FB_DTLS_UDP,
00811 } fbTransport_t;
00812 
00817 typedef struct fbConnSpec_st {
00819     fbTransport_t       transport;
00821     char                *host;
00823     char                *svc;
00825     char                *ssl_ca_file;
00827     char                *ssl_cert_file;
00829     char                *ssl_key_file;
00831     char                *ssl_key_pass;
00836     void                *vai;
00841     void                *vssl_ctx;
00842 } fbConnSpec_t;
00843 
00847 #define FB_CONNSPEC_INIT { FB_SCTP, NULL, NULL,         \
00848                            NULL, NULL, NULL, NULL,      \
00849                            NULL, NULL }
00850 
00851 #if HAVE_SPREAD
00852 
00857 #define FB_SPREADPARAMS_INIT { 0, 0, 0 }
00858 
00859 typedef struct fbSpreadParams_st {
00862     fbSession_t * session;
00865     char *          daemon;
00868     char **         groups;
00869 } fbSpreadParams_t;
00870 
00871 #endif /* HAVE_SPREAD */
00872 
00873 struct fbExporter_st;
00879 typedef struct fbExporter_st fbExporter_t;
00880 
00881 struct fbCollector_st;
00889 typedef struct fbCollector_st fbCollector_t;
00890 
00891 struct fbListener_st;
00898 typedef struct fbListener_st fbListener_t;
00899 
00903 typedef struct fbListenerEntry_st fbListenerEntry_t;
00904 
00908 struct fbListenerEntry_st
00909 {
00911     fbListenerEntry_t  *next;
00913     fbListenerEntry_t  *prev;
00915     fbListener_t       *listener;
00916 };
00917 
00921 typedef struct fbListenerGroupResult_st fbListenerGroupResult_t;
00922 
00928 struct fbListenerGroupResult_st
00929 {
00931     fbListenerGroupResult_t *next;
00933     fbListener_t    *listener;
00935     fBuf_t          *fbuf;
00936 };
00937 
00941 typedef struct fbListenerGroup_st
00942 {
00944     fbListenerEntry_t   *head;
00946     void                *tableForDescriptorsToListeners;
00947 } fbListenerGroup_t;
00948 
00961 typedef gboolean (*fbAcceptCallback_fn) (
00962     fBuf_t                     *buf,
00963     fbListener_t               *listener,
00964     struct sockaddr            *sAddr,
00965     GError                    **err);
00966 
00977 typedef void (*fbNewTemplateCallback_fn) (
00978     fbSession_t    *session,
00979     uint16_t        tid,
00980     fbTemplate_t   *tmpl);
00981 
00985 #define UNDEFINED       0xFF
00986 
00989 #define NONE_OF         0x00
00990 
00993 #define EXACTLY_ONE_OF  0x01
00994 
00997 #define ONE_OR_MORE_OF  0x02
00998 
01001 #define ALL_OF          0x03
01002 
01005 #define ORDERED         0x04
01006 
01013 gboolean fbListValidSemantic(
01014     uint8_t semantic);
01015 
01016 /****** BASICLIST FUNCTIONS AND STRUCTS *******/
01022 typedef struct fbBasicList_st {
01024     uint8_t                 semantic;
01026     uint16_t                numElements;
01028     uint16_t                dataLength;
01030     const fbInfoElement_t  *infoElement;
01032     uint8_t                *dataPtr;
01033 } fbBasicList_t;
01034 
01035 
01041 fbBasicList_t*  fbBasicListAlloc(
01042     void);
01043 
01056 void* fbBasicListInit(
01057     fbBasicList_t          *basicListPtr,
01058     uint8_t                 semantic,
01059     const fbInfoElement_t  *infoElement,
01060     uint16_t                numElements);
01061 
01076 void* fbBasicListInitWithOwnBuffer(
01077     fbBasicList_t          *basicListPtr,
01078     uint8_t                 semantic,
01079     const fbInfoElement_t  *infoElement,
01080     uint16_t                numElements,
01081     uint16_t                dataLength,
01082     uint8_t                *dataPtr);
01083 
01096 void fbBasicListCollectorInit(
01097     fbBasicList_t  *basicListPtr);
01098 
01099 
01107 uint8_t fbBasicListGetSemantic(
01108     fbBasicList_t  *basicListPtr);
01109 
01118 void fbBasicListSetSemantic(
01119     fbBasicList_t  *basicListPtr,
01120     uint8_t         semantic);
01121 
01122 
01130 const fbInfoElement_t*  fbBasicListGetInfoElement(
01131      fbBasicList_t  *basicListPtr);
01132 
01138 void* fbBasicListGetDataPtr(
01139     fbBasicList_t   *basicListPtr);
01140 
01149 void* fbBasicListGetIndexedDataPtr(
01150     fbBasicList_t   *basicListPtr,
01151     uint16_t         index);
01152 
01161 void* fbBasicListGetNextPtr(
01162     fbBasicList_t   *basicListPtr,
01163     void            *currentPtr);
01164 
01174 void* fbBasicListRealloc(
01175     fbBasicList_t  *basicList,
01176     uint16_t        newNumElements);
01177 
01185 void* fbBasicListAddNewElements(
01186     fbBasicList_t  *basicList,
01187     uint16_t        numNewElements);
01188 
01194 void fbBasicListClear(
01195     fbBasicList_t  *basicListPtr);
01196 
01203 void fbBasicListClearWithoutFree(
01204     fbBasicList_t  *basicList);
01205 
01211 void fbBasicListFree(
01212     fbBasicList_t  *basicListPtr);
01213 
01214 /******* END OF BASICLIST ********/
01215 
01216 
01217 
01218 /******* SUBTEMPLATELIST FUNCTIONS ****/
01219 
01227 typedef struct fbSubTemplateList_st {
01229     uint8_t             semantic;
01231     uint16_t            tmplID;
01233     uint16_t            numElements;
01235     const fbTemplate_t *tmpl;
01238     union {
01239         size_t              length;
01240         uint64_t            extra;
01241     } dataLength;
01243     uint8_t            *dataPtr;
01244 } fbSubTemplateList_t;
01245 
01252 fbSubTemplateList_t* fbSubTemplateListAlloc(
01253     void);
01254 
01267 void*  fbSubTemplateListInit(
01268     fbSubTemplateList_t    *sTL,
01269     uint8_t                 semantic,
01270     uint16_t                tmplID,
01271     const fbTemplate_t     *tmpl,
01272     uint16_t                numElements);
01273 
01288 void* fbSubTemplateListInitWithOwnBuffer(
01289     fbSubTemplateList_t    *subTemplateList,
01290     uint8_t                 semantic,
01291     uint16_t                tmplID,
01292     const fbTemplate_t     *tmpl,
01293     uint16_t                numElements,
01294     uint16_t                dataLength,
01295     uint8_t                *dataPtr);
01296 
01307 void fbSubTemplateListCollectorInit(
01308     fbSubTemplateList_t    *STL);
01309 
01315 void* fbSubTemplateListGetDataPtr(
01316     const fbSubTemplateList_t  *subTemplateListPtr);
01317 
01325 void* fbSubTemplateListGetIndexedDataPtr(
01326     const fbSubTemplateList_t  *subTemplateListPtr,
01327     uint16_t                    index);
01328 
01340 void* fbSubTemplateListGetNextPtr(
01341     const fbSubTemplateList_t  *subTemplateListPtr,
01342     void                       *currentPtr);
01343 
01350 void fbSubTemplateListSetSemantic(
01351     fbSubTemplateList_t    *subTemplateListPtr,
01352     uint8_t                 semantic);
01353 
01359 uint8_t fbSubTemplateListGetSemantic(
01360     fbSubTemplateList_t    *subTemplateListPtr);
01361 
01367 const fbTemplate_t* fbSubTemplateListGetTemplate(
01368     fbSubTemplateList_t    *subTemplateListPtr);
01369 
01375 uint16_t fbSubTemplateListGetTemplateID(
01376     fbSubTemplateList_t    *subTemplateListPtr);
01377 
01388 void* fbSubTemplateListRealloc(
01389     fbSubTemplateList_t    *subTemplateList,
01390     uint16_t                newNumElements);
01391 
01400 void* fbSubTemplateListAddNewElements(
01401     fbSubTemplateList_t    *subTemplateList,
01402     uint16_t                numNewElements);
01403 
01417 void fbSubTemplateListClear(
01418     fbSubTemplateList_t    *subTemplateListPtr);
01419 
01428 void fbSubTemplateListClearWithoutFree(
01429     fbSubTemplateList_t    *subTemplateListPtr);
01430 
01438 void fbSubTemplateListFree(
01439     fbSubTemplateList_t    *subTemplateListPtr);
01440 
01441 /********* END OF SUBTEMPLATELIST **********/
01459 typedef struct fbSubTemplateMultiListEntry_st {
01461     uint16_t        tmplID;
01463     uint16_t        numElements;
01465     fbTemplate_t   *tmpl;
01467     size_t          dataLength;
01469     uint8_t        *dataPtr;
01470 } fbSubTemplateMultiListEntry_t;
01471 
01476 typedef struct fbSubTemplateMultiList_st {
01478     uint8_t                         semantic;
01480     uint16_t                        numElements;
01482     fbSubTemplateMultiListEntry_t  *firstEntry;
01483 } fbSubTemplateMultiList_t;
01484 
01494 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListInit(
01495     fbSubTemplateMultiList_t   *STML,
01496     uint8_t                     semantic,
01497     uint16_t                    numElements);
01498 
01505 void fbSubTemplateMultiListSetSemantic(
01506     fbSubTemplateMultiList_t   *STML,
01507     uint8_t                     semantic);
01508 
01514 uint8_t fbSubTemplateMultiListGetSemantic(
01515     fbSubTemplateMultiList_t   *STML);
01516 
01523 void fbSubTemplateMultiListClear(
01524     fbSubTemplateMultiList_t   *STML);
01525 
01535 void fbSubTemplateMultiListClearEntries(
01536     fbSubTemplateMultiList_t   *STML);
01537 
01543 void fbSubTemplateMultiListFree(
01544     fbSubTemplateMultiList_t   *STML);
01545 
01555 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListRealloc(
01556     fbSubTemplateMultiList_t   *STML,
01557     uint16_t                    newNumEntries);
01558 
01567 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListAddNewEntries(
01568     fbSubTemplateMultiList_t   *STML,
01569     uint16_t                    numNewEntries);
01570 
01576 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetFirstEntry(
01577     fbSubTemplateMultiList_t   *STML);
01578 
01586 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetIndexedEntry(
01587     fbSubTemplateMultiList_t   *STML,
01588     uint16_t                    index);
01589 
01601 fbSubTemplateMultiListEntry_t* fbSubTemplateMultiListGetNextEntry(
01602     fbSubTemplateMultiList_t       *STML,
01603     fbSubTemplateMultiListEntry_t  *currentEntry);
01604 
01616 void* fbSubTemplateMultiListEntryInit(
01617     fbSubTemplateMultiListEntry_t  *entry,
01618     uint16_t                        tmplID,
01619     fbTemplate_t                   *tmpl,
01620     uint16_t                        numElements);
01621 
01632 void *fbSubTemplateMultiListEntryRealloc(
01633     fbSubTemplateMultiListEntry_t  *entry,
01634     uint16_t                        newNumElements);
01635 
01642 void fbSubTemplateMultiListEntryClear(
01643     fbSubTemplateMultiListEntry_t   *entry);
01644 
01651 void* fbSubTemplateMultiListEntryGetDataPtr(
01652     fbSubTemplateMultiListEntry_t   *entry);
01653 
01665 void* fbSubTemplateMultiListEntryNextDataPtr(
01666     fbSubTemplateMultiListEntry_t   *entry,
01667     void                            *currentPtr);
01668 
01679 void* fbSubTemplateMultiListEntryGetIndexedPtr(
01680     fbSubTemplateMultiListEntry_t   *entry,
01681     uint16_t                         index);
01682 
01689 const fbTemplate_t* fbSubTemplateMultiListEntryGetTemplate(
01690     fbSubTemplateMultiListEntry_t   *entry);
01691 
01698 uint16_t fbSubTemplateMultiListEntryGetTemplateID(
01699     fbSubTemplateMultiListEntry_t   *entry);
01700 
01701 /************** END OF STML FUNCTIONS */
01702 
01708 fbListenerGroup_t* fbListenerGroupAlloc(
01709     void);
01710 
01720 int fbListenerGroupAddListener(
01721     fbListenerGroup_t          *group,
01722     const fbListener_t         *listener);
01723 
01733 int fbListenerGroupDeleteListener(
01734     fbListenerGroup_t          *group,
01735     const fbListener_t         *listener);
01736 
01747 fbListenerGroupResult_t* fbListenerGroupWait(
01748     fbListenerGroup_t          *group,
01749     GError                     **err);
01750 
01761 gboolean fbListenerWaitAcceptCallback(
01762     fbListener_t           *listener,
01763     fbAcceptCallback_fn     callback,
01764     GError                **err);
01765 
01778 gboolean fbListenerGroupWaitAcceptCallback(
01779     fbListenerGroup_t   *group,
01780     fbAcceptCallback_fn  callback,
01781     GError             **err);
01782 
01795 fBuf_t  *fbListenerOwnSocketCollectorTCP(
01796     fbListener_t   *listener,
01797     int             sock,
01798     GError        **err);
01799 
01809 fBuf_t  *fbListenerOwnSocketCollectorTLS(
01810     fbListener_t   *listener,
01811     int             sock,
01812     GError        **err);
01813 
01819 void    fBufInterruptSocket(
01820     fBuf_t         *fbuf);
01821 
01822 
01832 typedef gboolean        (*fbListenerAppInit_fn) (
01833     fbListener_t                *listener,
01834     void                        **ctx,
01835     int                         fd,
01836     struct sockaddr             *peer,
01837     size_t                      peerlen,
01838     GError                      **err);
01839 
01844 typedef void            (*fbListenerAppFree_fn) (
01845     void                        *ctx);
01846 
01847 /*
01848  * Public Function Calls. These calls will remain available and retain
01849  * their functionality in all subsequent versions of libfixbuf.
01850  */
01851 
01852 
01869 gboolean            fBufSetInternalTemplate(
01870     fBuf_t              *fbuf,
01871     uint16_t            int_tid,
01872     GError              **err);
01873 
01891 gboolean            fBufSetExportTemplate(
01892     fBuf_t              *fbuf,
01893     uint16_t            ext_tid,
01894     GError              **err);
01895 
01896 #if HAVE_SPREAD
01897 
01914 void                 fBufSetSpreadExportGroup(
01915     fBuf_t             *fbuf,
01916     char               **groups,
01917     int                num_groups,
01918     GError             **err);
01919 #endif
01920 
01935 void                fBufSetAutomaticMode(
01936     fBuf_t              *fbuf,
01937     gboolean            automatic);
01938 
01946 fbSession_t         *fBufGetSession(
01947     fBuf_t              *fbuf);
01948 
01957 void                fBufFree(
01958     fBuf_t              *fbuf);
01959 
01972 fBuf_t              *fBufAllocForExport(
01973     fbSession_t         *session,
01974     fbExporter_t        *exporter);
01975 
01985 fbExporter_t        *fBufGetExporter(
01986     fBuf_t              *fbuf);
01987 
01998 void                fBufSetExporter(
01999     fBuf_t              *fbuf,
02000     fbExporter_t        *exporter);
02001 
02002 
02026 gboolean            fBufAppend(
02027     fBuf_t              *fbuf,
02028     uint8_t             *recbase,
02029     size_t              recsize,
02030     GError              **err);
02031 
02041 gboolean            fBufEmit(
02042     fBuf_t              *fbuf,
02043     GError              **err);
02044 
02056 void                fBufSetExportTime(
02057     fBuf_t              *fbuf,
02058     uint32_t            extime);
02059 
02072 fBuf_t              *fBufAllocForCollection(
02073     fbSession_t         *session,
02074     fbCollector_t       *collector);
02075 
02085 fbCollector_t       *fBufGetCollector(
02086     fBuf_t              *fbuf);
02087 
02098 void                fBufSetCollector(
02099     fBuf_t              *fbuf,
02100     fbCollector_t       *collector);
02101 
02131 gboolean            fBufNext(
02132     fBuf_t              *fbuf,
02133     uint8_t             *recbase,
02134     size_t              *recsize,
02135     GError              **err);
02136 
02150 gboolean            fBufNextMessage(
02151     fBuf_t              *fbuf,
02152     GError              **err);
02153 
02161 uint32_t            fBufGetExportTime(
02162     fBuf_t              *fbuf);
02163 
02183 fbTemplate_t    *fBufGetCollectionTemplate(
02184     fBuf_t          *fbuf,
02185     uint16_t        *ext_tid);
02186 
02205 fbTemplate_t    *fBufNextCollectionTemplate(
02206     fBuf_t          *fbuf,
02207     uint16_t        *ext_tid,
02208     GError          **err);
02209 
02221 fbInfoModel_t       *fbInfoModelAlloc(void);
02222 
02231 void                fbInfoModelFree(
02232     fbInfoModel_t       *model);
02233 
02248 void                fbInfoModelAddElement(
02249     fbInfoModel_t       *model,
02250     fbInfoElement_t     *ie);
02251 
02266 void                fbInfoModelAddElementArray(
02267     fbInfoModel_t       *model,
02268     fbInfoElement_t     *ie);
02269 
02281 const fbInfoElement_t     *fbInfoModelGetElementByName(
02282     fbInfoModel_t       *model,
02283     const char          *name);
02284 
02297 const fbInfoElement_t    *fbInfoModelGetElementByID(
02298     fbInfoModel_t       *model,
02299     uint16_t            id,
02300     uint32_t            ent);
02301 
02319 fbTemplate_t        *fbTemplateAlloc(
02320     fbInfoModel_t       *model);
02321 
02338 gboolean            fbTemplateAppend(
02339     fbTemplate_t        *tmpl,
02340     fbInfoElement_t     *ex_ie,
02341     GError              **err);
02342 
02358 gboolean            fbTemplateAppendSpec(
02359     fbTemplate_t        *tmpl,
02360     fbInfoElementSpec_t *spec,
02361     uint32_t            flags,
02362     GError              **err);
02363 
02381 gboolean            fbTemplateAppendSpecArray(
02382     fbTemplate_t        *tmpl,
02383     fbInfoElementSpec_t *spec,
02384     uint32_t            flags,
02385     GError              **err);
02386 
02394 uint32_t            fbTemplateCountElements(
02395     fbTemplate_t        *tmpl);
02396 
02406 void                fbTemplateSetOptionsScope(
02407     fbTemplate_t        *tmpl,
02408     uint16_t            scope_count);
02409 
02417 uint32_t            fbTemplateGetOptionsScope(
02418     fbTemplate_t        *tmpl);
02419 
02431 gboolean           fbTemplateContainsElement(
02432     fbTemplate_t            *tmpl,
02433     const fbInfoElement_t   *ex_ie);
02434 
02444 gboolean           fbTemplateContainsElementByName(
02445     fbTemplate_t        *tmpl,
02446     fbInfoElementSpec_t *spec);
02447 
02457 gboolean           fbTemplateContainsAllElementsByName(
02458     fbTemplate_t        *tmpl,
02459     fbInfoElementSpec_t *spec);
02460 
02468 void                fbTemplateFreeUnused(
02469     fbTemplate_t        *tmpl);
02470 
02484 fbSession_t         *fbSessionAlloc(
02485     fbInfoModel_t       *model);
02486 
02500 void fbSessionAddTemplateCallback(
02501     fbSession_t                *session,
02502     fbNewTemplateCallback_fn    callback);
02503 
02515 void fbSessionAddTemplatePair(
02516     fbSession_t    *session,
02517     uint16_t        ent_tid,
02518     uint16_t        int_tid);
02519 
02529 void fbSessionRemoveTemplatePair(
02530     fbSession_t    *session,
02531     uint16_t        ext_tid);
02532 
02541 uint16_t    fbSessionLookupTemplatePair(
02542     fbSession_t    *session,
02543     uint16_t        ext_tid);
02544 
02554 void                fbSessionFree(
02555     fbSession_t         *session);
02556 
02569 void                fbSessionResetExternal(
02570     fbSession_t         *session);
02571 
02587 void                fbSessionSetDomain(
02588     fbSession_t         *session,
02589     uint32_t            domain);
02590 
02598 uint32_t            fbSessionGetDomain(
02599     fbSession_t         *session);
02600 
02601 #if HAVE_SPREAD
02602 
02623 gboolean        fbSessionAddTemplatesMulticast(
02624     fbSession_t      *session,
02625     char             **groups,
02626     gboolean         internal,
02627     uint16_t         tid,
02628     fbTemplate_t     *tmpl,
02629     GError           **err);
02630 
02631 #endif
02632 
02645 gboolean            fbSessionExportTemplate(
02646     fbSession_t         *session,
02647     uint16_t            tid,
02648     GError              **err);
02649 
02661 gboolean            fbSessionExportTemplates(
02662     fbSession_t         *session,
02663     GError              **err);
02664 
02680 uint16_t            fbSessionAddTemplate(
02681     fbSession_t         *session,
02682     gboolean            internal,
02683     uint16_t            tid,
02684     fbTemplate_t        *tmpl,
02685     GError              **err);
02686 
02699 gboolean            fbSessionRemoveTemplate(
02700     fbSession_t         *session,
02701     gboolean            internal,
02702     uint16_t            tid,
02703     GError              **err);
02704 
02716 fbTemplate_t        *fbSessionGetTemplate(
02717     fbSession_t         *session,
02718     gboolean            internal,
02719     uint16_t            tid,
02720     GError              **err);
02721 
02734 fbExporter_t        *fbExporterAllocNet(
02735     fbConnSpec_t        *spec);
02736 
02737 #if HAVE_SPREAD
02738 
02749 int fbCollectorGetSpreadReturnGroups(
02750         fbCollector_t *collector,
02751         char *groups[]);
02752 
02766 fbExporter_t        *fbExporterAllocSpread(
02767     fbSpreadParams_t      *params );
02768 
02769 #endif /* HAVE_SPREAD */
02770 
02782 fbExporter_t        *fbExporterAllocFile(
02783     const char          *path);
02784 
02793 fbExporter_t        *fbExporterAllocFP(
02794     FILE                *fp);
02795 
02808 void                fbExporterSetStream(
02809     fbExporter_t        *exporter,
02810     int                 sctp_stream);
02811 
02824 void                fbExporterAutoStream(
02825     fbExporter_t        *exporter);
02826 
02834 void                fbExporterClose(
02835     fbExporter_t       *exporter);
02836 
02849 fbCollector_t       *fbCollectorAllocFile(
02850     void                *ctx,
02851     const char          *path,
02852     GError              **err);
02853 
02864 fbCollector_t       *fbCollectorAllocFP(
02865     void                *ctx,
02866     FILE                *fp);
02867 
02868 
02869 #ifdef HAVE_SPREAD
02870 
02880 fbCollector_t       *fbCollectorAllocSpread (
02881     void                *ctx,
02882     fbSpreadParams_t    *params,
02883     GError              **err );
02884 
02885 #endif /* HAVE_SPREAD */
02886 
02897 void                *fbCollectorGetContext(
02898     fbCollector_t       *collector);
02899 
02910 void                fbCollectorClose(
02911     fbCollector_t       *collector);
02912 
02913 
02914 
02940 fbListener_t        *fbListenerAlloc(
02941     fbConnSpec_t            *spec,
02942     fbSession_t             *session,
02943     fbListenerAppInit_fn    appinit,
02944     fbListenerAppFree_fn    appfree,
02945     GError                  **err);
02946 
02954 void                fbListenerFree(
02955     fbListener_t            *listener);
02956 
02978 fBuf_t              *fbListenerWait(
02979     fbListener_t            *listener,
02980     GError                  **err);
02981 
02992 fBuf_t              *fbListenerWaitNoCollectors(
02993     fbListener_t            *listener,
02994     GError                  **err);
03002 void                fbListenerInterrupt(
03003     fbListener_t            *listener);
03004 
03005 
03021 gboolean            fbListenerGetCollector(
03022     fbListener_t        *listener,
03023     fbCollector_t       **collector,
03024     GError              **err);
03025 
03026 
03027 
03028 
03044 gboolean    fbCollectorClearTranslator(
03045     fbCollector_t   *collector,
03046     GError          **err);
03047 
03048 
03064 gboolean    fbCollectorSetNetflowV9Translator(
03065     fbCollector_t               *collector,
03066     GError                      **err);
03067 
03074 struct sockaddr* fbCollectorGetPeer(
03075     fbCollector_t   *collector);
03076 
03077 
03078 
03079 #ifdef __cplusplus
03080 } /* extern "C" */
03081 #endif
03082 
03083 #endif
© 2006-2011 Carnegie Mellon University