mbox series

[crypto,0/4] Inline TLS client and v6 support

Message ID 20190409152234.11100-1-atul.gupta@chelsio.com (mailing list archive)
Headers show
Series Inline TLS client and v6 support | expand

Message

Atul Gupta April 9, 2019, 3:22 p.m. UTC
Extends Inline TLS record processing to TLS client. connect
API is added to tls_context to setup hardware for TLS
connection and handshake. Functionality wise, this makes the solution
end-to-end Inline TLS capable. TLS server and client
can operate in Inline mode and leverage hardware for complete
TLS record offload.
[0004] Adds the IPv6 support for Inline TLS server/client.

RFC series for this patch was created against net-next and 
submitted on 18 Jan'2019.
This series is created against Herbert branch.

Atul Gupta (4):
  net/tls: connect routine for Inine TLS Client
  crypto/chelsio/chtls: hardware connect API
  crypto/chelsio/chtls: CPL for TLS client
  IPv6 changes for Inline TLS

 drivers/crypto/chelsio/chtls/chtls.h          |   18 +-
 drivers/crypto/chelsio/chtls/chtls_cm.c       | 1263 ++++++++++++++++++++++---
 drivers/crypto/chelsio/chtls/chtls_cm.h       |   12 +-
 drivers/crypto/chelsio/chtls/chtls_hw.c       |    7 +-
 drivers/crypto/chelsio/chtls/chtls_io.c       |   51 +-
 drivers/crypto/chelsio/chtls/chtls_main.c     |  164 +++-
 drivers/net/ethernet/chelsio/cxgb4/t4_msg.h   |   18 +
 drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h |    2 +
 include/net/tls.h                             |    6 +
 include/net/transp_v6.h                       |    7 +
 net/core/secure_seq.c                         |    1 +
 net/ipv6/tcp_ipv6.c                           |   26 +-
 net/tls/tls_main.c                            |   23 +
 13 files changed, 1442 insertions(+), 156 deletions(-)

Comments

Jakub Kicinski April 9, 2019, 6:01 p.m. UTC | #1
On Tue,  9 Apr 2019 08:22:34 -0700, Atul Gupta wrote:
> Extends Inline TLS record processing to TLS client. connect
> API is added to tls_context to setup hardware for TLS
> connection and handshake. Functionality wise, this makes the solution
> end-to-end Inline TLS capable. TLS server and client
> can operate in Inline mode and leverage hardware for complete
> TLS record offload.
> [0004] Adds the IPv6 support for Inline TLS server/client.
> 
> RFC series for this patch was created against net-next and 
> submitted on 18 Jan'2019.
> This series is created against Herbert branch.

Sorry if someone already asked this, but is your HW doing full ToE 
for all this TLS "record offload" stuff?
Atul Gupta April 10, 2019, 5:26 a.m. UTC | #2
On 4/9/2019 11:31 PM, Jakub Kicinski wrote:
> On Tue,  9 Apr 2019 08:22:34 -0700, Atul Gupta wrote:
>> Extends Inline TLS record processing to TLS client. connect
>> API is added to tls_context to setup hardware for TLS
>> connection and handshake. Functionality wise, this makes the solution
>> end-to-end Inline TLS capable. TLS server and client
>> can operate in Inline mode and leverage hardware for complete
>> TLS record offload.
>> [0004] Adds the IPv6 support for Inline TLS server/client.
>>
>> RFC series for this patch was created against net-next and 
>> submitted on 18 Jan'2019.
>> This series is created against Herbert branch.
> Sorry if someone already asked this, but is your HW doing full ToE 
> for all this TLS "record offload" stuff?

Yes Jakub

Thanks
Jakub Kicinski April 10, 2019, 3:58 p.m. UTC | #3
On Wed, 10 Apr 2019 10:56:37 +0530, Atul Gupta wrote:
> On 4/9/2019 11:31 PM, Jakub Kicinski wrote:
> > On Tue,  9 Apr 2019 08:22:34 -0700, Atul Gupta wrote:  
> >> Extends Inline TLS record processing to TLS client. connect
> >> API is added to tls_context to setup hardware for TLS
> >> connection and handshake. Functionality wise, this makes the solution
> >> end-to-end Inline TLS capable. TLS server and client
> >> can operate in Inline mode and leverage hardware for complete
> >> TLS record offload.
> >> [0004] Adds the IPv6 support for Inline TLS server/client.
> >>
> >> RFC series for this patch was created against net-next and 
> >> submitted on 18 Jan'2019.
> >> This series is created against Herbert branch.  
> > Sorry if someone already asked this, but is your HW doing full ToE 
> > for all this TLS "record offload" stuff?  
> 
> Yes Jakub

So from what I grok you already feed all the data directly to the
socket completely bypassing the lower layers of the networking stack,
and with this patch set you'd also move 3WHS into the FW?
Atul Gupta April 11, 2019, 4:17 a.m. UTC | #4
On 4/10/2019 9:28 PM, Jakub Kicinski wrote:
> On Wed, 10 Apr 2019 10:56:37 +0530, Atul Gupta wrote:
>> On 4/9/2019 11:31 PM, Jakub Kicinski wrote:
>>> On Tue,  9 Apr 2019 08:22:34 -0700, Atul Gupta wrote:  
>>>> Extends Inline TLS record processing to TLS client. connect
>>>> API is added to tls_context to setup hardware for TLS
>>>> connection and handshake. Functionality wise, this makes the solution
>>>> end-to-end Inline TLS capable. TLS server and client
>>>> can operate in Inline mode and leverage hardware for complete
>>>> TLS record offload.
>>>> [0004] Adds the IPv6 support for Inline TLS server/client.
>>>>
>>>> RFC series for this patch was created against net-next and 
>>>> submitted on 18 Jan'2019.
>>>> This series is created against Herbert branch.  
>>> Sorry if someone already asked this, but is your HW doing full ToE 
>>> for all this TLS "record offload" stuff?  
>> Yes Jakub
> So from what I grok you already feed all the data directly to the
> socket completely bypassing the lower layers of the networking stack,
> and with this patch set you'd also move 3WHS into the FW?
Yes, that's correct.
Jakub Kicinski April 11, 2019, 4:40 p.m. UTC | #5
On Thu, 11 Apr 2019 09:47:09 +0530, Atul Gupta wrote:
> On 4/10/2019 9:28 PM, Jakub Kicinski wrote:
> > On Wed, 10 Apr 2019 10:56:37 +0530, Atul Gupta wrote:  
> >> On 4/9/2019 11:31 PM, Jakub Kicinski wrote:  
> >>> On Tue,  9 Apr 2019 08:22:34 -0700, Atul Gupta wrote:    
> >>>> Extends Inline TLS record processing to TLS client. connect
> >>>> API is added to tls_context to setup hardware for TLS
> >>>> connection and handshake. Functionality wise, this makes the solution
> >>>> end-to-end Inline TLS capable. TLS server and client
> >>>> can operate in Inline mode and leverage hardware for complete
> >>>> TLS record offload.
> >>>> [0004] Adds the IPv6 support for Inline TLS server/client.
> >>>>
> >>>> RFC series for this patch was created against net-next and 
> >>>> submitted on 18 Jan'2019.
> >>>> This series is created against Herbert branch.    
> >>> Sorry if someone already asked this, but is your HW doing full ToE 
> >>> for all this TLS "record offload" stuff?    
> >> Yes Jakub  
> > So from what I grok you already feed all the data directly to the
> > socket completely bypassing the lower layers of the networking stack,
> > and with this patch set you'd also move 3WHS into the FW?  
> Yes, that's correct.

I believe then it's a no-go from netdev perspective.
Jakub Kicinski April 11, 2019, 6:45 p.m. UTC | #6
On Thu, 11 Apr 2019 23:13:08 +0530, Atul Gupta wrote:
> On 4/11/2019 10:10 PM, Jakub Kicinski wrote:
> > On Thu, 11 Apr 2019 09:47:09 +0530, Atul Gupta wrote:  
> >> On 4/10/2019 9:28 PM, Jakub Kicinski wrote:  
> >>> On Wed, 10 Apr 2019 10:56:37 +0530, Atul Gupta wrote:    
> >>>> On 4/9/2019 11:31 PM, Jakub Kicinski wrote:    
> >>>>> On Tue,  9 Apr 2019 08:22:34 -0700, Atul Gupta wrote:      
> >>>>>> Extends Inline TLS record processing to TLS client. connect
> >>>>>> API is added to tls_context to setup hardware for TLS
> >>>>>> connection and handshake. Functionality wise, this makes the solution
> >>>>>> end-to-end Inline TLS capable. TLS server and client
> >>>>>> can operate in Inline mode and leverage hardware for complete
> >>>>>> TLS record offload.
> >>>>>> [0004] Adds the IPv6 support for Inline TLS server/client.
> >>>>>>
> >>>>>> RFC series for this patch was created against net-next and 
> >>>>>> submitted on 18 Jan'2019.
> >>>>>> This series is created against Herbert branch.      
> >>>>> Sorry if someone already asked this, but is your HW doing full ToE 
> >>>>> for all this TLS "record offload" stuff?      
> >>>> Yes Jakub    
> >>> So from what I grok you already feed all the data directly to the
> >>> socket completely bypassing the lower layers of the networking stack,
> >>> and with this patch set you'd also move 3WHS into the FW?    
> >> Yes, that's correct.  
> > I believe then it's a no-go from netdev perspective.  
>
> Inline TLS record offload path is kept out of netdev and leverages
> offload capabilities for crypto

Inline TLS record offload path bypasses the networking stack and feeds
data directly into the socket.  If we also allow offloading 3WHS the
connection will become invisible to the stack, queueing, packet
filtering etc.

I think the "netdev community" feels pretty strongly about preventing
protocol ossification and bypassing crucial parts of the infrastructure.
David Miller April 11, 2019, 6:52 p.m. UTC | #7
From: Jakub Kicinski <jakub.kicinski@netronome.com>
Date: Thu, 11 Apr 2019 11:45:06 -0700

> I think the "netdev community" feels pretty strongly about preventing
> protocol ossification and bypassing crucial parts of the infrastructure.

Correct.
Atul Gupta April 15, 2019, 9:10 a.m. UTC | #8
On 4/12/2019 12:22 AM, David Miller wrote:
> From: Jakub Kicinski <jakub.kicinski@netronome.com>
> Date: Thu, 11 Apr 2019 11:45:06 -0700
>
>> I think the "netdev community" feels pretty strongly about preventing
>> protocol ossification and bypassing crucial parts of the infrastructure.
> Correct.

I understand the concern, the objective of complete offload of TLS record is an option to kTLS and other solutions. Have taken care to keep code out of netdev into crypto driver and allow user to choose record offload capability. Application buffer from socket is posted to HW for encryption, Segmentation and Tx on wire. The path provides near line-rate [100Gbps] Inline encrypt/decrypt b/w. If community feels this path adds value and can sit in crypto driver then I will work on build comments and resend v1?

Regards

Atul
Herbert Xu April 15, 2019, 9:36 a.m. UTC | #9
On Mon, Apr 15, 2019 at 02:40:03PM +0530, Atul Gupta wrote:
>
> Have taken care to keep code out of netdev into crypto driver
> and allow user to choose record offload capability.

Excuse me but the crypto driver is not a dumping ground for code
that is unacceptable for the network stack.  If it's unacceptable
for netdev then it's unacceptable to include them in your crypto
driver.

Cheers,