/* ** Copyright (C) 2004-2007 by Carnegie Mellon University. ** ** @OPENSOURCE_HEADER_START@ ** ** Use of the SILK system and related source code is subject to the terms ** of the following licenses: ** ** GNU Public License (GPL) Rights pursuant to Version 2, June 1991 ** Government Purpose License Rights (GPLR) pursuant to DFARS 252.225-7013 ** ** NO WARRANTY ** ** ANY INFORMATION, MATERIALS, SERVICES, INTELLECTUAL PROPERTY OR OTHER ** PROPERTY OR RIGHTS GRANTED OR PROVIDED BY CARNEGIE MELLON UNIVERSITY ** PURSUANT TO THIS LICENSE (HEREINAFTER THE "DELIVERABLES") ARE ON AN ** "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY ** KIND, EITHER EXPRESS OR IMPLIED AS TO ANY MATTER INCLUDING, BUT NOT ** LIMITED TO, WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, ** MERCHANTABILITY, INFORMATIONAL CONTENT, NONINFRINGEMENT, OR ERROR-FREE ** OPERATION. CARNEGIE MELLON UNIVERSITY SHALL NOT BE LIABLE FOR INDIRECT, ** SPECIAL OR CONSEQUENTIAL DAMAGES, SUCH AS LOSS OF PROFITS OR INABILITY ** TO USE SAID INTELLECTUAL PROPERTY, UNDER THIS LICENSE, REGARDLESS OF ** WHETHER SUCH PARTY WAS AWARE OF THE POSSIBILITY OF SUCH DAMAGES. ** LICENSEE AGREES THAT IT WILL NOT MAKE ANY WARRANTY ON BEHALF OF ** CARNEGIE MELLON UNIVERSITY, EXPRESS OR IMPLIED, TO ANY PERSON ** CONCERNING THE APPLICATION OF OR THE RESULTS TO BE OBTAINED WITH THE ** DELIVERABLES UNDER THIS LICENSE. ** ** Licensee hereby agrees to defend, indemnify, and hold harmless Carnegie ** Mellon University, its trustees, officers, employees, and agents from ** all claims or demands made against them (and any related losses, ** expenses, or attorney's fees) arising out of, or relating to Licensee's ** and/or its sub licensees' negligent use or willful misuse of or ** negligent conduct or willful misconduct regarding the Software, ** facilities, or other rights or assistance granted by Carnegie Mellon ** University under this License, including, but not limited to, any ** claims of product liability, personal injury, death, damage to ** property, or violation of any laws or regulations. ** ** Carnegie Mellon University Software Engineering Institute authored ** documents are sponsored by the U.S. Department of Defense under ** Contract F19628-00-C-0003. Carnegie Mellon University retains ** copyrights in all material produced under this contract. The U.S. ** Government retains a non-exclusive, royalty-free license to publish or ** reproduce these documents, or allow others to do so, for U.S. ** Government purposes only pursuant to the copyright license under the ** contract clause at 252.227.7013. ** ** @OPENSOURCE_HEADER_END@ */ #ifndef _PDUSOURCE_H #define _PDUSOURCE_H #include "silk.h" RCSIDENTVAR(rcsID_PDUSOURCE_H, "$SiLK: pdusource.h 7395 2007-06-06 14:30:52Z mthomas $"); #include "rwpack.h" #include "utils.h" #include "flowcap.h" #include "probeconf.h" #include "flowcap-stats.h" /* A PDU source is a record source based on PDU records. Once created, records can be requested of it via a pull mechanism. */ typedef struct pdu_source_t *pduSource_t; typedef sk_vector_t *pduSourcePool_t; /* * Creates a pdusource_t object. * port: The local port to bind to * neflow_source_address: The host we expect to recieve netflow from * (can be INADDR_ANY) * listen_on_address: The local address to bind to * (can be INADDR_ANY) * max_pdus: How many netflow PDUs to buffer * sockbufsize: How many bytes to allocate to the recieving * socket * logfn: Function with which to log messages * * Returns pduSource_t on success, NULL on error. */ pduSource_t pduSourceCreate( int port, in_addr_t netflow_source_address, in_addr_t listen_on_address, uint32_t max_pdus, int sockbufsize, sk_msg_fn_t logfn); /* * Creates a pdusource_t object. * path: The path of the file containing neflow pdus * logfn: Function with which to log messages * * Returns pduSource_t on success, NULL on error. */ pduSource_t pduFileSourceCreate( const char *path, sk_msg_fn_t logfn); /* * Use to destroy a pduSource_t. This will also cause a call to any * pduSourceGet function to stop blocking. */ void pduSourceDestroy(pduSource_t source); /* * Fills an rwRec from a pduSource, using the given endianness. * Returns 0 on success, -1 on error. */ int pduSourceGetGeneric( pduSource_t source, rwRec *rwrec); /* See pduSourceGetFlowcap for documentation. */ typedef enum { PDUS_BREAKABLE, PDUS_ABORT } pdu_source_breakable_t; /* * Fills a flowcapRec_t from a pduSource, using the given flowcap * version. * * Returns PDUS_BREAKABLE if is valid to break up a stream of flowcap * data after the returned record. * * Returns PDUS_ABORT on an error condition, or if an end of file is * reached. (In this case, the record is not filled.) */ pdu_source_breakable_t pduSourceGetFlowcap( pduSource_t source, flowcapRec_t *rec, int fc_version); /* * Creates a pduSourcePool_t object */ pduSourcePool_t pduSourcePoolCreate(void); /* * Creates a pduSourcePool_t object */ void pduSourcePoolDestroy(pduSourcePool_t pool); /* * Creates a pdu source based on a probe_def_t. The source will be * created in the context of the current pduSourcePool_t. This pool * saves state between calls to pduSourceCreateFromProbeDef so probes * with the same receive-as address and port can share a single * underlying thread. */ pduSource_t pduSourceCreateFromProbeDef( pduSourcePool_t pool, const probe_def_t *probe, uint32_t max_pdus, int sockbufsize, sk_msg_fn_t logfn); /* * Get statistics associated with a pdu source. */ void pduSourceGetStats(pduSource_t source, flowStats_t stats); /* * Clear out current statistics */ void pduSourceClearStats(pduSource_t source); /* * Set logging options */ void pduSourceSetLogopt(pduSource_t source, uint8_t opt); #endif /* _PDUSOURCE_H */ /* ** Local Variables: ** mode:c ** indent-tabs-mode:nil ** c-basic-offset:4 ** End: */