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:
7 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 * @brief NAT syslog logging
19 #include <vnet/fib/fib_table.h>
20 #include <vnet/ip/ip.h>
21 #include <vnet/syslog/syslog.h>
23 #include <nat/nat_syslog.h>
24 #include <nat/lib/inlines.h>
26 #define NAT_FACILITY SYSLOG_FACILITY_LOCAL0
28 #define NAT_APPNAME "NAT"
30 #define SADD_SDEL_SEVERITY SYSLOG_SEVERITY_INFORMATIONAL
31 #define APMADD_APMDEL_SEVERITY SYSLOG_SEVERITY_INFORMATIONAL
33 #define SADD_MSGID "SADD"
34 #define SDEL_MSGID "SDEL"
35 #define APMADD_MSGID "APMADD"
36 #define APMDEL_MSGID "APMDEL"
38 #define NSESS_SDID "nsess"
39 #define NAPMAP_SDID "napmap"
41 #define SSUBIX_SDPARAM_NAME "SSUBIX"
42 #define SVLAN_SDPARAM_NAME "SVLAN"
43 #define IATYP_SDPARAM_NAME "IATYP"
44 #define ISADDR_SDPARAM_NAME "ISADDR"
45 #define ISPORT_SDPARAM_NAME "ISPORT"
46 #define IDADDR_SDPARAM_NAME "IDADDR"
47 #define IDPORT_SDPARAM_NAME "IDPORT"
48 #define XATYP_SDPARAM_NAME "XATYP"
49 #define XSADDR_SDPARAM_NAME "XSADDR"
50 #define XSPORT_SDPARAM_NAME "XSPORT"
51 #define XDADDR_SDPARAM_NAME "XDADDR"
52 #define XDPORT_SDPARAM_NAME "XDPORT"
53 #define PROTO_SDPARAM_NAME "PROTO"
54 #define SV6ENC_SDPARAM_NAME "SV6ENC"
56 #define IATYP_IPV4 "IPv4"
57 #define IATYP_IPV6 "IPv6"
60 nat_syslog_nat44_apmap (u32 ssubix, u32 sfibix, ip4_address_t * isaddr,
61 u16 isport, ip4_address_t * xsaddr, u16 xsport,
62 nat_protocol_t proto, u8 is_add,
63 ip6_address_t * sv6enc)
65 syslog_msg_t syslog_msg;
68 if (!syslog_is_enabled ())
71 if (syslog_severity_filter_block (APMADD_APMDEL_SEVERITY))
74 syslog_msg_init (&syslog_msg, NAT_FACILITY, APMADD_APMDEL_SEVERITY,
75 NAT_APPNAME, is_add ? APMADD_MSGID : APMDEL_MSGID);
77 syslog_msg_sd_init (&syslog_msg, NAPMAP_SDID);
78 syslog_msg_add_sd_param (&syslog_msg, SSUBIX_SDPARAM_NAME, "%d", ssubix);
81 syslog_msg_add_sd_param (&syslog_msg, SV6ENC_SDPARAM_NAME, "%U",
82 format_ip6_address, sv6enc);
86 fib = fib_table_get (sfibix, FIB_PROTOCOL_IP4);
87 syslog_msg_add_sd_param (&syslog_msg, SVLAN_SDPARAM_NAME, "%d",
90 syslog_msg_add_sd_param (&syslog_msg, IATYP_SDPARAM_NAME, IATYP_IPV4);
91 syslog_msg_add_sd_param (&syslog_msg, ISADDR_SDPARAM_NAME, "%U",
92 format_ip4_address, isaddr);
93 syslog_msg_add_sd_param (&syslog_msg, ISPORT_SDPARAM_NAME, "%d",
94 clib_net_to_host_u16 (isport));
95 syslog_msg_add_sd_param (&syslog_msg, XATYP_SDPARAM_NAME, IATYP_IPV4);
96 syslog_msg_add_sd_param (&syslog_msg, XSADDR_SDPARAM_NAME, "%U",
97 format_ip4_address, xsaddr);
98 syslog_msg_add_sd_param (&syslog_msg, XSPORT_SDPARAM_NAME, "%d",
99 clib_net_to_host_u16 (xsport));
100 syslog_msg_add_sd_param (&syslog_msg, PROTO_SDPARAM_NAME, "%d",
101 nat_proto_to_ip_proto (proto));
103 syslog_msg_send (&syslog_msg);
107 nat_syslog_nat44_apmadd (u32 ssubix, u32 sfibix, ip4_address_t * isaddr,
108 u16 isport, ip4_address_t * xsaddr, u16 xsport,
109 nat_protocol_t proto)
111 nat_syslog_nat44_apmap (ssubix, sfibix, isaddr, isport, xsaddr, xsport,
116 nat_syslog_nat44_apmdel (u32 ssubix, u32 sfibix, ip4_address_t * isaddr,
117 u16 isport, ip4_address_t * xsaddr, u16 xsport,
118 nat_protocol_t proto)
120 nat_syslog_nat44_apmap (ssubix, sfibix, isaddr, isport, xsaddr, xsport,
125 nat_syslog_dslite_apmadd (u32 ssubix, ip6_address_t * sv6enc,
126 ip4_address_t * isaddr, u16 isport,
127 ip4_address_t * xsaddr, u16 xsport,
128 nat_protocol_t proto)
130 nat_syslog_nat44_apmap (ssubix, 0, isaddr, isport, xsaddr, xsport,
135 nat_syslog_dslite_apmdel (u32 ssubix, ip6_address_t * sv6enc,
136 ip4_address_t * isaddr, u16 isport,
137 ip4_address_t * xsaddr, u16 xsport,
138 nat_protocol_t proto)
140 nat_syslog_nat44_apmap (ssubix, 0, isaddr, isport, xsaddr, xsport,
145 nat_syslog_nat44_sess (u32 ssubix, u32 sfibix, ip4_address_t * isaddr,
146 u16 isport, ip4_address_t * xsaddr, u16 xsport,
147 ip4_address_t * idaddr, u16 idport,
148 ip4_address_t * xdaddr, u16 xdport,
149 nat_protocol_t proto, u8 is_add, u8 is_twicenat)
151 syslog_msg_t syslog_msg;
154 if (!syslog_is_enabled ())
157 if (syslog_severity_filter_block (SADD_SDEL_SEVERITY))
160 fib = fib_table_get (sfibix, FIB_PROTOCOL_IP4);
162 syslog_msg_init (&syslog_msg, NAT_FACILITY, SADD_SDEL_SEVERITY, NAT_APPNAME,
163 is_add ? SADD_MSGID : SDEL_MSGID);
165 syslog_msg_sd_init (&syslog_msg, NSESS_SDID);
166 syslog_msg_add_sd_param (&syslog_msg, SSUBIX_SDPARAM_NAME, "%d", ssubix);
167 syslog_msg_add_sd_param (&syslog_msg, SVLAN_SDPARAM_NAME, "%d",
169 syslog_msg_add_sd_param (&syslog_msg, IATYP_SDPARAM_NAME, IATYP_IPV4);
170 syslog_msg_add_sd_param (&syslog_msg, ISADDR_SDPARAM_NAME, "%U",
171 format_ip4_address, isaddr);
172 syslog_msg_add_sd_param (&syslog_msg, ISPORT_SDPARAM_NAME, "%d",
173 clib_net_to_host_u16 (isport));
174 syslog_msg_add_sd_param (&syslog_msg, XATYP_SDPARAM_NAME, IATYP_IPV4);
175 syslog_msg_add_sd_param (&syslog_msg, XSADDR_SDPARAM_NAME, "%U",
176 format_ip4_address, xsaddr);
177 syslog_msg_add_sd_param (&syslog_msg, XSPORT_SDPARAM_NAME, "%d",
178 clib_net_to_host_u16 (xsport));
179 syslog_msg_add_sd_param (&syslog_msg, PROTO_SDPARAM_NAME, "%d",
180 nat_proto_to_ip_proto (proto));
181 syslog_msg_add_sd_param (&syslog_msg, XDADDR_SDPARAM_NAME, "%U",
182 format_ip4_address, xdaddr);
183 syslog_msg_add_sd_param (&syslog_msg, XDPORT_SDPARAM_NAME, "%d",
184 clib_net_to_host_u16 (xdport));
187 syslog_msg_add_sd_param (&syslog_msg, IDADDR_SDPARAM_NAME, "%U",
188 format_ip4_address, idaddr);
189 syslog_msg_add_sd_param (&syslog_msg, IDPORT_SDPARAM_NAME, "%d",
190 clib_net_to_host_u16 (idport));
193 syslog_msg_send (&syslog_msg);
197 nat_syslog_nat44_sadd (u32 ssubix, u32 sfibix, ip4_address_t * isaddr,
198 u16 isport, ip4_address_t * idaddr, u16 idport,
199 ip4_address_t * xsaddr, u16 xsport,
200 ip4_address_t * xdaddr, u16 xdport,
201 nat_protocol_t proto, u8 is_twicenat)
203 nat_syslog_nat44_sess (ssubix, sfibix, isaddr, isport, xsaddr, xsport,
204 idaddr, idport, xdaddr, xdport, proto, 1,
209 nat_syslog_nat44_sdel (u32 ssubix, u32 sfibix, ip4_address_t * isaddr,
210 u16 isport, ip4_address_t * idaddr, u16 idport,
211 ip4_address_t * xsaddr, u16 xsport,
212 ip4_address_t * xdaddr, u16 xdport,
213 nat_protocol_t proto, u8 is_twicenat)
215 nat_syslog_nat44_sess (ssubix, sfibix, isaddr, isport, xsaddr, xsport,
216 idaddr, idport, xdaddr, xdport, proto, 0,
221 nat_syslog_nat64_sess (u32 sfibix, ip6_address_t * isaddr, u16 isport,
222 ip4_address_t * xsaddr, u16 xsport,
223 ip4_address_t * xdaddr, u16 xdport,
224 nat_protocol_t proto, u8 is_add)
226 syslog_msg_t syslog_msg;
229 if (!syslog_is_enabled ())
232 if (syslog_severity_filter_block (SADD_SDEL_SEVERITY))
235 fib = fib_table_get (sfibix, FIB_PROTOCOL_IP6);
237 syslog_msg_init (&syslog_msg, NAT_FACILITY, SADD_SDEL_SEVERITY, NAT_APPNAME,
238 is_add ? SADD_MSGID : SDEL_MSGID);
240 syslog_msg_sd_init (&syslog_msg, NSESS_SDID);
241 syslog_msg_add_sd_param (&syslog_msg, SVLAN_SDPARAM_NAME, "%d",
243 syslog_msg_add_sd_param (&syslog_msg, IATYP_SDPARAM_NAME, IATYP_IPV6);
244 syslog_msg_add_sd_param (&syslog_msg, ISADDR_SDPARAM_NAME, "%U",
245 format_ip6_address, isaddr);
246 syslog_msg_add_sd_param (&syslog_msg, ISPORT_SDPARAM_NAME, "%d",
247 clib_net_to_host_u16 (isport));
248 syslog_msg_add_sd_param (&syslog_msg, XATYP_SDPARAM_NAME, IATYP_IPV4);
249 syslog_msg_add_sd_param (&syslog_msg, XSADDR_SDPARAM_NAME, "%U",
250 format_ip4_address, xsaddr);
251 syslog_msg_add_sd_param (&syslog_msg, XSPORT_SDPARAM_NAME, "%d",
252 clib_net_to_host_u16 (xsport));
253 syslog_msg_add_sd_param (&syslog_msg, PROTO_SDPARAM_NAME, "%d", proto);
254 syslog_msg_add_sd_param (&syslog_msg, XDADDR_SDPARAM_NAME, "%U",
255 format_ip4_address, xdaddr);
256 syslog_msg_add_sd_param (&syslog_msg, XDPORT_SDPARAM_NAME, "%d",
257 clib_net_to_host_u16 (xdport));
259 syslog_msg_send (&syslog_msg);
263 nat_syslog_nat64_sadd (u32 sfibix, ip6_address_t * isaddr, u16 isport,
264 ip4_address_t * xsaddr, u16 xsport,
265 ip4_address_t * xdaddr, u16 xdport,
266 nat_protocol_t proto)
268 nat_syslog_nat64_sess (sfibix, isaddr, isport, xsaddr, xsport, xdaddr,
273 nat_syslog_nat64_sdel (u32 sfibix, ip6_address_t * isaddr, u16 isport,
274 ip4_address_t * xsaddr, u16 xsport,
275 ip4_address_t * xdaddr, u16 xdport,
276 nat_protocol_t proto)
278 nat_syslog_nat64_sess (sfibix, isaddr, isport, xsaddr, xsport, xdaddr,
283 * fd.io coding-style-patch-verification: ON
286 * eval: (c-set-style "gnu")