Skip to content

Commit 07e1671

Browse files
pjvuurendavem330
authored andcommitted
nfp: flower: refactor shared ip header in match offload
Refactored shared ip header code for IPv4 and IPv6 in match offload. Signed-off-by: Pieter Jansen van Vuuren <[email protected]> Reviewed-by: Jakub Kicinski <[email protected]> Signed-off-by: Simon Horman <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 90c00f8 commit 07e1671

File tree

2 files changed

+38
-42
lines changed

2 files changed

+38
-42
lines changed

drivers/net/ethernet/netronome/nfp/flower/cmsg.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,13 @@ struct nfp_flower_tp_ports {
260260
__be16 port_dst;
261261
};
262262

263+
struct nfp_flower_ip_ext {
264+
u8 tos;
265+
u8 proto;
266+
u8 ttl;
267+
u8 flags;
268+
};
269+
263270
/* L3 IPv4 details (3W/12B)
264271
* 3 2 1
265272
* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
@@ -272,10 +279,7 @@ struct nfp_flower_tp_ports {
272279
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
273280
*/
274281
struct nfp_flower_ipv4 {
275-
u8 tos;
276-
u8 proto;
277-
u8 ttl;
278-
u8 flags;
282+
struct nfp_flower_ip_ext ip_ext;
279283
__be32 ipv4_src;
280284
__be32 ipv4_dst;
281285
};
@@ -284,7 +288,7 @@ struct nfp_flower_ipv4 {
284288
* 3 2 1
285289
* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
286290
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
287-
* | DSCP |ECN| protocol | reserved |
291+
* | DSCP |ECN| protocol | ttl | flags |
288292
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
289293
* | ipv6_exthdr | res | ipv6_flow_label |
290294
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -306,10 +310,7 @@ struct nfp_flower_ipv4 {
306310
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
307311
*/
308312
struct nfp_flower_ipv6 {
309-
u8 tos;
310-
u8 proto;
311-
u8 ttl;
312-
u8 reserved;
313+
struct nfp_flower_ip_ext ip_ext;
313314
__be32 ipv6_flow_label_exthdr;
314315
struct in6_addr ipv6_src;
315316
struct in6_addr ipv6_dst;

drivers/net/ethernet/netronome/nfp/flower/match.c

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -146,26 +146,15 @@ nfp_flower_compile_tport(struct nfp_flower_tp_ports *frame,
146146
}
147147

148148
static void
149-
nfp_flower_compile_ipv4(struct nfp_flower_ipv4 *frame,
150-
struct tc_cls_flower_offload *flow,
151-
bool mask_version)
149+
nfp_flower_compile_ip_ext(struct nfp_flower_ip_ext *frame,
150+
struct tc_cls_flower_offload *flow,
151+
bool mask_version)
152152
{
153153
struct fl_flow_key *target = mask_version ? flow->mask : flow->key;
154-
struct flow_dissector_key_ipv4_addrs *addr;
155-
struct flow_dissector_key_basic *basic;
156-
157-
memset(frame, 0, sizeof(struct nfp_flower_ipv4));
158-
159-
if (dissector_uses_key(flow->dissector,
160-
FLOW_DISSECTOR_KEY_IPV4_ADDRS)) {
161-
addr = skb_flow_dissector_target(flow->dissector,
162-
FLOW_DISSECTOR_KEY_IPV4_ADDRS,
163-
target);
164-
frame->ipv4_src = addr->src;
165-
frame->ipv4_dst = addr->dst;
166-
}
167154

168155
if (dissector_uses_key(flow->dissector, FLOW_DISSECTOR_KEY_BASIC)) {
156+
struct flow_dissector_key_basic *basic;
157+
169158
basic = skb_flow_dissector_target(flow->dissector,
170159
FLOW_DISSECTOR_KEY_BASIC,
171160
target);
@@ -203,14 +192,35 @@ nfp_flower_compile_ipv4(struct nfp_flower_ipv4 *frame,
203192
}
204193
}
205194

195+
static void
196+
nfp_flower_compile_ipv4(struct nfp_flower_ipv4 *frame,
197+
struct tc_cls_flower_offload *flow,
198+
bool mask_version)
199+
{
200+
struct fl_flow_key *target = mask_version ? flow->mask : flow->key;
201+
struct flow_dissector_key_ipv4_addrs *addr;
202+
203+
memset(frame, 0, sizeof(struct nfp_flower_ipv4));
204+
205+
if (dissector_uses_key(flow->dissector,
206+
FLOW_DISSECTOR_KEY_IPV4_ADDRS)) {
207+
addr = skb_flow_dissector_target(flow->dissector,
208+
FLOW_DISSECTOR_KEY_IPV4_ADDRS,
209+
target);
210+
frame->ipv4_src = addr->src;
211+
frame->ipv4_dst = addr->dst;
212+
}
213+
214+
nfp_flower_compile_ip_ext(&frame->ip_ext, flow, mask_version);
215+
}
216+
206217
static void
207218
nfp_flower_compile_ipv6(struct nfp_flower_ipv6 *frame,
208219
struct tc_cls_flower_offload *flow,
209220
bool mask_version)
210221
{
211222
struct fl_flow_key *target = mask_version ? flow->mask : flow->key;
212223
struct flow_dissector_key_ipv6_addrs *addr;
213-
struct flow_dissector_key_basic *basic;
214224

215225
memset(frame, 0, sizeof(struct nfp_flower_ipv6));
216226

@@ -223,22 +233,7 @@ nfp_flower_compile_ipv6(struct nfp_flower_ipv6 *frame,
223233
frame->ipv6_dst = addr->dst;
224234
}
225235

226-
if (dissector_uses_key(flow->dissector, FLOW_DISSECTOR_KEY_BASIC)) {
227-
basic = skb_flow_dissector_target(flow->dissector,
228-
FLOW_DISSECTOR_KEY_BASIC,
229-
target);
230-
frame->proto = basic->ip_proto;
231-
}
232-
233-
if (dissector_uses_key(flow->dissector, FLOW_DISSECTOR_KEY_IP)) {
234-
struct flow_dissector_key_ip *flow_ip;
235-
236-
flow_ip = skb_flow_dissector_target(flow->dissector,
237-
FLOW_DISSECTOR_KEY_IP,
238-
target);
239-
frame->tos = flow_ip->tos;
240-
frame->ttl = flow_ip->ttl;
241-
}
236+
nfp_flower_compile_ip_ext(&frame->ip_ext, flow, mask_version);
242237
}
243238

244239
static void

0 commit comments

Comments
 (0)