X-Git-Url: https://git.sommitrealweird.co.uk/quagga-debian.git/blobdiff_plain/6d99eb2938e976229cb50d848a1bc491532b54f9..6d6685a82d5e1bbc9c2324ba777c937053770780:/doc/protocol.texi?ds=sidebyside diff --git a/doc/protocol.texi b/doc/protocol.texi index 602768a..082d545 100644 --- a/doc/protocol.texi +++ b/doc/protocol.texi @@ -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. -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 -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) @@ -40,7 +36,7 @@ used as of Quagga 1.0. @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 @@ -53,11 +49,26 @@ used as of Quagga 1.0. @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 -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 @@ -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. +@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