-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathncaptool.h
More file actions
156 lines (131 loc) · 4.25 KB
/
ncaptool.h
File metadata and controls
156 lines (131 loc) · 4.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
* Copyright (c) 2007 by Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _ncaptool_h
#define _ncaptool_h
/* Externals. */
#ifdef __linux__
# define _GNU_SOURCE
#endif
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <stdio.h>
#include <time.h>
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <ncap.h>
#include <ncap_list.h>
/* Macros. */
#define NCAPTOOL_MSGMOD_VERSION 1
#ifdef HAVE_SA_LEN
#define NCAPTOOL_SA_LEN(sa) ((sa).sa_len)
#else
#define NCAPTOOL_SA_LEN(sa) ((sa).sa_family == AF_INET ? \
sizeof(struct sockaddr_in) :\
(sa).sa_family == AF_INET6 ? \
sizeof(struct sockaddr_in6) : 0)
#endif
#define NCAPTOOL_SINK_ENABLED(sink) ((sink)->st != st_none)
#define NCAPTOOL_SINK_ACTIVE(sink) ((sink)->fp != NULL)
/* Data structures. */
enum ncaptool_uvaltyp { ut_none = 0, ut_repl, ut_set, ut_clear };
struct ncaptool_uval {
enum ncaptool_uvaltyp ut;
unsigned val;
};
enum ncaptool_sinktyp { st_none = 0, st_stdout, st_file };
struct ncaptool_fpsink {
enum ncaptool_sinktyp st;
char * basename;
char * tmpname;
char * curname;
FILE * fp;
};
struct ncaptool_dgsink {
ISC_LINK(struct ncaptool_dgsink) link;
int dg;
unsigned count;
time_t embargo;
struct timespec last_fh;
};
union ncaptool_sockaddr {
struct sockaddr sa;
struct sockaddr_in s4;
struct sockaddr_in6 s6;
};
typedef union ncaptool_sockaddr ncaptool_sockaddr;
struct ncaptool_ctx;
typedef void (ncaptool_sendfails_func)(ncap_t, struct ncaptool_ctx *,
struct ncaptool_dgsink *,
struct timespec, int);
struct ncaptool_ctx {
int sinks;
int opened_sink;
unsigned freq;
struct timespec now;
struct ncaptool_fpsink trace, dump;
unsigned count_limit, time_limit;
unsigned dlev, mlev, flush, remote, wall, stripe;
unsigned count, msgs;
struct ncaptool_uval user1, user2;
struct {
unsigned count, limit, rate;
struct timespec start, ipg;
} quant;
size_t octets;
const char * kicker;
const char * endline;
ISC_LIST(struct ncaptool_dgsink) dgsinks;
struct ncaptool_dgsink * dgnext;
ISC_LIST(struct module) msgmods;
int (*getsock)(union ncaptool_sockaddr *, const char *, unsigned *,
unsigned *);
int (*getsink)(const char *, struct ncaptool_fpsink *);
int (*samesink)(const struct ncaptool_fpsink *,
const struct ncaptool_fpsink *);
int (*opensink)(struct ncaptool_fpsink *, struct timespec,
const char *);
void (*closesink)(struct ncaptool_fpsink *,
const struct ncaptool_ctx *);
void (*disablesink)(struct ncaptool_fpsink *,
const struct ncaptool_ctx *);
void (*drainsink)(struct ncaptool_fpsink *,
const struct ncaptool_ctx *);
void (*dgsend)(ncap_t, ncap_msg_ct, struct ncaptool_ctx *,
struct ncaptool_dgsink *, struct timespec,
ncaptool_sendfails_func);
void (*sendfails)(ncap_t, struct ncaptool_ctx *,
struct ncaptool_dgsink *, struct timespec, int);
};
/* Message processing plugin interface. */
typedef int (*ncaptool_msgmod_init)(struct ncaptool_ctx *, int, char **);
typedef int (*ncaptool_msgmod_fini)(void);
typedef int (*ncaptool_msgmod_proc)(ncap_t, void *, ncap_msg_ct, const char *);
typedef int (*ncaptool_msgmod_sinks_open)(void);
typedef int (*ncaptool_msgmod_sinks_enab)(void);
typedef void (*ncaptool_msgmod_drainsinks)(void);
struct ncaptool_msgmod {
int mver;
const char * name;
ncaptool_msgmod_init init;
ncaptool_msgmod_fini fini;
ncaptool_msgmod_proc proc;
ncaptool_msgmod_sinks_open sinks_open;
ncaptool_msgmod_sinks_enab sinks_enab;
ncaptool_msgmod_drainsinks drainsinks;
};
#endif