mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
inet: refactor inet[6]_lookup functions to take skb
This is a preliminary step to allow fast socket lookup of SO_REUSEPORT groups. Doing so with a BPF filter will require access to the skb in question. This change plumbs the skb (and offset to payload data) through the call stack to the listening socket lookup implementations where it will be used in a following patch. Signed-off-by: Craig Gallek <kraig@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d9b3fca273
commit
a583636a83
12 changed files with 85 additions and 42 deletions
|
@ -213,6 +213,7 @@ void inet_unhash(struct sock *sk);
|
|||
|
||||
struct sock *__inet_lookup_listener(struct net *net,
|
||||
struct inet_hashinfo *hashinfo,
|
||||
struct sk_buff *skb, int doff,
|
||||
const __be32 saddr, const __be16 sport,
|
||||
const __be32 daddr,
|
||||
const unsigned short hnum,
|
||||
|
@ -220,10 +221,11 @@ struct sock *__inet_lookup_listener(struct net *net,
|
|||
|
||||
static inline struct sock *inet_lookup_listener(struct net *net,
|
||||
struct inet_hashinfo *hashinfo,
|
||||
struct sk_buff *skb, int doff,
|
||||
__be32 saddr, __be16 sport,
|
||||
__be32 daddr, __be16 dport, int dif)
|
||||
{
|
||||
return __inet_lookup_listener(net, hashinfo, saddr, sport,
|
||||
return __inet_lookup_listener(net, hashinfo, skb, doff, saddr, sport,
|
||||
daddr, ntohs(dport), dif);
|
||||
}
|
||||
|
||||
|
@ -299,6 +301,7 @@ static inline struct sock *
|
|||
|
||||
static inline struct sock *__inet_lookup(struct net *net,
|
||||
struct inet_hashinfo *hashinfo,
|
||||
struct sk_buff *skb, int doff,
|
||||
const __be32 saddr, const __be16 sport,
|
||||
const __be32 daddr, const __be16 dport,
|
||||
const int dif)
|
||||
|
@ -307,12 +310,13 @@ static inline struct sock *__inet_lookup(struct net *net,
|
|||
struct sock *sk = __inet_lookup_established(net, hashinfo,
|
||||
saddr, sport, daddr, hnum, dif);
|
||||
|
||||
return sk ? : __inet_lookup_listener(net, hashinfo, saddr, sport,
|
||||
daddr, hnum, dif);
|
||||
return sk ? : __inet_lookup_listener(net, hashinfo, skb, doff, saddr,
|
||||
sport, daddr, hnum, dif);
|
||||
}
|
||||
|
||||
static inline struct sock *inet_lookup(struct net *net,
|
||||
struct inet_hashinfo *hashinfo,
|
||||
struct sk_buff *skb, int doff,
|
||||
const __be32 saddr, const __be16 sport,
|
||||
const __be32 daddr, const __be16 dport,
|
||||
const int dif)
|
||||
|
@ -320,7 +324,8 @@ static inline struct sock *inet_lookup(struct net *net,
|
|||
struct sock *sk;
|
||||
|
||||
local_bh_disable();
|
||||
sk = __inet_lookup(net, hashinfo, saddr, sport, daddr, dport, dif);
|
||||
sk = __inet_lookup(net, hashinfo, skb, doff, saddr, sport, daddr,
|
||||
dport, dif);
|
||||
local_bh_enable();
|
||||
|
||||
return sk;
|
||||
|
@ -328,6 +333,7 @@ static inline struct sock *inet_lookup(struct net *net,
|
|||
|
||||
static inline struct sock *__inet_lookup_skb(struct inet_hashinfo *hashinfo,
|
||||
struct sk_buff *skb,
|
||||
int doff,
|
||||
const __be16 sport,
|
||||
const __be16 dport)
|
||||
{
|
||||
|
@ -337,8 +343,8 @@ static inline struct sock *__inet_lookup_skb(struct inet_hashinfo *hashinfo,
|
|||
if (sk)
|
||||
return sk;
|
||||
else
|
||||
return __inet_lookup(dev_net(skb_dst(skb)->dev), hashinfo,
|
||||
iph->saddr, sport,
|
||||
return __inet_lookup(dev_net(skb_dst(skb)->dev), hashinfo, skb,
|
||||
doff, iph->saddr, sport,
|
||||
iph->daddr, dport, inet_iif(skb));
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue