@@ -146,26 +146,15 @@ nfp_flower_compile_tport(struct nfp_flower_tp_ports *frame,
146146}
147147
148148static 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+
206217static void
207218nfp_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
244239static void
0 commit comments