version - negotiate protocol version
size[4]
Tversion tag[2]
msize[4]
version[
s]
size[4]
Rversion tag[2]
msize[4]
version[
s]
The
version request negotiates the protocol version and message size to
be used on the connection and initializes the connection for I/O.
Tversion must be the first message sent on the 9P connection, and the
client cannot issue any further requests until it has received the
Rversion reply. The
tag should be
NOTAG (value
(ushort)~0) for a
version message.
The client suggests a maximum message size,
msize, that is the maximum
length, in bytes, it will ever generate or expect to receive in a single 9P
message. This count includes all 9P protocol data, starting from the
size field and extending through the message, but excludes enveloping
transport protocols. The server responds with its own maximum,
msize,
which must be less than or equal to the client's value. Thenceforth, both
sides of the connection must honor this limit.
The
version string identifies the level of the protocol. The string must
always begin with the two characters ``
9P''. If the server does not
understand the client's version string, it should respond with an
Rversion message (not
Rerror) with the
version string the
7 characters ``
unknown''.
The server may respond with the client's version string, or a version string
identifying an earlier defined protocol version. Currently, the only defined
version is the 6 characters ``
9P2000''. Version strings are defined
such that, if the client string contains one or more period characters, the
initial substring up to but not including any single period in the version
string defines a version of the protocol. After stripping any such
period-separated suffix, the server is allowed to respond with a string of the
form
9Pnnnn, where
nnnn is less than or equal to the
digits sent by the client.
The client and server will use the protocol version defined by the server's
response for all subsequent communication on the connection.
A successful
version request initializes the connection. All outstanding
I/O on the connection is aborted; all active fids are freed (`clunked')
automatically. The set of messages between
version requests is called a
session.
Fsversion (see
9pclient(3)) generates
version messages; it
is called automatically by
fsmount.