Skip to content

Commit 6305830

Browse files
tomratbertdavem330
authored andcommitted
udp: Add udp6_lib_lookup_skb and udp4_lib_lookup_skb
Add externally visible functions to lookup a UDP socket by skb. This will be used for GRO in UDP sockets. These functions also check if skb->dst is set, and if it is not skb->dev is used to get dev_net. This allows calling lookup functions before dst has been set on the skbuff. Signed-off-by: Tom Herbert <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 0340d0b commit 6305830

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

include/net/udp.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,8 @@ struct sock *udp4_lib_lookup(struct net *net, __be32 saddr, __be16 sport,
269269
struct sock *__udp4_lib_lookup(struct net *net, __be32 saddr, __be16 sport,
270270
__be32 daddr, __be16 dport, int dif,
271271
struct udp_table *tbl, struct sk_buff *skb);
272+
struct sock *udp4_lib_lookup_skb(struct sk_buff *skb,
273+
__be16 sport, __be16 dport);
272274
struct sock *udp6_lib_lookup(struct net *net,
273275
const struct in6_addr *saddr, __be16 sport,
274276
const struct in6_addr *daddr, __be16 dport,
@@ -278,6 +280,8 @@ struct sock *__udp6_lib_lookup(struct net *net,
278280
const struct in6_addr *daddr, __be16 dport,
279281
int dif, struct udp_table *tbl,
280282
struct sk_buff *skb);
283+
struct sock *udp6_lib_lookup_skb(struct sk_buff *skb,
284+
__be16 sport, __be16 dport);
281285

282286
/*
283287
* SNMP statistics for UDP and UDP-Lite

net/ipv4/udp.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,19 @@ static inline struct sock *__udp4_lib_lookup_skb(struct sk_buff *skb,
604604
udptable, skb);
605605
}
606606

607+
struct sock *udp4_lib_lookup_skb(struct sk_buff *skb,
608+
__be16 sport, __be16 dport)
609+
{
610+
const struct iphdr *iph = ip_hdr(skb);
611+
const struct net_device *dev =
612+
skb_dst(skb) ? skb_dst(skb)->dev : skb->dev;
613+
614+
return __udp4_lib_lookup(dev_net(dev), iph->saddr, sport,
615+
iph->daddr, dport, inet_iif(skb),
616+
&udp_table, skb);
617+
}
618+
EXPORT_SYMBOL_GPL(udp4_lib_lookup_skb);
619+
607620
/* Must be called under rcu_read_lock().
608621
* Does increment socket refcount.
609622
*/

net/ipv6/udp.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,19 @@ static struct sock *__udp6_lib_lookup_skb(struct sk_buff *skb,
326326
udptable, skb);
327327
}
328328

329+
struct sock *udp6_lib_lookup_skb(struct sk_buff *skb,
330+
__be16 sport, __be16 dport)
331+
{
332+
const struct ipv6hdr *iph = ipv6_hdr(skb);
333+
const struct net_device *dev =
334+
skb_dst(skb) ? skb_dst(skb)->dev : skb->dev;
335+
336+
return __udp6_lib_lookup(dev_net(dev), &iph->saddr, sport,
337+
&iph->daddr, dport, inet6_iif(skb),
338+
&udp_table, skb);
339+
}
340+
EXPORT_SYMBOL_GPL(udp6_lib_lookup_skb);
341+
329342
/* Must be called under rcu_read_lock().
330343
* Does increment socket refcount.
331344
*/

0 commit comments

Comments
 (0)