* [PATCH net v3 0/3] ipv6: udp6: set dst cache for a connected sk if current not valid
@ 2018-03-29 17:37 Alexey Kodanev
2018-03-29 17:37 ` [PATCH net v3 1/3] ipv6: move ip6_dst_store() calls with flowi6 checks to a wrapper Alexey Kodanev
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Alexey Kodanev @ 2018-03-29 17:37 UTC (permalink / raw)
To: netdev; +Cc: Eric Dumazet, Martin KaFai Lau, David Miller, Alexey Kodanev
A new RTF_CACHE route can be created with the socket's dst cache
update between the below calls in udpv6_sendmsg(), when datagram
sending results to ICMPV6_PKT_TOOBIG error:
dst = ip6_sk_dst_lookup_flow(...)
...
release_dst:
if (dst) {
if (connected)
ip6_dst_store(sk, dst)
Therefore, the new socket's dst cache reset to the old one on
"release_dst:".
The first two patches prepare the code to store dst cache
with ip6_sk_dst_lookup_flow() in udpv6_sendmsg():
* the first patch adds new wrapper ip6_dst_store_flow() to
increase readability of the code and the changes.
* the second patch adds new argument to ip6_sk_dst_lookup_flow()
and ability to store dst in the socket's cache. Also, the two
users of the function are updated without enabling the new
behavior: pingv6_sendmsg() and udpv6_sendmsg().
The last patch contains the actual fix that removes sk dst cache
update in the end of udpv6_sendmsg(), and allows to do it in
ip6_sk_dst_lookup_flow().
v3: * instead of moving ip6_dst_store() above udp_v6_send_skb(),
update socket's dst cache inside ip6_sk_dst_lookup_flow()
if the current one is invalid.
* the issue not reproduced in 4.1, but starting from 4.2. Add
one more 'Fixes:' commit that creates new RTF_CACHE route.
Though, it is also mentioned in the first one.
Alexey Kodanev (3):
ipv6: move ip6_dst_store() calls with flowi6 checks to a wrapper
ipv6: allow to cache dst for connected sk in ip6_sk_dst_lookup_flow()
ipv6: udp6: set dst cache for a connected sk if current not valid
include/net/ip6_route.h | 17 +++++++++++++++++
include/net/ipv6.h | 3 ++-
net/ipv6/datagram.c | 9 +--------
net/ipv6/ip6_output.c | 15 ++++++++++++---
net/ipv6/ping.c | 2 +-
net/ipv6/udp.c | 21 ++-------------------
6 files changed, 35 insertions(+), 32 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net v3 1/3] ipv6: move ip6_dst_store() calls with flowi6 checks to a wrapper
2018-03-29 17:37 [PATCH net v3 0/3] ipv6: udp6: set dst cache for a connected sk if current not valid Alexey Kodanev
@ 2018-03-29 17:37 ` Alexey Kodanev
2018-03-30 10:14 ` kbuild test robot
2018-03-30 15:58 ` kbuild test robot
2018-03-29 17:37 ` [PATCH net v3 2/3] ipv6: allow to cache dst for connected sk in ip6_sk_dst_lookup_flow() Alexey Kodanev
2018-03-29 17:37 ` [PATCH net v3 3/3] ipv6: udp6: set dst cache for a connected sk if current not valid Alexey Kodanev
2 siblings, 2 replies; 7+ messages in thread
From: Alexey Kodanev @ 2018-03-29 17:37 UTC (permalink / raw)
To: netdev; +Cc: Eric Dumazet, Martin KaFai Lau, David Miller, Alexey Kodanev
Move commonly used pattern of ip6_dst_store() usage to a separate
function - ip6_dst_store_flow(), which will check the addresses
for equality before saving them.
There is no functional changes in this patch, the new wrapper
will be used in the next patch, in ip6_sk_dst_lookup_flow().
Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
---
include/net/ip6_route.h | 17 +++++++++++++++++
net/ipv6/datagram.c | 9 +--------
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index ac0866b..36c3946 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -210,6 +210,23 @@ static inline void ip6_dst_store(struct sock *sk, struct dst_entry *dst,
#endif
}
+static inline void ip6_dst_store_flow(struct sock *sk, struct dst_entry *dst,
+ struct flowi6 *fl6)
+{
+#ifdef CONFIG_IPV6_SUBTREES
+ struct ipv6_pinfo *np = inet6_sk(sk);
+#endif
+
+ ip6_dst_store(sk, dst,
+ ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ?
+ &sk->sk_v6_daddr : NULL,
+#ifdef CONFIG_IPV6_SUBTREES
+ ipv6_addr_equal(&fl6->saddr, &np->saddr) ?
+ &np->saddr :
+#endif
+ NULL);
+}
+
static inline bool ipv6_unicast_destination(const struct sk_buff *skb)
{
struct rt6_info *rt = (struct rt6_info *) skb_dst(skb);
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
index a9f7eca..8b4fa0c 100644
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
@@ -106,14 +106,7 @@ int ip6_datagram_dst_update(struct sock *sk, bool fix_sk_saddr)
}
}
- ip6_dst_store(sk, dst,
- ipv6_addr_equal(&fl6.daddr, &sk->sk_v6_daddr) ?
- &sk->sk_v6_daddr : NULL,
-#ifdef CONFIG_IPV6_SUBTREES
- ipv6_addr_equal(&fl6.saddr, &np->saddr) ?
- &np->saddr :
-#endif
- NULL);
+ ip6_dst_store_flow(sk, dst, &fl6);
out:
fl6_sock_release(flowlabel);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH net v3 2/3] ipv6: allow to cache dst for connected sk in ip6_sk_dst_lookup_flow()
2018-03-29 17:37 [PATCH net v3 0/3] ipv6: udp6: set dst cache for a connected sk if current not valid Alexey Kodanev
2018-03-29 17:37 ` [PATCH net v3 1/3] ipv6: move ip6_dst_store() calls with flowi6 checks to a wrapper Alexey Kodanev
@ 2018-03-29 17:37 ` Alexey Kodanev
2018-03-29 17:37 ` [PATCH net v3 3/3] ipv6: udp6: set dst cache for a connected sk if current not valid Alexey Kodanev
2 siblings, 0 replies; 7+ messages in thread
From: Alexey Kodanev @ 2018-03-29 17:37 UTC (permalink / raw)
To: netdev; +Cc: Eric Dumazet, Martin KaFai Lau, David Miller, Alexey Kodanev
Add 'connected' argument to ip6_sk_dst_lookup_flow() and
update the cache only if ip6_sk_dst_check() returns NULL
and a socket is connected.
The function is used as before, the new behavior for UDP
sockets in udpv6_sendmsg() will be enabled in the next
patch.
Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
---
include/net/ipv6.h | 3 ++-
net/ipv6/ip6_output.c | 15 ++++++++++++---
net/ipv6/ping.c | 2 +-
net/ipv6/udp.c | 2 +-
4 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index 8606c91..07e94dc 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -977,7 +977,8 @@ int ip6_dst_lookup(struct net *net, struct sock *sk, struct dst_entry **dst,
struct dst_entry *ip6_dst_lookup_flow(const struct sock *sk, struct flowi6 *fl6,
const struct in6_addr *final_dst);
struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
- const struct in6_addr *final_dst);
+ const struct in6_addr *final_dst,
+ int connected);
struct dst_entry *ip6_blackhole_route(struct net *net,
struct dst_entry *orig_dst);
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index a8a9195..c22017c 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1105,23 +1105,32 @@ struct dst_entry *ip6_dst_lookup_flow(const struct sock *sk, struct flowi6 *fl6,
* @sk: socket which provides the dst cache and route info
* @fl6: flow to lookup
* @final_dst: final destination address for ipsec lookup
+ * @connected: whether @sk is connected or not
*
* This function performs a route lookup on the given flow with the
* possibility of using the cached route in the socket if it is valid.
* It will take the socket dst lock when operating on the dst cache.
* As a result, this function can only be used in process context.
*
+ * In addition, for a connected socket, cache the dst in the socket
+ * if the current cache is not valid.
+ *
* It returns a valid dst pointer on success, or a pointer encoded
* error code.
*/
struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
- const struct in6_addr *final_dst)
+ const struct in6_addr *final_dst,
+ int connected)
{
struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie);
dst = ip6_sk_dst_check(sk, dst, fl6);
- if (!dst)
- dst = ip6_dst_lookup_flow(sk, fl6, final_dst);
+ if (dst)
+ return dst;
+
+ dst = ip6_dst_lookup_flow(sk, fl6, final_dst);
+ if (connected && !IS_ERR(dst))
+ ip6_dst_store_flow(sk, dst_clone(dst), fl6);
return dst;
}
diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
index d12c55d..546f4a6 100644
--- a/net/ipv6/ping.c
+++ b/net/ipv6/ping.c
@@ -121,7 +121,7 @@ static int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
ipc6.tclass = np->tclass;
fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel);
- dst = ip6_sk_dst_lookup_flow(sk, &fl6, daddr);
+ dst = ip6_sk_dst_lookup_flow(sk, &fl6, daddr, 0);
if (IS_ERR(dst))
return PTR_ERR(dst);
rt = (struct rt6_info *) dst;
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 52e3ea0..e49dac4 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -1289,7 +1289,7 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel);
- dst = ip6_sk_dst_lookup_flow(sk, &fl6, final_p);
+ dst = ip6_sk_dst_lookup_flow(sk, &fl6, final_p, 0);
if (IS_ERR(dst)) {
err = PTR_ERR(dst);
dst = NULL;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH net v3 3/3] ipv6: udp6: set dst cache for a connected sk if current not valid
2018-03-29 17:37 [PATCH net v3 0/3] ipv6: udp6: set dst cache for a connected sk if current not valid Alexey Kodanev
2018-03-29 17:37 ` [PATCH net v3 1/3] ipv6: move ip6_dst_store() calls with flowi6 checks to a wrapper Alexey Kodanev
2018-03-29 17:37 ` [PATCH net v3 2/3] ipv6: allow to cache dst for connected sk in ip6_sk_dst_lookup_flow() Alexey Kodanev
@ 2018-03-29 17:37 ` Alexey Kodanev
2 siblings, 0 replies; 7+ messages in thread
From: Alexey Kodanev @ 2018-03-29 17:37 UTC (permalink / raw)
To: netdev; +Cc: Eric Dumazet, Martin KaFai Lau, David Miller, Alexey Kodanev
A new RTF_CACHE route can be created in udpv6_sendmsg() between
ip6_sk_dst_lookup_flow() and ip6_dst_store() calls when datagram
sending results to ICMPV6_PKT_TOOBIG error:
udp_v6_send_skb(), for example with vti6 tunnel:
vti6_xmit(), get ICMPV6_PKT_TOOBIG error
skb_dst_update_pmtu(), can create a RTF_CACHE clone
icmpv6_send()
...
udpv6_err()
ip6_sk_update_pmtu()
ip6_update_pmtu(), can create a RTF_CACHE clone
...
ip6_datagram_dst_update()
ip6_dst_store()
And after commit 33c162a980fe ("ipv6: datagram: Update dst cache
of a connected datagram sk during pmtu update"), the UDPv6 error
handler can update socket's dst cache, but it can happen before
the update in end of udpv6_sendmsg(), preventing getting updated
dst cache on the next udpv6_sendmsg() calls.
In order to fix it, we should save dst for a connected socket
in udpv6_sendmsg(), only if the previous socket's cache is not
valid.
Fixes: 33c162a980fe ("ipv6: datagram: Update dst cache of a connected datagram sk during pmtu update")
Fixes: 45e4fd26683c ("ipv6: Only create RTF_CACHE routes after encountering pmtu exception")
Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
---
net/ipv6/udp.c | 21 ++-------------------
1 file changed, 2 insertions(+), 19 deletions(-)
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index e49dac4..da13c90 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -1289,7 +1289,7 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel);
- dst = ip6_sk_dst_lookup_flow(sk, &fl6, final_p, 0);
+ dst = ip6_sk_dst_lookup_flow(sk, &fl6, final_p, connected);
if (IS_ERR(dst)) {
err = PTR_ERR(dst);
dst = NULL;
@@ -1314,7 +1314,7 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
err = PTR_ERR(skb);
if (!IS_ERR_OR_NULL(skb))
err = udp_v6_send_skb(skb, &fl6);
- goto release_dst;
+ goto out;
}
lock_sock(sk);
@@ -1348,23 +1348,6 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
err = np->recverr ? net_xmit_errno(err) : 0;
release_sock(sk);
-release_dst:
- if (dst) {
- if (connected) {
- ip6_dst_store(sk, dst,
- ipv6_addr_equal(&fl6.daddr, &sk->sk_v6_daddr) ?
- &sk->sk_v6_daddr : NULL,
-#ifdef CONFIG_IPV6_SUBTREES
- ipv6_addr_equal(&fl6.saddr, &np->saddr) ?
- &np->saddr :
-#endif
- NULL);
- } else {
- dst_release(dst);
- }
- dst = NULL;
- }
-
out:
dst_release(dst);
fl6_sock_release(flowlabel);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH net v3 1/3] ipv6: move ip6_dst_store() calls with flowi6 checks to a wrapper
2018-03-29 17:37 ` [PATCH net v3 1/3] ipv6: move ip6_dst_store() calls with flowi6 checks to a wrapper Alexey Kodanev
@ 2018-03-30 10:14 ` kbuild test robot
2018-03-30 11:36 ` Alexey Kodanev
2018-03-30 15:58 ` kbuild test robot
1 sibling, 1 reply; 7+ messages in thread
From: kbuild test robot @ 2018-03-30 10:14 UTC (permalink / raw)
To: Alexey Kodanev
Cc: kbuild-all, netdev, Eric Dumazet, Martin KaFai Lau, David Miller,
Alexey Kodanev
[-- Attachment #1: Type: text/plain, Size: 2262 bytes --]
Hi Alexey,
I love your patch! Perhaps something to improve:
[auto build test WARNING on net/master]
url: https://github.com/0day-ci/linux/commits/Alexey-Kodanev/ipv6-move-ip6_dst_store-calls-with-flowi6-checks-to-a-wrapper/20180330-173050
config: ia64-defconfig (attached as .config)
compiler: ia64-linux-gcc (GCC) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=ia64
All warnings (new ones prefixed by >>):
In file included from include/linux/tcp.h:23:0,
from include/linux/ipv6.h:87,
from include/net/ipv6.h:16,
from include/net/inetpeer.h:16,
from include/net/route.h:28,
from drivers/infiniband/core/addr.c:43:
include/net/ip6_route.h: In function 'ip6_dst_store_flow':
include/net/sock.h:349:34: error: 'struct sock_common' has no member named 'skc_v6_daddr'; did you mean 'skc_daddr'?
#define sk_v6_daddr __sk_common.skc_v6_daddr
^
>> include/net/ip6_route.h:221:43: note: in expansion of macro 'sk_v6_daddr'
ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ?
^~~~~~~~~~~
include/net/sock.h:349:34: error: 'struct sock_common' has no member named 'skc_v6_daddr'; did you mean 'skc_daddr'?
#define sk_v6_daddr __sk_common.skc_v6_daddr
^
include/net/ip6_route.h:222:14: note: in expansion of macro 'sk_v6_daddr'
&sk->sk_v6_daddr : NULL,
^~~~~~~~~~~
vim +/sk_v6_daddr +221 include/net/ip6_route.h
219
220 ip6_dst_store(sk, dst,
> 221 ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ?
222 &sk->sk_v6_daddr : NULL,
223 #ifdef CONFIG_IPV6_SUBTREES
224 ipv6_addr_equal(&fl6->saddr, &np->saddr) ?
225 &np->saddr :
226 #endif
227 NULL);
228 }
229
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 18690 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net v3 1/3] ipv6: move ip6_dst_store() calls with flowi6 checks to a wrapper
2018-03-30 10:14 ` kbuild test robot
@ 2018-03-30 11:36 ` Alexey Kodanev
0 siblings, 0 replies; 7+ messages in thread
From: Alexey Kodanev @ 2018-03-30 11:36 UTC (permalink / raw)
To: kbuild test robot
Cc: kbuild-all, netdev, Eric Dumazet, Martin KaFai Lau, David Miller
On 03/30/2018 01:14 PM, kbuild test robot wrote:
> Hi Alexey,
>
> I love your patch! Perhaps something to improve:
>
> [auto build test WARNING on net/master]
>
> url: https://github.com/0day-ci/linux/commits/Alexey-Kodanev/ipv6-move-ip6_dst_store-calls-with-flowi6-checks-to-a-wrapper/20180330-173050
> config: ia64-defconfig (attached as .config)
> compiler: ia64-linux-gcc (GCC) 7.2.0
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # save the attached .config to linux build tree
> make.cross ARCH=ia64
>
> All warnings (new ones prefixed by >>):
>
> In file included from include/linux/tcp.h:23:0,
> from include/linux/ipv6.h:87,
> from include/net/ipv6.h:16,
> from include/net/inetpeer.h:16,
> from include/net/route.h:28,
> from drivers/infiniband/core/addr.c:43:
> include/net/ip6_route.h: In function 'ip6_dst_store_flow':
> include/net/sock.h:349:34: error: 'struct sock_common' has no member named 'skc_v6_daddr'; did you mean 'skc_daddr'?
> #define sk_v6_daddr __sk_common.skc_v6_daddr
> ^
>>> include/net/ip6_route.h:221:43: note: in expansion of macro 'sk_v6_daddr'
> ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ?
> ^~~~~~~~~~~
> include/net/sock.h:349:34: error: 'struct sock_common' has no member named 'skc_v6_daddr'; did you mean 'skc_daddr'?
> #define sk_v6_daddr __sk_common.skc_v6_daddr
> ^
> include/net/ip6_route.h:222:14: note: in expansion of macro 'sk_v6_daddr'
> &sk->sk_v6_daddr : NULL
> ^~~~~~~~~~~
This is because CONFIG_IPV6 is not enabled, no sk_v6_daddr member,
I'll fix it in the new version.
Thanks,
Alexey
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net v3 1/3] ipv6: move ip6_dst_store() calls with flowi6 checks to a wrapper
2018-03-29 17:37 ` [PATCH net v3 1/3] ipv6: move ip6_dst_store() calls with flowi6 checks to a wrapper Alexey Kodanev
2018-03-30 10:14 ` kbuild test robot
@ 2018-03-30 15:58 ` kbuild test robot
1 sibling, 0 replies; 7+ messages in thread
From: kbuild test robot @ 2018-03-30 15:58 UTC (permalink / raw)
To: Alexey Kodanev
Cc: kbuild-all, netdev, Eric Dumazet, Martin KaFai Lau, David Miller,
Alexey Kodanev
[-- Attachment #1: Type: text/plain, Size: 10447 bytes --]
Hi Alexey,
I love your patch! Yet something to improve:
[auto build test ERROR on net/master]
url: https://github.com/0day-ci/linux/commits/Alexey-Kodanev/ipv6-move-ip6_dst_store-calls-with-flowi6-checks-to-a-wrapper/20180330-173050
config: x86_64-kexec (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
All errors (new ones prefixed by >>):
In file included from include/linux/tcp.h:23:0,
from drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.c:33:
include/net/ip6_route.h: In function 'ip6_dst_store_flow':
>> include/net/sock.h:349:34: error: 'struct sock_common' has no member named 'skc_v6_daddr'; did you mean 'skc_daddr'?
#define sk_v6_daddr __sk_common.skc_v6_daddr
^
include/net/ip6_route.h:221:43: note: in expansion of macro 'sk_v6_daddr'
ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ?
^~~~~~~~~~~
>> include/net/sock.h:349:34: error: 'struct sock_common' has no member named 'skc_v6_daddr'; did you mean 'skc_daddr'?
#define sk_v6_daddr __sk_common.skc_v6_daddr
^
include/net/ip6_route.h:222:14: note: in expansion of macro 'sk_v6_daddr'
&sk->sk_v6_daddr : NULL,
^~~~~~~~~~~
vim +349 include/net/sock.h
4dc6dc716 Eric Dumazet 2009-07-15 329
68835aba4 Eric Dumazet 2010-11-30 330 #define sk_dontcopy_begin __sk_common.skc_dontcopy_begin
68835aba4 Eric Dumazet 2010-11-30 331 #define sk_dontcopy_end __sk_common.skc_dontcopy_end
4dc6dc716 Eric Dumazet 2009-07-15 332 #define sk_hash __sk_common.skc_hash
508054668 Eric Dumazet 2013-10-02 333 #define sk_portpair __sk_common.skc_portpair
05dbc7b59 Eric Dumazet 2013-10-03 334 #define sk_num __sk_common.skc_num
05dbc7b59 Eric Dumazet 2013-10-03 335 #define sk_dport __sk_common.skc_dport
508054668 Eric Dumazet 2013-10-02 336 #define sk_addrpair __sk_common.skc_addrpair
508054668 Eric Dumazet 2013-10-02 337 #define sk_daddr __sk_common.skc_daddr
508054668 Eric Dumazet 2013-10-02 338 #define sk_rcv_saddr __sk_common.skc_rcv_saddr
^1da177e4 Linus Torvalds 2005-04-16 339 #define sk_family __sk_common.skc_family
^1da177e4 Linus Torvalds 2005-04-16 340 #define sk_state __sk_common.skc_state
^1da177e4 Linus Torvalds 2005-04-16 341 #define sk_reuse __sk_common.skc_reuse
055dc21a1 Tom Herbert 2013-01-22 342 #define sk_reuseport __sk_common.skc_reuseport
9fe516ba3 Eric Dumazet 2014-06-27 343 #define sk_ipv6only __sk_common.skc_ipv6only
26abe1437 Eric W. Biederman 2015-05-08 344 #define sk_net_refcnt __sk_common.skc_net_refcnt
^1da177e4 Linus Torvalds 2005-04-16 345 #define sk_bound_dev_if __sk_common.skc_bound_dev_if
^1da177e4 Linus Torvalds 2005-04-16 346 #define sk_bind_node __sk_common.skc_bind_node
8feaf0c0a Arnaldo Carvalho de Melo 2005-08-09 347 #define sk_prot __sk_common.skc_prot
07feaebfc Eric W. Biederman 2007-09-12 348 #define sk_net __sk_common.skc_net
efe4208f4 Eric Dumazet 2013-10-03 @349 #define sk_v6_daddr __sk_common.skc_v6_daddr
efe4208f4 Eric Dumazet 2013-10-03 350 #define sk_v6_rcv_saddr __sk_common.skc_v6_rcv_saddr
33cf7c90f Eric Dumazet 2015-03-11 351 #define sk_cookie __sk_common.skc_cookie
70da268b5 Eric Dumazet 2015-10-08 352 #define sk_incoming_cpu __sk_common.skc_incoming_cpu
8e5eb54d3 Eric Dumazet 2015-10-08 353 #define sk_flags __sk_common.skc_flags
ed53d0ab7 Eric Dumazet 2015-10-08 354 #define sk_rxhash __sk_common.skc_rxhash
efe4208f4 Eric Dumazet 2013-10-03 355
^1da177e4 Linus Torvalds 2005-04-16 356 socket_lock_t sk_lock;
9115e8cd2 Eric Dumazet 2016-12-03 357 atomic_t sk_drops;
9115e8cd2 Eric Dumazet 2016-12-03 358 int sk_rcvlowat;
9115e8cd2 Eric Dumazet 2016-12-03 359 struct sk_buff_head sk_error_queue;
b178bb3df Eric Dumazet 2010-11-16 360 struct sk_buff_head sk_receive_queue;
fa438ccfd Eric Dumazet 2007-03-04 361 /*
fa438ccfd Eric Dumazet 2007-03-04 362 * The backlog queue is special, it is always used with
fa438ccfd Eric Dumazet 2007-03-04 363 * the per-socket spinlock held and requires low latency
fa438ccfd Eric Dumazet 2007-03-04 364 * access. Therefore we special case it's implementation.
b178bb3df Eric Dumazet 2010-11-16 365 * Note : rmem_alloc is in this structure to fill a hole
b178bb3df Eric Dumazet 2010-11-16 366 * on 64bit arches, not because its logically part of
b178bb3df Eric Dumazet 2010-11-16 367 * backlog.
fa438ccfd Eric Dumazet 2007-03-04 368 */
fa438ccfd Eric Dumazet 2007-03-04 369 struct {
b178bb3df Eric Dumazet 2010-11-16 370 atomic_t rmem_alloc;
b178bb3df Eric Dumazet 2010-11-16 371 int len;
fa438ccfd Eric Dumazet 2007-03-04 372 struct sk_buff *head;
fa438ccfd Eric Dumazet 2007-03-04 373 struct sk_buff *tail;
fa438ccfd Eric Dumazet 2007-03-04 374 } sk_backlog;
b178bb3df Eric Dumazet 2010-11-16 375 #define sk_rmem_alloc sk_backlog.rmem_alloc
2c8c56e15 Eric Dumazet 2014-11-11 376
9115e8cd2 Eric Dumazet 2016-12-03 377 int sk_forward_alloc;
e0d1095ae Cong Wang 2013-08-01 378 #ifdef CONFIG_NET_RX_BUSY_POLL
dafcc4380 Eliezer Tamir 2013-06-14 379 unsigned int sk_ll_usec;
9115e8cd2 Eric Dumazet 2016-12-03 380 /* ===== mostly read cache line ===== */
9115e8cd2 Eric Dumazet 2016-12-03 381 unsigned int sk_napi_id;
060212928 Eliezer Tamir 2013-06-10 382 #endif
b178bb3df Eric Dumazet 2010-11-16 383 int sk_rcvbuf;
b178bb3df Eric Dumazet 2010-11-16 384
b178bb3df Eric Dumazet 2010-11-16 385 struct sk_filter __rcu *sk_filter;
ceb5d58b2 Eric Dumazet 2015-11-29 386 union {
eaefd1105 Eric Dumazet 2011-02-18 387 struct socket_wq __rcu *sk_wq;
ceb5d58b2 Eric Dumazet 2015-11-29 388 struct socket_wq *sk_wq_raw;
ceb5d58b2 Eric Dumazet 2015-11-29 389 };
def8b4faf Alexey Dobriyan 2008-10-28 390 #ifdef CONFIG_XFRM
d188ba86d Eric Dumazet 2015-12-08 391 struct xfrm_policy __rcu *sk_policy[2];
def8b4faf Alexey Dobriyan 2008-10-28 392 #endif
deaa58542 Eric Dumazet 2012-06-24 393 struct dst_entry *sk_rx_dst;
0e36cbb34 Cong Wang 2013-01-22 394 struct dst_entry __rcu *sk_dst_cache;
^1da177e4 Linus Torvalds 2005-04-16 395 atomic_t sk_omem_alloc;
4e07a91c3 Arnaldo Carvalho de Melo 2007-05-29 396 int sk_sndbuf;
9115e8cd2 Eric Dumazet 2016-12-03 397
9115e8cd2 Eric Dumazet 2016-12-03 398 /* ===== cache line for TX ===== */
9115e8cd2 Eric Dumazet 2016-12-03 399 int sk_wmem_queued;
14afee4b6 Reshetova, Elena 2017-06-30 400 refcount_t sk_wmem_alloc;
9115e8cd2 Eric Dumazet 2016-12-03 401 unsigned long sk_tsq_flags;
75c119afe Eric Dumazet 2017-10-05 402 union {
9115e8cd2 Eric Dumazet 2016-12-03 403 struct sk_buff *sk_send_head;
75c119afe Eric Dumazet 2017-10-05 404 struct rb_root tcp_rtx_queue;
75c119afe Eric Dumazet 2017-10-05 405 };
^1da177e4 Linus Torvalds 2005-04-16 406 struct sk_buff_head sk_write_queue;
9115e8cd2 Eric Dumazet 2016-12-03 407 __s32 sk_peek_off;
9115e8cd2 Eric Dumazet 2016-12-03 408 int sk_write_pending;
9b8805a32 Julian Anastasov 2017-02-06 409 __u32 sk_dst_pending_confirm;
218af599f Eric Dumazet 2017-05-16 410 u32 sk_pacing_status; /* see enum sk_pacing */
9115e8cd2 Eric Dumazet 2016-12-03 411 long sk_sndtimeo;
9115e8cd2 Eric Dumazet 2016-12-03 412 struct timer_list sk_timer;
9115e8cd2 Eric Dumazet 2016-12-03 413 __u32 sk_priority;
9115e8cd2 Eric Dumazet 2016-12-03 414 __u32 sk_mark;
9115e8cd2 Eric Dumazet 2016-12-03 415 u32 sk_pacing_rate; /* bytes per second */
9115e8cd2 Eric Dumazet 2016-12-03 416 u32 sk_max_pacing_rate;
9115e8cd2 Eric Dumazet 2016-12-03 417 struct page_frag sk_frag;
9115e8cd2 Eric Dumazet 2016-12-03 418 netdev_features_t sk_route_caps;
9115e8cd2 Eric Dumazet 2016-12-03 419 netdev_features_t sk_route_nocaps;
9115e8cd2 Eric Dumazet 2016-12-03 420 int sk_gso_type;
9115e8cd2 Eric Dumazet 2016-12-03 421 unsigned int sk_gso_max_size;
9115e8cd2 Eric Dumazet 2016-12-03 422 gfp_t sk_allocation;
9115e8cd2 Eric Dumazet 2016-12-03 423 __u32 sk_txhash;
fc64869c4 Andrey Ryabinin 2016-05-18 424
fc64869c4 Andrey Ryabinin 2016-05-18 425 /*
fc64869c4 Andrey Ryabinin 2016-05-18 426 * Because of non atomicity rules, all
fc64869c4 Andrey Ryabinin 2016-05-18 427 * changes are protected by socket lock.
fc64869c4 Andrey Ryabinin 2016-05-18 428 */
aa4c1037a David Ahern 2016-12-01 429 unsigned int __sk_flags_offset[0];
aa4c1037a David Ahern 2016-12-01 430 #ifdef __BIG_ENDIAN_BITFIELD
aa4c1037a David Ahern 2016-12-01 431 #define SK_FL_PROTO_SHIFT 16
aa4c1037a David Ahern 2016-12-01 432 #define SK_FL_PROTO_MASK 0x00ff0000
aa4c1037a David Ahern 2016-12-01 433
:::::: The code at line 349 was first introduced by commit
:::::: efe4208f47f907b86f528788da711e8ab9dea44d ipv6: make lookups simpler and faster
:::::: TO: Eric Dumazet <edumazet@google.com>
:::::: CC: David S. Miller <davem@davemloft.net>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26634 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-03-30 15:58 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-29 17:37 [PATCH net v3 0/3] ipv6: udp6: set dst cache for a connected sk if current not valid Alexey Kodanev
2018-03-29 17:37 ` [PATCH net v3 1/3] ipv6: move ip6_dst_store() calls with flowi6 checks to a wrapper Alexey Kodanev
2018-03-30 10:14 ` kbuild test robot
2018-03-30 11:36 ` Alexey Kodanev
2018-03-30 15:58 ` kbuild test robot
2018-03-29 17:37 ` [PATCH net v3 2/3] ipv6: allow to cache dst for connected sk in ip6_sk_dst_lookup_flow() Alexey Kodanev
2018-03-29 17:37 ` [PATCH net v3 3/3] ipv6: udp6: set dst cache for a connected sk if current not valid Alexey Kodanev
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.