diff options
author | Eric Dumazet <edumazet@google.com> | 2014-10-17 09:17:20 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-10-17 23:48:07 -0400 |
commit | 870c3151382c980590d4d609babf3b0243e7db93 (patch) | |
tree | 5d472dc0982bfda41f56c08ff98c46d9b0f4afd8 /include/net/tcp.h | |
parent | 70b33fb0ddec827cbbd14cdc664fc27b2ef4a6b6 (diff) | |
download | linux-870c3151382c980590d4d609babf3b0243e7db93.tar.bz2 |
ipv6: introduce tcp_v6_iif()
Commit 971f10eca186 ("tcp: better TCP_SKB_CB layout to reduce cache line
misses") added a regression for SO_BINDTODEVICE on IPv6.
This is because we still use inet6_iif() which expects that IP6 control
block is still at the beginning of skb->cb[]
This patch adds tcp_v6_iif() helper and uses it where necessary.
Because __inet6_lookup_skb() is used by TCP and DCCP, we add an iif
parameter to it.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Fixes: 971f10eca186 ("tcp: better TCP_SKB_CB layout to reduce cache line misses")
Acked-by: Cong Wang <cwang@twopensource.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/tcp.h')
-rw-r--r-- | include/net/tcp.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/include/net/tcp.h b/include/net/tcp.h index 3a4bbbfdcf8d..c9766f89deba 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -729,6 +729,15 @@ struct tcp_skb_cb { #define TCP_SKB_CB(__skb) ((struct tcp_skb_cb *)&((__skb)->cb[0])) + +/* This is the variant of inet6_iif() that must be used by TCP, + * as TCP moves IP6CB into a different location in skb->cb[] + */ +static inline int tcp_v6_iif(const struct sk_buff *skb) +{ + return TCP_SKB_CB(skb)->header.h6.iif; +} + /* Due to TSO, an SKB can be composed of multiple actual * packets. To keep these tracked properly, we use this. */ |