<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/linux.git/include/linux/tcp.h, branch linux-4.3.y</title>
<subtitle>Linux kernel stable tree (mirror)</subtitle>
<id>https://git.radix-linux.su/kernel/linux.git/atom?h=linux-4.3.y</id>
<link rel='self' href='https://git.radix-linux.su/kernel/linux.git/atom?h=linux-4.3.y'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/'/>
<updated>2015-05-23T05:22:35+00:00</updated>
<entry>
<title>Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net</title>
<updated>2015-05-23T05:22:35+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2015-05-23T05:22:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=36583eb54d46c36a447afd6c379839f292397429'/>
<id>urn:sha1:36583eb54d46c36a447afd6c379839f292397429</id>
<content type='text'>
Conflicts:
	drivers/net/ethernet/cadence/macb.c
	drivers/net/phy/phy.c
	include/linux/skbuff.h
	net/ipv4/tcp.c
	net/switchdev/switchdev.c

Switchdev was a case of RTNH_H_{EXTERNAL --&gt; OFFLOAD}
renaming overlapping with net-next changes of various
sorts.

phy.c was a case of two changes, one adding a local
variable to a function whilst the second was removing
one.

tcp.c overlapped a deadlock fix with the addition of new tcp_info
statistic values.

macb.c involved the addition of two zyncq device entries.

skbuff.h involved adding back ipv4_daddr to nf_bridge_info
whilst net-next changes put two other existing members of
that struct into a union.

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>tcp: fix a potential deadlock in tcp_get_info()</title>
<updated>2015-05-22T17:46:06+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2015-05-22T04:51:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=d654976cbf852ee20612ee10dbe57cdacda9f452'/>
<id>urn:sha1:d654976cbf852ee20612ee10dbe57cdacda9f452</id>
<content type='text'>
Taking socket spinlock in tcp_get_info() can deadlock, as
inet_diag_dump_icsk() holds the &amp;hashinfo-&gt;ehash_locks[i],
while packet processing can use the reverse locking order.

We could avoid this locking for TCP_LISTEN states, but lockdep would
certainly get confused as all TCP sockets share same lockdep classes.

[  523.722504] ======================================================
[  523.728706] [ INFO: possible circular locking dependency detected ]
[  523.734990] 4.1.0-dbg-DEV #1676 Not tainted
[  523.739202] -------------------------------------------------------
[  523.745474] ss/18032 is trying to acquire lock:
[  523.750002]  (slock-AF_INET){+.-...}, at: [&lt;ffffffff81669d44&gt;] tcp_get_info+0x2c4/0x360
[  523.758129]
[  523.758129] but task is already holding lock:
[  523.763968]  (&amp;(&amp;hashinfo-&gt;ehash_locks[i])-&gt;rlock){+.-...}, at: [&lt;ffffffff816bcb75&gt;] inet_diag_dump_icsk+0x1d5/0x6c0
[  523.774661]
[  523.774661] which lock already depends on the new lock.
[  523.774661]
[  523.782850]
[  523.782850] the existing dependency chain (in reverse order) is:
[  523.790326]
-&gt; #1 (&amp;(&amp;hashinfo-&gt;ehash_locks[i])-&gt;rlock){+.-...}:
[  523.796599]        [&lt;ffffffff811126bb&gt;] lock_acquire+0xbb/0x270
[  523.802565]        [&lt;ffffffff816f5868&gt;] _raw_spin_lock+0x38/0x50
[  523.808628]        [&lt;ffffffff81665af8&gt;] __inet_hash_nolisten+0x78/0x110
[  523.815273]        [&lt;ffffffff816819db&gt;] tcp_v4_syn_recv_sock+0x24b/0x350
[  523.822067]        [&lt;ffffffff81684d41&gt;] tcp_check_req+0x3c1/0x500
[  523.828199]        [&lt;ffffffff81682d09&gt;] tcp_v4_do_rcv+0x239/0x3d0
[  523.834331]        [&lt;ffffffff816842fe&gt;] tcp_v4_rcv+0xa8e/0xc10
[  523.840202]        [&lt;ffffffff81658fa3&gt;] ip_local_deliver_finish+0x133/0x3e0
[  523.847214]        [&lt;ffffffff81659a9a&gt;] ip_local_deliver+0xaa/0xc0
[  523.853440]        [&lt;ffffffff816593b8&gt;] ip_rcv_finish+0x168/0x5c0
[  523.859624]        [&lt;ffffffff81659db7&gt;] ip_rcv+0x307/0x420

Lets use u64_sync infrastructure instead. As a bonus, 64bit
arches get optimized, as these are nop for them.

Fixes: 0df48c26d841 ("tcp: add tcpi_bytes_acked to tcp_info")
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>tcp: add tcpi_segs_in and tcpi_segs_out to tcp_info</title>
<updated>2015-05-22T03:25:21+00:00</updated>
<author>
<name>Marcelo Ricardo Leitner</name>
<email>mleitner@redhat.com</email>
</author>
<published>2015-05-20T23:35:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=2efd055c53c06b7e89c167c98069bab9afce7e59'/>
<id>urn:sha1:2efd055c53c06b7e89c167c98069bab9afce7e59</id>
<content type='text'>
This patch tracks the total number of inbound and outbound segments on a
TCP socket. One may use this number to have an idea on connection
quality when compared against the retransmissions.

RFC4898 named these : tcpEStatsPerfSegsIn and tcpEStatsPerfSegsOut

These are a 32bit field each and can be fetched both from TCP_INFO
getsockopt() if one has a handle on a TCP socket, or from inet_diag
netlink facility (iproute2/ss patch will follow)

Note that tp-&gt;segs_out was placed near tp-&gt;snd_nxt for good data
locality and minimal performance impact, while tp-&gt;segs_in was placed
near tp-&gt;bytes_received for the same reason.

Join work with Eric Dumazet.

Note that received SYN are accounted on the listener, but sent SYNACK
are not accounted.

Signed-off-by: Marcelo Ricardo Leitner &lt;mleitner@redhat.com&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>tcp: provide SYN headers for passive connections</title>
<updated>2015-05-05T20:02:34+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2015-05-04T04:34:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=cd8ae85299d54155702a56811b2e035e63064d3d'/>
<id>urn:sha1:cd8ae85299d54155702a56811b2e035e63064d3d</id>
<content type='text'>
This patch allows a server application to get the TCP SYN headers for
its passive connections.  This is useful if the server is doing
fingerprinting of clients based on SYN packet contents.

Two socket options are added: TCP_SAVE_SYN and TCP_SAVED_SYN.

The first is used on a socket to enable saving the SYN headers
for child connections. This can be set before or after the listen()
call.

The latter is used to retrieve the SYN headers for passive connections,
if the parent listener has enabled TCP_SAVE_SYN.

TCP_SAVED_SYN is read once, it frees the saved SYN headers.

The data returned in TCP_SAVED_SYN are network (IPv4/IPv6) and TCP
headers.

Original patch was written by Tom Herbert, I changed it to not hold
a full skb (and associated dst and conntracking reference).

We have used such patch for about 3 years at Google.

Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Acked-by: Neal Cardwell &lt;ncardwell@google.com&gt;
Tested-by: Neal Cardwell &lt;ncardwell@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>tcp: add tcpi_bytes_received to tcp_info</title>
<updated>2015-04-29T21:10:37+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2015-04-28T22:28:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=bdd1f9edacb5f5835d1e6276571bbbe5b88ded48'/>
<id>urn:sha1:bdd1f9edacb5f5835d1e6276571bbbe5b88ded48</id>
<content type='text'>
This patch tracks total number of payload bytes received on a TCP socket.
This is the sum of all changes done to tp-&gt;rcv_nxt

RFC4898 named this : tcpEStatsAppHCThruOctetsReceived

This is a 64bit field, and can be fetched both from TCP_INFO
getsockopt() if one has a handle on a TCP socket, or from inet_diag
netlink facility (iproute2/ss patch will follow)

Note that tp-&gt;bytes_received was placed near tp-&gt;rcv_nxt for
best data locality and minimal performance impact.

Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Cc: Yuchung Cheng &lt;ycheng@google.com&gt;
Cc: Matt Mathis &lt;mattmathis@google.com&gt;
Cc: Eric Salo &lt;salo@google.com&gt;
Cc: Martin Lau &lt;kafai@fb.com&gt;
Cc: Chris Rapier &lt;rapier@psc.edu&gt;
Acked-by: Yuchung Cheng &lt;ycheng@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>tcp: add tcpi_bytes_acked to tcp_info</title>
<updated>2015-04-29T21:10:37+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2015-04-28T22:28:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=0df48c26d8418c5c9fba63fac15b660d70ca2f1c'/>
<id>urn:sha1:0df48c26d8418c5c9fba63fac15b660d70ca2f1c</id>
<content type='text'>
This patch tracks total number of bytes acked for a TCP socket.
This is the sum of all changes done to tp-&gt;snd_una, and allows
for precise tracking of delivered data.

RFC4898 named this : tcpEStatsAppHCThruOctetsAcked

This is a 64bit field, and can be fetched both from TCP_INFO
getsockopt() if one has a handle on a TCP socket, or from inet_diag
netlink facility (iproute2/ss patch will follow)

Note that tp-&gt;bytes_acked was placed near tp-&gt;snd_una for
best data locality and minimal performance impact.

Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Acked-by: Yuchung Cheng &lt;ycheng@google.com&gt;
Cc: Matt Mathis &lt;mattmathis@google.com&gt;
Cc: Eric Salo &lt;salo@google.com&gt;
Cc: Martin Lau &lt;kafai@fb.com&gt;
Cc: Chris Rapier &lt;rapier@psc.edu&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>tcp: RFC7413 option support for Fast Open client</title>
<updated>2015-04-07T22:36:39+00:00</updated>
<author>
<name>Daniel Lee</name>
<email>Longinus00@gmail.com</email>
</author>
<published>2015-04-06T21:37:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=2646c831c00c5d22aa72b79d24069c1b412cda7c'/>
<id>urn:sha1:2646c831c00c5d22aa72b79d24069c1b412cda7c</id>
<content type='text'>
Fast Open has been using an experimental option with a magic number
(RFC6994). This patch makes the client by default use the RFC7413
option (34) to get and send Fast Open cookies.  This patch makes
the client solicit cookies from a given server first with the
RFC7413 option. If that fails to elicit a cookie, then it tries
the RFC6994 experimental option. If that also fails, it uses the
RFC7413 option on all subsequent connect attempts.  If the server
returns a Fast Open cookie then the client caches the form of the
option that successfully elicited a cookie, and uses that form on
later connects when it presents that cookie.

The idea is to gradually obsolete the use of experimental options as
the servers and clients upgrade, while keeping the interoperability
meanwhile.

Signed-off-by: Daniel Lee &lt;Longinus00@gmail.com&gt;
Signed-off-by: Yuchung Cheng &lt;ycheng@google.com&gt;
Signed-off-by: Neal Cardwell &lt;ncardwell@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>tcp: RFC7413 option support for Fast Open server</title>
<updated>2015-04-07T22:36:39+00:00</updated>
<author>
<name>Daniel Lee</name>
<email>Longinus00@gmail.com</email>
</author>
<published>2015-04-06T21:37:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=7f9b838b71eb78a27de27a12ca5de8542fac3115'/>
<id>urn:sha1:7f9b838b71eb78a27de27a12ca5de8542fac3115</id>
<content type='text'>
Fast Open has been using the experimental option with a magic number
(RFC6994) to request and grant Fast Open cookies. This patch enables
the server to support the official IANA option 34 in RFC7413 in
addition.

The change has passed all existing Fast Open tests with both
old and new options at Google.

Signed-off-by: Daniel Lee &lt;Longinus00@gmail.com&gt;
Signed-off-by: Yuchung Cheng &lt;ycheng@google.com&gt;
Signed-off-by: Neal Cardwell &lt;ncardwell@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>tcp: rename struct tcp_request_sock listener</title>
<updated>2015-03-18T02:01:56+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2015-03-18T01:32:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=9439ce00f208d95703a6725e4ea986dd90e37ffd'/>
<id>urn:sha1:9439ce00f208d95703a6725e4ea986dd90e37ffd</id>
<content type='text'>
The listener field in struct tcp_request_sock is a pointer
back to the listener. We now have req-&gt;rsk_listener, so TCP
only needs one boolean and not a full pointer.

Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>tcp: tso: remove tp-&gt;tso_deferred</title>
<updated>2015-02-28T20:10:39+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2015-02-26T22:10:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=5f852eb536ad651b8734559dcf4353514cb0bea3'/>
<id>urn:sha1:5f852eb536ad651b8734559dcf4353514cb0bea3</id>
<content type='text'>
TSO relies on ability to defer sending a small amount of packets.
Heuristic is to wait for future ACKS in hope to send more packets at once.
Current algorithm uses a per socket tso_deferred field as a pseudo timer.

This pseudo timer relies on future ACK, but there is no guarantee
we receive them in time.

Fix would be to use a real timer, but cost of such timer is probably too
expensive for typical cases.

This patch changes the logic to test the time of last transmit,
because we should not add bursts of more than 1ms for any given flow.

We've used this patch for about two years at Google, before FQ/pacing
as it would reduce a fair amount of bursts.

Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: Yuchung Cheng &lt;ycheng@google.com&gt;
Signed-off-by: Neal Cardwell &lt;ncardwell@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
</feed>
