Skip to content

Commit d92283e

Browse files
tomratbertdavem330
authored andcommitted
fou: change to use UDP socket GRO
Adapt gue_gro_receive, gue_gro_complete to take a socket argument. Don't set udp_offloads any more. Signed-off-by: Tom Herbert <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 5602c48 commit d92283e

File tree

1 file changed

+17
-31
lines changed

1 file changed

+17
-31
lines changed

net/ipv4/fou.c

Lines changed: 17 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
435433
static 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)
448443
static 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

460453
static 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

Comments
 (0)