Re: Implementing some SMB2.2/3.0 features ...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Jul 29, 2012 at 6:28 AM, Jeff Layton <jlayton@xxxxxxxxx> wrote:
> On Sat, 28 Jul 2012 08:19:48 -0700
> Richard Sharpe <realrichardsharpe@xxxxxxxxx> wrote:
>
>> Hi folks,
>>
>> I have started looking at implementing some of the SMB3.0 features.
>> This is because, in order to do SMB Direct I need multi-connect.
>>
>> In reading the latest version of the spec ([MS-SMB2] dated July 5,
>> 2012 and available from msdn.microsoft.com) I notice that each session
>> should have a channel list, which is a list of objects containing a
>> connection reference and a signing key. It also should have a channel
>> sequence number.
>>
>> This means that I will need to change the struct cifs_ses to have a
>> channel list rather than a struct TCP_Server_Info.
>>
>> In addition, multi-connect allows multiple connections to the same
>> actual server, since it allows a session to use multiple TCP
>> connection on a GbE or 10GbE link. So, it seems that I will need to
>> introduce an explicit notion of a connection, which the code does not
>> currently have. This will definitely be needed for SMB Direct, because
>> the model is that you establish a connection to the server on TCP,
>> negotiate a protocol and then establish a session and then send an
>> FSCTL to discover the (common) set of interfaces the server has. After
>> that, if you notice that the client and server have an RDMA-capable
>> interface in common, you establish a connection via that interface,
>> negotiate protocol and then create a session (session setup) but bind
>> it to the existing session.
>>
>> Does anyone have any comments at this stage? This seems like a
>> significant undertaking :-)
>>
>
> It sounds like you're on the right track. Essentially I think you need
> to abstract out the parts of the TCP_Server_Info that are specific to
> the socket, and put them in a new struct that will hang off of the
> TCP_Server_Info in some way (maybe a linked list of "smb_connection"
> structs?)

Hmmm, actually, I think that the TCP_Server_Info should be renamed
cifs_tcp_connection or something like that.

Then 3.2.1.3 of [MS-SMB2] says that if the client implements version
2.2/3.0 of SMB2, it should also have a ChannelList (an array/list of
connection and SigningKey pairs) a ChannelSequence and a few other
bits.

Of course, these are only relevant if you are talking to a server that
implements the 2.2/3.0 dialect of SMB2. So, I need to think about how
to deal with this.

Then I need to think about how to handle Infiniband Connection objects
because they have a little protocol of their own, so they need a
proto_ops structure, while a TCP connection already has that.

Then, there is the issue of using socket callbacks for TCP. Infiniband
is event driven, and I need to look at the model to see if we can
unify socket callbacks and Infiniband events, which use callbacks.

-- 
Regards,
Richard Sharpe
(何以解憂?唯有杜康。--曹操)
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux