netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC v2 00/14] Generic TCP-option framework and adoption for TCP-SMC and TCP-MD5
@ 2018-02-01  0:07 Christoph Paasch
  2018-02-01  0:07 ` [RFC v2 01/14] tcp: Write options after the header has been fully done Christoph Paasch
                   ` (14 more replies)
  0 siblings, 15 replies; 18+ messages in thread
From: Christoph Paasch @ 2018-02-01  0:07 UTC (permalink / raw)
  To: netdev; +Cc: Eric Dumazet, Mat Martineau

Resubmit as v2 RFC to get some feedback before net-next opens up again.
Only minor changes (see below).


This patchset introduces a generic framework for handling TCP-options.

TCP-options like TCP_MD5 and SMC are rather rare use-cases, but their
implementation is rather intrusive to the TCP-stack. Other, more recent
TCP extensions like TCP-crypt, MPTCP or TCP-AO would make this situation
even worse.

This new framework allows to add these TCP-options in a modular way. Writing,
reading and acting upon these options is done through callbacks that get
registered to a TCP-socket. A TCP-socket has a list of "extra" TCP-options
that it will use.

We make TCP-SMC and TCP-MD5SIG adopt this new framework. As can be seen, there
is now no more TCP-SMC code in the TCP-files and the TCP-MD5 code has been
reduced to a bare minimum.

This patchset is admittedly rather big, but we wanted to show where the
framework will lead to and what it enables. Suggestions as to how to better
structure the patchset is appreciated.

There is still work to be done to more efficiently check for extra TCP options
in performance-sensitive code paths. A rate-limited static key would nearly
eliminate overhead if no extra TCP options are in use system-wide, or a flag
in a likely-hot cache line could work well.

For now we opted for a simple if (unlikely(!hlist_empty(...)) check.

Feedback is very welcome!

Thanks,
Mat & Christoph


Changelog:
===
v1 -> v2:
	* Some minor fixes thanks to the buildbot when certain configs
	  are disabled (Patch 5 and 12)
	* Add spdx-header in the new files (Patch 11)
	* Added Ivan Delande to the CC-list as he did some TCP-MD5
	  changes in the past.


Christoph Paasch (13):
  tcp: Write options after the header has been fully done
  tcp: Pass sock and skb to tcp_options_write
  tcp: Allow tcp_fast_parse_options to drop segments
  tcp_smc: Make smc_parse_options return 1 on success
  tcp_smc: Make SMC use TCP extra-option framework
  tcp_md5: Don't pass along md5-key
  tcp_md5: Detect key inside tcp_v4_send_ack instead of passing it as an
    argument
  tcp_md5: Detect key inside tcp_v6_send_response instead of passing it
    as an argument
  tcp_md5: Check for TCP_MD5 after TCP Timestamps in
    tcp_established_options
  tcp_md5: Move TCP-MD5 code out of TCP itself
  tcp_md5: Use tcp_extra_options in output path
  tcp_md5: Cleanup TCP-code
  tcp_md5: Use TCP extra-options on the input path

Mat Martineau (1):
  tcp: Register handlers for extra TCP options

 drivers/infiniband/hw/cxgb4/cm.c |    2 +-
 include/linux/inet_diag.h        |    1 +
 include/linux/tcp.h              |   43 +-
 include/linux/tcp_md5.h          |   40 ++
 include/net/inet_sock.h          |    3 +-
 include/net/tcp.h                |  213 +++---
 net/ipv4/Makefile                |    1 +
 net/ipv4/syncookies.c            |    6 +-
 net/ipv4/tcp.c                   |  391 ++++++++---
 net/ipv4/tcp_diag.c              |   81 +--
 net/ipv4/tcp_input.c             |  137 ++--
 net/ipv4/tcp_ipv4.c              |  556 ++--------------
 net/ipv4/tcp_md5.c               | 1359 ++++++++++++++++++++++++++++++++++++++
 net/ipv4/tcp_minisocks.c         |   75 +--
 net/ipv4/tcp_output.c            |  182 +----
 net/ipv6/syncookies.c            |    6 +-
 net/ipv6/tcp_ipv6.c              |  390 ++---------
 net/smc/af_smc.c                 |  190 +++++-
 18 files changed, 2228 insertions(+), 1448 deletions(-)
 create mode 100644 include/linux/tcp_md5.h
 create mode 100644 net/ipv4/tcp_md5.c

-- 
2.16.1

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2018-02-03  1:15 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-01  0:07 [RFC v2 00/14] Generic TCP-option framework and adoption for TCP-SMC and TCP-MD5 Christoph Paasch
2018-02-01  0:07 ` [RFC v2 01/14] tcp: Write options after the header has been fully done Christoph Paasch
2018-02-01  0:07 ` [RFC v2 02/14] tcp: Pass sock and skb to tcp_options_write Christoph Paasch
2018-02-01 15:11   ` David Miller
2018-02-01  0:07 ` [RFC v2 03/14] tcp: Allow tcp_fast_parse_options to drop segments Christoph Paasch
2018-02-01  0:07 ` [RFC v2 04/14] tcp_smc: Make smc_parse_options return 1 on success Christoph Paasch
2018-02-01  0:07 ` [RFC v2 05/14] tcp: Register handlers for extra TCP options Christoph Paasch
2018-02-01  0:07 ` [RFC v2 06/14] tcp_smc: Make SMC use TCP extra-option framework Christoph Paasch
2018-02-01  0:07 ` [RFC v2 07/14] tcp_md5: Don't pass along md5-key Christoph Paasch
2018-02-01  0:07 ` [RFC v2 08/14] tcp_md5: Detect key inside tcp_v4_send_ack instead of passing it as an argument Christoph Paasch
2018-02-01  0:07 ` [RFC v2 09/14] tcp_md5: Detect key inside tcp_v6_send_response " Christoph Paasch
2018-02-01  0:07 ` [RFC v2 10/14] tcp_md5: Check for TCP_MD5 after TCP Timestamps in tcp_established_options Christoph Paasch
2018-02-01  0:07 ` [RFC v2 11/14] tcp_md5: Move TCP-MD5 code out of TCP itself Christoph Paasch
2018-02-01  0:07 ` [RFC v2 12/14] tcp_md5: Use tcp_extra_options in output path Christoph Paasch
2018-02-01  0:07 ` [RFC v2 13/14] tcp_md5: Cleanup TCP-code Christoph Paasch
2018-02-01  0:07 ` [RFC v2 14/14] tcp_md5: Use TCP extra-options on the input path Christoph Paasch
2018-02-01 15:15 ` [RFC v2 00/14] Generic TCP-option framework and adoption for TCP-SMC and TCP-MD5 David Miller
2018-02-03  1:15   ` Christoph Paasch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).