@@ -22,7 +22,6 @@ struct fou {
2222 u8 flags ;
2323 __be16 port ;
2424 u16 type ;
25- struct udp_offload udp_offloads ;
2625 struct list_head list ;
2726 struct rcu_head rcu ;
2827};
@@ -186,13 +185,13 @@ static int gue_udp_recv(struct sock *sk, struct sk_buff *skb)
186185 return 0 ;
187186}
188187
189- static struct sk_buff * * fou_gro_receive (struct sk_buff * * head ,
190- struct sk_buff * skb ,
191- struct udp_offload * uoff )
188+ static struct sk_buff * * fou_gro_receive (struct sock * sk ,
189+ struct sk_buff * * head ,
190+ struct sk_buff * skb )
192191{
193192 const struct net_offload * ops ;
194193 struct sk_buff * * pp = NULL ;
195- u8 proto = NAPI_GRO_CB ( skb )-> proto ;
194+ u8 proto = fou_from_sock ( sk )-> protocol ;
196195 const struct net_offload * * offloads ;
197196
198197 /* We can clear the encap_mark for FOU as we are essentially doing
@@ -217,11 +216,11 @@ static struct sk_buff **fou_gro_receive(struct sk_buff **head,
217216 return pp ;
218217}
219218
220- static int fou_gro_complete (struct sk_buff * skb , int nhoff ,
221- struct udp_offload * uoff )
219+ static int fou_gro_complete (struct sock * sk , struct sk_buff * skb ,
220+ int nhoff )
222221{
223222 const struct net_offload * ops ;
224- u8 proto = NAPI_GRO_CB ( skb )-> proto ;
223+ u8 proto = fou_from_sock ( sk )-> protocol ;
225224 int err = - ENOSYS ;
226225 const struct net_offload * * offloads ;
227226
@@ -264,9 +263,9 @@ static struct guehdr *gue_gro_remcsum(struct sk_buff *skb, unsigned int off,
264263 return guehdr ;
265264}
266265
267- static struct sk_buff * * gue_gro_receive (struct sk_buff * * head ,
268- struct sk_buff * skb ,
269- struct udp_offload * uoff )
266+ static struct sk_buff * * gue_gro_receive (struct sock * sk ,
267+ struct sk_buff * * head ,
268+ struct sk_buff * skb )
270269{
271270 const struct net_offload * * offloads ;
272271 const struct net_offload * ops ;
@@ -277,7 +276,7 @@ static struct sk_buff **gue_gro_receive(struct sk_buff **head,
277276 void * data ;
278277 u16 doffset = 0 ;
279278 int flush = 1 ;
280- struct fou * fou = container_of ( uoff , struct fou , udp_offloads );
279+ struct fou * fou = fou_from_sock ( sk );
281280 struct gro_remcsum grc ;
282281
283282 skb_gro_remcsum_init (& grc );
@@ -386,8 +385,7 @@ static struct sk_buff **gue_gro_receive(struct sk_buff **head,
386385 return pp ;
387386}
388387
389- static int gue_gro_complete (struct sk_buff * skb , int nhoff ,
390- struct udp_offload * uoff )
388+ static int gue_gro_complete (struct sock * sk , struct sk_buff * skb , int nhoff )
391389{
392390 const struct net_offload * * offloads ;
393391 struct guehdr * guehdr = (struct guehdr * )(skb -> data + nhoff );
@@ -435,10 +433,7 @@ static int fou_add_to_port_list(struct net *net, struct fou *fou)
435433static void fou_release (struct fou * fou )
436434{
437435 struct socket * sock = fou -> sock ;
438- struct sock * sk = sock -> sk ;
439436
440- if (sk -> sk_family == AF_INET )
441- udp_del_offload (& fou -> udp_offloads );
442437 list_del (& fou -> list );
443438 udp_tunnel_sock_release (sock );
444439
@@ -448,21 +443,18 @@ static void fou_release(struct fou *fou)
448443static int fou_encap_init (struct sock * sk , struct fou * fou , struct fou_cfg * cfg )
449444{
450445 udp_sk (sk )-> encap_rcv = fou_udp_recv ;
451- fou -> protocol = cfg -> protocol ;
452- fou -> udp_offloads .callbacks .gro_receive = fou_gro_receive ;
453- fou -> udp_offloads .callbacks .gro_complete = fou_gro_complete ;
454- fou -> udp_offloads .port = cfg -> udp_config .local_udp_port ;
455- fou -> udp_offloads .ipproto = cfg -> protocol ;
446+ udp_sk (sk )-> gro_receive = fou_gro_receive ;
447+ udp_sk (sk )-> gro_complete = fou_gro_complete ;
448+ fou_from_sock (sk )-> protocol = cfg -> protocol ;
456449
457450 return 0 ;
458451}
459452
460453static int gue_encap_init (struct sock * sk , struct fou * fou , struct fou_cfg * cfg )
461454{
462455 udp_sk (sk )-> encap_rcv = gue_udp_recv ;
463- fou -> udp_offloads .callbacks .gro_receive = gue_gro_receive ;
464- fou -> udp_offloads .callbacks .gro_complete = gue_gro_complete ;
465- fou -> udp_offloads .port = cfg -> udp_config .local_udp_port ;
456+ udp_sk (sk )-> gro_receive = gue_gro_receive ;
457+ udp_sk (sk )-> gro_complete = gue_gro_complete ;
466458
467459 return 0 ;
468460}
@@ -521,12 +513,6 @@ static int fou_create(struct net *net, struct fou_cfg *cfg,
521513
522514 sk -> sk_allocation = GFP_ATOMIC ;
523515
524- if (cfg -> udp_config .family == AF_INET ) {
525- err = udp_add_offload (net , & fou -> udp_offloads );
526- if (err )
527- goto error ;
528- }
529-
530516 err = fou_add_to_port_list (net , fou );
531517 if (err )
532518 goto error ;
0 commit comments