@@ -124,6 +124,7 @@ static int nf_trace_fill_pkt_info(struct sk_buff *nlskb,
124
124
}
125
125
126
126
static int nf_trace_fill_rule_info (struct sk_buff * nlskb ,
127
+ const struct nft_verdict * verdict ,
127
128
const struct nft_traceinfo * info )
128
129
{
129
130
if (!info -> rule || info -> rule -> is_last )
@@ -135,15 +136,16 @@ static int nf_trace_fill_rule_info(struct sk_buff *nlskb,
135
136
* Since no rule matched, the ->rule pointer is invalid.
136
137
*/
137
138
if (info -> type == NFT_TRACETYPE_RETURN &&
138
- info -> verdict -> code == NFT_CONTINUE )
139
+ verdict -> code == NFT_CONTINUE )
139
140
return 0 ;
140
141
141
142
return nla_put_be64 (nlskb , NFTA_TRACE_RULE_HANDLE ,
142
143
cpu_to_be64 (info -> rule -> handle ),
143
144
NFTA_TRACE_PAD );
144
145
}
145
146
146
- static bool nft_trace_have_verdict_chain (struct nft_traceinfo * info )
147
+ static bool nft_trace_have_verdict_chain (const struct nft_verdict * verdict ,
148
+ struct nft_traceinfo * info )
147
149
{
148
150
switch (info -> type ) {
149
151
case NFT_TRACETYPE_RETURN :
@@ -153,7 +155,7 @@ static bool nft_trace_have_verdict_chain(struct nft_traceinfo *info)
153
155
return false;
154
156
}
155
157
156
- switch (info -> verdict -> code ) {
158
+ switch (verdict -> code ) {
157
159
case NFT_JUMP :
158
160
case NFT_GOTO :
159
161
break ;
@@ -184,6 +186,7 @@ static const struct nft_chain *nft_trace_get_chain(const struct nft_traceinfo *i
184
186
}
185
187
186
188
void nft_trace_notify (const struct nft_pktinfo * pkt ,
189
+ const struct nft_verdict * verdict ,
187
190
struct nft_traceinfo * info )
188
191
{
189
192
const struct nft_chain * chain ;
@@ -217,8 +220,8 @@ void nft_trace_notify(const struct nft_pktinfo *pkt,
217
220
nla_total_size (sizeof (u32 )) + /* nfproto */
218
221
nla_total_size (sizeof (u32 )); /* policy */
219
222
220
- if (nft_trace_have_verdict_chain (info ))
221
- size += nla_total_size (strlen (info -> verdict -> chain -> name )); /* jump target */
223
+ if (nft_trace_have_verdict_chain (verdict , info ))
224
+ size += nla_total_size (strlen (verdict -> chain -> name )); /* jump target */
222
225
223
226
skb = nlmsg_new (size , GFP_ATOMIC );
224
227
if (!skb )
@@ -245,7 +248,7 @@ void nft_trace_notify(const struct nft_pktinfo *pkt,
245
248
if (nla_put_string (skb , NFTA_TRACE_TABLE , chain -> table -> name ))
246
249
goto nla_put_failure ;
247
250
248
- if (nf_trace_fill_rule_info (skb , info ))
251
+ if (nf_trace_fill_rule_info (skb , verdict , info ))
249
252
goto nla_put_failure ;
250
253
251
254
switch (info -> type ) {
@@ -254,11 +257,11 @@ void nft_trace_notify(const struct nft_pktinfo *pkt,
254
257
break ;
255
258
case NFT_TRACETYPE_RETURN :
256
259
case NFT_TRACETYPE_RULE :
257
- if (nft_verdict_dump (skb , NFTA_TRACE_VERDICT , info -> verdict ))
260
+ if (nft_verdict_dump (skb , NFTA_TRACE_VERDICT , verdict ))
258
261
goto nla_put_failure ;
259
262
260
263
/* pkt->skb undefined iff NF_STOLEN, disable dump */
261
- if (info -> verdict -> code == NF_STOLEN )
264
+ if (verdict -> code == NF_STOLEN )
262
265
info -> packet_dumped = true;
263
266
else
264
267
mark = pkt -> skb -> mark ;
@@ -295,7 +298,6 @@ void nft_trace_notify(const struct nft_pktinfo *pkt,
295
298
}
296
299
297
300
void nft_trace_init (struct nft_traceinfo * info , const struct nft_pktinfo * pkt ,
298
- const struct nft_verdict * verdict ,
299
301
const struct nft_chain * chain )
300
302
{
301
303
static siphash_key_t trace_key __read_mostly ;
@@ -305,7 +307,6 @@ void nft_trace_init(struct nft_traceinfo *info, const struct nft_pktinfo *pkt,
305
307
info -> trace = true;
306
308
info -> nf_trace = pkt -> skb -> nf_trace ;
307
309
info -> packet_dumped = false;
308
- info -> verdict = verdict ;
309
310
310
311
net_get_random_once (& trace_key , sizeof (trace_key ));
311
312
0 commit comments