Line data Source code
1 : /*
2 : * Copyright (c) 2018 Cisco and/or its affiliates.
3 : * Licensed under the Apache License, Version 2.0 (the "License");
4 : * you may not use this file except in compliance with the License.
5 : * You may obtain a copy of the License at:
6 : *
7 : * http://www.apache.org/licenses/LICENSE-2.0
8 : *
9 : * Unless required by applicable law or agreed to in writing, software
10 : * distributed under the License is distributed on an "AS IS" BASIS,
11 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 : * See the License for the specific language governing permissions and
13 : * limitations under the License.
14 : */
15 : /**
16 : * @file syslog.h
17 : * RFC5424 syslog protocol declarations
18 : */
19 : #ifndef __included_syslog_h__
20 : #define __included_syslog_h__
21 :
22 : #include <vlib/vlib.h>
23 : #include <vnet/vnet.h>
24 : #include <vnet/ip/ip4_packet.h>
25 :
26 : /* syslog message facilities */
27 : #define foreach_syslog_facility \
28 : _(0, KERNEL, "kernel") \
29 : _(1, USER_LEVEL, "user-level") \
30 : _(2, MAIL_SYSTEM, "mail-system") \
31 : _(3, SYSTEM_DAEMONS, "system-daemons") \
32 : _(4, SEC_AUTH, "security-authorization") \
33 : _(5, SYSLOGD, "syslogd") \
34 : _(6, LINE_PRINTER, "line-printer") \
35 : _(7, NETWORK_NEWS, "network-news") \
36 : _(8, UUCP, "uucp") \
37 : _(9, CLOCK, "clock-daemon") \
38 : _(11, FTP, "ftp-daemon") \
39 : _(12, NTP, "ntp-subsystem") \
40 : _(13, LOG_AUDIT, "log-audit") \
41 : _(14, LOG_ALERT, "log-alert") \
42 : _(16, LOCAL0, "local0") \
43 : _(17, LOCAL1, "local1") \
44 : _(18, LOCAL2, "local2") \
45 : _(19, LOCAL3, "local3") \
46 : _(20, LOCAL4, "local4") \
47 : _(21, LOCAL5, "local5") \
48 : _(22, LOCAL6, "local6") \
49 : _(23, LOCAL7, "local7")
50 :
51 : typedef enum
52 : {
53 : #define _(v, N, s) SYSLOG_FACILITY_##N = v,
54 : foreach_syslog_facility
55 : #undef _
56 : } syslog_facility_t;
57 :
58 : /* syslog message severities */
59 : #define foreach_syslog_severity \
60 : _(0, EMERGENCY, "emergency") \
61 : _(1, ALERT, "alert") \
62 : _(2, CRITICAL, "critical") \
63 : _(3, ERROR, "error") \
64 : _(4, WARNING, "warning") \
65 : _(5, NOTICE, "notice") \
66 : _(6, INFORMATIONAL, "informational") \
67 : _(7, DEBUG, "debug")
68 :
69 : typedef enum
70 : {
71 : #define _(v, N, s) SYSLOG_SEVERITY_##N = v,
72 : foreach_syslog_severity
73 : #undef _
74 : } syslog_severity_t;
75 :
76 : /** syslog header */
77 : typedef struct
78 : {
79 : /** facility value, part of priority */
80 : syslog_facility_t facility;
81 :
82 : /** severity value, part of priority */
83 : syslog_severity_t severity;
84 :
85 : /** message timestamp */
86 : f64 timestamp;
87 :
88 : /** application that originated the message RFC5424 6.2.5. */
89 : char *app_name;
90 :
91 : /** identify the type of message RFC5424 6.2.7. */
92 : char *msgid;
93 : } syslog_header_t;
94 :
95 : /** syslog message */
96 : typedef struct
97 : {
98 : /** header */
99 : syslog_header_t header;
100 :
101 : /** structured data RFC5424 6.3. */
102 : u8 **structured_data;
103 : u32 curr_sd_index;
104 :
105 : /** free-form message RFC5424 6.4. */
106 : u8 *msg;
107 : } syslog_msg_t;
108 :
109 : typedef struct
110 : {
111 : /** process ID RFC5424 6.2.6. */
112 : u32 procid;
113 :
114 : /** time offset */
115 : f64 time_offset;
116 :
117 : /** IPv4 address of remote host (destination) */
118 : ip4_address_t collector;
119 :
120 : /** UDP port number of remote host (destination) */
121 : u16 collector_port;
122 :
123 : /** IPv4 address of sender (source) */
124 : ip4_address_t src_address;
125 :
126 : /** FIB table index */
127 : u32 fib_index;
128 :
129 : /** message size limit */
130 : u32 max_msg_size;
131 :
132 : /** severity filter (specified severity and greater match) */
133 : syslog_severity_t severity_filter;
134 :
135 : /** ip4-lookup node index */
136 : u32 ip4_lookup_node_index;
137 :
138 : /** convenience variables */
139 : vnet_main_t *vnet_main;
140 :
141 : u16 msg_id_base;
142 : } syslog_main_t;
143 :
144 : extern syslog_main_t syslog_main;
145 :
146 : /**
147 : * @brief Initialize syslog message header
148 : *
149 : * @param facility facility value
150 : * @param severity severity level
151 : * @param app_name application that originated message RFC424 6.2.5. (optional)
152 : * @param msgid identify the type of message RFC5424 6.2.7. (optional)
153 : */
154 : void syslog_msg_init (syslog_msg_t * syslog_msg, syslog_facility_t facility,
155 : syslog_severity_t severity, char *app_name,
156 : char *msgid);
157 : /**
158 : * @brief Initialize structured data element
159 : *
160 : * @param sd_id structured data element name RFC5424 6.3.2.
161 : */
162 : void syslog_msg_sd_init (syslog_msg_t * syslog_msg, char *sd_id);
163 :
164 : /**
165 : * @brief Add structured data elemnt parameter name-value pair RFC5424 6.3.3.
166 : */
167 : void syslog_msg_add_sd_param (syslog_msg_t * syslog_msg, char *name,
168 : char *fmt, ...);
169 :
170 : /**
171 : * @brief Add free-form message RFC5424 6.4.
172 : */
173 : void syslog_msg_add_msg (syslog_msg_t * syslog_msg, char *fmt, ...);
174 :
175 : /**
176 : * @brief Send syslog message
177 : */
178 : int syslog_msg_send (syslog_msg_t * syslog_msg);
179 :
180 : /**
181 : * @brief Set syslog sender configuration
182 : *
183 : * @param collector IPv4 address of syslog collector (destination)
184 : * @param collector_port UDP port of syslog colector (destination)
185 : * @param src IPv4 address of syslog sender (source)
186 : * @param vrf_id VRF/FIB table ID
187 : * @param max_msg_size maximum message length
188 : */
189 : vnet_api_error_t set_syslog_sender (ip4_address_t * collector,
190 : u16 collector_port, ip4_address_t * src,
191 : u32 vrf_id, u32 max_msg_size);
192 :
193 : /**
194 : * @brief Check if syslog logging is enabled
195 : *
196 : * @return 1 if syslog logging is enabled, 0 otherwise
197 : */
198 : always_inline int
199 77836 : syslog_is_enabled (void)
200 : {
201 77836 : syslog_main_t *sm = &syslog_main;
202 :
203 77836 : return sm->collector.as_u32 ? 1 : 0;
204 : }
205 :
206 : /**
207 : * @brief Severity filter test
208 : *
209 : * @return 1 if message with specified severity is not selected to be logged
210 : */
211 : always_inline int
212 43 : syslog_severity_filter_block (syslog_severity_t s)
213 : {
214 43 : syslog_main_t *sm = &syslog_main;
215 :
216 43 : return (sm->severity_filter < s);
217 : }
218 :
219 : #endif /* __included_syslog_h__ */
220 :
221 : /*
222 : * fd.io coding-style-patch-verification: ON
223 : *
224 : * Local Variables:
225 : * eval: (c-set-style "gnu")
226 : * End:
227 : */
|