private.h
Go to the documentation of this file.
1 
42 #ifndef _FB_PRIVATE_H_
43 #define _FB_PRIVATE_H_
44 #include <fixbuf/public.h>
45 
46 #if HAVE_SPREAD
47 #include <sp.h>
48 #include <pthread.h>
49 #endif
50 
51 
64 #define IPFIX_ENTERPRISE_BIT 0x8000
65 
68 #define FB_MSGLEN_MAX 65535
69 
71 #define FB_SSL_ERR_BUFSIZ 512
72 
73 #if HAVE_SPREAD
74 
78 typedef struct sp_groupname_st
79 {
80  char name[MAX_GROUP_NAME];
82 
84 #define FB_SPREAD_NUM_GROUPS 16
85 
87 #define FB_SPREAD_MTU 8192
88 
92 typedef struct fbSpreadSpec_st {
98  char * daemon;
106  int num_groups_to_send;
108  mailbox mbox;
110  char privgroup[MAX_GROUP_NAME + 2];
112  pthread_mutex_t write_lock;
114  pthread_t recv_thread;
116  mailbox recv_mbox;
118  char recv_privgroup[MAX_GROUP_NAME + 2];
120  GError *recv_err;
130  int recv_max;
132  char *recv_mess;
134 
135 #endif /* HAVE_SPREAD */
136 
143 typedef struct fbUDPConnSpec_st {
147  void *ctx;
149  union {
150  struct sockaddr so;
151  struct sockaddr_in ip4;
152  struct sockaddr_in6 ip6;
153  } peer;
155  size_t peerlen;
161  time_t last_seen;
163  uint32_t obdomain;
165  gboolean reject;
167 
168 
169 #ifdef DEFINE_TEMPLATE_METADATA_SPEC
170 /* Template metadata template */
171 static fbInfoElementSpec_t template_metadata_spec[] = {
172  {"templateId", 2, 0 },
173  {"paddingOctets", 6, 1 },
174  {"templateName", FB_IE_VARLEN, 0 },
175  {"templateDescription", FB_IE_VARLEN, 0 },
176  /* {"templateInformationElementList", FB_IE_VARLEN, 0 }, */
178 };
179 #endif
180 
185 typedef struct fbTemplateOptRec_st {
187  uint16_t template_id;
188  uint8_t template_padding[6];
194  /* fbSubTemplateList_t info_element_list; */
196 
208  uint16_t ie_count;
213  uint16_t scope_count;
220  uint16_t ie_len;
226  uint16_t ie_internal_len;
231  uint16_t tmpl_len;
233  gboolean is_varlen;
237  GHashTable *indices;
239  uint16_t *off_cache;
241  gboolean active;
246  gboolean default_length;
247 
248  fbTemplateOptRec_t *metadata_rec;
253  void *tmpl_ctx;
261  void *app_ctx;
262 };
263 
271  fBuf_t *fbuf);
272 
285  fBuf_t *fbuf,
286  uint16_t tmpl_id,
287  fbTemplate_t *tmpl,
288  gboolean revoked,
289  GError **err);
290 
291 #if HAVE_SPREAD
299  fBuf_t *fbuf,
300  char **groups,
301  int num_groups,
302  GError **err);
303 
304 
305 #endif
306 
313  fBuf_t *fbuf,
314  fbTemplate_t *tmpl);
315 
321  fBuf_t *fbuf,
322  fbSession_t *session);
323 
329  fBuf_t *fbuf);
330 
331 
337  fBuf_t *fbuf);
338 
347  fbInfoElement_t *ie);
348 
358  const fbInfoElement_t *a,
359  const fbInfoElement_t *b);
360 
369  gboolean tmpl,
370  fbInfoElement_t *ie);
371 
380  fbInfoModel_t *model,
381  fbInfoElement_t *ex_ie);
382 
393  fbInfoModel_t *model,
394  fbInfoElement_t *ex_ie,
395  fbInfoElement_t *tmpl_ie,
396  GError **err);
397 
410  fbInfoModel_t *model,
411  const char *name,
412  uint16_t len_override,
413  fbInfoElement_t *tmpl_ie,
414  GError **err);
415 
425  fbInfoModel_t *model,
426  fbInfoElement_t *ex_ie);
427 
437  fbInfoModel_t *model,
438  gboolean internal,
439  GError **err);
440 
449  fbTemplate_t *tmpl);
450 
459  fbTemplate_t *tmpl);
460 
469  fbTemplate_t *tmpl);
470 
480  const char *label,
481  uint16_t tid,
482  fbTemplate_t *tmpl);
483 
496  fbInfoModel_t *model,
497  gboolean internal,
498  GError **err);
499 
513  fbTemplate_t *tmpl,
514  uint16_t tid,
515  const char *name,
516  const char *description);
517 
525  fbSession_t *session);
526 
535  fbSession_t *session);
536 
544  fbSession_t *base);
545 
554  fbSession_t *session);
555 
564  fbSession_t *session,
565  uint32_t sequence);
566 
575  fbSession_t *session,
576  fBuf_t *fbuf);
577 
586  fbSession_t *session,
587  fbCollector_t *collector);
588 
589 #if HAVE_SPREAD
595  fbSession_t *session,
596  sp_groupname_t *groups,
597  unsigned int num_groups);
598 
605  fbSession_t *session,
606  char *group,
607  char *privgroup);
608 
614  fbSession_t *session,
615  char *group);
616 
622  fbSession_t *session,
623  char *group);
624 
631 unsigned int fbSessionGetGroup(
632  fbSession_t *session);
633 #endif
634 
642  fbSession_t *session);
643 
651  fbSession_t *session);
652 
660  fbSession_t *session);
661 
669  fbSession_t *session);
670 
680  fbConnSpec_t *spec,
681  gboolean passive,
682  GError **err);
683 
693  fbConnSpec_t *spec,
694  gboolean passive,
695  GError **err);
696 
705  fbConnSpec_t *spec);
706 
715  fbConnSpec_t *spec);
716 
717 #if HAVE_SPREAD
726  fbSpreadParams_t *spec);
727 
736  fbSpreadSpec_t *spec);
737 
746 const char * fbConnSpreadError(
747  int err );
748 
749 
760  fbExporter_t *exporter,
761  char **groups,
762  int num_groups);
763 
764 
775  fbExporter_t *exporter,
776  char **groups,
777  int num_groups);
778 
779 
780 #endif /* HAVE_SPREAD */
781 
790  fbExporter_t *exporter);
791 
802  fbExporter_t *exporter,
803  uint8_t *msgbase,
804  size_t msglen,
805  GError **err);
806 
815  fbExporter_t *exporter);
816 
825  fBuf_t *fbuf,
826  fbCollector_t *collector);
827 
840  fbListener_t *listener,
841  void *ctx,
842  int fd,
843  struct sockaddr *peer,
844  size_t peerlen,
845  GError **err);
846 
859  fbListener_t *listener,
860  void *ctx,
861  int fd,
862  struct sockaddr *peer,
863  size_t peerlen,
864  GError **err);
865 
876  fbCollector_t *collector,
877  uint8_t *msgbase,
878  size_t *msglen,
879  GError **err);
880 
889  fbCollector_t *collector);
890 
898  fbCollector_t *collector,
899  int fd);
900 
909  fbCollector_t *collector);
910 
919  fbCollector_t *collector);
920 
921 
936  uint8_t *hdr,
937  size_t b_len,
938  size_t *m_len,
939  GError **err);
940 
941 
942 #if HAVE_SPREAD
951  fbCollector_t *collector,
952  int group_offset);
953 
954 #endif
955 
964  fbListener_t *listener,
965  void *ctx);
966 
975  fBuf_t *fbuf,
976  fbListener_t *listener);
977 
986  fbListener_t *listener,
987  int fd);
988 
997  fbListener_t *listener);
998 
1006  fbCollector_t *collector);
1007 
1013  fbListener_t *listener,
1014  fbUDPConnSpec_t *spec,
1015  GError **err);
1016 
1023  fbListener_t *listener,
1024  fbSession_t *session);
1025 
1026 #endif
void * tmpl_ctx
Template context.
Definition: private.h:253
fbNewTemplateCallback_fn fbSessionNewTemplateCallback(fbSession_t *session)
Returns the callback function for a given session.
void fbSessionSetCollector(fbSession_t *session, fbCollector_t *collector)
fbSessionSetCollector
unsigned int fbSessionGetGroup(fbSession_t *session)
fbSessionGetGroup
fbSession_t * fbSessionClone(fbSession_t *base)
fbSessionClone
uint32_t fbSessionGetSequence(fbSession_t *session)
fbSessionGetSequence
struct fbUDPConnSpec_st * next
link to next one in list
Definition: private.h:157
pthread_t recv_thread
the receiver thread
Definition: private.h:114
int fbCollectorGetFD(fbCollector_t *collector)
fbCollectorGetFD
void * ctx
application context.
Definition: private.h:147
char * daemon
pointer to the daemon host address, in Spread format.
Definition: private.h:98
void * fbSessionNewTemplateCallbackAppCtx(fbSession_t *session)
Return the callback function's application context for a given session.
void fbSessionClearIntTmplTableFlag(fbSession_t *session)
fbSessionClearIntTmplTableFlag
void fbSessionSetGroup(fbSession_t *session, char *group)
fbSessionSetGroup
void fBufRewind(fBuf_t *fbuf)
fBufRewind
fbVarfield_t template_description
Template description (optional)
Definition: private.h:192
gboolean fbExporterCheckGroups(fbExporter_t *exporter, char **groups, int num_groups)
fbExporterCheckGroups
gboolean fbInfoElementEqual(const fbInfoElement_t *a, const fbInfoElement_t *b)
fbInfoElementEqual
int fbSessionExtTmplTableFlagIsSet(fbSession_t *session)
fbSessionExtTmplTableFlagIsSet
void fbTemplateRelease(fbTemplate_t *tmpl)
fbTemplateRelease
gboolean reject
reject flag
Definition: private.h:165
char privgroup[MAX_GROUP_NAME+2]
the connection private name
Definition: private.h:110
fbSession_t * fbListenerSetPeerSession(fbListener_t *listener, fbSession_t *session)
Set the session on the fbuf and listener.
int recv_max_groups
max size of group name array
Definition: private.h:124
void fbTemplateFree(fbTemplate_t *tmpl)
fbTemplateFree
void fbSessionSetPrivateGroup(fbSession_t *session, char *group, char *privgroup)
fbSessionSetPrivateGroup
const fbInfoElement_t * fbInfoModelAddAlienElement(fbInfoModel_t *model, fbInfoElement_t *ex_ie)
fbInfoModelAddAlienElement
size_t peerlen
size of peer
Definition: private.h:155
mailbox mbox
the mailbox for the connection
Definition: private.h:108
GHashTable * indices
Map of information element to index in ie_ary.
Definition: private.h:237
uint16_t template_id
Template ID.
Definition: private.h:187
void fbListenerRemoveLastBuf(fBuf_t *fbuf, fbListener_t *listener)
fbListenerRemoveLastBuf
uint16_t * off_cache
Field offset cache.
Definition: private.h:239
void fBufSetSession(fBuf_t *fbuf, fbSession_t *session)
fBufSetSession
void fbConnSpreadFree(fbSpreadSpec_t *spec)
fbConnSpreadFree
void fbExporterSetGroupsToSend(fbExporter_t *exporter, char **groups, int num_groups)
fbExporterSetGroupToSend
gboolean fbConnSpecInitTLS(fbConnSpec_t *spec, gboolean passive, GError **err)
fbConnSpecInitTLS
struct fbUDPConnSpec_st * prev
doubly linked to timeout faster
Definition: private.h:159
void fbSessionClearExtTmplTableFlag(fbSession_t *session)
fbSessionClearExtTmplTableFlag
void fbCollectorInterruptSocket(fbCollector_t *collector)
Interrupt the socket for a given collector to stop it from reading more data.
void fbTemplateAddMetadataRecord(fbTemplate_t *tmpl, uint16_t tid, const char *name, const char *description)
Sets the metadata_rec member of tmpl to a newly allocated fbTemplateOptRec_t, and sets its template I...
uint16_t tmpl_len
Total length of the template record or options template record defining this template.
Definition: private.h:231
char recv_privgroup[MAX_GROUP_NAME+2]
the connection private name for the receiver
Definition: private.h:118
gboolean fbConnSpecLookupAI(fbConnSpec_t *spec, gboolean passive, GError **err)
fbConnSpecLookupAI
fbConnSpec_t * fbListenerGetConnSpec(fbListener_t *listener)
fbListenerGetConnSpec
gboolean default_length
TRUE if any field was created using an fbInfoElementSpec_t with a defaulted length.
Definition: private.h:246
fbCollector_t * fbCollectorAllocTLS(fbListener_t *listener, void *ctx, int fd, struct sockaddr *peer, size_t peerlen, GError **err)
fbCollectorAllocTLS
fbInfoElement_t ** ie_ary
Ordered array of pointers to information elements in this template.
Definition: private.h:235
void fbTemplateRetain(fbTemplate_t *tmpl)
fbTemplateRetain
struct sp_groupname_st sp_groupname_t
sp_groupname_t
void * app_ctx
The application's Context pointer for the ctx_free function.
Definition: private.h:261
gboolean fbCollectMessageBuffer(uint8_t *hdr, size_t b_len, size_t *m_len, GError **err)
fbCollectMessageBuffer
fbTemplate_t * fbTemplateAllocTemplateMetadataTmpl(fbInfoModel_t *model, gboolean internal, GError **err)
Allocates a new Template to describe a record that holds Template Metadata.
uint16_t ie_count
Count of information elements in template.
Definition: private.h:208
struct fbUDPConnSpec_st fbUDPConnSpec_t
An UDP Connection specifier.
unsigned int fbSessionGetGroupOffset(fbSession_t *session, char *group)
fbSessionGetGroupOffset
gboolean fbCollectMessage(fbCollector_t *collector, uint8_t *msgbase, size_t *msglen, GError **err)
fbCollectMessage
fbConnSpec_t * fbConnSpecCopy(fbConnSpec_t *spec)
fbConnSpecCopy
gboolean is_varlen
Set to TRUE if this template contains any variable length IEs.
Definition: private.h:233
GError * recv_err
GError for thread errors, set by receiver, read by main.
Definition: private.h:120
fbSession_t * session
pointer to the session, this MUST be set to a valid session before the spec is passed to fbExporterAl...
Definition: private.h:95
gboolean fbCollectorHasTranslator(fbCollector_t *collector)
fbCollectorHasTranslator
int fbSessionIntTmplTableFlagIsSet(fbSession_t *session)
fbSessionIntTmplTableFlagIsSet
union fbUDPConnSpec_st::@0 peer
key to this conn spec
void fBufSetExportGroups(fBuf_t *fbuf, char **groups, int num_groups, GError **err)
fBufSetExportGroups
const fbInfoElement_t * fbInfoModelGetElement(fbInfoModel_t *model, fbInfoElement_t *ex_ie)
fbInfoModelGetElement
int ref_count
Reference count.
Definition: private.h:206
uint32_t obdomain
with peer address this is the key
Definition: private.h:163
fbSpreadSpec_t * fbConnSpreadCopy(fbSpreadParams_t *spec)
fbConnSpreadCopy
struct fbTemplateOptRec_st fbTemplateOptRec_t
Template metadata options record structure.
sp_groupname_t * groups_to_send
groups to send to
Definition: private.h:105
gboolean fbInfoElementCopyToTemplateByName(fbInfoModel_t *model, const char *name, uint16_t len_override, fbInfoElement_t *tmpl_ie, GError **err)
fbInfoElementCopyToTemplateByName
uint16_t ie_internal_len
Total length required to store this template in memory.
Definition: private.h:226
int recv_exit
flag to tell the thread to exit
Definition: private.h:122
gboolean active
TRUE if this template has been activated (is no longer mutable)
Definition: private.h:241
uint16_t ie_len
Total length of information elements in records described by this template.
Definition: private.h:220
void fbSessionSetSequence(fbSession_t *session, uint32_t sequence)
fbSessionSetSequence
void fbCollectorSetFD(fbCollector_t *collector, int fd)
fbCollectorSetFD
gboolean fBufAppendTemplate(fBuf_t *fbuf, uint16_t tmpl_id, fbTemplate_t *tmpl, gboolean revoked, GError **err)
fBufAppendTemplate
gboolean fbInfoElementCopyToTemplate(fbInfoModel_t *model, fbInfoElement_t *ex_ie, fbInfoElement_t *tmpl_ie, GError **err)
fbInfoElementCopyToTemplate
void fbListenerAppFree(fbListener_t *listener, void *ctx)
fbListenerAppFree
fbInfoModel_t * model
Information model (for looking up information elements by spec)
Definition: private.h:204
gboolean fbExportMessage(fbExporter_t *exporter, uint8_t *msgbase, size_t msglen, GError **err)
fbExportMessage
uint16_t scope_count
Count of scope information elements in template.
Definition: private.h:213
sp_groupname_t * recv_groups
groups array for SP_receive
Definition: private.h:128
void fbSessionSetGroupParams(fbSession_t *session, sp_groupname_t *groups, unsigned int num_groups)
fbSessionSetGroupParams
mailbox recv_mbox
the receiver's mailbox
Definition: private.h:116
char * recv_mess
message buffer for receive
Definition: private.h:132
fbTemplate_t * fbInfoElementAllocTypeTemplate2(fbInfoModel_t *model, gboolean internal, GError **err)
fbInfoElementAllocTypeTemplate2
void fbInfoElementDebug(gboolean tmpl, fbInfoElement_t *ie)
fbInfoElementDebug
int recv_max
length of message buffer
Definition: private.h:130
void fbCollectorRemoveListenerLastBuf(fBuf_t *fbuf, fbCollector_t *collector)
fbCollectorRemoveListenerLastBuf
int recv_num_groups
actual size of group name array
Definition: private.h:126
struct fbSpreadSpec_st fbSpreadSpec_t
fbSpreadSpec_t
gboolean fbListenerCallAppInit(fbListener_t *listener, fbUDPConnSpec_t *spec, GError **err)
call appinit from UDP
void fbTemplateDebug(const char *label, uint16_t tid, fbTemplate_t *tmpl)
fbTemplateDebug
void fbExporterFree(fbExporter_t *exporter)
fbExporterFree
uint16_t fBufGetExportTemplate(fBuf_t *fbuf)
fBufGetExportTemplate
uint16_t fBufGetInternalTemplate(fBuf_t *fbuf)
fBufGetInternalTemplate
const char * fbConnSpreadError(int err)
fbConnSpreadError
sp_groupname_t * groups
pointer to array of group names, must have at least one, and must be null term array
Definition: private.h:101
int num_groups
number of groups in groups
Definition: private.h:103
fbTemplateCtxFree_fn ctx_free
Callback to free the ctx pointer when template is freed.
Definition: private.h:257
void fbCollectorFree(fbCollector_t *collector)
fbCollectorFree
time_t last_seen
last seen time
Definition: private.h:161
gboolean fbCollectorTestGroupMembership(fbCollector_t *collector, int group_offset)
fbCollectorTestGroupMembership
fbSession_t * session
pointer to the session for this peer address
Definition: private.h:145
void fbSessionSetTemplateBuffer(fbSession_t *session, fBuf_t *fbuf)
fbSessionSetTemplateBuffer
void fBufRemoveTemplateTcplan(fBuf_t *fbuf, fbTemplate_t *tmpl)
fBufRemoveTemplateTcplan
fbVarfield_t template_name
Template name.
Definition: private.h:190
uint16_t fbExporterGetMTU(fbExporter_t *exporter)
fbExporterGetMTU
void fbListenerRemove(fbListener_t *listener, int fd)
fbListenerRemove
fbCollector_t * fbCollectorAllocSocket(fbListener_t *listener, void *ctx, int fd, struct sockaddr *peer, size_t peerlen, GError **err)
fbCollectorAllocSocket
void fbConnSpecFree(fbConnSpec_t *spec)
fbConnSpecFree
pthread_mutex_t write_lock
Spread write lock.
Definition: private.h:112
uint32_t fbInfoElementHash(fbInfoElement_t *ie)
fbInfoElementHash
fbSpreadSpec_t
Definition: private.h:92
An IPFIX template or options template structure.
Definition: private.h:202
Template metadata options record structure.
Definition: private.h:185
An UDP Connection specifier.
Definition: private.h:143
sp_groupname_t
Definition: private.h:79
Fixbuf IPFIX protocol library public interface.
void(* fbTemplateCtxFree_fn)(void *tmpl_ctx, void *app_ctx)
A callback function that is called when a template is freed.
Definition: public.h:2005
struct fbExporter_st fbExporter_t
IPFIX Exporting Process endpoint.
Definition: public.h:1941
void(* fbNewTemplateCallback_fn)(fbSession_t *session, uint16_t tid, fbTemplate_t *tmpl, void *app_ctx, void **tmpl_ctx, fbTemplateCtxFree_fn *tmpl_ctx_free_fn)
A callback function that will be called when the session receives a new external template.
Definition: public.h:2031
struct fbListener_st fbListener_t
IPFIX Collecting Process session listener.
Definition: public.h:1958
struct fbInfoModel_st fbInfoModel_t
An IPFIX information model.
Definition: public.h:1253
struct fbSession_st fbSession_t
An IPFIX Transport Session state container.
Definition: public.h:1840
struct fBuf_st fBuf_t
An IPFIX message buffer.
Definition: public.h:1228
struct fbCollector_st fbCollector_t
IPFIX Collecting Process endpoint.
Definition: public.h:1950
#define FB_IE_VARLEN
Information element length constant for variable-length IE.
Definition: public.h:1494
#define FB_IESPEC_NULL
Convenience macro defining a null information element specification initializer (fbInfoElementSpec_t)...
Definition: public.h:1802
Connection specifier.
Definition: public.h:1876
A single IPFIX Information Element definition.
Definition: public.h:1668
A single IPFIX Information Element specification.
Definition: public.h:1810
Spread connection parameters.
Definition: public.h:1922
A variable-length field value.
Definition: public.h:1236