| .TH VERSION 9P |
| .SH NAME |
| version \- negotiate protocol version |
| .SH SYNOPSIS |
| .ta \w'\fLTversion 'u |
| .IR size [4] |
| .B Tversion |
| .IR tag [2] |
| .IR msize [4] |
| .IR version [ s ] |
| .br |
| .IR size [4] |
| .B Rversion |
| .IR tag [2] |
| .IR msize [4] |
| .IR version [ s ] |
| .SH DESCRIPTION |
| The |
| .B version |
| request negotiates the protocol version and message size |
| to be used on the connection and initializes the connection for I/O. |
| .B Tversion |
| must be the first message sent on the 9P connection, |
| and the client cannot issue any further requests until it has received the |
| .B Rversion |
| reply. |
| The |
| .I tag |
| should be |
| .B NOTAG |
| (value |
| .BR (ushort)~0 ) |
| for a |
| .B version |
| message. |
| .PP |
| The client suggests a maximum message size, |
| .BR 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 |
| .B size |
| field and extending through the message, |
| but excludes enveloping transport protocols. |
| The server responds with its own maximum, |
| .BR msize , |
| which must be less than or equal to the client's value. |
| Thenceforth, both sides of the connection must honor this limit. |
| .PP |
| The |
| .B version |
| string identifies the level of the protocol. |
| The string must always begin with the two characters |
| .RB `` 9P ''. |
| If the server does not understand the client's version string, |
| it should respond with an |
| .B Rversion |
| message (not |
| .BR Rerror ) |
| with the |
| .B version |
| string the 7 characters |
| .RB `` unknown ''. |
| .PP |
| 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 |
| .RB `` 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 |
| .BI 9P nnnn\f1, |
| where |
| .I nnnn |
| is less than or equal to the digits sent by the client. |
| .PP |
| The client and server will use the protocol version defined by the |
| server's response for all subsequent communication on the connection. |
| .PP |
| A successful |
| .B 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 |
| .B version |
| requests is called a |
| .IR session . |
| .SH ENTRY POINTS |
| .I Fsversion |
| (see |
| .IR 9pclient (3)) |
| generates |
| .B version |
| messages; |
| it is called automatically by |
| .IR fsmount . |