Line data Source code
1 : /*
2 : * Copyright (c) 2020 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
17 : * @brief NAT syslog logging
18 : */
19 : #include <vnet/fib/fib_table.h>
20 : #include <vnet/ip/ip.h>
21 : #include <vnet/syslog/syslog.h>
22 :
23 : #include <nat/lib/nat_syslog.h>
24 : #include <nat/lib/inlines.h>
25 :
26 : #include <nat/lib/nat_syslog_constants.h>
27 :
28 : static inline void
29 20971 : nat_syslog_nat44_apmap (u32 ssubix, u32 sfibix, ip4_address_t * isaddr,
30 : u16 isport, ip4_address_t * xsaddr, u16 xsport,
31 : nat_protocol_t proto, u8 is_add,
32 : ip6_address_t * sv6enc)
33 : {
34 : syslog_msg_t syslog_msg;
35 : fib_table_t *fib;
36 :
37 20971 : if (!syslog_is_enabled ())
38 20942 : return;
39 :
40 29 : if (syslog_severity_filter_block (APMADD_APMDEL_SEVERITY))
41 0 : return;
42 :
43 29 : syslog_msg_init (&syslog_msg, NAT_FACILITY, APMADD_APMDEL_SEVERITY,
44 : NAT_APPNAME, is_add ? APMADD_MSGID : APMDEL_MSGID);
45 :
46 29 : syslog_msg_sd_init (&syslog_msg, NAPMAP_SDID);
47 29 : syslog_msg_add_sd_param (&syslog_msg, SSUBIX_SDPARAM_NAME, "%d", ssubix);
48 29 : if (sv6enc)
49 : {
50 3 : syslog_msg_add_sd_param (&syslog_msg, SV6ENC_SDPARAM_NAME, "%U",
51 : format_ip6_address, sv6enc);
52 : }
53 : else
54 : {
55 26 : fib = fib_table_get (sfibix, FIB_PROTOCOL_IP4);
56 26 : syslog_msg_add_sd_param (&syslog_msg, SVLAN_SDPARAM_NAME, "%d",
57 : fib->ft_table_id);
58 : }
59 29 : syslog_msg_add_sd_param (&syslog_msg, IATYP_SDPARAM_NAME, IATYP_IPV4);
60 29 : syslog_msg_add_sd_param (&syslog_msg, ISADDR_SDPARAM_NAME, "%U",
61 : format_ip4_address, isaddr);
62 29 : syslog_msg_add_sd_param (&syslog_msg, ISPORT_SDPARAM_NAME, "%d",
63 29 : clib_net_to_host_u16 (isport));
64 29 : syslog_msg_add_sd_param (&syslog_msg, XATYP_SDPARAM_NAME, IATYP_IPV4);
65 29 : syslog_msg_add_sd_param (&syslog_msg, XSADDR_SDPARAM_NAME, "%U",
66 : format_ip4_address, xsaddr);
67 29 : syslog_msg_add_sd_param (&syslog_msg, XSPORT_SDPARAM_NAME, "%d",
68 29 : clib_net_to_host_u16 (xsport));
69 29 : syslog_msg_add_sd_param (&syslog_msg, PROTO_SDPARAM_NAME, "%d",
70 29 : nat_proto_to_ip_proto (proto));
71 :
72 29 : syslog_msg_send (&syslog_msg);
73 : }
74 :
75 : void
76 10485 : nat_syslog_nat44_apmadd (u32 ssubix, u32 sfibix, ip4_address_t * isaddr,
77 : u16 isport, ip4_address_t * xsaddr, u16 xsport,
78 : nat_protocol_t proto)
79 : {
80 10485 : nat_syslog_nat44_apmap (ssubix, sfibix, isaddr, isport, xsaddr, xsport,
81 : proto, 1, 0);
82 10485 : }
83 :
84 : void
85 10483 : nat_syslog_nat44_apmdel (u32 ssubix, u32 sfibix, ip4_address_t * isaddr,
86 : u16 isport, ip4_address_t * xsaddr, u16 xsport,
87 : nat_protocol_t proto)
88 : {
89 10483 : nat_syslog_nat44_apmap (ssubix, sfibix, isaddr, isport, xsaddr, xsport,
90 : proto, 0, 0);
91 10483 : }
92 :
93 : void
94 3 : nat_syslog_dslite_apmadd (u32 ssubix, ip6_address_t * sv6enc,
95 : ip4_address_t * isaddr, u16 isport,
96 : ip4_address_t * xsaddr, u16 xsport,
97 : nat_protocol_t proto)
98 : {
99 3 : nat_syslog_nat44_apmap (ssubix, 0, isaddr, isport, xsaddr, xsport,
100 : proto, 1, sv6enc);
101 3 : }
102 :
103 : void
104 0 : nat_syslog_dslite_apmdel (u32 ssubix, ip6_address_t * sv6enc,
105 : ip4_address_t * isaddr, u16 isport,
106 : ip4_address_t * xsaddr, u16 xsport,
107 : nat_protocol_t proto)
108 : {
109 0 : nat_syslog_nat44_apmap (ssubix, 0, isaddr, isport, xsaddr, xsport,
110 : proto, 0, sv6enc);
111 0 : }
112 :
113 : static inline void
114 40 : nat_syslog_nat64_sess (u32 sfibix, ip6_address_t * isaddr, u16 isport,
115 : ip4_address_t * xsaddr, u16 xsport,
116 : ip4_address_t * xdaddr, u16 xdport,
117 : nat_protocol_t proto, u8 is_add)
118 : {
119 : syslog_msg_t syslog_msg;
120 : fib_table_t *fib;
121 :
122 40 : if (!syslog_is_enabled ())
123 36 : return;
124 :
125 4 : if (syslog_severity_filter_block (SADD_SDEL_SEVERITY))
126 0 : return;
127 :
128 4 : fib = fib_table_get (sfibix, FIB_PROTOCOL_IP6);
129 :
130 4 : syslog_msg_init (&syslog_msg, NAT_FACILITY, SADD_SDEL_SEVERITY, NAT_APPNAME,
131 : is_add ? SADD_MSGID : SDEL_MSGID);
132 :
133 4 : syslog_msg_sd_init (&syslog_msg, NSESS_SDID);
134 4 : syslog_msg_add_sd_param (&syslog_msg, SVLAN_SDPARAM_NAME, "%d",
135 : fib->ft_table_id);
136 4 : syslog_msg_add_sd_param (&syslog_msg, IATYP_SDPARAM_NAME, IATYP_IPV6);
137 4 : syslog_msg_add_sd_param (&syslog_msg, ISADDR_SDPARAM_NAME, "%U",
138 : format_ip6_address, isaddr);
139 4 : syslog_msg_add_sd_param (&syslog_msg, ISPORT_SDPARAM_NAME, "%d",
140 4 : clib_net_to_host_u16 (isport));
141 4 : syslog_msg_add_sd_param (&syslog_msg, XATYP_SDPARAM_NAME, IATYP_IPV4);
142 4 : syslog_msg_add_sd_param (&syslog_msg, XSADDR_SDPARAM_NAME, "%U",
143 : format_ip4_address, xsaddr);
144 4 : syslog_msg_add_sd_param (&syslog_msg, XSPORT_SDPARAM_NAME, "%d",
145 4 : clib_net_to_host_u16 (xsport));
146 4 : syslog_msg_add_sd_param (&syslog_msg, PROTO_SDPARAM_NAME, "%d", proto);
147 4 : syslog_msg_add_sd_param (&syslog_msg, XDADDR_SDPARAM_NAME, "%U",
148 : format_ip4_address, xdaddr);
149 4 : syslog_msg_add_sd_param (&syslog_msg, XDPORT_SDPARAM_NAME, "%d",
150 4 : clib_net_to_host_u16 (xdport));
151 :
152 4 : syslog_msg_send (&syslog_msg);
153 : }
154 :
155 : void
156 36 : nat_syslog_nat64_sadd (u32 sfibix, ip6_address_t * isaddr, u16 isport,
157 : ip4_address_t * xsaddr, u16 xsport,
158 : ip4_address_t * xdaddr, u16 xdport,
159 : nat_protocol_t proto)
160 : {
161 36 : nat_syslog_nat64_sess (sfibix, isaddr, isport, xsaddr, xsport, xdaddr,
162 : xdport, proto, 1);
163 36 : }
164 :
165 : void
166 4 : nat_syslog_nat64_sdel (u32 sfibix, ip6_address_t * isaddr, u16 isport,
167 : ip4_address_t * xsaddr, u16 xsport,
168 : ip4_address_t * xdaddr, u16 xdport,
169 : nat_protocol_t proto)
170 : {
171 4 : nat_syslog_nat64_sess (sfibix, isaddr, isport, xsaddr, xsport, xdaddr,
172 : xdport, proto, 0);
173 4 : }
174 :
175 : /*
176 : * fd.io coding-style-patch-verification: ON
177 : *
178 : * Local Variables:
179 : * eval: (c-set-style "gnu")
180 : * End:
181 : */
|