read/write multiplexed support

Christopher R. Hertel crh at ubiqx.mn.org
Fri May 15 16:38:15 GMT 2009


First off, Jeremy and Volker are absolutely correct.  What you need are
captures.

Marcel Müller wrote:
> Christopher R. Hertel wrote:
>> Windows servers only support the readMPX/writeMPX SMB calls over
>> connectionless transport (direct IPX transport--which is not NWLINK).
> 
> Are you sure? I thought it was the other way around.
> However, if readMPX is not supported readRAW is supported. (I think this
> one is for connectionless transports.)

I'm sure.  See:
http://www.ubiqx.org/cifs/rfc-draft/draft-leach-cifs-v1-spec-02.html#s5.13
That's the old Leach/Naik IETF draft, but it is correct on this point.  It
says: "The NT server supports SMB_COM_READ_MPX only over connectionless
transports."

...and yes, RAW mode is supported over TCP, etc.  I have captures showing
RAW mode between W98 and NT4 servers.

Raw mode, however, is deprecated.  With NT4 you get CAP_LARGE_READ and with
W2K you get CAP_LARGE_WRITE support.  These are improvements over RAW mode.
 RAW read interferes with OpLock support and raw mode in general is
incompatible with SMB signing.

>> The
>> whole purpose these commands was to make optimal use of multiple
>> transport level connections that were bound together.  Typically
>> this would be multiple modem links between a remote client and a
>> server.  MPX commands would have no real benefit over a
>> single-path connection oriented transport.
> 
> As far as I know, the idea is to multiplex several commands through a
> single connection. If you have parallel connections, read/write RAW
> should be your friend.

If you have multiple parallel transport-level connections (particularly low
speed ones) you want to have your large operations multiplexed across them
for maximum throughput.  If you are doing a multiplex read or write, even on
a single link, you can intersperse other commands without losing track of
what you're doing.

That's not true for Raw mode, in which you must send all of the raw mode
bytes across a single connection (otherwise how do you sequence them?) and
must transfer all bytes before sending any other commands (otherwise the
other commands could confused as being part of the raw mode stream--this is
the problem with OpLock breaks during a Raw Mode transfer).

> I will have a look to the specs tomorrow.

Look for SMB-LM1X, which is the original LANMAN1.0 doc that defines both RAW
mode and the MPX calls (SMB-LM1X is the same as DOSEXTP).  Also get yourself
a copy of the X/Open SMB doc (C209, I believe).  You will have to register
on The Open Group's web page in order to download C209 but it's worth it.
There are errors in that doc but it is one of the most comprehensive and
(despite the errors) accurate docs out there--it covers the entire OS/2
LANMAN range of dialects and earlier.

Note, however, that the behavior of the MPX calls changed with the NT LAN
Manager (NT LM 0.12) dialect so even if there were support for those calls
in Samba (which I can't imagine since Samba doesn't support connectionless
transport) it might not be what you'd expect.

Chris -)-----

--
"Implementing CIFS - the Common Internet FileSystem" ISBN: 013047116X
Samba Team -- http://www.samba.org/     -)-----   Christopher R. Hertel
jCIFS Team -- http://jcifs.samba.org/   -)-----   ubiqx development, uninq.
ubiqx Team -- http://www.ubiqx.org/     -)-----   crh at ubiqx.mn.org
OnLineBook -- http://ubiqx.org/cifs/    -)-----   crh at ubiqx.org


More information about the samba-technical mailing list