Merge tag 'upstream/1.2.3'
[quagga-debian.git] / doc / protocol.texi
index 602768a78628ff9719c54e73983dc306fe457744..082d545e83f8a596cf53214aa01c6ec301e4330b 100644 (file)
@@ -11,22 +11,18 @@ nexthop-validation, and so on. Protocol daemons may also install routes
 with zebra. The zebra daemon manages which route is installed into the
 forwarding table with the kernel.
 
 with zebra. The zebra daemon manages which route is installed into the
 forwarding table with the kernel.
 
-Zebra Protocol is a streaming protocol, with a common header. Two
-versions of the header are in use. Version 0 is implicitely versioned.
-Version 1 has an explicit version field. Version 0 can be distinguished
-from all other versions by examining the 3rd byte of the header, which
-contains a marker value for all versions bar version 0. The marker byte
-corresponds to the command field in version 0, and the marker value is
-a reserved command in version 0.
-
-We do not anticipate there will be further versions of the header for
-the foreseeable future, as the command field in version 1 is wide
-enough to allow for future extensions to done compatibly through
-seperate commands.
+Zebra Protocol is a streaming protocol, with a common header.  The protocol
+is versioned to allow for incompatible changes.  Version 0 is implicitely
+versioned.  Version 1 onwards has an explicit version field.  Version 0 can
+be distinguished from all other versions by examining the 3rd byte of the
+header, which contains a marker value of 255 for all versions bar version 0. 
+The marker byte corresponds to the command field in version 0, and the
+marker value is a reserved command in version 0.
 
 Version 0 is used by all versions of GNU Zebra as of this writing, and
 
 Version 0 is used by all versions of GNU Zebra as of this writing, and
-versions of Quagga up to and including Quagga 0.98. Version 1 will be
-used as of Quagga 1.0.
+versions of Quagga up to and including Quagga 0.98.  The version 1 header
+was introduced with Quagga 0.99.3.  The version 3 header was introduced with
+Quagga 1.0.20160309.
 
 @appendixsection Zebra Protocol Definition
 @appendixsubsec Zebra Protocol Header (version 0)
 
 @appendixsection Zebra Protocol Definition
 @appendixsubsec Zebra Protocol Header (version 0)
@@ -40,7 +36,7 @@ used as of Quagga 1.0.
 @end group
 @end example
 
 @end group
 @end example
 
-@appendixsubsec Zebra Protocol Common Header (version 1)
+@appendixsubsec Zebra Protocol Common Header (version 1 and 2)
 @example
 @group
 0                   1                   2                   3
 @example
 @group
 0                   1                   2                   3
@@ -53,11 +49,26 @@ used as of Quagga 1.0.
 @end group
 @end example
 
 @end group
 @end example
 
+@appendixsubsec Zebra Protocol Common Header (version 3)
+@example
+@group
+0                   1                   2                   3
+0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
++-------------------------------+---------------+-------------+
+|           Length (2)          |   Marker (1)  | Version (1) |
++-------------------------------+---------------+-------------+
+|          VRF ID  (2)          |        Command (2)          |
++-------------------------------+-----------------------------+
+@end group
+@end example
+
+
 @appendixsubsec Zebra Protocol Header Field Definitions
 @table @samp
 @item Length
 Total packet length including this header. The minimum length is 3
 @appendixsubsec Zebra Protocol Header Field Definitions
 @table @samp
 @item Length
 Total packet length including this header. The minimum length is 3
-bytes for version 0 messages and 6 bytes for version 1 messages.
+bytes for version 0 messages, 6 bytes for version 1 and 2 messages, and
+8 bytes for version 3.
 
 @item Marker
 Static marker with a value of 255 always. This is to allow version 0
 
 @item Marker
 Static marker with a value of 255 always. This is to allow version 0
@@ -70,6 +81,10 @@ Version number of the Zserv message. Clients should not continue
 processing messages past the version field for versions they do not
 recognise. Not present in version 0 messages.
 
 processing messages past the version field for versions they do not
 recognise. Not present in version 0 messages.
 
+@item VRF ID
+Virtual Routing/Forwarding context ID, to which the message applies. Only
+present from version 3 onwards.
+
 @item Command
 The Zebra Protocol command.
 @end table
 @item Command
 The Zebra Protocol command.
 @end table