blob: 8ae7928f9f60ca3eb8c5a44de85c20df7308105c [file] [log] [blame]
Googler298baf22022-08-01 19:58:45 -07001/*
2 **************************************************************************
3 * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
4 * Permission to use, copy, modify, and/or distribute this software for
5 * any purpose with or without fee is hereby granted, provided that the
6 * above copyright notice and this permission notice appear in all copies.
7 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
13 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14 **************************************************************************
15 */
16
17/*
18 * nss_ipsec_cmn_log.c
19 * NSS IPSEC logger file.
20 */
21
22#include "nss_core.h"
23
24#define NSS_IPSEC_LOG_IPV4 4
25#define NSS_IPSEC_LOG_IPV6 6
26
27/*
28 * nss_ipsec_cmn_log_msg_types_str
29 * IPSEC message strings
30 */
31static int8_t *nss_ipsec_cmn_log_msg_types_str[NSS_IPSEC_CMN_MSG_TYPE_MAX] __maybe_unused = {
32 "IPSEC CMN Msg None",
33 "IPSEC CMN Node Config",
34 "IPSEC CMN CTX Config",
35 "IPSEC CMN CTX Sync",
36 "IPSEC CMN SA Create",
37 "IPSEC CMN SA Destroy",
38 "IPSEC CMN SA Sync",
39 "IPSEC CMN Flow Create",
40 "IPSEC CMN Flow Destroy",
41};
42
43/*
44 * nss_ipsec_cmn_log_node_msg_types_str
45 * IPSEC cmn node message strings
46 */
47static int8_t *nss_ipsec_cmn_log_node_str[] __maybe_unused = {
48 "IPSEC CMN Node DMA Redirect",
49 "IPSEC CMN Node DMA Lookaside",
50 "IPSEC CMN Node Maximum SA",
51};
52
53/*
54 * nss_ipsec_cmn_log_ctx_msg_types_str
55 * IPSEC cmn ctx message strings
56 */
57static int8_t *nss_ipsec_cmn_log_ctx_str[] __maybe_unused = {
58 "IPSEC CMN CTX Type",
59 "IPSEC CMN CTX Exception Interface",
60};
61
62/*
63 * nss_ipsec_cmn_log_ctx_types_str
64 * IPSEC cmn context strings
65 */
66static int8_t *nss_ipsec_cmn_ctx_types_str[] __maybe_unused = {
67 "IPSEC CMN CTX NONE",
68 "IPSEC CMN CTX INNER",
69 "IPSEC CMN CTX INNER BOUNCE",
70 "IPSEC CMN CTX OUTER",
71 "IPSEC CMN CTX OUTER BOUNCE",
72 "IPSEC CMN CTX REDIRECT",
73};
74
75/*
76 * nss_ipsec_cmn_log_flow_tuple_str
77 * IPSEC cmn flow tuple strings
78 */
79static int8_t *nss_ipsec_cmn_log_flow_tuple_str[] __maybe_unused = {
80 "Dest IP",
81 "Src IP",
82 "Spi Index",
83 "Dest Port",
84 "Src Port",
85 "User Pattern",
86 "User Protocol",
87 "IP Version",
88};
89
90/*
91 * nss_ipsec_cmn_log_sa_tuple_str
92 * IPSEC cmn SA tuple strings
93 */
94static int8_t *nss_ipsec_cmn_log_sa_tuple_str[] __maybe_unused = {
95 "Dest IP",
96 "Src IP",
97 "Spi Index",
98 "Dest Port",
99 "Src Port",
100 "Crypto Index",
101 "Protocol",
102 "IP Version",
103 "Hop Limit",
104};
105
106/*
107 * nss_ipsec_cmn_log_sa_data_str
108 * IPSEC cmn SA tuple strings
109 */
110static int8_t *nss_ipsec_cmn_log_sa_data_str[] __maybe_unused = {
111 "Sequence Start",
112 "Flags",
113 "Window Size",
114 "DSCP",
115 "DF",
116 "Block Length",
117 "IV length",
118 "ICV length",
119};
120
121/*
122 * nss_ipsec_cmn_log_error_str
123 * Strings for error types for IPSEC messages
124 */
125static int8_t *nss_ipsec_cmn_log_error_str[NSS_IPSEC_CMN_MSG_ERROR_MAX] __maybe_unused = {
126 "IPSEC No Error",
127 "IPSEC Invalid Context",
128 "IPSEC SA allocation Error",
129 "IPSEC Invalid SA",
130 "IPSEC Duplicate SA",
131 "IPSEC SA is in Use",
132 "IPSEC Error in Flow Allocation",
133 "IPSEC Invalid Flow",
134 "IPSEC Duplicate Flow",
135 "IPSEC Failure to find SA for Flow",
136 "IPSEC Failed to Register Dynamic Interface",
137 "IPSEC Unhandled Message",
138};
139
140/*
141 * nss_ipsec_cmn_log_node_msg()
142 * Log NSS IPSEC node message.
143 */
144static void nss_ipsec_cmn_log_node_msg(struct nss_ipsec_cmn_msg *nim)
145{
146 struct nss_ipsec_cmn_node *node_msg __maybe_unused = &nim->msg.node;
147
148 nss_trace("%px: NSS IPSEC Node Message:\n"
149 "%s: %d\n"
150 "%s: %d\n"
151 "%s: %d\n", nim,
152 nss_ipsec_cmn_log_node_str[0], node_msg->dma_redirect,
153 nss_ipsec_cmn_log_node_str[1], node_msg->dma_lookaside,
154 nss_ipsec_cmn_log_node_str[2], node_msg->max_sa);
155}
156
157/*
158 * nss_ipsec_cmn_log_ctx_msg()
159 * Log NSS IPSEC ctx message.
160 */
161static void nss_ipsec_cmn_log_ctx_msg(struct nss_ipsec_cmn_msg *nim)
162{
163 struct nss_ipsec_cmn_ctx *ctx_msg __maybe_unused = &nim->msg.ctx;
164
165 nss_trace("%px: NSS IPSEC CTX Message:\n"
166 "%s: %s\n"
167 "%s: %d\n", nim,
168 nss_ipsec_cmn_log_ctx_str[0], nss_ipsec_cmn_ctx_types_str[ctx_msg->type],
169 nss_ipsec_cmn_log_ctx_str[1], ctx_msg->except_ifnum);
170}
171
172/*
173 * nss_ipsec_cmn_log_sa_msg()
174 * Log NSS IPSEC SA message.
175 */
176static void nss_ipsec_cmn_log_sa_msg(struct nss_ipsec_cmn_msg *nim)
177{
178 struct nss_ipsec_cmn_sa *sa_msg __maybe_unused = &nim->msg.sa;
179 struct nss_ipsec_cmn_sa_tuple *tuple = &sa_msg->sa_tuple;
180 struct nss_ipsec_cmn_sa_data *data __maybe_unused = &sa_msg->sa_data;
181
182 nss_trace("%px: NSS IPSEC SA Message:\n", nim);
183
184 if (tuple->ip_ver == 4) {
185 nss_trace("%s: %pI4\n%s: %pI4\n",
186 nss_ipsec_cmn_log_sa_tuple_str[0], tuple->dest_ip,
187 nss_ipsec_cmn_log_sa_tuple_str[1], tuple->src_ip);
188 } else {
189 nss_trace("%s: %pI6\n%s: %pI6\n",
190 nss_ipsec_cmn_log_sa_tuple_str[0], tuple->dest_ip,
191 nss_ipsec_cmn_log_sa_tuple_str[1], tuple->src_ip);
192 }
193
194 nss_trace( "%s: %x\n%s: %d\n%s: %d\n%s: %d\n"
195 "%s: %d\n%s: %d\n%s: %d\n"
196 "%s: %d\n%s: %x\n%s: %d\n%s: %d\n"
197 "%s: %d\n%s: %d\n%s: %d\n%s: %d\n",
198 nss_ipsec_cmn_log_sa_tuple_str[2], tuple->spi_index,
199 nss_ipsec_cmn_log_sa_tuple_str[3], tuple->dest_port,
200 nss_ipsec_cmn_log_sa_tuple_str[4], tuple->src_port,
201 nss_ipsec_cmn_log_sa_tuple_str[5], tuple->crypto_index,
202 nss_ipsec_cmn_log_sa_tuple_str[6], tuple->protocol,
203 nss_ipsec_cmn_log_sa_tuple_str[7], tuple->ip_ver,
204 nss_ipsec_cmn_log_sa_tuple_str[8], tuple->hop_limit,
205
206 nss_ipsec_cmn_log_sa_data_str[0], data->seq_start,
207 nss_ipsec_cmn_log_sa_data_str[1], data->flags,
208 nss_ipsec_cmn_log_sa_data_str[2], data->window_size,
209 nss_ipsec_cmn_log_sa_data_str[3], data->dscp,
210 nss_ipsec_cmn_log_sa_data_str[4], data->df,
211 nss_ipsec_cmn_log_sa_data_str[5], data->blk_len,
212 nss_ipsec_cmn_log_sa_data_str[6], data->iv_len,
213 nss_ipsec_cmn_log_sa_data_str[7], data->icv_len);
214
215}
216
217/*
218 * nss_ipsec_cmn_log_flow_msg()
219 * Log NSS IPSEC Flow message.
220 */
221static void nss_ipsec_cmn_log_flow_msg(struct nss_ipsec_cmn_msg *nim)
222{
223 struct nss_ipsec_cmn_flow *flow_msg __maybe_unused = &nim->msg.flow;
224 struct nss_ipsec_cmn_flow_tuple *flow = &flow_msg->flow_tuple;
225 struct nss_ipsec_cmn_sa_tuple *sa = &flow_msg->sa_tuple;
226
227 nss_trace("%px: NSS IPSEC Flow Message:\n", nim);
228
229 if (sa->ip_ver == 4) {
230 nss_trace("%s: %pI4\n%s: %pI4\n",
231 nss_ipsec_cmn_log_sa_tuple_str[0], sa->dest_ip,
232 nss_ipsec_cmn_log_sa_tuple_str[1], sa->src_ip);
233 } else {
234 nss_trace("%s: %pI6\n%s: %pI6\n",
235 nss_ipsec_cmn_log_sa_tuple_str[0], sa->dest_ip,
236 nss_ipsec_cmn_log_sa_tuple_str[1], sa->src_ip);
237 }
238
239 if (flow->ip_ver == 4) {
240 nss_trace("%s: %pI4\n%s: %pI4\n",
241 nss_ipsec_cmn_log_sa_tuple_str[0], flow->dest_ip,
242 nss_ipsec_cmn_log_sa_tuple_str[1], flow->src_ip);
243 } else {
244 nss_trace("%s: %pI6\n%s: %pI6\n",
245 nss_ipsec_cmn_log_sa_tuple_str[0], flow->dest_ip,
246 nss_ipsec_cmn_log_sa_tuple_str[1], flow->src_ip);
247 }
248
249 nss_trace( "%s: %x\n%s: %d\n%s: %d\n%s: %d\n"
250 "%s: %d\n",
251 nss_ipsec_cmn_log_flow_tuple_str[2], flow->spi_index,
252 nss_ipsec_cmn_log_flow_tuple_str[3], flow->dst_port,
253 nss_ipsec_cmn_log_flow_tuple_str[4], flow->src_port,
254 nss_ipsec_cmn_log_flow_tuple_str[5], flow->user_pattern,
255 nss_ipsec_cmn_log_flow_tuple_str[6], flow->protocol);
256
257 nss_trace( "%s: %x\n%s: %d\n%s: %d\n%s: %d\n"
258 "%s: %d\n%s: %d\n%s: %d\n",
259 nss_ipsec_cmn_log_sa_tuple_str[2], sa->spi_index,
260 nss_ipsec_cmn_log_sa_tuple_str[3], sa->dest_port,
261 nss_ipsec_cmn_log_sa_tuple_str[4], sa->src_port,
262 nss_ipsec_cmn_log_sa_tuple_str[5], sa->crypto_index,
263 nss_ipsec_cmn_log_sa_tuple_str[6], sa->protocol,
264 nss_ipsec_cmn_log_sa_tuple_str[7], sa->ip_ver,
265 nss_ipsec_cmn_log_sa_tuple_str[8], sa->hop_limit);
266}
267
268/*
269 * nss_ipsec_cmn_log_verbose()
270 * Log message contents.
271 */
272static void nss_ipsec_cmn_log_verbose(struct nss_ipsec_cmn_msg *nim)
273{
274 switch (nim->cm.type) {
275 case NSS_IPSEC_CMN_MSG_TYPE_NODE_CONFIG:
276 nss_ipsec_cmn_log_node_msg(nim);
277 break;
278
279 case NSS_IPSEC_CMN_MSG_TYPE_CTX_CONFIG:
280 nss_ipsec_cmn_log_ctx_msg(nim);
281 break;
282
283 case NSS_IPSEC_CMN_MSG_TYPE_SA_CREATE:
284 case NSS_IPSEC_CMN_MSG_TYPE_SA_DESTROY:
285 nss_ipsec_cmn_log_sa_msg(nim);
286 break;
287
288 case NSS_IPSEC_CMN_MSG_TYPE_FLOW_CREATE:
289 case NSS_IPSEC_CMN_MSG_TYPE_FLOW_DESTROY:
290 nss_ipsec_cmn_log_flow_msg(nim);
291 break;
292
293 case NSS_IPSEC_CMN_MSG_TYPE_CTX_SYNC:
294 case NSS_IPSEC_CMN_MSG_TYPE_SA_SYNC:
295 /*
296 * No log for these valid messages.
297 */
298 break;
299
300 default:
301 nss_warning("%px: Invalid message type\n", nim);
302 break;
303 }
304}
305
306/*
307 * nss_ipsec_cmn_log_tx_msg()
308 * Log messages transmitted to FW.
309 */
310void nss_ipsec_cmn_log_tx_msg(struct nss_ipsec_cmn_msg *nim)
311{
312 if (nim->cm.type >= NSS_IPSEC_CMN_MSG_TYPE_MAX) {
313 nss_warning("%px: Invalid message type\n", nim);
314 return;
315 }
316
317 nss_info("%px: type[%d]:%s\n", nim, nim->cm.type, nss_ipsec_cmn_log_msg_types_str[nim->cm.type]);
318 nss_ipsec_cmn_log_verbose(nim);
319}
320
321/*
322 * nss_ipsec_cmn_log_rx_msg()
323 * Log messages received from FW.
324 */
325void nss_ipsec_cmn_log_rx_msg(struct nss_ipsec_cmn_msg *nim)
326{
327 if (nim->cm.response >= NSS_CMN_RESPONSE_LAST) {
328 nss_warning("%px: Invalid response\n", nim);
329 return;
330 }
331
332 if (nim->cm.response == NSS_CMN_RESPONSE_NOTIFY || (nim->cm.response == NSS_CMN_RESPONSE_ACK)) {
333 nss_info("%px: type[%d]:%s, response[%d]:%s\n", nim, nim->cm.type,
334 nss_ipsec_cmn_log_msg_types_str[nim->cm.type],
335 nim->cm.response, nss_cmn_response_str[nim->cm.response]);
336 goto verbose;
337 }
338
339 if (nim->cm.error >= NSS_IPSEC_CMN_MSG_ERROR_MAX) {
340 nss_warning("%px: msg failure - type[%d]:%s, response[%d]:%s, error[%d]:Invalid error\n",
341 nim, nim->cm.type, nss_ipsec_cmn_log_msg_types_str[nim->cm.type],
342 nim->cm.response, nss_cmn_response_str[nim->cm.response],
343 nim->cm.error);
344 goto verbose;
345 }
346
347 nss_info("%px: msg nack - type[%d]:%s, response[%d]:%s, error[%d]:%s\n",
348 nim, nim->cm.type, nss_ipsec_cmn_log_msg_types_str[nim->cm.type],
349 nim->cm.response, nss_cmn_response_str[nim->cm.response],
350 nim->cm.error, nss_ipsec_cmn_log_error_str[nim->cm.error]);
351
352verbose:
353 nss_ipsec_cmn_log_verbose(nim);
354}