draft-mcquistin-augmented-ascii-diagrams-00.txt   draft-mcquistin-augmented-ascii-diagrams-01.txt 
Network Working Group S. McQuistin Network Working Group S. McQuistin
Internet-Draft V. Band Internet-Draft V. Band
Intended status: Informational C. Perkins Intended status: Experimental C. S. Perkins
Expires: 9 January 2020 University of Glasgow Expires: 6 May 2020 University of Glasgow
8 July 2019 3 November 2019
Fully Specifying Protocol Parsing with Augmented ASCII Diagrams Describing Protocol Data Units with Augmented Packet Header Diagrams
draft-mcquistin-augmented-ascii-diagrams-00 draft-mcquistin-augmented-ascii-diagrams-01
Abstract Abstract
This document describes a machine-readable format for fully This document describes a machine-readable format for specifying the
specifying the process by which a protocol can be parsed. This syntax of protocol data units within a protocol specification. This
format combines a consistent ASCII packet diagram format with the use format is comprised of a consistently formatted packet header
of structured text, maintaining human readability while enabling diagram, followed by structured explanatory text. It is designed to
support for machine parsing. This document is itself an example of maintain human readability while enabling support for automated
how this format can be used. parser generation from the specification document. This document is
itself an example of how the format can be used.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on 9 January 2020. This Internet-Draft will expire on 6 May 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/ Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document. license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components and restrictions with respect to this document. Code Components
extracted from this document must include Simplified BSD License text extracted from this document must include Simplified BSD License text
as described in Section 4.e of the Trust Legal Provisions and are as described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Simplified BSD License. provided without warranty as described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Background . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Background . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1. Limitations of current ASCII packet diagrams usage . . . 3 2.1. Limitations of Current Packet Format Diagrams . . . . . . 4
2.2. Formal languages in standards documents . . . . . . . . . 6 2.2. Formal languages in standards documents . . . . . . . . . 6
3. Design Principles . . . . . . . . . . . . . . . . . . . . . . 6 3. Design Principles . . . . . . . . . . . . . . . . . . . . . . 7
4. Augmented ASCII Packet Header Diagrams . . . . . . . . . . . 8 4. Augmented Packet Header Diagrams . . . . . . . . . . . . . . 8
4.1. Fixed-width Field Format . . . . . . . . . . . . . . . . 8 4.1. PDUs with Fixed and Variable-Width Fields . . . . . . . . 9
4.2. Variable-width Field Format . . . . . . . . . . . . . . . 10 4.2. PDUs That Cross-Reference Previously Defined
4.3. Cross-referencing and Sequences Format . . . . . . . . . 11 Fields . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.4. Optional Field Format . . . . . . . . . . . . . . . . . . 12 4.3. PDUs with Non-Contiguous Fields . . . . . . . . . . . . . 14
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14
6. Security Considerations . . . . . . . . . . . . . . . . . . . 13 6. Security Considerations . . . . . . . . . . . . . . . . . . . 14
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 13 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 14
8. Informative References . . . . . . . . . . . . . . . . . . . 13 8. Informative References . . . . . . . . . . . . . . . . . . . 15
Appendix A. ABNF specification . . . . . . . . . . . . . . . . . 14 Appendix A. ABNF specification . . . . . . . . . . . . . . . . . 16
A.1. Constraint Expressions . . . . . . . . . . . . . . . . . 14 A.1. Constraint Expressions . . . . . . . . . . . . . . . . . 16
A.2. Augmented ASCII diagrams . . . . . . . . . . . . . . . . 14 A.2. Augmented packet diagrams . . . . . . . . . . . . . . . . 16
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 Appendix B. Source code repository . . . . . . . . . . . . . . . 16
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16
1. Introduction 1. Introduction
ASCII packet header diagrams have become the de-facto format for Packet header diagrams have become a widely used format for
describing the syntax of binary protocols. In otherwise largely describing the syntax of binary protocols. In otherwise largely
textual documents, they allow for the visualisation of packet textual documents, they allow for the visualisation of packet
formats, reducing human error, and aiding in the implementation of formats, reducing human error, and aiding in the implementation of
parsers for the protocols that they specify. Given their widespread parsers for the protocols that they specify.
use, and relatively structured form, ASCII packet header diagrams
provide a good base from which to develop a format that supports the
automatic generation of parser code from protocol standards
documents.
There are two broad issues with the existing ASCII packet header Figure 1 gives an example of how packet header diagrams are used to
diagrams that need to be addressed to enable machine-readability. define binary protocol formats. The format has an obvious structure:
First, their use, while sufficiently consistent for human the diagram clearly delineates each field, showing its width and its
readability, contains enough variation to make machine parsing position within the header. This type of diagram is designed for
difficult: different documents tend to use subtly different formats human readers, but is consistent enough that it should be possible to
and conventions. Second, ASCII packet header diagrams alone do not develop a tool that generates a parser for the packet format from the
fully capture the parsing process for protocols, requiring diagram.
supplementary text. To support machine parsing, this supplementary
text must be consistently structured.
This document describes a consistent ASCII packet header format and : 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
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | Source Port | Destination Port |
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | Sequence Number |
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | Acknowledgment Number |
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | Data | |U|A|P|R|S|F| |
: | Offset| Reserved |R|C|S|S|Y|I| Window |
: | | |G|K|H|T|N|N| |
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | Checksum | Urgent Pointer |
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | Options | Padding |
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | data |
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1: TCP's header format (from [RFC793])
Unfortunately, the format of such packet diagrams varies both within
and between documents. This variation makes it difficult to build
tools to generate parsers from the specifications. Better tooling
could be developed if protocol specifications adopted a consistent
format for their packet descriptions. Indeed, this underpins the
format described by this draft: we want to retain the benefits that
packet header diagrams provide, while identifying the benefits of
adopting a consistent format.
This document describes a consistent packet header diagram format and
accompanying structured text constructs that allow for the parsing accompanying structured text constructs that allow for the parsing
process of protocol headers to be fully specified. This provides process of protocol headers to be fully specified. This provides
support for the automatic generation of parser code. Broad design support for the automatic generation of parser code. Broad design
principles, that seek to maintain the primacy of human readability principles, that seek to maintain the primacy of human readability
and flexibility in authorship, are described, before the format and flexibility in authorship, are described, before the format
itself is given. itself is given.
This document is itself an example of the approach that it describes, This document is itself an example of the approach that it describes,
with the ASCII packet diagrams and structured text format described with the packet header diagrams and structured text format described
by example. by example.
This draft describes early work. As consensus builds around the This draft describes early work. As consensus builds around the
particular syntax of the format described, both a formal ABNF particular syntax of the format described, both a formal ABNF
specification and code that parses it (and, as described above, this specification and code that parses it (and, as described above, this
document) will be provided. document) will be provided.
: The RESET_STREAM frame is as follows:
:
: 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
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | Stream ID (i) ...
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | Application Error Code (16) |
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | Final Size (i) ...
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:
: RESET_STREAM frames contain the following fields:
:
: Stream ID: A variable-length integer encoding of the Stream ID
: of the stream being terminated.
:
: Application Protocol Error Code: A 16-bit application protocol
: error code (see Section 20.1) which indicates why the stream
: is being closed.
:
: Final Size: A variable-length integer indicating the final size
: of the stream by the RESET_STREAM sender, in unit of bytes.
Figure 2: QUIC's RESET_STREAM frame format (from [QUIC-TRANSPORT])
2. Background 2. Background
This section begins by considering how ASCII packet header diagrams This section begins by considering how packet header diagrams are
are used in existing documents. This exposes the limitations that used in existing documents. This exposes the limitations that the
the current usage has in terms of machine-readability, guiding the current usage has in terms of machine-readability, guiding the design
design of the format that this document proposes. of the format that this document proposes.
While this document focuses on the machine-readability of packet While this document focuses on the machine-readability of packet
header diagrams, this section also discusses the use of other format diagrams, this section also discusses the use of other
structured or formal languages within IETF documents. Considering structured or formal languages within IETF documents. Considering
how and why these languages are used provides an instructive contrast how and why these languages are used provides an instructive contrast
to the relatively incremental approach proposed here. to the relatively incremental approach proposed here.
2.1. Limitations of current ASCII packet diagrams usage 2.1. Limitations of Current Packet Format Diagrams
ASCII packet header diagrams are commonplace in the IETF standards
documents for binary protocols. While there is no standard for how
these diagrams should be formatted, they have a broadly similar
structure, where the layout of a protocol data unit (PDU) or
structure is given in an ASCII diagram, and a description list of the
fields that it contains are given immediately below. An example of
this format is given in Figure 1.
The RESET_STREAM frame is as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream ID (i) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Application Error Code (16) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Final Size (i) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
RESET_STREAM frames contain the following fields:
Stream ID: A variable-length integer encoding of the Stream ID of
the stream being terminated.
Application Protocol Error Code: A 16-bit application protocol
error code (see Section 20.1) which indicates why the stream is
being closed.
Final Size: A variable-length integer indicating the final size
of the stream by the RESET_STREAM sender, in unit of bytes.
Figure 1: QUIC's RESET_STREAM frame format (from [QUIC-TRANSPORT]) Packet header diagrams are frequently used in IETF standards to
describe the format of binary protocols. While there is no standard
for how these diagrams should be formatted, they have a broadly
similar structure, where the layout of a protocol data unit (PDU) or
structure is shown in diagrammatic form, followed by a description
list of the fields that it contains. An example of this format,
taken from the QUIC specification, is given in Figure 2.
However, these diagrams, and their accompanying descriptions, are These packet header diagrams, and the accompanying descriptions, are
formatted for human readers rather than for machine parsing. As a formatted for human readers rather than for automated processing. As
result, while there is broad consistency in how ASCII packet diagrams a result, while there is rough consistency in how packet header
are formatted, there are a number of limitations that are prohibitive diagrams are formatted, there are a number of limitations that make
to machine parsing: them difficult to work with programmatically:
Inconsistent syntax: There are two classes of consistency that are Inconsistent syntax: There are two classes of consistency that are
required for parsability: internal consistency, within a document needed to support automated processing of specifications: internal
or diagram, and external consistency, across all documents. Given consistency within a diagram or document, and external consistency
that ASCII packet diagrams are formatted for human readers, rather across all documents.
than for machine parsing, there is sufficient variability in how
they are formatted that parsing is difficult.
The format of the "Relay Source Port Option" is shown below:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_RELAY_PORT | Option-Len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Downstream Source Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Where:
Option-Code: OPTION_RELAY_PORT. 16-bit value, 135.
Option-Len: 16-bit value to be set to 2.
Downstream Source Port: 16-bit value. To be set by the IPv6
relay either to the downstream relay agent's UDP source port
used for the UDP packet, or to zero if only the local relay
agent uses the non-DHCP UDP port (not 547).
Figure 2: DHCPv6's Relay Source Port Option (from [RFC8357])
Figure 1 gives an example of internal inconsistency. Here, the Figure 2 gives an example of internal inconsistency. Here, the
ASCII diagram shows a field labelled "Application Error Code", packet diagram shows a field labelled "Application Error Code",
while the accompanying description lists the field as "Application while the accompanying description lists the field as "Application
Protocol Error Code". The use of an abbreviated name is suitable Protocol Error Code". The use of an abbreviated name is suitable
for human readers, but makes parsing the structure difficult for for human readers, but makes parsing the structure difficult for
machines. Figure 2 gives a further example, where the description machines. Figure 3 gives a further example, where the description
lists a field "Option-Code" that does not appear in the ASCII includes an "Option-Code" field that does not appear in the packet
diagram. In addition, the description list describes each field diagram; and where the description states that each field is 16
as being 16 bits in length, while the diagram shows the bits in length, but the diagram shows the OPTION_RELAY_PORT as 13
OPTION_RELAY_PORT as 13 bits, and Option-Len as 19 bits. Another bits, and Option-Len as 19 bits. Another example is [RFC6958],
example of this -- where the diagram and accompanying text where the packet format diagram showing the structure of the
disagree -- is in [RFC6958], where the packet header diagram Burst/Gap Loss Metrics Report Block shows the Number of Bursts
showing the structure of the Burst/Gap Loss Metrics Report Block field as being 12 bits wide but the corresponding text describes
shows the Number of Bursts field as being 12 bits wide but the it as 16 bits.
corresponding text describes it as 16 bits.
Comparing Figure 1 with Figure 2 exposes external inconsistency Comparing Figure 2 with Figure 3 exposes external inconsistency
across documents. While the ASCII diagrams themselves are broadly across documents. While the packet format diagrams are broadly
similar, the text surrounding the diagrams is formatted similar, the surrounding text is formatted differently. If
differently. If machine parsing is to be made possible, then this machine parsing is to be made possible, then this text must be
text must be structured consistently. structured consistently.
Ambiguous constraints: The constraints that are enforced on a Ambiguous constraints: The constraints that are enforced on a
particular field are often described ambiguously, or in a way that particular field are often described ambiguously, or in a way that
cannot be parsed easily. In Figure 2, each of the three fields in cannot be parsed easily. In Figure 3, each of the three fields in
the structure is constrained. The first two fields ("Option-Code" the structure is constrained. The first two fields ("Option-Code"
and "Option-Len") are to be set to constant values (note the and "Option-Len") are to be set to constant values (note the
inconsistency in how these constraints are expressed in the inconsistency in how these constraints are expressed in the
description). However, the third field ("Downstream Source Port") description). However, the third field ("Downstream Source Port")
can take a value from a constrained set. This constraint is can take a value from a constrained set. This constraint is
expressed in prose that can easily be parsed by humans, but not by expressed in prose that cannot readily by understood by machine.
machines.
Poor linking between sub-structures: Protocol data units and other Poor linking between sub-structures: Protocol data units and other
structures are often comprised of sub-structures that are defined structures are often comprised of sub-structures that are defined
elsewhere, either in the same document, or within another elsewhere, either in the same document, or within another
document. Chaining these structures together is essential for document. Chaining these structures together is essential for
machine parsing: the parsing process for a protocol data unit is machine parsing: the parsing process for a protocol data unit is
only fully expressed if all elements can be parsed. only fully expressed if all elements can be parsed.
Figure 1 highlights the difficulty that machine parsers have in Figure 2 highlights the difficulty that machine parsers have in
chaining structures together. Two fields ("Stream ID" and "Final chaining structures together. Two fields ("Stream ID" and "Final
Size") are described as being encoded as variable-length integers; Size") are described as being encoded as variable-length integers;
this is a structure described elsewhere in the same document. this is a structure described elsewhere in the same document.
Structured text is required both alongside the definition of the Structured text is required both alongside the definition of the
containing structure and with the definition of the sub-structure, containing structure and with the definition of the sub-structure,
to allow a parser to link the two together. to allow a parser to link the two together.
: The format of the "Relay Source Port Option" is shown below:
:
: 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
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | OPTION_RELAY_PORT | Option-Len |
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: | Downstream Source Port |
: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:
: Where:
:
: Option-Code: OPTION_RELAY_PORT. 16-bit value, 135.
:
: Option-Len: 16-bit value to be set to 2.
:
: Downstream Source Port: 16-bit value. To be set by the IPv6
: relay either to the downstream relay agent's UDP source port
: used for the UDP packet, or to zero if only the local relay
: agent uses the non-DHCP UDP port (not 547).
Figure 3: DHCPv6's Relay Source Port Option (from [RFC8357])
2.2. Formal languages in standards documents 2.2. Formal languages in standards documents
A small proportion of IETF standards documents contain structured and A small proportion of IETF standards documents contain structured and
formal languages, including ABNF [RFC5234], ASN.1 [ASN1], C, CBOR formal languages, including ABNF [RFC5234], ASN.1 [ASN1], C, CBOR
[RFC7049], JSON, the TLS presentation language [RFC8446], YANG models [RFC7049], JSON, the TLS presentation language [RFC8446], YANG models
[RFC7950], and XML. While this broad range of languages may be [RFC7950], and XML. While this broad range of languages may be
problematic for the development of tooling to parse specifications, problematic for the development of tooling to parse specifications,
these, and other, languages serve a range of different use cases. these, and other, languages serve a range of different use cases.
ABNF, for example, is typically used to specify text protocols, while ABNF, for example, is typically used to specify text protocols, while
ASN.1 is used to specify data structure serialisation. This document ASN.1 is used to specify data structure serialisation. This document
skipping to change at page 7, line 38 skipping to change at page 8, line 12
The immediate impact of requiring specific tooling is that The immediate impact of requiring specific tooling is that
adoption is likely to be limited. A long-term impact might be adoption is likely to be limited. A long-term impact might be
that authors whose workflows are incompatible might be alienated that authors whose workflows are incompatible might be alienated
from the process. from the process.
Canonical specifications: As far as possible, machine-readable Canonical specifications: As far as possible, machine-readable
structures should not replicate the human readable specification structures should not replicate the human readable specification
of the protocol within the same document. Such structures should of the protocol within the same document. Such structures should
form part of a canonical specification of the protocol. Adding form part of a canonical specification of the protocol. Adding
supplementary machine-readable structures, in parallel to the supplementary machine-readable structures, in parallel to the
existing human readable text, is undesirable because it could existing human readable text, is undesirable because it creates
create the potential for inconsistency. the potential for inconsistency.
As an example, program code that describes how a protocol data As an example, program code that describes how a protocol data
unit can be parsed might be provided as an appendix within a unit can be parsed might be provided as an appendix within a
standards document. This code would provide a specification of standards document. This code would provide a specification of
the protocol that is separate to the prose description in the main the protocol that is separate to the prose description in the main
body of the document. This has the undesirable effect of body of the document. This has the undesirable effect of
introducing the potential for the program code to specify introducing the potential for the program code to specify
behaviour that the prose-based specification does not, and vice- behaviour that the prose-based specification does not, and vice-
versa. versa.
skipping to change at page 8, line 15 skipping to change at page 8, line 37
then adoption is likely to be limited. At the limits of what can then adoption is likely to be limited. At the limits of what can
be expressed by the language, authors are likely to revert to be expressed by the language, authors are likely to revert to
defining the protocol in prose: this undermines the broad goal of defining the protocol in prose: this undermines the broad goal of
using structured and formal languages. Equally, though, using structured and formal languages. Equally, though,
understandable specifications and ease of use are critical for understandable specifications and ease of use are critical for
adoption. A tool that is simple to use and addresses the most adoption. A tool that is simple to use and addresses the most
common use cases might be preferred to a complex tool that common use cases might be preferred to a complex tool that
addresses all use cases. addresses all use cases.
Minimise required change: Any approach should require as few changes Minimise required change: Any approach should require as few changes
as possible to the way documents are formatted, authored, and as possible to the way that documents are formatted, authored, and
published. Forcing adoption of a particular structured or formal published. Forcing adoption of a particular structured or formal
language is incompatible with the IETF's standardisation process: language is incompatible with the IETF's standardisation process:
there are very few components of standards documents that are non- there are very few components of standards documents that are non-
optional. optional.
4. Augmented ASCII Packet Header Diagrams 4. Augmented Packet Header Diagrams
The design principles described in Section 3 can largely be met by The design principles described in Section 3 can largely be met by
the existing uses of ASCII packet header diagrams. These diagrams the existing uses of packet header diagrams. These diagrams aid
aid human readability, do not require new or specialised authorship human readability, do not require new or specialised authorship
tools, do not split the specification into multiple parts, can tools, do not split the specification into multiple parts, can
express most binary protocol features, and require no changes to the express most binary protocol features, and require no changes to
existing publication processes. existing publication processes.
However, as discussed in Section 2.1 there are limitations to how However, as discussed in Section 2.1 there are limitations to how
ASCII diagrams are used that must be addressed if they are to be packet header diagrams are used that must be addressed if they are to
parsed by machine. In this section, an augmented ASCII packet header be parsed by machine. In this section, an augmented packet header
diagram format is described. diagram format is described.
The concept is first illustrated by example. This is appropriate, The concept is first illustrated by example. This is appropriate,
given the visual nature of the language. In future drafts, these given the visual nature of the language. In future drafts, these
examples will be parsable using provided tools, and a formal examples will be parsable using provided tools, and a formal
specification of the augmented ASCII packet diagrams will be given in specification of the augmented packet diagrams will be given in
Appendix A. Appendix A.
In the augmented ASCII packet diagrams, each protocol data unit is 4.1. PDUs with Fixed and Variable-Width Fields
described in its own section of the document. This enables cross-
referencing between data units using section numbering. In this
specification-by-example, each element of the format will be
described as part of a separate PDU.
4.1. Fixed-width Field Format
The simplest PDU is one that contains only a set of fixed-width The simplest PDU is one that contains only a set of fixed-width
fields in a known order, with no optional fields or variation in the fields in a known order, with no optional fields or variation in the
packet format. packet format.
A Fixed-width Field Format packet is formatted as follows: Some packet formats include variable-width fields, where the size of
a field is either derived from the value of some previous field, or
is unspecified and inferred from the total size of the packet and the
size of the other fields. A packet can contain only one unspecified
length field, to ensure there is no ambiguity.
0 1 2 3 A PDU description is introduced by the exact phrase "A/An _______ is
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 formatted as follows:" at the end of a paragraph. This is followed
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ by the PDU description itself, as a packet diagram within an
|F2 | Field30 | <artwork> element in the XML representation, starting with a header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ line to show the bit width of the diagram. The description of the
| | fields follows the diagram, as an XML <dl> list, after a paragraph
+ Field64 + containing the text "where:".
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Each field of the description starts with a <dt> tag comprising the
| | field name and an optional short name in parenthesis. These are
+ Field48 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ followed by a colon, the field length, and a terminating period. The
| | following <dd> tag contains a prose description of the field.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Field8 | For example, this can be illustrated using the IPv4 Header Format
+-+-+-+-+-+-+-+-+ [RFC791]. An IPv4 Header is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL | DSCP |ECN| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| :
: Payload :
: |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Field2 (F2): 2 bits This is a short field, and the diagram cannot Version (V): 4 bits. This is a fixed-width field, whose full label
show its full label. A short label (F2) is used is shown in the diagram. The field's width -- 4 bits -- is given
in the diagram, and this short label is in the label of the description list, separated from the field's
provided, in brackets, after the full label in label by a colon.
the description list. The field's width -- 2
bits -- is given in the label of the description
list, separated from the field's label by a
colon.
Field30: 30 bits This is a longer field whose full label can be Internet Header Length (IHL): 4 bits. This is a shorter field, whose
shown in the diagram. full label is too large to be shown in the diagram. A short label
(IHL) is used in the diagram, and this short label is provided, in
brackets, after the full label in the description list.
Field64: 8 bytes This is a field that spans multiple rows. Where Differentiated Services Code Point (DSCP): 6 bits. This is a fixed-
fields are an integral number of bytes in size, width field, as previously defined.
and start and end on a byte boundary, the field
length can be given in bytes rather than in
bits.
Field48: 48 bits This is another multi-row field. As Explicit Congestion Notification (ECN): 2 bits. This is a fixed-
illustrated, fields are not required to end of a width field, as previously defined.
32-bit boundary.
Field8: 1 byte This field has been drawn on the next line, Total Length (TL): 2 bytes. This is a fixed-width field, as
where it would have fit on the previous line. previously defined. Where fields are an integral number of bytes
Where possible, the formatting of the diagram in size, the field length can be given in bytes rather than in
should be flexible to meet the needs of human bits.
readers.
4.2. Variable-width Field Format Identification: 2 bytes. This is a fixed-width field, as previously
defined.
Some packet formats include variable-width fields, where the size of Flags: 3 bits. This is a fixed-width field, as previously defined.
a field is either derived from the value of some previous field, or
is unspecified and inferred from the total size of the packet and the
size of the other fields. A packet can contain only one unspecified
length field, to ensure there is no ambiguity.
A Variable-width Field Format packet is formatted as follows: Fragment Offset: 13 bits. This is a fixed-width field, as previously
defined.
0 1 2 3 Time To Live (TTL): 1 byte. This is a fixed-width field, as
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 previously defined.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Field8 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FieldVar - single row ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| :
: FieldVar - multi-row :
: |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| :
: FieldVar - multi-row, unspecified length :
: |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: Protocol: 1 byte. This is a fixed-width field, as previously
defined.
Field8 (F): 8 bits This is a fixed-width field, as described Header Checksum: 2 bytes. This is a fixed-width field, as previously
previously. As shown, while this field has a short label (F), defined.
this does not need to be used in the diagram.
FieldVar - single row: 2^F bits This is a variable-length field, Source Address: 32 bits. This is a fixed-width field, as previously
whose length is defined by the value of the field with short label defined.
F (Field8). Constraint expressions can be used in place of
constant values: the grammar for the expression language is
defined in Section a.1. Where fields labels are used in a
constraint, the field being referred to must have been defined
before its label is used. Short variable-length fields are
indicated by "..." instead of a pipe at the end of the row.
FieldVar - multi-row: 2^F bits This is a multi-row variable-length Destination Address: 32 bits. This is a fixed-width field, as
field, again constrained by the value of field F. Instead of the previously defined.
"..." notation, ":" is used to indicate that the field is
variable-length. The use of ":" instead of "..." indicates the
field is likely to be a longer, multi-row field. However,
semantically, there is no difference: these different notations
are for the benefit of human readers.
FieldVar - multi-row, unspecified length This is a variable-width Options: (IHL-5)*32 bits. This is a variable-length field, whose
field whose length is implied by the lengths of the other fields. length is defined by the value of the field with short label IHL
At parsing time, the length of the PDU is known, and this can be (Internet Header Length). Constraint expressions can be used in
used to determine the length of fields whose length is undefined. place of constant values: the grammar for the expression language
Each PDU can only leave a single field's length undefined: all is defined in Appendix A.1. Constraints can include a previously
other fields must be fixed-length, or have their widths defined field's short or full label, where one has been defined.
constrained. Short variable-length fields are indicated by "..." instead of a
pipe at the end of the row.
4.3. Cross-referencing and Sequences Format Payload: TL - ((IHL*32)/8) bytes. This is a multi-row variable-
length field, constrained by the values of fields TL and IHL.
Instead of the "..." notation, ":" is used to indicate that the
field is variable-length. The use of ":" instead of "..."
indicates the field is likely to be a longer, multi-row field.
However, semantically, there is no difference: these different
notations are for the benefit of human readers.
A Cross-referencing and Sequences Format packet is formatted as 4.2. PDUs That Cross-Reference Previously Defined Fields
follows:
0 1 2 3 Binary formats often reference sub-structures that have been defined
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 earlier in the specification. For example, in RTP [RFC3550], the
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Contributing Source Identifiers in an RTP Data Packet are defined as
| Field8 | comprising a list of Source Identifier elements. A Source Identifier
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ is formatted as follows:
| |
+ + 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
+ FieldFixedXRef + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | Source Identifier |
+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +-+-+-+-+-+-+-+-+
| | :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ :
: :
: FieldVarXref :
: |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ [SeqFieldFixedXRef] +
| |
+ +
| |
+ +-+-+-+-+-+-+-+-+
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Field8 (F): 8 bits This is a fixed-width field, as described Source Identifier: 32 bits. This is a fixed-width field, as
described previously.
The following example shows how a Source Identifier can be referenced
in the description of an RTP Data Packet. It also shows how the
presence of some fields in a format may be dependent on the values of
an earlier field.
An RTP Data Packet is formatted as follows:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| V |P|X| CC |M| PT | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Synchronization Source identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| [Contributing Source identifiers] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Header Extension |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload :
: :
: |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Padding | Padding Count |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where:
Version (V): 2 bits. This is a fixed-width field, as described
previously. previously.
FieldFixedXRef: 1 Fixed-width Field Format This is a field whose Padding (P): 1 bit. This is a fixed-width field, as described
structure is a previously defined PDU format. To indicate this, previously.
the width of the field is given in units of the cross-referenced
structure (here, Fixed-width Field Format).
FieldVarXref: 1 Variable-width Field Format This field references a Extension (X): 1 bit. This is a fixed-width field, as described
variable-width structure. It can be drawn to any width as previously.
appropriate, but must use a variable-width notation. Where
multiple variable-width field format structures are referenced,
the requirement that only one field's length can be unspecified
applies to the enclosing structure.
SeqFieldFixedXRef: 2 Fixed-width Field Format Where a field is CSRC count (CC): 4 bits. This is a fixed-width field, as described
comprised of a sequence of previously defined structures, square previously.
brackets can be used to indicate this in the diagram. The length
of the sequence can be defined using the constraint expression
grammar as described earlier.
4.4. Optional Field Format Marker (M): 1 bit. This is a fixed-width field, as described
previously.
An Optional Field Format packet is formatted as follows: Payload Type (PT): 7 bits. This is a fixed-width field, as described
previously.
0 1 2 3 Sequence Number (PT): 16 bits. This is a fixed-width field, as
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 described previously.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Field8 | Timestamp (PT): 32 bits. This is a fixed-width field, as described
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ previously.
| OptionalField |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Synchronization Source identifier: 1 * Source Identifier. This is a
field whose structure is a previously defined PDU format. To
indicate this, the width of the field is expressed in terms of
cross-referenced structure (here, Source Identifier). When used
in constraint expressions, PDU names refer to the length of that
PDU structure.
Contributing Source identifiers: CC * Source Identifier. Where a
field is comprised of a sequence of previously defined structures,
square brackets can be used to indicate this in the diagram. The
length of the sequence can be defined using the constraint
expression grammar as described earlier.
Header Extension: 32 bits; present only when X == 1. This is a field
whose presence is predicated on an expression given using the
constraint expression grammar described earlier. Optional fields
can be of any previously defined format (e.g., fixed- or variable-
width). Optional fields are indicated by the presence of a
"Present only when [expr]." as the first line in their
description.
[Note that this example deviates from the format as described in
[RFC3550]. As specified in that document, the Header Extension
would be a cross-referenced structure. This is not shown here for
brevity.]
Payload. The length of the Payload is not specified, and hence needs
to be inferred from the total length of the packet and the lengths
of the known fields. There can only be one field of unspecified
size in a PDU.
Padding: Padding Count bytes; present only when (P == 1) and
(Padding Count > 0).
This is a variable size field, with size dependent on a later
field in the packet. Fields can only depend on the value of a
later field if they follow a field with unspecified size.
Padding Count: 1 byte; present only when P == 1. This is a fixed-
width field, as previously defined.
4.3. PDUs with Non-Contiguous Fields
In some binary formats, fields are striped across multiple non-
contiguous bits. This is often to allow for backwards compatibility
with previous definitions of the same fields in earlier documents:
striping in this way allows for careful use of the possible range of
values.
This format is illustrated using the STUN Message Type
[draft-ietf-tram-stunbis-21]. A STUN Message Type is formatted as
follows:
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|M|M|M|M|M|C|M|M|M|C|M|M|M|M|
|B|A|9|8|7|1|6|5|4|0|3|2|1|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
where: where:
Field8 (F): 8 bits This is a fixed-width field, as described Method (M): 12 bits. This field is comprised of multiple sub-fields
previously. (M0 through MB) as shown in the diagram. That these sub-fields
should be concatenated, after parsing, into a single field is
indicated by their being labelled using the 'M' short field name
followed by a single hexadecimal digit, with the least significant
bit labelled with 0, and subsequent bits labelled in sequence.
OptionalField: 4 bytes Present only when F > 3. This is a field Class (C): 2 bits. This field follows the same format as M described
whose presence is predicated on an expression above.
given in the constraint expression grammar
described earlier. Optional fields can be of
any previously defined format (e.g., fixed-
or variable-width). Optional fields are
indicated by the presence of a "Present only
when [expr]." as the first line in their
description
5. IANA Considerations 5. IANA Considerations
This document contains no actions for IANA. This document contains no actions for IANA.
6. Security Considerations 6. Security Considerations
Poorly implemented parsers are a frequent source of security Poorly implemented parsers are a frequent source of security
vulnerabilities in protocol implementations. Structuring the vulnerabilities in protocol implementations. Structuring the
description of a protocol data unit so that a parser can be description of a protocol data unit so that a parser can be
automatically derived from the specification can reduce the automatically derived from the specification can reduce the
likelihood of vulnerable implementations. likelihood of vulnerable implementations.
7. Acknowledgements 7. Acknowledgements
The authors would like to thank David Southgate for preparing a The authors would like to thank David Southgate for preparing a
prototype implementation of some of the ideas described here. prototype implementation of some of the ideas described here.
The authors would like to thank Marc Petit-Huguenin for feedback on
the draft.
This work has received funding from the UK Engineering and Physical This work has received funding from the UK Engineering and Physical
Sciences Research Council under grant EP/R04144X/1. Sciences Research Council under grant EP/R04144X/1.
8. Informative References 8. Informative References
[ASN1] ITU-T, "ITU-T Recommendation X.680, X.681, X.682, and [RFC8357] Deering, S. and R. Hinden, "Generalized UDP Source Port
X.683", ITU-T Recommendation X.680, X.681, X.682, and for DHCP Relay", RFC 8357, March 2018,
X.683. <https://www.rfc-editor.org/info/rfc8357>.
[QUIC-TRANSPORT] [QUIC-TRANSPORT]
Iyengar, J. and M. Thomson, "QUIC: A UDP-Based Multiplexed Iyengar, J. and M. Thomson, "QUIC: A UDP-Based Multiplexed
and Secure Transport", draft-ietf-quic-transport-20 (work and Secure Transport", Work in Progress, Internet-Draft,
in progress), 23 April 2019, draft-ietf-quic-transport-20, 23 April 2019,
<http://www.ietf.org/internet-drafts/draft-ietf-quic- <http://www.ietf.org/internet-drafts/draft-ietf-quic-
transport-20.txt>. transport-20.txt>.
[RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 5234, January 2008,
<https://www.rfc-editor.org/info/rfc5234>.
[RFC6958] Clark, A., Zhang, S., Zhao, J., and Q. Wu, "RTP Control [RFC6958] Clark, A., Zhang, S., Zhao, J., and Q. Wu, "RTP Control
Protocol (RTCP) Extended Report (XR) Block for Burst/Gap Protocol (RTCP) Extended Report (XR) Block for Burst/Gap
Loss Metric Reporting", RFC 6958, May 2013, Loss Metric Reporting", RFC 6958, May 2013,
<https://www.rfc-editor.org/info/rfc6958>. <https://www.rfc-editor.org/info/rfc6958>.
[RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object
Representation (CBOR)", RFC 7049, October 2013,
<https://www.rfc-editor.org/info/rfc7049>.
[RFC7950] Bjorklund, M., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., "The YANG 1.1 Data Modeling Language",
RFC 7950, August 2016, RFC 7950, August 2016,
<https://www.rfc-editor.org/info/rfc7950>. <https://www.rfc-editor.org/info/rfc7950>.
[RFC8357] Deering, S. and R. Hinden, "Generalized UDP Source Port
for DHCP Relay", RFC 8357, March 2018,
<https://www.rfc-editor.org/info/rfc8357>.
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", RFC 8446, August 2018, Version 1.3", RFC 8446, August 2018,
<https://www.rfc-editor.org/info/rfc8446>. <https://www.rfc-editor.org/info/rfc8446>.
[RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 5234, January 2008,
<https://www.rfc-editor.org/info/rfc5234>.
[ASN1] ITU-T, "ITU-T Recommendation X.680, X.681, X.682, and
X.683", ITU-T Recommendation X.680, X.681, X.682, and
X.683.
[RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object
Representation (CBOR)", RFC 7049, October 2013,
<https://www.rfc-editor.org/info/rfc7049>.
[RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V.
Jacobson, "RTP: A Transport Protocol for Real-Time
Applications", RFC 3550, July 2003,
<https://www.rfc-editor.org/info/rfc3550>.
[draft-ietf-tram-stunbis-21]
Petit-Huguenin, M., Salgueiro, G., Rosenberg, J., Wing,
D., Mahy, R., and P. Matthews, "Session Traversal
Utilities for NAT (STUN)", Work in Progress, Internet-
Draft, draft-ietf-tram-stunbis-21, 21 March 2019,
<http://www.ietf.org/internet-drafts/draft-ietf-tram-
stunbis-21.txt>.
[RFC791] Postel, J., "Internet Protocol", RFC 791, September 1981,
<https://www.rfc-editor.org/info/rfc791>.
[RFC793] Postel, J., "Transmission Control Protocol", RFC 793,
September 1981, <https://www.rfc-editor.org/info/rfc793>.
Appendix A. ABNF specification Appendix A. ABNF specification
A.1. Constraint Expressions A.1. Constraint Expressions
cond-expr = eq-expr "?" cond-expr ":" eq-expr cond-expr = eq-expr "?" cond-expr ":" eq-expr
eq-expr = bool-expr eq-op bool-expr eq-expr = bool-expr eq-op bool-expr
bool-expr = ord-expr bool-op ord-expr bool-expr = ord-expr bool-op ord-expr
ord-expr = add-expr ord-op add-expr ord-expr = add-expr ord-op add-expr
add-expr = mul-expr add-op mul-expr add-expr = mul-expr add-op mul-expr
mul-expr = expr mul-op expr mul-expr = expr mul-op expr
expr = *DIGIT / field-name expr = *DIGIT / field-name /
field-name-ws / "(" expr ")"
field-name = *ALPHA field-name = *ALPHA
field-name-ws = *(field-name " ")
mul-op = "*" / "/" / "%" mul-op = "*" / "/" / "%"
add-op = "+" / "-" add-op = "+" / "-"
ord-op = "<=" / "<" / ">=" / ">" ord-op = "<=" / "<" / ">=" / ">"
bool-op = "&&" / "||" / "!" bool-op = "&&" / "||" / "!"
eq-op = "==" / "!=" eq-op = "==" / "!="
A.2. Augmented ASCII diagrams A.2. Augmented packet diagrams
Future revisions of this draft will include an ABNF specification for Future revisions of this draft will include an ABNF specification for
the augmented ASCII diagram format described in Section 4. Such a the augmented packet diagram format described in Section 4. Such a
specification is omitted from this draft given that the format is specification is omitted from this draft given that the format is
likely to change as its syntax is developed. Given the visual nature likely to change as its syntax is developed. Given the visual nature
of the format, it is more appropriate for discussion to focus on the of the format, it is more appropriate for discussion to focus on the
examples given in Section 4. examples given in Section 4.
Appendix B. Source code repository
The source code for tooling that can be used to parse this document
is available from https://github.com/lumisota/improving-protocol-
standards.
Authors' Addresses Authors' Addresses
Stephen McQuistin Stephen McQuistin
University of Glasgow University of Glasgow
School of Computing Science School of Computing Science
Glasgow Glasgow
G12 8QQ G12 8QQ
United Kingdom United Kingdom
Email: sm@smcquistin.uk Email: sm@smcquistin.uk
 End of changes. 73 change blocks. 
330 lines changed or deleted 436 lines changed or added

This html diff was produced by rfcdiff 1.46. The latest version is available from http://tools.ietf.org/tools/rfcdiff/