xml2rfc-2.9.6/0000755000175000017500000000000013243345234013672 5ustar henrikhenrik00000000000000xml2rfc-2.9.6/setup.py0000644000175000017500000000671513243345226015416 0ustar henrikhenrik00000000000000#!/usr/bin/env python # -------------------------------------------------- # Copyright The IETF Trust 2011, All Rights Reserved # -------------------------------------------------- import os import re from codecs import open from setuptools import setup import sys description = "Xml2rfc generates RFCs and IETF drafts from document source in XML according to the dtd in RFC2629." here = os.path.abspath(os.path.dirname(__file__)) # Get the long description from the README file with open(os.path.join(here, 'README'), encoding='utf-8') as file: long_description = file.read() # Get the requirements from the local requirements.txt file with open(os.path.join(here, 'requirements.txt'), encoding='utf-8') as file: requirements = file.read().splitlines() # Check python versions major, minor = sys.version_info[:2] if not ((major == 2 and minor >= 6) or (major == 3 and minor >= 3)): print("") print("The xml2rfc installation requires python 2.6, 2.7, or 3.3") print("Can't proceed, quitting.") exit() def parse(changelog): ver_line = "^([a-z0-9+-]+) \(([^)]+)\)(.*?) *$" sig_line = "^ -- ([^<]+) <([^>]+)> (.*?) *$" entries = [] if type(changelog) == type(''): changelog = open(changelog, encoding='utf-8') for line in changelog: if re.match(ver_line, line): package, version, rest = re.match(ver_line, line).groups() entry = {} entry["package"] = package entry["version"] = version entry["logentry"] = "" elif re.match(sig_line, line): author, email, date = re.match(sig_line, line).groups() entry["author"] = author entry["email"] = email entry["datetime"] = date entry["date"] = " ".join(date.split()[:3]) entries += [ entry ] else: entry["logentry"] += line changelog.close() return entries changelog_entry_template = """ Version %(version)s (%(date)s) ------------------------------------------------ %(logentry)s """ long_description += """ Changelog ========= """ + "\n".join([ changelog_entry_template % entry for entry in parse("changelog")[:3] ]) setup( # Package metadata name='xml2rfc', version='2.9.6', author='Henrik Levkowetz, Josh Bothun', author_email='tools-discuss@ietf.org', maintainer = "Henrik Levkowetz", maintainer_email = "henrik@levkowetz.com", url='https://tools.ietf.org/tools/xml2rfc/trac/', description=description, long_description=long_description, download_url = "https://pypi.python.org/pypi/xml2rfc", classifiers= [ 'Development Status :: 5 - Production/Stable', 'Environment :: Console', 'Operating System :: MacOS :: MacOS X', 'Operating System :: Microsoft :: Windows', 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Topic :: Text Processing', 'Topic :: Text Processing :: Markup :: XML', 'License :: OSI Approved :: BSD License', ], license="Simplified BSD Licence", # Program data #scripts=['scripts/xml2rfc'], entry_points = { 'console_scripts' : [ 'xml2rfc = xml2rfc.run:main', ], }, packages=['xml2rfc', 'xml2rfc/writers'], package_data={'xml2rfc': [ 'templates/*', 'data/*', ]}, install_requires = requirements, zip_safe = False, # We're reading templates from a package directory. ) xml2rfc-2.9.6/setup.cfg0000644000175000017500000000010313243345234015505 0ustar henrikhenrik00000000000000[bdist_wheel] universal = 1 [egg_info] tag_build = tag_date = 0 xml2rfc-2.9.6/tests/0000755000175000017500000000000013243345234015034 5ustar henrikhenrik00000000000000xml2rfc-2.9.6/tests/valid/0000755000175000017500000000000013243345234016133 5ustar henrikhenrik00000000000000xml2rfc-2.9.6/tests/valid/rfc7911.html0000644000175000017500000007342613237622212020126 0ustar henrikhenrik00000000000000 Advertisement of Multiple Paths in BGP
Internet Engineering Task Force (IETF) D. Walton
Request for Comments: 7911 Cumulus Networks
Category: Standards Track A. Retana
ISSN: 2070-1721 E. Chen
Cisco Systems, Inc.
J. Scudder
Juniper Networks
July 2016

Advertisement of Multiple Paths in BGP

Abstract

This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. The essence of the extension is that each path is identified by a Path Identifier in addition to the address prefix.

Status of This Memo

This is an Internet Standards Track document.

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc7911.

Copyright Notice

Copyright (c) 2016 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.


Table of Contents

1. Introduction

The BGP specification [RFC4271] defines an Update-Send Process to advertise the routes chosen by the Decision Process to other BGP speakers. No provisions are made to allow the advertisement of multiple paths for the same address prefix or Network Layer Reachability Information (NLRI). In fact, a route with the same NLRI as a previously advertised route implicitly replaces the previous advertisement.

This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. The essence of the extension is that each path is identified by a Path Identifier in addition to the address prefix.

The availability of the additional paths can help reduce or eliminate persistent route oscillations [RFC3345]. It can also help with optimal routing and routing convergence in a network by providing potential alternate or backup paths, respectively.

1.1. Specification of Requirements

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

2. How to Identify a Path

As defined in [RFC4271], a path refers to the information reported in the Path Attribute field of an UPDATE message. As the procedures specified in [RFC4271] allow only the advertisement of one path for a particular address prefix, a path for an address prefix from a BGP peer can be keyed on the address prefix.

In order for a BGP speaker to advertise multiple paths for the same address prefix, a new identifier (termed "Path Identifier" hereafter) needs to be introduced so that a particular path for an address prefix can be identified by the combination of the address prefix and the Path Identifier.

The assignment of the Path Identifier for a path by a BGP speaker is purely a local matter. However, the Path Identifier MUST be assigned in such a way that the BGP speaker is able to use the (Prefix, Path Identifier) to uniquely identify a path advertised to a neighbor. A BGP speaker that re-advertises a route MUST generate its own Path Identifier to be associated with the re-advertised route. A BGP speaker that receives a route should not assume that the identifier carries any particular semantics.

3. Extended NLRI Encodings

In order to carry the Path Identifier in an UPDATE message, the NLRI encoding MUST be extended by prepending the Path Identifier field, which is of four octets.

For example, the NLRI encoding specified in [RFC4271] is extended as the following:

               +--------------------------------+
               | Path Identifier (4 octets)     |
               +--------------------------------+
               | Length (1 octet)               |
               +--------------------------------+
               | Prefix (variable)              |
               +--------------------------------+

The usage of the extended NLRI encodings is specified in Section 5.

4. ADD-PATH Capability

The ADD-PATH Capability is a BGP capability [RFC5492], with Capability Code 69. The Capability Length field of this capability is variable. The Capability Value field consists of one or more of the following tuples:

             +------------------------------------------------+
             | Address Family Identifier (2 octets)           |
             +------------------------------------------------+
             | Subsequent Address Family Identifier (1 octet) |
             +------------------------------------------------+
             | Send/Receive (1 octet)                         |
             +------------------------------------------------+

The meaning and use of the fields are as follows:

A BGP speaker that wishes to indicate support for multiple AFI/SAFIs MUST do so by including the information in a single instance of the ADD-PATH Capability.

5. Operation

The Path Identifier specified in Section 3 can be used to advertise multiple paths for the same address prefix without subsequent advertisements replacing the previous ones. Apart from the fact that this is now possible, the route advertisement rules of [RFC4271] are not changed. In particular, a new advertisement for a given address prefix and a given Path Identifier replaces a previous advertisement for the same address prefix and Path Identifier. If a BGP speaker receives a message to withdraw a prefix with a Path Identifier not seen before, it SHOULD silently ignore it.

For a BGP speaker to be able to send multiple paths to its peer, that BGP speaker MUST advertise the ADD-PATH Capability with the Send/Receive field set to either 2 or 3, and MUST receive from its peer the ADD-PATH Capability with the Send/Receive field set to either 1 or 3, for the corresponding <AFI, SAFI>.

A BGP speaker MUST follow the procedures defined in [RFC4271] when generating an UPDATE message for a particular <AFI, SAFI> to a peer unless the BGP speaker advertises the ADD-PATH Capability to the peer indicating its ability to send multiple paths for the <AFI, SAFI>, and also receives the ADD-PATH Capability from the peer indicating its ability to receive multiple paths for the <AFI, SAFI>, in which case the speaker MUST generate a route update for the <AFI, SAFI> based on the combination of the address prefix and the Path Identifier, and use the extended NLRI encodings specified in this document. The peer SHALL act accordingly in processing an UPDATE message related to a particular <AFI, SAFI>.

A BGP speaker SHOULD include the best route [RFC4271] when more than one path is advertised to a neighbor, unless it is a path received from that neighbor.

As the Path Identifiers are locally assigned, and may or may not be persistent across a control plane restart of a BGP speaker, an implementation SHOULD take special care so that the underlying forwarding plane of a "Receiving Speaker" as described in [RFC4724] is not affected during the graceful restart of a BGP session.

6. Deployment Considerations

The extension proposed in this document provides a mechanism for a BGP speaker to advertise multiple paths over a BGP session. Care needs to be taken in its deployment to ensure consistent routing and forwarding in a network [ADDPATH].

The only explicit indication that the encoding described in Section 3 is in use in a particular BGP session is the exchange of Capabilities described in Section 4. If the exchange is successful [RFC5492], then the BGP speakers will be able to process all BGP UPDATES properly, as described in Section 5. However, if, for example, a packet analyzer is used on the wire to examine an active BGP session, it may not be able to properly decode the BGP UPDATES because it lacks prior knowledge of the exchanged Capabilities.

When deployed as a provider edge router or a peering router that interacts with external neighbors, a BGP speaker usually advertises at most one path to the internal neighbors in a network. In the case where the speaker is configured to advertise multiple paths to the internal neighbors, and additional information is needed for the application, the speaker could use attributes such as the Edge_Discriminator attribute [FAST]. The use of that type of additional information is outside the scope of this document.

7. IANA Considerations

IANA has assigned the value 69 for the ADD-PATH Capability described in this document. This registration is in the "Capability Codes" registry.

8. Security Considerations

This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. As a result, multiple paths for a large number of prefixes may be received by a BGP speaker, potentially depleting memory resources or even causing network-wide instability, which can be considered a denial-of-service attack. Note that this is not a new vulnerability, but one that is present in the base BGP specification [RFC4272].

The use of the ADD-PATH Capability is intended to address specific needs related to, for example, eliminating route oscillations that were induced by the MULTI_EXIT_DISC (MED) attribute. While describing the applications for the ADD-PATH Capability is outside the scope of this document, users are encouraged to examine their behavior and potential impact by studying the best practices described in [ADDPATH].

Security concerns in the base operation of BGP also apply.

9. References

9.1. Normative References

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997.
[RFC4271] Rekhter, Y., Li, T. and S. Hares, "A Border Gateway Protocol 4 (BGP-4)", RFC 4271, DOI 10.17487/RFC4271, January 2006.
[RFC4760] Bates, T., Chandra, R., Katz, D. and Y. Rekhter, "Multiprotocol Extensions for BGP-4", RFC 4760, DOI 10.17487/RFC4760, January 2007.
[RFC5492] Scudder, J. and R. Chandra, "Capabilities Advertisement with BGP-4", RFC 5492, DOI 10.17487/RFC5492, February 2009.

9.2. Informative References

[ADDPATH] Uttaro, J., Francois, P., Patel, K., Haas, J., Simpson, A. and R. Fragassi, "Best Practices for Advertisement of Multiple Paths in IBGP", Work in Progress, draft-ietf-idr-add-paths-guidelines-08, April 2016.
[FAST] Mohapatra, P., Fernando, R., Filsfils, C. and R. Raszuk, "Fast Connectivity Restoration Using BGP Add-path", Work in Progress, draft-pmohapat-idr-fast-conn-restore-03, January 2013.
[RFC3345] McPherson, D., Gill, V., Walton, D. and A. Retana, "Border Gateway Protocol (BGP) Persistent Route Oscillation Condition", RFC 3345, DOI 10.17487/RFC3345, August 2002.
[RFC4272] Murphy, S., "BGP Security Vulnerabilities Analysis", RFC 4272, DOI 10.17487/RFC4272, January 2006.
[RFC4724] Sangli, S., Chen, E., Fernando, R., Scudder, J. and Y. Rekhter, "Graceful Restart Mechanism for BGP", RFC 4724, DOI 10.17487/RFC4724, January 2007.
[STOP-OSC] Walton, D., Retana, A., Chen, E. and J. Scudder, "BGP Persistent Route Oscillation Solutions", Work in Progress, draft-ietf-idr-route-oscillation-stop-03, April 2016.

Acknowledgments

We would like to thank David Cook and Naiming Shen for their contributions to the design and development of the extension.

Many people have made valuable comments and suggestions, including Rex Fernando, Eugene Kim, Danny McPherson, Dave Meyer, Pradosh Mohapatra, Keyur Patel, Robert Raszuk, Eric Rosen, Srihari Sangli, Dan Tappan, Mark Turner, Jeff Haas, Jay Borkenhagen, Mach Chen, Denis Ovsienko, Carlos Pignataro, Meral Shirazipour, and Kathleen Moriarty.

Authors' Addresses

Daniel Walton Cumulus Networks 185 E. Dana Street Mountain View, CA 94041 United States of America EMail: dwalton@cumulusnetworks.com
Alvaro Retana Cisco Systems, Inc. Kit Creek Rd. Research Triangle Park, NC 27709 United States of America EMail: aretana@cisco.com
Enke Chen Cisco Systems, Inc. 170 W. Tasman Dr. San Jose, CA 95134 United States of America EMail: enkechen@cisco.com
John Scudder Juniper Networks 1194 N. Mathilda Ave Sunnyvale, CA 94089 United States of America EMail: jgs@juniper.net
xml2rfc-2.9.6/tests/valid/references.txt0000644000175000017500000000404213113013721021002 0ustar henrikhenrik00000000000000 [Erratum3657] RFC Errata, Erratum 3657, RFC 2978. [I-D.ietf-avt-rtcp-port-for-ssm] Begen, A., "RTP Control Protocol (RTCP) Port for Source- Specific Multicast (SSM) Sessions", draft-ietf-avt-rtcp- port-for-ssm-04 (work in progress), December 2010. [INITIALS] Doe, J., Doe, A., Doe, B., Doe, C., Doe, D., Doe, Doe, E., Doe, F., and G. Doe, "All initial sets, no PI", RFC 7539, DOI 10.17487/RFC7539, may 2015. [INITIALS-PI] Doe, J., Doe, A., Doe, B. D., Doe, C. D., Doe, D.D., Doe, Doe, E. D., Doe, F.D., and G. D. Doe, "All initial sets, with PI", RFC 7539, DOI 10.17487/RFC7539, may 2015. [INITIALS2] Doe, J. D. and A. Doe, "Lots of authors", RFC 7539, DOI 10.17487/RFC7539, may 2015. [INITIALS3] Doe, J. D. and B. D. Doe, "Lots of authors", RFC 7539, DOI 10.17487/RFC7539, may 2015. [INITIALS4] Doe, J. D. and Doe, "Lots of authors", RFC 7539, DOI 10.17487/RFC7539, may 2015. [RFC2629] Rose, M., "Writing I-Ds and RFCs using XML", RFC 2629, June 1999. [RFC3424] Daigle, L. and IAB, "IAB Considerations for UNilateral Self-Address Fixing (UNSAF) Across Network Address Translation", RFC 3424, November 2002. [RFC3552] Rescorla, E. and B. Korver, "Guidelines for Writing RFC Text on Security Considerations", BCP 72, RFC 3552, July 2003. [SDO-3GPP] "3GPP Home Page", . [W3C.REC-voicexml20-20040316] Rehor, K., Ferrans, J., Tryphonas, S., Hunt, A., Burnett, D., Lucas, B., McGlashan, S., Porter, B., Danielsen, P., and J. Carter, "Voice Extensible Markup Language (VoiceXML) Version 2.0", World Wide Web Consortium Recommendation REC-voicexml20-20040316, March 2004, . xml2rfc-2.9.6/tests/valid/rfc7911.exp.xml0000644000175000017500000006577413237622212020564 0ustar henrikhenrik00000000000000 Advertisement of Multiple Paths in BGP Cumulus Networks
185 E. Dana Street Mountain View CA 94041 United States of America dwalton@cumulusnetworks.com
Cisco Systems, Inc.
Kit Creek Rd. Research Triangle Park NC 27709 United States of America aretana@cisco.com
Cisco Systems, Inc.
170 W. Tasman Dr. San Jose CA 95134 United States of America enkechen@cisco.com
Juniper Networks
1194 N. Mathilda Ave Sunnyvale CA 94089 United States of America jgs@juniper.net
This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. The essence of the extension is that each path is identified by a Path Identifier in addition to the address prefix.
The BGP specification defines an Update-Send Process to advertise the routes chosen by the Decision Process to other BGP speakers. No provisions are made to allow the advertisement of multiple paths for the same address prefix or Network Layer Reachability Information (NLRI). In fact, a route with the same NLRI as a previously advertised route implicitly replaces the previous advertisement. This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. The essence of the extension is that each path is identified by a Path Identifier in addition to the address prefix. The availability of the additional paths can help reduce or eliminate persistent route oscillations . It can also help with optimal routing and routing convergence in a network by providing potential alternate or backup paths, respectively.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in .
As defined in , a path refers to the information reported in the Path Attribute field of an UPDATE message. As the procedures specified in allow only the advertisement of one path for a particular address prefix, a path for an address prefix from a BGP peer can be keyed on the address prefix. In order for a BGP speaker to advertise multiple paths for the same address prefix, a new identifier (termed "Path Identifier" hereafter) needs to be introduced so that a particular path for an address prefix can be identified by the combination of the address prefix and the Path Identifier. The assignment of the Path Identifier for a path by a BGP speaker is purely a local matter. However, the Path Identifier MUST be assigned in such a way that the BGP speaker is able to use the (Prefix, Path Identifier) to uniquely identify a path advertised to a neighbor. A BGP speaker that re-advertises a route MUST generate its own Path Identifier to be associated with the re-advertised route. A BGP speaker that receives a route should not assume that the identifier carries any particular semantics.
In order to carry the Path Identifier in an UPDATE message, the NLRI encoding MUST be extended by prepending the Path Identifier field, which is of four octets. For example, the NLRI encoding specified in is extended as the following:
+--------------------------------+ | Path Identifier (4 octets) | +--------------------------------+ | Length (1 octet) | +--------------------------------+ | Prefix (variable) | +--------------------------------+
The usage of the extended NLRI encodings is specified in .
The ADD-PATH Capability is a BGP capability , with Capability Code 69. The Capability Length field of this capability is variable. The Capability Value field consists of one or more of the following tuples:
+------------------------------------------------+ | Address Family Identifier (2 octets) | +------------------------------------------------+ | Subsequent Address Family Identifier (1 octet) | +------------------------------------------------+ | Send/Receive (1 octet) | +------------------------------------------------+
The meaning and use of the fields are as follows: Address Family Identifier (AFI): This field is the same as the one used in .Subsequent Address Family Identifier (SAFI): This field is the same as the one used in .Send/Receive: This field indicates whether the sender is (a) able to receive multiple paths from its peer (value 1), (b) able to send multiple paths to its peer (value 2), or (c) both (value 3) for the <AFI, SAFI>.If any other value is received, then the capability SHOULD be treated as not understood and ignored .A BGP speaker that wishes to indicate support for multiple AFI/SAFIs MUST do so by including the information in a single instance of the ADD-PATH Capability.
The Path Identifier specified in can be used to advertise multiple paths for the same address prefix without subsequent advertisements replacing the previous ones. Apart from the fact that this is now possible, the route advertisement rules of are not changed. In particular, a new advertisement for a given address prefix and a given Path Identifier replaces a previous advertisement for the same address prefix and Path Identifier. If a BGP speaker receives a message to withdraw a prefix with a Path Identifier not seen before, it SHOULD silently ignore it. For a BGP speaker to be able to send multiple paths to its peer, that BGP speaker MUST advertise the ADD-PATH Capability with the Send/Receive field set to either 2 or 3, and MUST receive from its peer the ADD-PATH Capability with the Send/Receive field set to either 1 or 3, for the corresponding <AFI, SAFI>. A BGP speaker MUST follow the procedures defined in when generating an UPDATE message for a particular <AFI, SAFI> to a peer unless the BGP speaker advertises the ADD-PATH Capability to the peer indicating its ability to send multiple paths for the <AFI, SAFI>, and also receives the ADD-PATH Capability from the peer indicating its ability to receive multiple paths for the <AFI, SAFI>, in which case the speaker MUST generate a route update for the <AFI, SAFI> based on the combination of the address prefix and the Path Identifier, and use the extended NLRI encodings specified in this document. The peer SHALL act accordingly in processing an UPDATE message related to a particular <AFI, SAFI>. A BGP speaker SHOULD include the best route when more than one path is advertised to a neighbor, unless it is a path received from that neighbor. As the Path Identifiers are locally assigned, and may or may not be persistent across a control plane restart of a BGP speaker, an implementation SHOULD take special care so that the underlying forwarding plane of a "Receiving Speaker" as described in is not affected during the graceful restart of a BGP session.
The extension proposed in this document provides a mechanism for a BGP speaker to advertise multiple paths over a BGP session. Care needs to be taken in its deployment to ensure consistent routing and forwarding in a network . The only explicit indication that the encoding described in is in use in a particular BGP session is the exchange of Capabilities described in . If the exchange is successful , then the BGP speakers will be able to process all BGP UPDATES properly, as described in . However, if, for example, a packet analyzer is used on the wire to examine an active BGP session, it may not be able to properly decode the BGP UPDATES because it lacks prior knowledge of the exchanged Capabilities. When deployed as a provider edge router or a peering router that interacts with external neighbors, a BGP speaker usually advertises at most one path to the internal neighbors in a network. In the case where the speaker is configured to advertise multiple paths to the internal neighbors, and additional information is needed for the application, the speaker could use attributes such as the Edge_Discriminator attribute . The use of that type of additional information is outside the scope of this document.
IANA has assigned the value 69 for the ADD-PATH Capability described in this document. This registration is in the "Capability Codes" registry.
This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. As a result, multiple paths for a large number of prefixes may be received by a BGP speaker, potentially depleting memory resources or even causing network-wide instability, which can be considered a denial-of-service attack. Note that this is not a new vulnerability, but one that is present in the base BGP specification . The use of the ADD-PATH Capability is intended to address specific needs related to, for example, eliminating route oscillations that were induced by the MULTI_EXIT_DISC (MED) attribute. While describing the applications for the ADD-PATH Capability is outside the scope of this document, users are encouraged to examine their behavior and potential impact by studying the best practices described in . Security concerns in the base operation of BGP also apply.
A Border Gateway Protocol 4 (BGP-4) This document discusses the Border Gateway Protocol (BGP), which is an inter-Autonomous System routing protocol. The primary function of a BGP speaking system is to exchange network reachability information with other BGP systems. This network reachability information includes information on the list of Autonomous Systems (ASes) that reachability information traverses. This information is sufficient for constructing a graph of AS connectivity for this reachability from which routing loops may be pruned, and, at the AS level, some policy decisions may be enforced. BGP-4 provides a set of mechanisms for supporting Classless Inter-Domain Routing (CIDR). These mechanisms include support for advertising a set of destinations as an IP prefix, and eliminating the concept of network "class" within BGP. BGP-4 also introduces mechanisms that allow aggregation of routes, including aggregation of AS paths. This document obsoletes RFC 1771. [STANDARDS-TRACK] Capabilities Advertisement with BGP-4 This document defines an Optional Parameter, called Capabilities, that is expected to facilitate the introduction of new capabilities in the Border Gateway Protocol (BGP) by providing graceful capability advertisement without requiring that BGP peering be terminated. This document obsoletes RFC 3392. [STANDARDS-TRACK] Multiprotocol Extensions for BGP-4 This document defines extensions to BGP-4 to enable it to carry routing information for multiple Network Layer protocols (e.g., IPv6, IPX, L3VPN, etc.). The extensions are backward compatible - a router that supports the extensions can interoperate with a router that doesn't support the extensions. [STANDARDS-TRACK] Key words for use in RFCs to Indicate Requirement Levels In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements. Border Gateway Protocol (BGP) Persistent Route Oscillation Condition BGP Persistent Route Oscillation Solutions Best Practices for Advertisement of Multiple Paths in IBGP Fast Connectivity Restoration Using BGP Add-path Graceful Restart Mechanism for BGP This document describes a mechanism for BGP that would help minimize the negative effects on routing caused by BGP restart. An End-of-RIB marker is specified and can be used to convey routing convergence information. A new BGP capability, termed "Graceful Restart Capability", is defined that would allow a BGP speaker to express its ability to preserve forwarding state during BGP restart. Finally, procedures are outlined for temporarily retaining routing information across a TCP session termination/re-establishment. The mechanisms described in this document are applicable to all routers, both those with the ability to preserve forwarding state during BGP restart and those without (although the latter need to implement only a subset of the mechanisms described in this document). [STANDARDS-TRACK] BGP Security Vulnerabilities Analysis Border Gateway Protocol 4 (BGP-4), along with a host of other infrastructure protocols designed before the Internet environment became perilous, was originally designed with little consideration for protection of the information it carries. There are no mechanisms internal to BGP that protect against attacks that modify, delete, forge, or replay data, any of which has the potential to disrupt overall network routing behavior. This document discusses some of the security issues with BGP routing data dissemination. This document does not discuss security issues with forwarding of packets. This memo provides information for the Internet community.
We would like to thank David Cook and Naiming Shen for their contributions to the design and development of the extension. Many people have made valuable comments and suggestions, including Rex Fernando, Eugene Kim, Danny McPherson, Dave Meyer, Pradosh Mohapatra, Keyur Patel, Robert Raszuk, Eric Rosen, Srihari Sangli, Dan Tappan, Mark Turner, Jeff Haas, Jay Borkenhagen, Mach Chen, Denis Ovsienko, Carlos Pignataro, Meral Shirazipour, and Kathleen Moriarty.
xml2rfc-2.9.6/tests/valid/abbreviations.nroff0000644000175000017500000000021112472420024022003 0ustar henrikhenrik00000000000000.in 3 Various abbreviations which aren't end of sentence: Jr. AND Sr. AND i.e. AND Mr. AND Mrs. etc. \%-- done. Start of next sentence.xml2rfc-2.9.6/tests/valid/status_ietf_exp_no.nroff0000644000175000017500000000157313237442436023104 0ustar henrikhenrik00000000000000.pl 10.0i .po 0 .ll 7.2i .lt 7.2i .nr LL 7.2i .nr LT 7.2i .hy 0 .ad l .ds LH RFC 9999 .ds CH Abbreviated Title .ds RH December 2010 .ds LF Doe .ds CF Best Current Practice .ds RF FORMFEED[Page %] .ti 0 Status of This Memo .in 3 This document is not an Internet Standards Track specification; it is published for examination, experimental implementation, and evaluation. This document defines an Experimental Protocol for the Internet community. This document is a product of the Internet Engineering Task Force (IETF). It has been approved for publication by the Internet Engineering Steering Group (IESG). Not all documents approved by the IESG are candidates for any level of Internet Standard; see Section 2 of RFC 5741. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc9999. xml2rfc-2.9.6/tests/valid/header_footer_rfc.txt0000644000175000017500000000022312336226773022341 0ustar henrikhenrik00000000000000Doe Best Current Practice [Page 1] RFC 9999 Abbreviated Title December 2010xml2rfc-2.9.6/tests/valid/rfc7911.v2v3.xml0000644000175000017500000006567013237622212020563 0ustar henrikhenrik00000000000000 Advertisement of Multiple Paths in BGP Cumulus Networks
185 E. Dana Street Mountain View CA 94041 United States of America dwalton@cumulusnetworks.com
Cisco Systems, Inc.
Kit Creek Rd. Research Triangle Park NC 27709 United States of America aretana@cisco.com
Cisco Systems, Inc.
170 W. Tasman Dr. San Jose CA 95134 United States of America enkechen@cisco.com
Juniper Networks
1194 N. Mathilda Ave Sunnyvale CA 94089 United States of America jgs@juniper.net
This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. The essence of the extension is that each path is identified by a Path Identifier in addition to the address prefix.
Introduction The BGP specification defines an Update-Send Process to advertise the routes chosen by the Decision Process to other BGP speakers. No provisions are made to allow the advertisement of multiple paths for the same address prefix or Network Layer Reachability Information (NLRI). In fact, a route with the same NLRI as a previously advertised route implicitly replaces the previous advertisement. This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. The essence of the extension is that each path is identified by a Path Identifier in addition to the address prefix. The availability of the additional paths can help reduce or eliminate persistent route oscillations . It can also help with optimal routing and routing convergence in a network by providing potential alternate or backup paths, respectively.
Specification of Requirements The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in .
How to Identify a Path As defined in , a path refers to the information reported in the Path Attribute field of an UPDATE message. As the procedures specified in allow only the advertisement of one path for a particular address prefix, a path for an address prefix from a BGP peer can be keyed on the address prefix. In order for a BGP speaker to advertise multiple paths for the same address prefix, a new identifier (termed "Path Identifier" hereafter) needs to be introduced so that a particular path for an address prefix can be identified by the combination of the address prefix and the Path Identifier. The assignment of the Path Identifier for a path by a BGP speaker is purely a local matter. However, the Path Identifier MUST be assigned in such a way that the BGP speaker is able to use the (Prefix, Path Identifier) to uniquely identify a path advertised to a neighbor. A BGP speaker that re-advertises a route MUST generate its own Path Identifier to be associated with the re-advertised route. A BGP speaker that receives a route should not assume that the identifier carries any particular semantics.
Extended NLRI Encodings In order to carry the Path Identifier in an UPDATE message, the NLRI encoding MUST be extended by prepending the Path Identifier field, which is of four octets. For example, the NLRI encoding specified in is extended as the following:
The usage of the extended NLRI encodings is specified in .
ADD-PATH Capability The ADD-PATH Capability is a BGP capability , with Capability Code 69. The Capability Length field of this capability is variable. The Capability Value field consists of one or more of the following tuples:
The meaning and use of the fields are as follows:
  • Address Family Identifier (AFI):
    • This field is the same as the one used in .
  • Subsequent Address Family Identifier (SAFI):
    • This field is the same as the one used in .
  • Send/Receive:
    • This field indicates whether the sender is (a) able to receive multiple paths from its peer (value 1), (b) able to send multiple paths to its peer (value 2), or (c) both (value 3) for the <AFI, SAFI>.
    • If any other value is received, then the capability SHOULD be treated as not understood and ignored .
A BGP speaker that wishes to indicate support for multiple AFI/SAFIs MUST do so by including the information in a single instance of the ADD-PATH Capability.
Operation The Path Identifier specified in can be used to advertise multiple paths for the same address prefix without subsequent advertisements replacing the previous ones. Apart from the fact that this is now possible, the route advertisement rules of are not changed. In particular, a new advertisement for a given address prefix and a given Path Identifier replaces a previous advertisement for the same address prefix and Path Identifier. If a BGP speaker receives a message to withdraw a prefix with a Path Identifier not seen before, it SHOULD silently ignore it. For a BGP speaker to be able to send multiple paths to its peer, that BGP speaker MUST advertise the ADD-PATH Capability with the Send/Receive field set to either 2 or 3, and MUST receive from its peer the ADD-PATH Capability with the Send/Receive field set to either 1 or 3, for the corresponding <AFI, SAFI>. A BGP speaker MUST follow the procedures defined in when generating an UPDATE message for a particular <AFI, SAFI> to a peer unless the BGP speaker advertises the ADD-PATH Capability to the peer indicating its ability to send multiple paths for the <AFI, SAFI>, and also receives the ADD-PATH Capability from the peer indicating its ability to receive multiple paths for the <AFI, SAFI>, in which case the speaker MUST generate a route update for the <AFI, SAFI> based on the combination of the address prefix and the Path Identifier, and use the extended NLRI encodings specified in this document. The peer SHALL act accordingly in processing an UPDATE message related to a particular <AFI, SAFI>. A BGP speaker SHOULD include the best route when more than one path is advertised to a neighbor, unless it is a path received from that neighbor. As the Path Identifiers are locally assigned, and may or may not be persistent across a control plane restart of a BGP speaker, an implementation SHOULD take special care so that the underlying forwarding plane of a "Receiving Speaker" as described in is not affected during the graceful restart of a BGP session.
Deployment Considerations The extension proposed in this document provides a mechanism for a BGP speaker to advertise multiple paths over a BGP session. Care needs to be taken in its deployment to ensure consistent routing and forwarding in a network . The only explicit indication that the encoding described in is in use in a particular BGP session is the exchange of Capabilities described in . If the exchange is successful , then the BGP speakers will be able to process all BGP UPDATES properly, as described in . However, if, for example, a packet analyzer is used on the wire to examine an active BGP session, it may not be able to properly decode the BGP UPDATES because it lacks prior knowledge of the exchanged Capabilities. When deployed as a provider edge router or a peering router that interacts with external neighbors, a BGP speaker usually advertises at most one path to the internal neighbors in a network. In the case where the speaker is configured to advertise multiple paths to the internal neighbors, and additional information is needed for the application, the speaker could use attributes such as the Edge_Discriminator attribute . The use of that type of additional information is outside the scope of this document.
IANA Considerations IANA has assigned the value 69 for the ADD-PATH Capability described in this document. This registration is in the "Capability Codes" registry.
Security Considerations This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. As a result, multiple paths for a large number of prefixes may be received by a BGP speaker, potentially depleting memory resources or even causing network-wide instability, which can be considered a denial-of-service attack. Note that this is not a new vulnerability, but one that is present in the base BGP specification . The use of the ADD-PATH Capability is intended to address specific needs related to, for example, eliminating route oscillations that were induced by the MULTI_EXIT_DISC (MED) attribute. While describing the applications for the ADD-PATH Capability is outside the scope of this document, users are encouraged to examine their behavior and potential impact by studying the best practices described in . Security concerns in the base operation of BGP also apply.
Normative References A Border Gateway Protocol 4 (BGP-4) This document discusses the Border Gateway Protocol (BGP), which is an inter-Autonomous System routing protocol. The primary function of a BGP speaking system is to exchange network reachability information with other BGP systems. This network reachability information includes information on the list of Autonomous Systems (ASes) that reachability information traverses. This information is sufficient for constructing a graph of AS connectivity for this reachability from which routing loops may be pruned, and, at the AS level, some policy decisions may be enforced. BGP-4 provides a set of mechanisms for supporting Classless Inter-Domain Routing (CIDR). These mechanisms include support for advertising a set of destinations as an IP prefix, and eliminating the concept of network "class" within BGP. BGP-4 also introduces mechanisms that allow aggregation of routes, including aggregation of AS paths. This document obsoletes RFC 1771. [STANDARDS-TRACK] Capabilities Advertisement with BGP-4 This document defines an Optional Parameter, called Capabilities, that is expected to facilitate the introduction of new capabilities in the Border Gateway Protocol (BGP) by providing graceful capability advertisement without requiring that BGP peering be terminated. This document obsoletes RFC 3392. [STANDARDS-TRACK] Multiprotocol Extensions for BGP-4 This document defines extensions to BGP-4 to enable it to carry routing information for multiple Network Layer protocols (e.g., IPv6, IPX, L3VPN, etc.). The extensions are backward compatible - a router that supports the extensions can interoperate with a router that doesn't support the extensions. [STANDARDS-TRACK] Key words for use in RFCs to Indicate Requirement Levels In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements. Informative References Border Gateway Protocol (BGP) Persistent Route Oscillation Condition BGP Persistent Route Oscillation Solutions Best Practices for Advertisement of Multiple Paths in IBGP Fast Connectivity Restoration Using BGP Add-path Graceful Restart Mechanism for BGP This document describes a mechanism for BGP that would help minimize the negative effects on routing caused by BGP restart. An End-of-RIB marker is specified and can be used to convey routing convergence information. A new BGP capability, termed "Graceful Restart Capability", is defined that would allow a BGP speaker to express its ability to preserve forwarding state during BGP restart. Finally, procedures are outlined for temporarily retaining routing information across a TCP session termination/re-establishment. The mechanisms described in this document are applicable to all routers, both those with the ability to preserve forwarding state during BGP restart and those without (although the latter need to implement only a subset of the mechanisms described in this document). [STANDARDS-TRACK] BGP Security Vulnerabilities Analysis Border Gateway Protocol 4 (BGP-4), along with a host of other infrastructure protocols designed before the Internet environment became perilous, was originally designed with little consideration for protection of the information it carries. There are no mechanisms internal to BGP that protect against attacks that modify, delete, forge, or replay data, any of which has the potential to disrupt overall network routing behavior. This document discusses some of the security issues with BGP routing data dissemination. This document does not discuss security issues with forwarding of packets. This memo provides information for the Internet community.
Acknowledgments We would like to thank David Cook and Naiming Shen for their contributions to the design and development of the extension. Many people have made valuable comments and suggestions, including Rex Fernando, Eugene Kim, Danny McPherson, Dave Meyer, Pradosh Mohapatra, Keyur Patel, Robert Raszuk, Eric Rosen, Srihari Sangli, Dan Tappan, Mark Turner, Jeff Haas, Jay Borkenhagen, Mach Chen, Denis Ovsienko, Carlos Pignataro, Meral Shirazipour, and Kathleen Moriarty.
xml2rfc-2.9.6/tests/valid/draft-miek-test.html0000644000175000017500000015143413241652176022035 0ustar henrikhenrik00000000000000 Writing I-Ds and RFCs using Pandoc and xml2rfc 2.x
RFC Beautification Working Group R. Gieben
Internet-Draft Google
Intended status: Informational January 1, 2013
Expires: July 5, 2013

Writing I-Ds and RFCs using Pandoc and xml2rfc 2.x
draft-gieben-writing-rfcs-pandoc-02

Abstract

This memo presents a technique for using Pandoc syntax as a source format for documents in the Internet-Drafts (I-Ds) and Request for Comments (RFC) series.

This version is adapted to work with "xml2rfc" version 2.x.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on July 5, 2013.

Copyright Notice

Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.


Table of Contents

1. Introduction

This document presents a technique for using Pandoc syntax as a source format for documents in the Internet-Drafts (I-Ds) and Request for Comments (RFC) series.

This version is adapted to work with xml2rfc version 2.x.

Pandoc is an "almost plain text" format and therefor particularly well suited for editing RFC-like documents.

2. Pandoc to RFC

When writing [RFC4641] we directly wrote the XML. Needless to say it was tedious even thought the XML of xml2rfc is very "light". The latest version of xml2rfc version 2 can be found here.

During the last few years people have been developing markup languages that are very easy to remember and type. These languages have become known as almost plain text-markup languages. One of the first was the Markdown syntax. One that was developed later and incorporates Markdown and a number of extensions is Pandoc. The power of Pandoc also comes from the fact that it can be translated to numerous output formats, including, but not limited to: HTML, (plain) Markdown and docbook XML.

So using Pandoc for writing RFCs seems like a sane choice. As xml2rfc uses XML, the easiest way would be to create docbook XML and transform that using XSLT. Pandoc2rfc does just that. The conversions are, in some way amusing, as we start off with (almost) plain text, use elaborate XML and end up with plain text again.

+-------------------+   pandoc   +---------+  
| ALMOST PLAIN TEXT |   ------>  | DOCBOOK |  
+-------------------+            +---------+  
              |                       |
non-existent  |                       | xsltproc
  faster way  |                       |
              v                       v
      +------------+    xml2rfc  +---------+ 
      | PLAIN TEXT |  <--------  | XML2RFC | 
      +------------+             +---------+ 

Figure 1: Attempt to justify Pandoc2rfc.

The XML generated (the output after the xsltproc step in Figure 1) is suitable for inclusion in either the middle or back section of an RFC. The simplest way is to create a template XML file and include the appropriate XML:

<?xml version='1.0' ?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd' [
<!ENTITY pandocMiddle PUBLIC '' 'middle.xml'>
<!ENTITY pandocBack   PUBLIC '' 'back.xml'>
]>

<rfc ipr='trust200902' docName='draft-gieben-pandoc-rfcs-02'>
 <front>
    <title>Writing I-Ds and RFCs using Pandoc v2</title>
</front>

<middle>
    &pandocMiddle;
</middle>

<back>
    &pandocBack;
</back>

</rfc>

Figure 2: A minimal template.xml.

See the Makefile for an example of this. In this case you need to edit 3 documents:

  1. middle.pdc - contains the main body of text;
  2. back.pdc - holds appendices and references;
  3. template.xml (probably a fairly static file).

The draft (draft.txt) you are reading now, is automatically created when you call make. The homepage of Pandoc2rfc is this github repository.

2.1. Dependencies

It needs xsltproc and pandoc to be installed. See the Pandoc user manual for the details on how to type in Pandoc style. And ofcourse xml2rfc version two.

When using Pandoc2rfc consider adding the following sentence to an Acknowledgements section:

 This document was produced using the Pandoc2rfc tool.

3. Starting a new project

When starting a new project with pandoc2rfc you'll need to copy the following files:

After that you can start editing.

4. Supported Features

5. Unsupported Features

6. Acknowledgements

The following people have helped to make Pandoc2rfc what it is today: Benno Overeinder, Erlend Hamnaberg, Matthijs Mekking, Trygve Laugstøl.

This document was prepared using Pandoc2rfc.

7. Pandoc Constructs

So, what syntax do you need to use to get the correct output? Well, it is just Pandoc. The best introduction to the Pandoc style is given in this README from Pandoc itself.

For convenience we list the most important ones in the following sections.

7.1. Paragraph

Paragraphs are separated with an empty line.

7.2. Section

Just use the normal sectioning commands available in Pandoc, for instance:

# Section1 One
Bla

Converts to: <section title="Section1 One" anchor="section1-one"> If you have another section that is also named "Section1 One", that anchor will be called "section1-one-1", but only when the sections are in the same source file!

Referencing the section is done with see [](#section1-one), as in see Section 7.2.

7.3. List Styles

A good number of styles are supported.

7.3.1. Symbol

A symbol list.

* Item one;
* Item two.

Converts to <list style="symbol">:

7.3.2. Number

A numbered list.

1. Item one;
1. Item two.

Converts to <list style="numbers">:

  1. Item one;
  2. Item two.

7.3.3. Empty

Using the default list markers from Pandoc:

A list using the default list markers.

#. Item one;
#. Item two.

Converts to <list style="empty">:

7.3.4. Roman

Use the supported Pandoc syntax:

ii. Item one;
ii. Item two.

Converts to <list style="format %i.">:

i.
Item one;
ii.
Item two.

If you use uppercase Roman numerals, they convert to a different style:

II. Item one;
II. Item two.

Yields <list style="format (%d) ">:

(1)
Item one;
(2)
Item two.

7.3.5. Letter

A numbered list.

a.  Item one;
b.  Item two.

Converts to <list style="letters">:

  1. Item one;
  2. Item two.

Uppercasing the letters works too (note two spaces after the letter.

A.  Item one;
B.  Item two.

Becomes:

A.
Item one;
B.
Item two.

7.3.6. Hanging

This is more like a description list, so we need to use:

First item that needs clarification:

:   Explanation one
More stuff, because item is difficult to explain.
* item1
* item2

Second item that needs clarification:

:   Explanation two

Converts to: <list style="hanging"> and <t hangText="First item that...">

If you want a newline after the hangTexts, search for the string OPTION in transform.xsl and uncomment it.

7.4. Figure/Artwork

Indent the paragraph with 4 spaces.

Like this

Converts to: <figure><artwork> ... Note that xml2rfc supports a caption with <artwork>. Pandoc does not support this, but Pandoc2rfc does. If you add a @Figure: some text as the last line, the artwork gets a title attribute with the text after @Figure:. It will also be possible to reference the artwork. If a caption is supplied the artwork will be centered. If a caption is needed but the figure should not be centered use @figure:\.

7.4.1. References

The reference anchor attribute will be: fig: + first 10 (normalized) characters from the caption. Where normalized means:

So the first artwork with a caption will get fig:a-minimal- as a reference. See for instance Figure 2.

This anchoring is completely handled from within the xslt. Note that duplicate anchors are an XML validation error which will make xml2rfc fail.

7.5. Block Quote

Any paragraph like:

> quoted text

Converts to: <t><list style="empty"> ... paragraph, making it indented.

7.6. References

7.6.1. External

Any reference like:

[Click here](URI)

Converts to: <ulink target="URI">Click here ...

7.6.2. Internal

Any reference like:

[Click here](#localid)

Converts to: <link target="localid">Click here ...

For referring to RFCs (for which you manually need add the reference source in the template, with an external XML entity), you can just use:

[](#RFC2119)

And it does the right thing. Referencing sections is done with:

See [](#pandoc-constructs)

The word 'Section' is inserted automatically: ... see Section 7 ... For referencing figures/artworks see Section 7.4. For referencing tables see Section 7.8.

7.7. Spanx Styles

The verb style can be selected with back-tics: `text` Converts to: <spanx style="verb"> ...

And the emphasis style with asterisks: *text* or underscores: _text_ Converts to: <spanx style="emph"> ...

And the emphasis style with double asterisks: **text** Converts to: <spanx style="strong"> ...

7.8. Tables

A table can be entered as:

  Right     Left     Center     Default                                                                  
  -------   ------ ----------   -------                                                                  
       12     12        12        12                                                                   
      123     123       123       123                                                                   
        1     1         1         1       

  Table: A caption describing the table.
  

Figure 3: A caption describing the figure describing the table.

Is translated to <texttable> element in xml2rfc. You can choose multiple styles as input, but they all are converted to the same style (plain <texttable>) table in xml2rfc. The column alignment is copied over to the generated XML.

7.8.1. References

The caption is always translated to a title attribute. If a table has a caption, it will also get a reference. The reference anchor attribute will be: tab- + first 10 (normalized) characters from the caption. Where normalized means:

So the first table with a caption will get tab-a-caption- for reference use. See for instance

This anchoring is completely handled from within the xslt. Note that duplicate anchors are an XML validation error which will make xml2rfc fail.

7.9. Indexes

The footnote syntax of Pandoc is slightly abused to support an index. Footnotes are entered in two steps, you have a marker in the text, and later you give actual footnote text. Like this:

[^1]

[^1]: footnote text

We re-use this syntax for the <iref> tag. The above text translates to:

<iref item="footnote text"/>

Sub items are also supported. Use an exclamation mark (!) to separate them:

[^1]: item!sub item

8. Usage guidelines

8.1. Working with multiple files

As an author you will probably break up a draft in multiple files, each dealing with a subject or section. When doing so sections with the same title will clash with each other. Pandoc can deal with this situation, but only if the different sections are in the same file or processed in the same Pandoc run. Concatenating the different section files before processing them is a solution to this problem. You can, for instance, amend the Makefile and add something like this:

allsections.pdc: section.pdc.1 section.pdc.2 section.pdc.3
        cat $@ > allsections.pdc

And then process allsection.pdc in the normal way.

8.2. Setting the title

If you use double quotes in the documents title in the docName attribute, like:

<rfc ipr="trust200902" docName="draft-gieben-writing-rfcs-pandoc-02">

The Makefile will pick this up automatically and make a symbolic link:

draft-gieben-writing-rfcs-pandoc-00.txt -> draft.txt

This makes uploading the file to the i-d tracker a bit easier.

8.3. Uploading the XML/txt

The draft.xml target will generate an XML file with all XML included, so you can upload just one file to the I-D tracker.

8.4. VIM syntax highlighting

If you are a VIM user you might be interested in a syntax highlighting file (see [VIM]) that slightly lightens up your reading experience while viewing a draft.txt from VIM.

9. Security Considerations

This document raises no security issues.

10. IANA Considerations

This document has no actions for IANA.

11. References

11.1. Informative References

[VIM] Gieben, R., "VIM syntax file for RFCs and I-Ds", October 2012.

11.2. Normative References

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC4641] Kolkman, O. and R. Gieben, "DNSSEC Operational Practices", RFC 4641, September 2006.

Appendix A. Tests

This appendix consists out of a few tests that should all render to proper xml2rfc XML.

A.1. A Very Long Title Considerations With Regards to the Already Deployed Routing Policy

Test a very long title.

A.2. Markup in heading

This is discarded by xml2rfc.

A.3. Blockquote

A.4. Verbatim code blocks

A verbatim code block
jkasjksajassjasjsajsajkas

A.5. Reference Tests

Refer to RFC 2119 if you will. Or maybe you want to inspect Figure 2 in Section 2 again. Or you might want to Click here.

A.6. Spanx Tests

A.7. List Tests

  1. First we do
  2. And then
    • item 1
    • item 2

And the other around.

Description lists:

Item to explain:
It works because of herbs.
Another item to explain:
More explaining.

Multiple paragraphs in such a list.

lists in description lists.

Item to explain:
It works because of
  1. One
  2. Two

Another item to explain:
More explaining
Item to explain:
It works because of
  1. One1
  2. Two1
    • Itemize list
    • Another item

Another item to explain again:
More explaining

list with description lists.

  1. More
    Item to explain:
    Explanation ...
    Item to explain:
    Another explanation ...

  2. Go'bye

Multiple paragraphs in a list.

Artwork

  1. This is the first bullet point and it needs multiple paragraphs...

    ... to be explained properly.
  2. This is the next bullet. New paragraphs should be indented with 4 four spaces.
  3. Another item with some artwork, indented by 8 spaces.
  4. Final item.

xml2rfc does not allow this, so the second paragraph is faked with a

<vspace blankLines='1'>

Ordered lists.

  1. First item
  2. Second item

A lowercase roman list:

i.
Item 1
ii.
Item 2

An uppercase roman list.

(1)
Item1
(2)
Item2
(3)
Item 3

And default list markers.

Some surrounding text, to make it look better.

Text at the end.

Lowercase letters list.

  1. First item
  2. Second item

Uppercase letters list.

A.
First item
B.
Second item

And artwork in a description list.

miek.nl.    IN  NS  a.miek.nl.                             
a.miek.nl.  IN  A   192.0.2.1    ; <- this is glue            

Item1:
Tell something about it. Tell something about it. Tell something about it. Tell something about it. Tell something about it. Tell something about it.

Tell some more about it. Tell some more about it. Tell some more about it.
Item2:
Another description

List with a sublist with a paragraph above the sublist

  1. First Item
  2. Second item
  3. Third item

    A paragraph that comes first
    1. But what do you know
    2. This is another list

A.8. Table Tests

Demonstration of simple table syntax.
Right Left Center Default
12 12 12 12
123 123 123 123
1 1 1 1
Here's the caption. It, too, may span multiple lines. This is a multiline table. This is verbatim text.
Centered Header Default Aligned Right Aligned Left Aligned
First row 12.0 Example of a row that spans multiple lines.
Second row 5.0 Here's another one. Note the blank line between rows.

Sample grid table.
Fruit Price Advantages
Bananas $1.34 built-in wrapper
Oranges $2.10 cures scurvy

Grid tables without a caption

Fruit Price Advantages
Bananas $1.34 built-in wrapper
Oranges $2.10 cures scurvy

This table has no caption, and therefor no reference. But you can refer to some of the other tables, with for instance:

See [](#tab-here-s-the)

Which will become "See Table 2".

We should also be able to refer to the table numbers directly, to say things like 'Look at Tables 1, 2 and 3.'

A.9. Numbered examples

This is another example:

  1. Another bla bla..

as (1) shows...

A.10. Figure tests

This is a figure
This is a figure
This is a figure
This is a figure

Figure 4: This is the caption, with text in `typewriter`. Which isnt converted to a <spanx> style, because this is copied as-is.

And how a figure that is not centered, do to using figure and not Figure.

This is a figure
This is a figure

Figure 5: A non centered figure.

Test the use of @title:

This is a figure with a title
This is a figure with a title
@title: and here it is: a title, don't mess it up *

A.11. Verse tests

This is a verse text This is another line

Index

L
list
  default markers
  Uppercase Letters
T
table
  grid
  simple

Author's Address

R. (Miek) Gieben Google 123 Buckingham Palace Road London, SW1W 9SH UK EMail: miek@miek.nl URI: http://miek.nl/
xml2rfc-2.9.6/tests/valid/list_letters.txt0000644000175000017500000000030112336226773021413 0ustar henrikhenrik00000000000000 Simulating more than one paragraph in a list item using : a. First, a short item. b. Second, a longer list item. And something that looks like a separate pargraph. xml2rfc-2.9.6/tests/valid/texttable_small_all.raw.txt0000644000175000017500000000036212336226773023511 0ustar henrikhenrik00000000000000 +----------+----------+ | column A | column B | +----------+----------+ | cell 1A | cell 1B | +----------+----------+ | cell 2A | cell 2B | +----------+----------+ | cell 3A | cell 3B | +----------+----------+xml2rfc-2.9.6/tests/valid/utf8.exp.xml0000644000175000017500000000254213237622212020336 0ustar henrikhenrik00000000000000 Put Your Internet Draft Title Company
Springfield IL US jdoe@example.com
Insert an abstract: MANDATORY. This template is for creating an Internet-Draft. With some out of scope characters in Chinese, by Xing Xing, 这里是中文译本
Text body needs to deal with funny characters Pure out of scope 这里是中文译本 Some re-mapped characters are ¢ or © More re-mapped characters are ˜ and € and ^
xml2rfc-2.9.6/tests/valid/status_irtf_info_yes.nroff0000644000175000017500000000167113237442436023443 0ustar henrikhenrik00000000000000.pl 10.0i .po 0 .ll 7.2i .lt 7.2i .nr LL 7.2i .nr LT 7.2i .hy 0 .ad l .ds LH RFC 9999 .ds CH Abbreviated Title .ds RH December 2010 .ds LF Doe .ds CF Best Current Practice .ds RF FORMFEED[Page %] .ti 0 Status of This Memo .in 3 This document is not an Internet Standards Track specification; it is published for informational purposes. This document is a product of the Internet Research Task Force (IRTF). The IRTF publishes the results of Internet-related research and development activities. These results might not be suitable for deployment. This RFC represents the consensus of the Workgroup Research Group of the Internet Research Task Force (IRTF). Documents approved for publication by the IRSG are not candidates for any level of Internet Standard; see Section 2 of RFC 5741. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc9999. xml2rfc-2.9.6/tests/valid/status_ietf_historic_yes.txt0000644000175000017500000000140113237442436024013 0ustar henrikhenrik00000000000000Status of This Memo This document is not an Internet Standards Track specification; it is published for the historical record. This document defines a Historic Document for the Internet community. This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Not all documents approved by the IESG are candidates for any level of Internet Standard; see Section 2 of RFC 5741. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc9999. xml2rfc-2.9.6/tests/valid/texttable_full.html0000644000175000017500000002352313112656335022046 0ustar henrikhenrik00000000000000

Table Tester

C1 C2 C3
12 12 12
C1 C2 C3
12 12 12
C1 C2 C3
12 12 12

Test #1 - table_max_chars == sum(longest_words)

12345678901 12345678901 12345678901 1234567890 1234567890 12345678901

Test #2 - table_max_chars == sum(inf)

12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Test #3 - table_max_chars < sum(longest_words)

Steal from columns with % and em widths
123456789012 123456789012 123456789012 123456789012 123456789012 123456789012
Steal from relative widths
123456789012 123456789012 123456789012 123456789012 123456789012 123456789012
Steam from unspecified widths
123456789012 123456789012 123456789012 123456789012 123456789012 123456789012

Test #4 - table_max_chars >= sum(ttcol_widths)

123 5678 123 5678 123 5678 123 5678 123 5678 123 5678

table_max_chars > sum(mnsc)

123 567890 2345 123 567890 234 123 567890 234 123 567890 234 123 567890 234 123 567890 234

Test #6 - table_max_chars == sum(mnsc)

123 5678901 123 5678901 123 5678901 123 567890 123 567890 123 56789

Test #7 table_max_chars > sum(mnsb)

123 5678901 123 5678901 123 5678901 123 567890 123 567890 123 567890

Test #8 table_max_chars == sum(mnsb)

123 567890 23456 123 567890 23456 123 567890 23456 123 567890 23456 123 567890 23456 123 567890 23456

Test #9 table_max_chars > sum(mnsa)

123 567890 23456 123 567890 23456 123 567890 23456 123456789 0123456 1234567890 23456 123 567890 23456
123 567890 23456 123 567890 23456 123 567890 23456 123 567890 23456 123 567890 23456 123 5678901 3456

Grow from max words to requested lengths

123 567890 23456 123 567890 23456 123 567890 23456 123 567890 23456 123 567890 23456 123 567890 23456
xml2rfc-2.9.6/tests/valid/draft-miek-test.v2v3.xml0000644000175000017500000012703213241652265022464 0ustar henrikhenrik00000000000000 ]> Writing I-Ds and RFCs using Pandoc and xml2rfc 2.x Google
123 Buckingham Palace Road London SW1W 9SH UK miek@miek.nl http://miek.nl/
General RFC Beautification Working Group RFC Request for Comments I-D Internet-Draft XML Pandoc Extensible Markup Language This memo presents a technique for using Pandoc syntax as a source format for documents in the Internet-Drafts (I-Ds) and Request for Comments (RFC) series. This version is adapted to work with "xml2rfc" version 2.x.
Introduction This document presents a technique for using Pandoc syntax as a source format for documents in the Internet-Drafts (I-Ds) and Request for Comments (RFC) series. This version is adapted to work with xml2rfc version 2.x. Pandoc is an "almost plain text" format and therefor particularly well suited for editing RFC-like documents.
  • Note: this document is typeset in Pandoc and does not render completely correct when reading it on github.
Pandoc to RFC
  • Pandoc2rfc -- designed to do the right thing, until it doesn't.
When writing we directly wrote the XML. Needless to say it was tedious even thought the XML of xml2rfc is very "light". The latest version of xml2rfc version 2 can be found here. During the last few years people have been developing markup languages that are very easy to remember and type. These languages have become known as almost plain text-markup languages. One of the first was the Markdown syntax. One that was developed later and incorporates Markdown and a number of extensions is Pandoc. The power of Pandoc also comes from the fact that it can be translated to numerous output formats, including, but not limited to: HTML, (plain) Markdown and docbook XML. So using Pandoc for writing RFCs seems like a sane choice. As xml2rfc uses XML, the easiest way would be to create docbook XML and transform that using XSLT. Pandoc2rfc does just that. The conversions are, in some way amusing, as we start off with (almost) plain text, use elaborate XML and end up with plain text again.
Attempt to justify Pandoc2rfc. | DOCBOOK | +-------------------+ +---------+ | | non-existent | | xsltproc faster way | | v v +------------+ xml2rfc +---------+ | PLAIN TEXT | <-------- | XML2RFC | +------------+ +---------+ ]]>
The XML generated (the output after the xsltproc step in ) is suitable for inclusion in either the middle or back section of an RFC. The simplest way is to create a template XML file and include the appropriate XML:
A minimal template.xml. ]> Writing I-Ds and RFCs using Pandoc v2 &pandocMiddle; &pandocBack; ]]>
See the Makefile for an example of this. In this case you need to edit 3 documents:
  1. middle.pdc - contains the main body of text;
  2. back.pdc - holds appendices and references;
  3. template.xml (probably a fairly static file).
The draft (draft.txt) you are reading now, is automatically created when you call make. The homepage of Pandoc2rfc is this github repository.
Dependencies It needs xsltproc and pandoc to be installed. See the Pandoc user manual for the details on how to type in Pandoc style. And ofcourse xml2rfc version two. When using Pandoc2rfc consider adding the following sentence to an Acknowledgements section:
Starting a new project When starting a new project with pandoc2rfc you'll need to copy the following files:
  • Makefile
  • transform.xslt
  • And the above mentioned files:
    • middle.pdc
    • back.pdc
    • template.xml
After that you can start editing.
Supported Features
  • Sections with an anchor and title attributes ();
  • Lists
    • style=symbols ();
    • style=numbers ();
    • style=empty ();
    • style=format %i, use roman lowercase numerals, ();
    • style=format (%d), use roman uppercase numerals ();
    • style=letters (lower- and uppercase, );
    • style=hanging ();
  • Figure/artwork with a title ();
  • Block quote this is converted to <list style="empty"> paragraph ();
  • References
    • external (eref) ();
    • internal (xref) (), you can refer to:
      • section (handled by Pandoc, see ));
      • figures (handled by XSLT, see );
      • tables (handled by XSLT, see ).
  • Citations, by using internal references;
  • Spanx style=verb, style=emph and style=strong ();
  • Tables with an anchor and title ();
  • Indexes, by using footnotes ().
Unsupported Features
  • Lists inside a table (xml2rfc doesn't handle this);
  • Pandoc markup in the caption for figures/artwork. Pandoc markup for table captions is supported;
  • crefs: for comments (no input syntax available), use HTML comments: <!-- ... -->;
Acknowledgements The following people have helped to make Pandoc2rfc what it is today: Benno Overeinder, Erlend Hamnaberg, Matthijs Mekking, Trygve Laugstøl. This document was prepared using Pandoc2rfc.
Pandoc Constructs So, what syntax do you need to use to get the correct output? Well, it is just Pandoc. The best introduction to the Pandoc style is given in this README from Pandoc itself. For convenience we list the most important ones in the following sections.
Paragraph Paragraphs are separated with an empty line.
Section Just use the normal sectioning commands available in Pandoc, for instance:
Converts to: <section title="Section1 One" anchor="section1-one"> If you have another section that is also named "Section1 One", that anchor will be called "section1-one-1", but only when the sections are in the same source file! Referencing the section is done with see [](#section1-one), as in see .
List Styles A good number of styles are supported.
Symbol
Converts to <list style="symbol">:
  • Item one;
  • Item two.
Number
Converts to <list style="numbers">:
  1. Item one;
  2. Item two.
Empty Using the default list markers from Pandoc:
Converts to <list style="empty">:
  • Item one;
  • Item two.
Roman Use the supported Pandoc syntax:
Converts to <list style="format %i.">:
  1. Item one;
  2. Item two.
If you use uppercase Roman numerals, they convert to a different style:
Yields <list style="format (%d) ">:
  1. Item one;
  2. Item two.
Letter A numbered list.
Converts to <list style="letters">:
  1. Item one;
  2. Item two.
Uppercasing the letters works too (note two spaces after the letter.
Becomes:
  1. Item one;
  2. Item two.
Hanging This is more like a description list, so we need to use:
Converts to: <list style="hanging"> and <t hangText="First item that..."> If you want a newline after the hangTexts, search for the string OPTION in transform.xsl and uncomment it.
Figure/Artwork Indent the paragraph with 4 spaces.
Converts to: <figure><artwork> ... Note that xml2rfc supports a caption with <artwork>. Pandoc does not support this, but Pandoc2rfc does. If you add a @Figure: some text as the last line, the artwork gets a title attribute with the text after @Figure:. It will also be possible to reference the artwork. If a caption is supplied the artwork will be centered. If a caption is needed but the figure should not be centered use @figure:\.
References The reference anchor attribute will be: fig: + first 10 (normalized) characters from the caption. Where normalized means:
  • Take the first 10 characters of the caption (i.e. this is the text after the string @Figure:);
  • Spaces and single quotes (') are translated to a minus -;
  • Uppercase letters translated to lowercase.
So the first artwork with a caption will get fig:a-minimal- as a reference. See for instance . This anchoring is completely handled from within the xslt. Note that duplicate anchors are an XML validation error which will make xml2rfc fail.
Block Quote Any paragraph like:
quoted text ]]>
Converts to: <t><list style="empty"> ... paragraph, making it indented.
References
External Any reference like:
Converts to: <ulink target="URI">Click here ...
Internal Any reference like:
Converts to: <link target="localid">Click here ... For referring to RFCs (for which you manually need add the reference source in the template, with an external XML entity), you can just use:
And it does the right thing. Referencing sections is done with:
The word 'Section' is inserted automatically: ... see ... For referencing figures/artworks see . For referencing tables see .
Spanx Styles The verb style can be selected with back-tics: `text` Converts to: <spanx style="verb"> ... And the emphasis style with asterisks: *text* or underscores: _text_ Converts to: <spanx style="emph"> ... And the emphasis style with double asterisks: **text** Converts to: <spanx style="strong"> ...
Tables A table can be entered as:
A caption describing the figure describing the table.
Is translated to <texttable> element in xml2rfc. You can choose multiple styles as input, but they all are converted to the same style (plain <texttable>) table in xml2rfc. The column alignment is copied over to the generated XML.
References The caption is always translated to a title attribute. If a table has a caption, it will also get a reference. The reference anchor attribute will be: tab- + first 10 (normalized) characters from the caption. Where normalized means:
  • Take the first 10 characters of the caption (i.e. this is the text after the string Table:);
  • Spaces and single quotes (') are translated to a minus -;
  • Uppercase letters translated to lowercase.
So the first table with a caption will get tab-a-caption- for reference use. See for instance This anchoring is completely handled from within the xslt. Note that duplicate anchors are an XML validation error which will make xml2rfc fail.
Indexes The footnote syntax of Pandoc is slightly abused to support an index. Footnotes are entered in two steps, you have a marker in the text, and later you give actual footnote text. Like this:
We re-use this syntax for the <iref> tag. The above text translates to:
]]>
Sub items are also supported. Use an exclamation mark (!) to separate them:
Usage guidelines
Working with multiple files As an author you will probably break up a draft in multiple files, each dealing with a subject or section. When doing so sections with the same title will clash with each other. Pandoc can deal with this situation, but only if the different sections are in the same file or processed in the same Pandoc run. Concatenating the different section files before processing them is a solution to this problem. You can, for instance, amend the Makefile and add something like this:
allsections.pdc ]]>
And then process allsection.pdc in the normal way.
Setting the title If you use double quotes in the documents title in the docName attribute, like:
]]>
The Makefile will pick this up automatically and make a symbolic link:
draft.txt ]]>
This makes uploading the file to the i-d tracker a bit easier.
Uploading the XML/txt The draft.xml target will generate an XML file with all XML included, so you can upload just one file to the I-D tracker.
VIM syntax highlighting If you are a VIM user you might be interested in a syntax highlighting file (see ) that slightly lightens up your reading experience while viewing a draft.txt from VIM.
Security Considerations This document raises no security issues.
IANA Considerations This document has no actions for IANA.
Informative References VIM syntax file for RFCs and I-Ds Atoom Inc.
miek@miek.nl
Normative References Key words for use in RFCs to Indicate Requirement Levels Harvard University
1350 Mass. Ave. Cambridge MA 02138 - +1 617 495 3864 sob@harvard.edu
General keyword In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. Authors who follow these guidelines should incorporate this phrase near the beginning of their document:
  • The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.
Note that the force of these words is modified by the requirement level of the document in which they are used.
DNSSEC Operational Practices This document describes a set of practices for operating the DNS with security extensions (DNSSEC). The target audience is zone administrators deploying DNSSEC.</t><t> The document discusses operational aspects of using keys and signatures in the DNS. It discusses issues of key generation, key storage, signature generation, key rollover, and related policies.</t><t> This document obsoletes RFC 2541, as it covers more operational ground and gives more up-to-date requirements with respect to key sizes and the new DNSSEC specification. This memo provides information for the Internet community.
Tests This appendix consists out of a few tests that should all render to proper xml2rfc XML.
A Very Long Title Considerations With Regards to the Already Deployed Routing Policy Test a very long title.
Markup in heading This is discarded by xml2rfc.
Blockquote
  • This is a blockquote, how does it look?
Verbatim code blocks
Reference Tests Refer to RFC 2119 if you will. Or maybe you want to inspect in again. Or you might want to Click here.
Spanx Tests
  • underscores: underscores
  • asterisks: asterisks
  • double asterisks: double asterisks
  • backticks: backticks
List Tests
  1. First we do
  2. And then
    • item 1
    • item 2
And the other around.
  • First we do
  • Then
    1. Something
    2. Another thing
Description lists:
Item to explain:
It works because of herbs.
Another item to explain:
More explaining. Multiple paragraphs in such a list.
lists in description lists.
Item to explain:
It works because of
  1. One
  2. Two
Another item to explain:
More explaining
Item to explain:
It works because of
  1. One1
  2. Two1
    • Itemize list
    • Another item
Another item to explain again:
More explaining
list with description lists.
  1. More
    Item to explain:
    Explanation ...
    Item to explain:
    Another explanation ...
  2. Go'bye
Multiple paragraphs in a list.
  1. This is the first bullet point and it needs multiple paragraphs... ... to be explained properly.
  2. This is the next bullet. New paragraphs should be indented with 4 four spaces.
  3. Another item with some artwork, indented by 8 spaces.
  4. Final item.
xml2rfc does not allow this, so the second paragraph is faked with a
]]>
Ordered lists.
  1. First item
  2. Second item
A lowercase roman list:
  1. Item 1
  2. Item 2
An uppercase roman list.
  1. Item1
  2. Item2
  3. Item 3
And default list markers. Some surrounding text, to make it look better.
  • First item. Use lot of text to get a real paragraphs sense. First item. Use lot of text to get a real paragraphs sense. First item. Use lot of text to get a real paragraphs sense. First item. Use lot of text to get a real paragraphs sense.
  • Second item. So this is the second para in your list. Enjoy;
  • Another item.
Text at the end. Lowercase letters list.
  1. First item
  2. Second item
Uppercase letters list.
  1. First item
  2. Second item
And artwork in a description list.
Item1:
Tell something about it. Tell something about it. Tell something about it. Tell something about it. Tell something about it. Tell something about it.
Tell some more about it. Tell some more about it. Tell some more about it.
Item2:
Another description
List with a sublist with a paragraph above the sublist
  1. First Item
  2. Second item
  3. Third item A paragraph that comes first
    1. But what do you know
    2. This is another list
Table Tests Demonstration of simple table syntax.
Right Left Center Default
12 12 12 12
123 123 123 123
1 1 1 1
Here's the caption. It, too, may span multiple lines. This is a multiline table. This is verbatim text.
Centered Header Default Aligned Right Aligned Left Aligned
First row 12.0 Example of a row that spans multiple lines.
Second row 5.0 Here's another one. Note the blank line between rows.
Sample grid table.
Fruit Price Advantages
Bananas $1.34 built-in wrapper
Oranges $2.10 cures scurvy
Grid tables without a caption
Fruit Price Advantages
Bananas $1.34 built-in wrapper
Oranges $2.10 cures scurvy
This table has no caption, and therefor no reference. But you can refer to some of the other tables, with for instance:
Which will become "See ". We should also be able to refer to the table numbers directly, to say things like 'Look at Tables , and .'
Numbered examples This is another example:
  1. Another bla bla..
as (1) shows...
Figure tests
This is the caption, with text in `typewriter`. Which isnt converted to a <spanx> style, because this is copied as-is.
And how a figure that is not centered, do to using figure and not Figure.
A non centered figure.
Test the use of @title:
Verse tests This is a verse text This is another line
xml2rfc-2.9.6/tests/valid/status_ietf_bcp_yes.nroff0000644000175000017500000000137012336226773023236 0ustar henrikhenrik00000000000000.pl 10.0i .po 0 .ll 7.2i .lt 7.2i .nr LL 7.2i .nr LT 7.2i .hy 0 .ad l .ds LH RFC 9999 .ds CH Abbreviated Title .ds RH December 2010 .ds LF Doe .ds CF Best Current Practice .ds RF FORMFEED[Page %] .ti 0 Status of This Memo .in 3 This memo documents an Internet Best Current Practice. This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on BCPs is available in Section 2 of RFC 5741. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc9999.xml2rfc-2.9.6/tests/valid/top_draft.txt0000644000175000017500000000114112336226773020663 0ustar henrikhenrik00000000000000 Network Working Group J. Doe, Ed. Internet-Draft Company Intended status: Informational J. Roe Expires: June 13, 2011 D. Doe P. Coe Q. Coe Company December 10, 2010 xml2rfc-2.9.6/tests/valid/slashbreak.raw.txt0000644000175000017500000000116213113036121021567 0ustar henrikhenrik00000000000000 The RFC Editor has asked that we provide a list of items for which there will never be a break around the slash. The test says that PDF/A and S/MIME should not be broken when they occur. We also deal with the possiblity of some long items such as this/is/a/long/test which will not break either. We only match exact items however so PDF/A/3 will be broken as the algorithm currently stands. What about addresses: 192.168.20.0/16, 192.168.0.0/24, 192.168.0.0/30, and prefix length indications like /48 /56 /64 /72 /80 /88 /96 and so on? These should not be broken after the forward slash. xml2rfc-2.9.6/tests/valid/texttable_full.nroff0000644000175000017500000001221612336226773022217 0ustar henrikhenrik00000000000000.in 3 Table\0Tester .in 0 .nf +--------------+--------+--------------------------+ | C1 | C2 | C3 | +--------------+--------+--------------------------+ | 12 | 12 | 12 | +--------------+--------+--------------------------+ .fi .in 3 .in 0 .nf +------------------+-----------+------------------------------------+ | C1 | C2 | C3 | +------------------+-----------+------------------------------------+ | 12 | 12 | 12 | +------------------+-----------+------------------------------------+ .fi .in 3 .in 0 .nf +----+----+----+ | C1 | C2 | C3 | +----+----+----+ | 12 | 12 | 12 | +----+----+----+ .fi .in 3 Test #1 \%- table_max_chars == sum(longest_words) .in 0 .nf 12345678901 12345678901 12345678901 1234567890 1234567890 12345678901 .fi .in 3 Test #2 \%- table_max_chars == sum(inf) .in 0 .nf 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 .fi .in 3 Test #3 \%- table_max_chars < sum(longest_words) .in 0 .nf +-------+----------+-----------+-----------+-----------+------------+ | 12345 | 12345678 | 123456789 | 123456789 | 123456789 | 1234567890 | | 67890 | 9012 | 012 | 012 | 012 | 12 | | 12 | | | | | | +-------+----------+-----------+-----------+-----------+------------+ .fi .in 3 .ce 1 Steal from columns with % and em widths .in 0 .nf +--------+----------+-----------+----------+-----------+------------+ | 123456 | 12345678 | 123456789 | 12345678 | 123456789 | 1234567890 | | 789012 | 9012 | 012 | 9012 | 012 | 12 | +--------+----------+-----------+----------+-----------+------------+ .fi .in 3 .ce 1 Steal from relative widths .in 0 .nf +----------+----------+----------+----------+-----------+-----------+ | 12345678 | 12345678 | 12345678 | 12345678 | 123456789 | 123456789 | | 9012 | 9012 | 9012 | 9012 | 012 | 012 | +----------+----------+----------+----------+-----------+-----------+ .fi .in 3 .ce 1 Steam from unspecified widths Test #4 \%- table_max_chars >= sum(ttcol_widths) .in 0 .nf +----------+----------+----------+----------+----------+----------+ | 123 5678 | 123 5678 | 123 5678 | 123 5678 | 123 5678 | 123 5678 | +----------+----------+----------+----------+----------+----------+ .fi .in 3 table_max_chars > sum(mnsc) .in 0 .nf +----------+----------+----------+----------+-----------+-----------+ | 123 | 123 | 123 | 123 | 123 | 123 | | 567890 | 567890 | 567890 | 567890 | 567890 | 567890 | | 2345 | 234 | 234 | 234 | 234 | 234 | +----------+----------+----------+----------+-----------+-----------+ .fi .in 3 Test #6 \%- table_max_chars == sum(mnsc) .in 0 .nf 123 5678901 123 5678901 123 5678901 123 567890 123 567890 123 56789 .fi .in 3 Test #7 table_max_chars > sum(mnsb) .in 0 .nf ------------- ---------- ----------- ---------- ---------- ---------- 123 5678901 123 123 5678901 123 567890 123 567890 123 567890 5678901 .fi .in 3 Test #8 table_max_chars == sum(mnsb) .in 0 .nf +-----------+-----------+-----------+-----------+----------+--------+ | 123 | 123 | 123 | 123 | 123 | 123 | | 567890 | 567890 | 567890 | 567890 | 567890 | 567890 | | 23456 | 23456 | 23456 | 23456 | 23456 | 23456 | +-----------+-----------+-----------+-----------+----------+--------+ .fi .in 3 Test #9 table_max_chars > sum(mnsa) .in 0 .nf +----------+----------+--------+-----------+------------+-----------+ | 123 | 123 | 123 | 123456789 | 1234567890 | 123 | | 567890 | 567890 | 567890 | 0123456 | 23456 | 567890 | | 23456 | 23456 | 23456 | | | 23456 | +----------+----------+--------+-----------+------------+-----------+ .fi .in 3 .in 0 .nf +------------+-----------+-----------+-----------+--------+---------+ | 123 567890 | 123 | 123 | 123 | 123 | 123 | | 23456 | 567890 | 567890 | 567890 | 567890 | 5678901 | | | 23456 | 23456 | 23456 | 23456 | 3456 | +------------+-----------+-----------+-----------+--------+---------+ .fi .in 3 Grow from max words to requested lengths .in 0 .nf +-----------+----------+-----------+-----------+-----------+--------+ | 123 | 123 | 123 | 123 | 123 | 123 | | 567890 | 567890 | 567890 | 567890 | 567890 | 567890 | | 23456 | 23456 | 23456 | 23456 | 23456 | 23456 | +-----------+----------+-----------+-----------+-----------+--------+ .fi .in 3xml2rfc-2.9.6/tests/valid/rfc7911.txt0000644000175000017500000004223313151606075017775 0ustar henrikhenrik00000000000000 Internet Engineering Task Force (IETF) D. Walton Request for Comments: 7911 Cumulus Networks Category: Standards Track A. Retana ISSN: 2070-1721 E. Chen Cisco Systems, Inc. J. Scudder Juniper Networks July 2016 Advertisement of Multiple Paths in BGP Abstract This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. The essence of the extension is that each path is identified by a Path Identifier in addition to the address prefix. Status of This Memo This is an Internet Standards Track document. This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc7911. Copyright Notice Copyright (c) 2016 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Walton, et al. Standards Track [Page 1] RFC 7911 ADD-PATH July 2016 Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Specification of Requirements . . . . . . . . . . . . . . 2 2. How to Identify a Path . . . . . . . . . . . . . . . . . . . 3 3. Extended NLRI Encodings . . . . . . . . . . . . . . . . . . . 3 4. ADD-PATH Capability . . . . . . . . . . . . . . . . . . . . . 4 5. Operation . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6. Deployment Considerations . . . . . . . . . . . . . . . . . . 5 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 8. Security Considerations . . . . . . . . . . . . . . . . . . . 6 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 6 9.1. Normative References . . . . . . . . . . . . . . . . . . 6 9.2. Informative References . . . . . . . . . . . . . . . . . 7 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 8 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 8 1. Introduction The BGP specification [RFC4271] defines an Update-Send Process to advertise the routes chosen by the Decision Process to other BGP speakers. No provisions are made to allow the advertisement of multiple paths for the same address prefix or Network Layer Reachability Information (NLRI). In fact, a route with the same NLRI as a previously advertised route implicitly replaces the previous advertisement. This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. The essence of the extension is that each path is identified by a Path Identifier in addition to the address prefix. The availability of the additional paths can help reduce or eliminate persistent route oscillations [RFC3345]. It can also help with optimal routing and routing convergence in a network by providing potential alternate or backup paths, respectively. 1.1. Specification of Requirements The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. Walton, et al. Standards Track [Page 2] RFC 7911 ADD-PATH July 2016 2. How to Identify a Path As defined in [RFC4271], a path refers to the information reported in the Path Attribute field of an UPDATE message. As the procedures specified in [RFC4271] allow only the advertisement of one path for a particular address prefix, a path for an address prefix from a BGP peer can be keyed on the address prefix. In order for a BGP speaker to advertise multiple paths for the same address prefix, a new identifier (termed "Path Identifier" hereafter) needs to be introduced so that a particular path for an address prefix can be identified by the combination of the address prefix and the Path Identifier. The assignment of the Path Identifier for a path by a BGP speaker is purely a local matter. However, the Path Identifier MUST be assigned in such a way that the BGP speaker is able to use the (Prefix, Path Identifier) to uniquely identify a path advertised to a neighbor. A BGP speaker that re-advertises a route MUST generate its own Path Identifier to be associated with the re-advertised route. A BGP speaker that receives a route should not assume that the identifier carries any particular semantics. 3. Extended NLRI Encodings In order to carry the Path Identifier in an UPDATE message, the NLRI encoding MUST be extended by prepending the Path Identifier field, which is of four octets. For example, the NLRI encoding specified in [RFC4271] is extended as the following: +--------------------------------+ | Path Identifier (4 octets) | +--------------------------------+ | Length (1 octet) | +--------------------------------+ | Prefix (variable) | +--------------------------------+ The usage of the extended NLRI encodings is specified in Section 5. Walton, et al. Standards Track [Page 3] RFC 7911 ADD-PATH July 2016 4. ADD-PATH Capability The ADD-PATH Capability is a BGP capability [RFC5492], with Capability Code 69. The Capability Length field of this capability is variable. The Capability Value field consists of one or more of the following tuples: +------------------------------------------------+ | Address Family Identifier (2 octets) | +------------------------------------------------+ | Subsequent Address Family Identifier (1 octet) | +------------------------------------------------+ | Send/Receive (1 octet) | +------------------------------------------------+ The meaning and use of the fields are as follows: Address Family Identifier (AFI): This field is the same as the one used in [RFC4760]. Subsequent Address Family Identifier (SAFI): This field is the same as the one used in [RFC4760]. Send/Receive: This field indicates whether the sender is (a) able to receive multiple paths from its peer (value 1), (b) able to send multiple paths to its peer (value 2), or (c) both (value 3) for the . If any other value is received, then the capability SHOULD be treated as not understood and ignored [RFC5492]. A BGP speaker that wishes to indicate support for multiple AFI/SAFIs MUST do so by including the information in a single instance of the ADD-PATH Capability. 5. Operation The Path Identifier specified in Section 3 can be used to advertise multiple paths for the same address prefix without subsequent advertisements replacing the previous ones. Apart from the fact that this is now possible, the route advertisement rules of [RFC4271] are not changed. In particular, a new advertisement for a given address prefix and a given Path Identifier replaces a previous advertisement for the same address prefix and Path Identifier. If a BGP speaker Walton, et al. Standards Track [Page 4] RFC 7911 ADD-PATH July 2016 receives a message to withdraw a prefix with a Path Identifier not seen before, it SHOULD silently ignore it. For a BGP speaker to be able to send multiple paths to its peer, that BGP speaker MUST advertise the ADD-PATH Capability with the Send/ Receive field set to either 2 or 3, and MUST receive from its peer the ADD-PATH Capability with the Send/Receive field set to either 1 or 3, for the corresponding . A BGP speaker MUST follow the procedures defined in [RFC4271] when generating an UPDATE message for a particular to a peer unless the BGP speaker advertises the ADD-PATH Capability to the peer indicating its ability to send multiple paths for the , and also receives the ADD-PATH Capability from the peer indicating its ability to receive multiple paths for the , in which case the speaker MUST generate a route update for the based on the combination of the address prefix and the Path Identifier, and use the extended NLRI encodings specified in this document. The peer SHALL act accordingly in processing an UPDATE message related to a particular . A BGP speaker SHOULD include the best route [RFC4271] when more than one path is advertised to a neighbor, unless it is a path received from that neighbor. As the Path Identifiers are locally assigned, and may or may not be persistent across a control plane restart of a BGP speaker, an implementation SHOULD take special care so that the underlying forwarding plane of a "Receiving Speaker" as described in [RFC4724] is not affected during the graceful restart of a BGP session. 6. Deployment Considerations The extension proposed in this document provides a mechanism for a BGP speaker to advertise multiple paths over a BGP session. Care needs to be taken in its deployment to ensure consistent routing and forwarding in a network [ADDPATH]. The only explicit indication that the encoding described in Section 3 is in use in a particular BGP session is the exchange of Capabilities described in Section 4. If the exchange is successful [RFC5492], then the BGP speakers will be able to process all BGP UPDATES properly, as described in Section 5. However, if, for example, a packet analyzer is used on the wire to examine an active BGP session, it may not be able to properly decode the BGP UPDATES because it lacks prior knowledge of the exchanged Capabilities. Walton, et al. Standards Track [Page 5] RFC 7911 ADD-PATH July 2016 When deployed as a provider edge router or a peering router that interacts with external neighbors, a BGP speaker usually advertises at most one path to the internal neighbors in a network. In the case where the speaker is configured to advertise multiple paths to the internal neighbors, and additional information is needed for the application, the speaker could use attributes such as the Edge_Discriminator attribute [FAST]. The use of that type of additional information is outside the scope of this document. 7. IANA Considerations IANA has assigned the value 69 for the ADD-PATH Capability described in this document. This registration is in the "Capability Codes" registry. 8. Security Considerations This document defines a BGP extension that allows the advertisement of multiple paths for the same address prefix without the new paths implicitly replacing any previous ones. As a result, multiple paths for a large number of prefixes may be received by a BGP speaker, potentially depleting memory resources or even causing network-wide instability, which can be considered a denial-of-service attack. Note that this is not a new vulnerability, but one that is present in the base BGP specification [RFC4272]. The use of the ADD-PATH Capability is intended to address specific needs related to, for example, eliminating route oscillations that were induced by the MULTI_EXIT_DISC (MED) attribute [STOP-OSC]. While describing the applications for the ADD-PATH Capability is outside the scope of this document, users are encouraged to examine their behavior and potential impact by studying the best practices described in [ADDPATH]. Security concerns in the base operation of BGP [RFC4271] also apply. 9. References 9.1. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, . Walton, et al. Standards Track [Page 6] RFC 7911 ADD-PATH July 2016 [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A Border Gateway Protocol 4 (BGP-4)", RFC 4271, DOI 10.17487/RFC4271, January 2006, . [RFC4760] Bates, T., Chandra, R., Katz, D., and Y. Rekhter, "Multiprotocol Extensions for BGP-4", RFC 4760, DOI 10.17487/RFC4760, January 2007, . [RFC5492] Scudder, J. and R. Chandra, "Capabilities Advertisement with BGP-4", RFC 5492, DOI 10.17487/RFC5492, February 2009, . 9.2. Informative References [ADDPATH] Uttaro, J., Francois, P., Patel, K., Haas, J., Simpson, A., and R. Fragassi, "Best Practices for Advertisement of Multiple Paths in IBGP", Work in Progress, draft-ietf-idr- add-paths-guidelines-08, April 2016. [FAST] Mohapatra, P., Fernando, R., Filsfils, C., and R. Raszuk, "Fast Connectivity Restoration Using BGP Add-path", Work in Progress, draft-pmohapat-idr-fast-conn-restore-03, January 2013. [RFC3345] McPherson, D., Gill, V., Walton, D., and A. Retana, "Border Gateway Protocol (BGP) Persistent Route Oscillation Condition", RFC 3345, DOI 10.17487/RFC3345, August 2002, . [RFC4272] Murphy, S., "BGP Security Vulnerabilities Analysis", RFC 4272, DOI 10.17487/RFC4272, January 2006, . [RFC4724] Sangli, S., Chen, E., Fernando, R., Scudder, J., and Y. Rekhter, "Graceful Restart Mechanism for BGP", RFC 4724, DOI 10.17487/RFC4724, January 2007, . [STOP-OSC] Walton, D., Retana, A., Chen, E., and J. Scudder, "BGP Persistent Route Oscillation Solutions", Work in Progress, draft-ietf-idr-route-oscillation-stop-03, April 2016. Walton, et al. Standards Track [Page 7] RFC 7911 ADD-PATH July 2016 Acknowledgments We would like to thank David Cook and Naiming Shen for their contributions to the design and development of the extension. Many people have made valuable comments and suggestions, including Rex Fernando, Eugene Kim, Danny McPherson, Dave Meyer, Pradosh Mohapatra, Keyur Patel, Robert Raszuk, Eric Rosen, Srihari Sangli, Dan Tappan, Mark Turner, Jeff Haas, Jay Borkenhagen, Mach Chen, Denis Ovsienko, Carlos Pignataro, Meral Shirazipour, and Kathleen Moriarty. Authors' Addresses Daniel Walton Cumulus Networks 185 E. Dana Street Mountain View, CA 94041 United States of America Email: dwalton@cumulusnetworks.com Alvaro Retana Cisco Systems, Inc. Kit Creek Rd. Research Triangle Park, NC 27709 United States of America Email: aretana@cisco.com Enke Chen Cisco Systems, Inc. 170 W. Tasman Dr. San Jose, CA 95134 United States of America Email: enkechen@cisco.com John Scudder Juniper Networks 1194 N. Mathilda Ave Sunnyvale, CA 94089 United States of America Email: jgs@juniper.net Walton, et al. Standards Track [Page 8] xml2rfc-2.9.6/tests/valid/texttable_small_none.txt0000644000175000017500000000012412336226774023105 0ustar henrikhenrik00000000000000 column A column B cell 1A cell 1B cell 2A cell 2B cell 3A cell 3Bxml2rfc-2.9.6/tests/valid/utf8.v2v3.xml0000644000175000017500000000250313237622212020337 0ustar henrikhenrik00000000000000 Put Your Internet Draft Title Company
Springfield IL US jdoe@example.com
Insert an abstract: MANDATORY. This template is for creating an Internet-Draft. With some out of scope characters in Chinese, by Xing Xing, 这里是中文译本
Some unicode strings Text body needs to deal with funny characters Pure out of scope 这里是中文译本 Some re-mapped characters are ¢ or © More re-mapped characters are ˜ and € and ^
xml2rfc-2.9.6/tests/valid/rfc6635.txt0000644000175000017500000013605113237442436020005 0ustar henrikhenrik00000000000000 Internet Architecture Board (IAB) O. Kolkman, Ed. Request for Comments: 6635 Obsoletes: 5620 J. Halpern, Ed. Category: Informational Ericsson ISSN: 2070-1721 IAB June 2012 RFC Editor Model (Version 2) Abstract The RFC Editor model described in this document divides the responsibilities for the RFC Series into three functions: the RFC Series Editor, the RFC Production Center, and the RFC Publisher. Internet Architecture Board (IAB) oversight via the RFC Series Oversight Committee (RSOC) is described, as is the relationship between the IETF Administrative Oversight Committee (IAOC) and the RSOC. This document reflects the experience gained with "RFC Editor Model (Version 1)", documented in RFC 5620, and obsoletes that document. Status of This Memo This document is not an Internet Standards Track specification; it is published for informational purposes. This document is a product of the Internet Architecture Board (IAB) and represents information that the IAB has deemed valuable to provide for permanent record. Documents approved for publication by the IAB are not candidates for any level of Internet Standard; see Section 2 of RFC 5741. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc6635. Copyright Notice Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Kolkman, et al. Informational [Page 1] RFC 6635 RFC Editor Model (Version 2) June 2012 Table of Contents 1. Introduction ....................................................3 1.1. The RFC Editor Function ....................................3 2. RFC Editor Model ................................................4 2.1. RFC Series Editor ..........................................7 2.1.1. Strategic Leadership and Management of the Publication and Production Functions ................8 2.1.2. Representation of the RFC Series ....................8 2.1.2.1. Representation to the IETF .................8 2.1.2.1.1. Volunteerism ....................9 2.1.2.1.2. Policy Authority ................9 2.1.2.2. External Representation ....................9 2.1.3. Development of RFC Production and Publication ......10 2.1.4. Development of the RFC Series ......................10 2.1.5. Workload ...........................................11 2.1.6. Qualifications .....................................11 2.1.7. Conflict of Interest ...............................12 2.2. RFC Production Center .....................................12 2.3. RFC Publisher .............................................13 3. Committees .....................................................14 3.1. RFC Series Oversight Committee (RSOC) .....................14 3.1.1. RSOC Composition ...................................15 4. Administrative Implementation ..................................16 4.1. Vendor Selection for the Production and Publisher Functions .................................................17 4.2. Budget ....................................................17 4.3. Disagreements among Entities Related to the RFC Editor ....18 4.4. Issues with Contractual Impact ............................19 5. IANA Considerations ............................................19 6. Security Considerations ........................................19 7. Acknowledgments ................................................20 8. References .....................................................21 8.1. Normative References ......................................21 8.2. Informative References ....................................21 Kolkman, et al. Informational [Page 2] RFC 6635 RFC Editor Model (Version 2) June 2012 1. Introduction The IAB, on behalf of the Internet technical community, is concerned with ensuring the continuity of the RFC Series, orderly RFC Editor succession, RFC quality, and RFC document accessibility. The IAB is also sensitive to the concerns of the IETF Administrative Oversight Committee (IAOC) about providing the necessary services in a cost- effective and efficient manner. The contemporary RFC Editor model [RFC5620] was first approved in October 2008, and our understanding of the model has evolved with our experience since. During the implementation of version 1 of the model [RFC5620], it was quickly realized that the role of the RFC Series Editor (RSE) and the oversight responsibilities needed to be structured differently. In order to gain experience with "running code", a transitional RSE was hired who analyzed the managerial environment and provided recommendations. This was followed by the appointment of an acting RSE, who ably managed the series while work was undertaken to select and hire a permanent RSE. This version of the model is based on the recommendations of both temporary RFC Series Editors and the extensive discussion in the IETF community, on the rfc-interest list, and within the IAB. As such, this document obsoletes [RFC5620]. This document, and the resulting structures, will be modified as needed through normal procedures. The RSE, and the IAB, through the RFC Oversight Committee (see Section 3.1), will continue to monitor discussions within the community about potential adjustments to the RFC Editor model and recognize that the process described in this document may need to be adjusted to align with any changes that result from such discussions; hence, the version number in the title. The IAB and IAOC maintain their chartered responsibility as defined in [RFC2850] and [RFC4071]. 1.1. The RFC Editor Function The RFC Series is described in [RFC4844]. Its Section 3.1 defines "RFC Editor": Originally, there was a single person acting as editor of the RFC Series (the RFC Editor). The task has grown, and the work now requires the organized activity of several experts, so there are RFC Editors, or an RFC Editor organization. In time, there may be multiple organizations working together to undertake the work required by the RFC Series. For simplicity's sake, and without Kolkman, et al. Informational [Page 3] RFC 6635 RFC Editor Model (Version 2) June 2012 attempting to predict how the role might be subdivided among them, this document refers to this collection of experts and organizations as the "RFC Editor". The RFC Editor is an expert technical editor and series editor, acting to support the mission of the RFC Series. As such, the RFC Editor is the implementer handling the editorial management of the RFC Series, in accordance with the defined processes. In addition, the RFC Editor is expected to be the expert and prime mover in discussions about policies for editing, publishing, and archiving RFCs. RFC 4844 does not explore the internal organization of the RFC Editor. However, RFC 4844 envisions changes in the RFC Editor organizational structure. There have been several iterations on efforts to improve and clarify this structure. These have been led by the IAB, in consultation with the community and many leadership bodies within the community. This first resulted in the publication of [RFC5620] and then in further discussions leading to this document. Some of the details on this evolution can be found below. In undertaking this evolution, the IAB considered changes that increase flexibility and operational support options, provide for the orderly succession of the RFC Editor, and ensure the continuity of the RFC Series, while maintaining RFC quality, maintaining timely processing, ensuring document accessibility, reducing costs, and increasing cost transparency. The model set forth below describes the internal organization of the RFC Editor, while remaining consistent with RFC 4844. Note that RFC 4844 uses the term "RFC Editor function" or "RFC Editor" as the collective set of responsibilities for which this memo provides a model for internal organization. This memo defines the term "RFC Series Editor" or "Series Editor" for one of the organizational components. 2. RFC Editor Model The RFC Editor model divides the responsibilities for the RFC Series into the following components: o RFC Series Editor (RSE) o RFC Production Center o RFC Publisher Kolkman, et al. Informational [Page 4] RFC 6635 RFC Editor Model (Version 2) June 2012 The structure and relationship of the components of the RFC Series production and process is schematically represented by the figure below. The picture does not depict oversight and escalation relations. It does include the streams and their managers (which are not part of the RFC Series Editor, the RFC Production Center, or Publisher facilities) in order to more fully show the context in which the RFC Series Editor operates. Kolkman, et al. Informational [Page 5] RFC 6635 RFC Editor Model (Version 2) June 2012 +-------------+ | | +--------------+ IAB <------------+ | | | | | |=============| | | | | | | | RSOC <------------+ | | | | | +-------+-----+ +-----+-----+ | | | | | +...........|.........+ | Community | | . | . | at | | . +-------V-----+ . | Large | | . | | . | | | . | RFC | . +-----+-----+ | . | Series | . | | . | Editor <------------+ | . | | . | . +-+---------+-+ . | . | | . +-------------+ +-----V-------+ . +--V--+ +--V--+ . +-----+ | | | | . | | | | . | | | Independent | | Independent | . | RFC | | | . | E | | Authors +--> Submission +-----> | | | . | n | | | | Editor | . | P | | | . | d | | | | | . | r | | RFC | . | | +-------------+ +-------------+ . | o | | | . | U | +-------------+ +-------------+ . | d | | P | . | s | | | | | . | u | | u | . | e | | IAB +--> IAB +-----> c | | b | . | r | | | | | . | t | | l | . | s | +-------------+ +-------------+ . | i +---> i +--------> | +-------------+ +-------------+ . | o | | s | . | & | | | | | . | n | | h | . | | | IRTF +--> IRSG +---->| | | e | . | R | | | | | . | C | | r | . | e | +-------------+ +-------------+ . | e | | | . | a | +-------------+ +-------------+ . | n | | | . | d | | | | | . | t | | | . | e | | IETF +--> IESG +-----> e | | | . | r | | | | | . | r | | | . | s | +-------------+ +-------------+ . +-----+ +-----+ . +-----+ . . +..... RFC Editor ....+ Structure of RFC Series Production and Process Figure 1 Kolkman, et al. Informational [Page 6] RFC 6635 RFC Editor Model (Version 2) June 2012 In this model, documents are produced and approved through multiple document streams. The stream manager for each stream is responsible for the content of that stream. The four streams that now exist are described in [RFC4844]. The RFC Editor function is responsible for the packaging and distribution of the documents. As such, documents from these streams are edited and processed by the Production Center and published by the Publisher. The RFC Series Editor will exercise strategic leadership and management over the activities of the RFC Publisher and the RFC Production Center (both of which can be seen as back-office functions) and will be the entity that: o Represents the RFC Series and the RFC Editor Function within the IETF and externally. o Leads the community in the design of improvements to the RFC Series. o Is responsible for planning and seeing to the execution of improvements in the RFC Editor production and access processes. o Is responsible for the content of the rfc-editor.org web site, which is operated and maintained by the RFC Publisher. o Is responsible for developing consensus versions of vision and policy documents. These documents will be reviewed by the RFC Series Oversight Committee (Section 3.1) and subject to its approval before final publication. These responsibilities are defined below, although the specific work items under them are a matter for the actual employment contract and its Statement of Work (SOW). The IAB and IAOC maintain their chartered responsibility as defined in [RFC2850] and [RFC4071]. More details on the oversight by the IAB via the RFC Series Oversight Committee (RSOC) can be found in Section 3.1. For example, the RSE does not have the direct authority to hire or fire RFC Editor contractors or personnel. 2.1. RFC Series Editor The RFC Series Editor is the individual with overall responsibility for the quality, continuity, and evolution of the RFC Series. The RSE is appointed by the IAB, but formally hired by the IAOC. The IAB delegates the direct oversight over the RSE to the RSOC, which it appoints. Kolkman, et al. Informational [Page 7] RFC 6635 RFC Editor Model (Version 2) June 2012 The RSE is expected to cooperate closely with the IAOC and the stream managers. 2.1.1. Strategic Leadership and Management of the Publication and Production Functions With respect to the RFC Publisher and Production Center functions, the RSE provides input to the IASA budget, SOWs, and manages vendor selection processes. The RSE performs annual reviews of the RFC Production Center and Publisher function, which are then provided to the RSOC, the IASA, and the community. Normally, private financial details would not be included in a public version unless the IAOC concludes it is necessary to make such information public. The RSE is responsible for the performance of the RFC Production Center and Publisher. The RSE is responsible for issues that go beyond the RFC Production Center or Publisher functions, such as cross-stream coordination of priorities. Issues that require changes to the budget or contracts shall be brought to the attention of the IAD by the RSE. The RSE is also responsible for creating documentation and structures that will allow for continuity of the RFC Series in the face of changes in contracts and personnel. Vendor selection for the RFC Production Center and Publisher functions is done in cooperation with the streams and under final authority of the IASA. Details on this process can be found in Section 4.1. 2.1.2. Representation of the RFC Series The RSE is the primary representative of the RFC Series. This representation is important both internally, relative to the IETF, and externally. 2.1.2.1. Representation to the IETF The RSE is the primary point of contact to the IETF on matters relating to the RFC Series in general, or policy matters relating to specific documents. Issues of practical details in the processing of specific documents are generally worked through directly with the RFC Production Center staff. This includes providing suitable reports to the community at large, providing email contact for policy questions and inputs, and enabling and participating in suitable on-line forums for discussion of issues related to the RFC Series. Kolkman, et al. Informational [Page 8] RFC 6635 RFC Editor Model (Version 2) June 2012 Due to the history and nature of the interaction between the RSE and the IETF, certain principles, described in the following subsections, must be understood and adhered to by the RSE in his or her interactions with the community. These apply to the representation function, as well as to the leadership the RSE provides for production and series development. 2.1.2.1.1. Volunteerism The vast majority of Internet technical community work is led, initiated, and done by community volunteers, including oversight, policy making, and direct production of, for example, many software tools. The RSE, while not a volunteer, is dependent upon these volunteer participants. Also, the spirit of the community is heavily focused on and draws from these volunteers. As such, the RSE needs to support the vitality and effectiveness of volunteer participation. 2.1.2.1.2. Policy Authority All decisions are to be made in the overall interest of the broader Internet community. The RSE is responsible for identifying materially concerned interest groups within the Internet community and reaching out to them. Those interest groups include at least the IETF community, the IRTF community, the network research community, and the network operations community. Other interest groups might also be materially interested. The RSE must consult with the community on policy issues. The RSE works with the community to achieve policy that meets the overall quality, continuity, and evolution goals the RSE is charged with meeting. As described in Section 3.1, the RSE reports the results of such interactions to the RSOC, including a description of the outreach efforts and the specific recommendations on policy. This enables the RSOC to provide the oversight the IAB is required to apply, as well as to confirm that the Internet community has been properly consulted and considered in making policy. 2.1.2.2. External Representation From time to time, individuals or organizations external to the IETF need a contact person to talk to about the RFC Series. The RSE, or the RSE's designate, serves this role. Over time, the RSE should determine what, if any, means should be employed to increase end-user awareness of the series, to reinforce the stature of the series, and to provide the contact point for outside parties seeking information on the series or the Editor. Kolkman, et al. Informational [Page 9] RFC 6635 RFC Editor Model (Version 2) June 2012 2.1.3. Development of RFC Production and Publication Closely related to providing strategic leadership and management to the RFC Production Center and Publisher functions is the need to develop and improve those functions. The RSE is responsible for ensuring that such ongoing development takes place. This effort must include the dimensions of document quality, timeliness of production, and accessibility of results. It must also specifically take into account issues raised by the IETF community, including all the streams feeding into the RFC Editor function. 2.1.4. Development of the RFC Series In order to develop the RFC Series, the RSE is expected to develop a relationship with the Internet technical community. The Editor is expected to engage with the Internet technical community in a process of articulating and refining a vision for the series and its continuous evolution. The RSE is also expected to engage other users of the RFC Series, in particular, the consumers of these documents, such as those people who use them to specify products, write code, test behaviors, or other related activities. Concretely: The RSE is responsible for the coordination of discussion on series evolution among the series' stream participants and the broader Internet technical community. In time, the RSE is expected to develop and refine a vision for the RFC Series, including examining: * The RFC Series, as it continues to evolve. The RSE is expected to take a broad view and look for the best ways to evolve the series for the benefit of the entire Internet community. As such, the RSE may even consider evolution beyond the historical 'by engineers for engineers' emphasis; and * Its publication-technical environment, by looking at whether it should be slowly changing in terms of publishing and archiving techniques -- particularly to better serve the communities that produce and depend on the RFC Series. For example, all of those communities have been slowly changing to include a significant population of multi-lingual individuals or non- native speakers of English. Another example is that some of these constituencies also have shifted to include significant Kolkman, et al. Informational [Page 10] RFC 6635 RFC Editor Model (Version 2) June 2012 groups whose primary focus is on the constraints and consequences of network engineering, rather than a primary interest in the engineering issues themselves. For this type of responsibility, the RSE cooperates closely with the community, and operates under oversight of the RSOC: thus, ultimately, under oversight of the IAB. 2.1.5. Workload On average, the job is expected to take half of a full-time equivalent position (FTE, thus approx 20 hrs per week), with the workload per week nearing full time during IETF weeks. In addition, the job is expected to take more than 20 hours per week in the first few months of the engagement and when involved in special projects. 2.1.6. Qualifications The RFC Series Editor is a senior technology professional. The following qualifications are desired: 1. Strategic leadership and management experience fulfilling the requirements outlined in this document, the many aspects of this role, and the coordination of the overall RFC Editor process. 2. Good understanding of the English language and technical terminology related to the Internet. 3. Good communication skills. 4. Experience with editorial processes. 5. Ability to develop strong understanding of the IETF and RFC process. 6. Independent worker. 7. Willingness to, and availability for, travel. 8. The ability to work effectively in a multi-actor and matrixed environment with divided authority and responsibility similar to that described in this document. 9. Experience with and ability to participate in, and manage, activities by email and teleconferences, not just face-to-face interactions. Kolkman, et al. Informational [Page 11] RFC 6635 RFC Editor Model (Version 2) June 2012 10. Demonstrated experience in strategic planning and the management of entire operations. 11. Experience as an RFC author. 2.1.7. Conflict of Interest The RSE is expected to avoid even the appearance of conflict of interest or judgment in performing these roles. As such, the RSE is barred from having any ownership, advisory, or other relationship to the vendors executing the RFC Publisher or Production Center functions except as specified elsewhere in this document. If necessary, an exception can be made after public disclosure of those relationships and with the explicit permission of the IAB and IAOC. 2.2. RFC Production Center The RFC Production Center function is performed by a paid contractor, and the contractor's responsibilities include the following: 1. Editing inputs from all RFC streams to comply with the RFC Style Manual, under the direction of the RSE; 2. Creating records of edits performed on documents; 3. Identifying where editorial changes might have technical impact and seeking necessary clarification; 4. Engaging in dialog with authors, document shepherds, IANA, and/or stream-dependent contacts when clarification is needed; 5. Creating records of dialog with document authors; 6. Requesting advice from the RFC Series Editor as needed; 7. Providing suggestions to the RFC Series Editor as needed; 8. Providing sufficient resources to support reviews of RFC Publisher performance by the RFC Series Editor and external reviews of the RFC Editor function initiated by the IAB or IAOC; 9. Coordinating with IANA to ensure correct documentation of IANA- performed protocol registry actions; 10. Assigning RFC numbers; Kolkman, et al. Informational [Page 12] RFC 6635 RFC Editor Model (Version 2) June 2012 11. Establishing publication readiness of each document through communication with the authors, document shepherds, IANA, and/or stream-dependent contacts, and, if needed, with the RFC Series Editor; 12. Forwarding documents that are ready for publication to the RFC Publisher; 13. Forwarding records of edits and author dialog to the RFC Publisher so these can be preserved; 14. Liaising with the streams as needed. All these activities will be done under the general direction, but not day-to-day management, of the RSE and need some level of coordination with various submission streams and the RSE. The RFC Production Center contractor is to be selected through an IASA Request for Proposal (RFP) process as described in Section 4.1. 2.3. RFC Publisher The RFC Publisher responsibilities include the following: 1. Announcing and providing on-line access to RFCs. 2. Providing an on-line system to submit RFC Errata. 3. Providing on-line access to approved RFC Errata. 4. Providing backups. 5. Providing storage and preservation of records. 6. Authenticating RFCs for legal proceedings. All these activities will be done under the general direction, but not day-to-day management, of the RSE and need some level of coordination with various submission streams and the RSE. The RFC Publisher contractor is to be selected through an IASA RFP process as described in Section 4.1. Kolkman, et al. Informational [Page 13] RFC 6635 RFC Editor Model (Version 2) June 2012 3. Committees 3.1. RFC Series Oversight Committee (RSOC) The IAB is responsible for the oversight of the RFC Series and acts as a body for final conflict resolution, including the process described in Section 4.3. In order to provide continuity over periods longer than the NomCom appointment cycle [RFC3777] and assure that oversight includes suitable subject matter expertise, the IAB will establish a group that implements oversight for the IAB, the RFC Series Oversight Committee (RSOC). The RSOC will act with authority delegated from the IAB: in general, it will be the RSOC that will approve consensus policy and vision documents as developed by the RSE in collaboration with the community. While it is expected that the IAB will exercise due diligence in its supervision of the RSOC, the RSOC should be allowed the latitude to do its job without undue interference from the IAB. Therefore, it is expected that the IAB will accord RSOC reports and recommendations the benefit of the doubt. For all decisions that affect the RSE individually (e.g., hiring and firing), the RSOC prepares recommendations for the IAB, but the final decision is the responsibility of the IAB. For instance the RSOC would do the following: o perform annual reviews of the RSE and report the result of these reviews to the IAB. o manage RSE candidate selection and advise the IAB on candidate appointment (in other words, select the RSE subject to IAB approval). RSOC members are expected to recognize potential conflicts of interest and behave accordingly. For the actual recruitment and selection of the RSE, the RSOC will propose a budget for the search process. It will work with IASA to refine that budget and develop remuneration criteria and an employment agreement or contracting plans, as appropriate. The RSOC will be responsible for ensuring that the RFC Series is run in a transparent and accountable manner. The RSOC shall develop and publish its own rules of order. Kolkman, et al. Informational [Page 14] RFC 6635 RFC Editor Model (Version 2) June 2012 The initial RSOC was charged with designing and executing a solicitation, search, and selection process for the first actual (not transitional or "acting") RSE appointment. That process involved iteration on this and related documents and evaluation of various strategies and options. During the creation of this document, it was expected that the RSOC would describe the process it ultimately selected to the community. The RSOC did involve the community in interim considerations when that was likely to be of value. Following completion of the selection process, the RSOC will determine the best way to share information learned and experience gained with the community and determine how to best preserve that information for future use. 3.1.1. RSOC Composition The RSOC will operate under the authority of the IAB, with the IAB retaining final responsibility. The IAB will delegate authority and responsibility to the RSOC as appropriate and as RSOC and RSE relationships evolve. The RSOC will include people who are not current IAB members. Currently, this is aligned with the IAB program structure. The IAB will designate the membership of the RSOC with the following goals: preserving effective stability; keeping it small enough to be effective, and keeping it large enough to provide general Internet community expertise, specific IETF expertise, publication expertise, and stream expertise. Members serve at the pleasure of the IAB and are expected to bring a balance between short- and long-term perspectives. Specific input about, and recommendations of, members will be sought from the streams, the IASA, and the RSE. In addition to the members from outside of the IAB appointed to the RSOC, IAB members may participate as full members of the RSOC. Under most circumstances, there will be a specific individual IAB member appointed by the IAB as the program lead, who will be a full member of the RSOC. This member's role is distinct from any RSOC-internal organizational roles, such as would be created by the RSOC choosing to appoint a chair from among its members. Other IAB members may choose to be full members of the RSOC, with the consent of the IAB. This consent is primarily concerned with avoiding overpopulating the RSOC and providing it with relatively stable membership, which will work best if it is not too large a committee. The IAOC will appoint an individual to serve as its liaison to the RSOC. The RSE and the IAOC Liaison will serve as non-voting ex officio members of the RSOC. Either or both can be excluded from its discussions if necessary. Kolkman, et al. Informational [Page 15] RFC 6635 RFC Editor Model (Version 2) June 2012 4. Administrative Implementation The exact implementation of the administrative and contractual activities described here are a responsibility of the IETF Administrative Oversight Committee (IAOC, [RFC4071]) in cooperation with the RFC Series Editor. The authority structure is described in Figure 2 below. +----------------+ +----------------+ | | | | | IAB | | IAOC | | | | | +==========+-----+ +-+--------------+ | | . | RSOC | . | | . +----+-----+ . | . | . | ................... | . . +--------V---V----+ . | | . | RFC | . | Series | . | Editor | . | | . +--------+--------+ . | . | ................. | . . +--+----------------+ . | . | . | . | . +---V-----V--+ +--V----V---+ | RFC | | RFC | | Production | | Publisher | | Center | | | +------------+ +-----------+ Authority Structure of the RFC Series Legend: ------- IAB RFC Series Oversight ....... IAOC Contract/Budget Oversight Figure 2 Kolkman, et al. Informational [Page 16] RFC 6635 RFC Editor Model (Version 2) June 2012 4.1. Vendor Selection for the Production and Publisher Functions As stated earlier, vendor selection is done in cooperation with the streams and under the final authority of the IAOC. The RSE owns and develops the work definition (the SOW) and participates in the IASA vendor selection process. The work definition is created within the IASA budget and takes into account the stream managers and community input. The process to select and contract for an RFC Production Center, RFC Publisher, and other RFC-related services, is as follows: o The IAOC establishes the contract process, including the steps necessary to issue an RFP when necessary, the timing, and the contracting procedures. o The IAOC establishes the Selection Committee, which will consist of the RSE, the IAD, and other members selected by the RSOC and the IAOC. The Committee shall be chaired by the RSE. o The Selection Committee selects the vendor, subject to the successful negotiation of a contract approved by the IAOC. In the event that a contract cannot be reached, the matter shall be referred to the Selection Committee for further action. o The Selection Committee may select an RFC Publisher either through the IASA RFP process or, at the Committee's option, the Committee may select the IETF Secretariat to provide RFC Publisher services, subject to negotiations in accordance with the IASA procedures. 4.2. Budget The expenses discussed in this document are not new expenses. They have been and remain part of the IETF Administrative Support Activity (IASA, [RFC4071]) budget. The RFC Series portion of the IASA budget shall include entries for the RSOC, RSE, RFC Production Center, and the RFC Publisher. The IASA budget shall also include entries for the streams, including the independent stream. The IAOC has the responsibility to approve the total RFC Editor budget (and the authority to deny it). The RSE must work within the IAOC budgetary process. Kolkman, et al. Informational [Page 17] RFC 6635 RFC Editor Model (Version 2) June 2012 The RSE is responsible for managing the RFC Editor function to operate within those budgets. If production needs change, the RSE is responsible for working with the Production Center, and where appropriate, other RFC Editor component institutions, relevant streams, and/or the RSOC to determine what the correct response should be. If they agree that a budgetary change is needed, that decision needs to be taken to the IAD and the IAOC. 4.3. Disagreements among Entities Related to the RFC Editor The RFC Series Editor and the RFC Production Center and Publisher facilities work with the various streams to produce RFCs. Disagreements may arise between these entities during the execution of the RFC Editor operations. In particular, different streams may disagree with each other, or disagree with the RFC Editor function. Potentially, even the RSOC or the IAOC could find themselves in disagreement with some aspect of the RFC Editor operations. Note that disagreements between an author and the RFC Production Center are not cross-entity issues, and they are to be resolved by the RSE, in accordance with the rest of this document. If such cross-entity disagreements arise, the community would generally hope that they can be resolved politely and directly. However, this is not always possible. At that point, any relevant party would first formally request a review and reconsideration of the decision. If the party still disagrees after the reconsideration, that party may ask the RSE to decide or, especially if the RSE is involved, the party may ask the IAB Chair (for a technical or procedural matter) to mediate or appoint a mediator to aid in the discussions, although he or she not is obligated to do so. All parties should work informally and in good faith to reach a mutually agreeable conclusion. As noted below, any such issues that involve contractual matters must be brought to the attention of the IAOC. If the IAB Chair is asked to assist in resolving the matter, the Chair may ask for advice or seek assistance from anyone the Chair deems helpful. The Chair may also alert any appropriate individuals or organizations to the existence of the issue. If such a conclusion is not possible through the above less formal processes, then the matter must be registered with the RFC Series Oversight Committee. The RSOC may choose to offer advice to the RSE or more general advice to the parties involved and may ask the RSE to defer a decision until it formulates its advice. However, if a timely decision cannot be reached through discussion, mediation, and mutual agreement, the RSE is expected to make whatever decisions are needed to ensure the smooth operation of the RFC Editor function; those decisions are final. Kolkman, et al. Informational [Page 18] RFC 6635 RFC Editor Model (Version 2) June 2012 The RSE may make final decisions unilaterally only to assure the functioning of the process, and only while there is an evaluation of current policies to determine whether they are appropriately implemented in the decision or need adjustment. In particular, it should be noted that final decisions about the technical content of individual documents are the exclusive responsibility of the stream approvers from which those documents originate, as shown in the illustration in Figure 1. If informal agreements cannot be reached, then formal RSOC review and decision making may be required. If so, the RSE must present the issues involved to the community so that the community is aware of the situation. The RSE will then report the issue to the RSOC for formal resolution by the RSOC with confirmation by the IAB in its oversight capacity. IAB and community discussion of any patterns of disputes are expected to inform future changes to RFC Series policies, including possible updates to this document. 4.4. Issues with Contractual Impact If a disagreement or decision has immediate or future contractual consequences, it falls under BCP 101 [RFC4071] and IASA; thus, the RSE must identify the issue and provide his or her advice to the IAOC; additionally, if the RSOC has provided advice, forward that advice as well. The IAOC must notify the RSOC and IAB regarding the action it concludes is required to resolve the issue based on its applicable procedures and provisions in the relevant contracts. 5. IANA Considerations This document defines several functions within the overall RFC Editor structure, and it places the responsibility for coordination of registry value assignments with the RFC Production Center. The IAOC will facilitate the establishment of the relationship between the RFC Production Center and IANA. This document does not create a new registry nor does it register any values in existing registries, and no IANA action is required. 6. Security Considerations The same security considerations as those in [RFC4844] apply. The processes for the publication of documents must prevent the introduction of unapproved changes. Since the RFC Editor maintains the index of publications, sufficient security must be in place to prevent these published documents from being changed by external Kolkman, et al. Informational [Page 19] RFC 6635 RFC Editor Model (Version 2) June 2012 parties. The archive of RFC documents, any source documents needed to recreate the RFC documents, and any associated original documents (such as lists of errata, tools, and, for some early items, originals that are not machine readable) need to be secured against any kind of data storage failure. The IAOC should take these security considerations into account during the implementation and enforcement of the RFC Editor component contracts. 7. Acknowledgments The RFC Editor model was conceived and discussed in hallways and on mailing lists. The first iteration of the text on which this document is based was first written by Leslie Daigle, Russ Housley, and Ray Pelletier. In addition to the members of the IAOC and IAB in conjunction with those roles, major and minor contributions were made by (in alphabetical order): Bob Braden, Brian Carpenter, Sandy Ginoza, Alice Russo, Joel M. Halpern, Alfred Hoenes, Paul Hoffman, John Klensin, Subramanian Moonesamy, and Jim Schaad. The IAOC members at the time this RFC Editor model was approved were (in alphabetical order): Bernard Aboba (ex officio), Eric Burger, Dave Crocker, Marshall Eubanks, Bob Hinden, Russ Housley (ex officio), Ole Jacobsen, Ray Pelletier (non-voting), and Lynn St. Amour (ex officio). The IAB members at the time the initial RFC Editor model was approved were (in alphabetical order): Loa Andersson, Gonzalo Camarillo, Stuart Cheshire, Russ Housley, Olaf Kolkman, Gregory Lebovitz, Barry Leiba, Kurtis Lindqvist, Andrew Malis, Danny McPherson, David Oran, Dave Thaler, and Lixia Zhang. In addition, the IAB included two ex officio members: Dow Street, who was serving as the IAB Executive Director, and Aaron Falk, who was serving as the IRTF Chair. The IAB members at the time the this RFC was approved were (in alphabetical order): Bernard Aboba, Ross Callon, Alissa Cooper, Spencer Dawkins, Joel Halpern, Russ Housley, David Kessens, Olaf Kolkman, Danny McPherson, Jon Peterson, Andrei Robachevsky, Dave Thaler, and Hannes Tschofenig. In addition, at the time of approval, the IAB included two ex officio members: Mary Barnes who was serving as the IAB Executive Director, and Lars Eggert, who was serving as the IRTF Chair. Kolkman, et al. Informational [Page 20] RFC 6635 RFC Editor Model (Version 2) June 2012 8. References 8.1. Normative References [RFC4844] Daigle, L. and Internet Architecture Board, "The RFC Series and RFC Editor", RFC 4844, July 2007. [RFC4071] Austein, R. and B. Wijnen, "Structure of the IETF Administrative Support Activity (IASA)", BCP 101, RFC 4071, April 2005. [RFC2850] Internet Architecture Board and B. Carpenter, "Charter of the Internet Architecture Board (IAB)", BCP 39, RFC 2850, May 2000. 8.2. Informative References [RFC5620] Kolkman, O. and IAB, "RFC Editor Model (Version 1)", RFC 5620, August 2009. [RFC3777] Galvin, J., "IAB and IESG Selection, Confirmation, and Recall Process: Operation of the Nominating and Recall Committees", BCP 10, RFC 3777, June 2004. Authors' Addresses Olaf M. Kolkman (editor) EMail: olaf@nlnetlabs.nl Joel M. Halpern (editor) Ericsson EMail: joel.halpern@ericsson.com Internet Architecture Board EMail: iab@iab.org Kolkman, et al. Informational [Page 21] xml2rfc-2.9.6/tests/valid/list_format.txt0000644000175000017500000000170012336226773021225 0ustar henrikhenrik00000000000000 First list: R1 #1 R2 #2 R3 #3 Specify the indent explicitly so that all the items line up nicely. Different list formatting characters, following what v1 supports: style="format %i": i. first item ii. second item iii. third item iv. fourth item v. 5:th item vi. 6:th item vii. 7:th item viii. 8:th item ix. 9:th item x. 10:th item xi. 11:th item xii. 12:th item xiii. 13:th item xiv. 14:th item style="format (%d)": (1) first item (2) second item (3) third item style="format %c)": a) first item b) second item c) third item style="format %C.": A. first item B. second item C. third item style="format %d.": 1. first item 2. second item 3. third item A separate line A. first sub-item B. second sub-item C. third sub-itemxml2rfc-2.9.6/tests/valid/status_ietf_std_yes.nroff0000644000175000017500000000137512336226773023271 0ustar henrikhenrik00000000000000.pl 10.0i .po 0 .ll 7.2i .lt 7.2i .nr LL 7.2i .nr LT 7.2i .hy 0 .ad l .ds LH RFC 9999 .ds CH Abbreviated Title .ds RH December 2010 .ds LF Doe .ds CF Best Current Practice .ds RF FORMFEED[Page %] .ti 0 Status of This Memo .in 3 This is an Internet Standards Track document. This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc9999.xml2rfc-2.9.6/tests/valid/list_letters.raw.txt0000644000175000017500000000030012336226773022202 0ustar henrikhenrik00000000000000 Simulating more than one paragraph in a list item using : a. First, a short item. b. Second, a longer list item. And something that looks like a separate pargraph.xml2rfc-2.9.6/tests/valid/draft-miek-test.nroff0000644000175000017500000007171313241306027022173 0ustar henrikhenrik00000000000000.\" automatically generated by xml2rfc v2.9.3a2 on 2018-02-15T13:33:11Z .pl 10.0i .po 0 .ll 7.2i .lt 7.2i .nr LL 7.2i .nr LT 7.2i .hy 0 .ad l .ds LH Internet-Draft .ds CH Pandoc2rfc Version 2 .ds RH January 2013 .ds LF Gieben .ds CF Expires July 5, 2013 .ds RF FORMFEED[Page %] .in 0 .nf RFC Beautification Working Group R. Gieben Internet-Draft Google Intended status: Informational January 1, 2013 Expires: July 5, 2013 .fi .ce 1 Writing \%I-Ds and RFCs using Pandoc and xml2rfc 2.x .ce 1 \%draft-gieben-writing-rfcs-pandoc-02 Abstract .in 3 This memo presents a technique for using Pandoc syntax as a source format for documents in the \%Internet-Drafts \%(I-Ds) and Request for Comments (RFC) series. This version is adapted to work with "xml2rfc" version 2.x. .in 0 Status of This Memo .in 3 This \%Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. \%Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as \%Internet-Drafts. The list of current \%Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. \%Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use \%Internet-Drafts as reference material or to cite them other than as "work in progress." This \%Internet-Draft will expire on July 5, 2013. .in 0 Copyright Notice .in 3 Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents \%(http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section\04.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. .bp .ti 0 Table of Contents .in 0 .nf 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Pandoc to RFC . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1. Dependencies . . . . . . . . . . . . . . . . . . . . . . 5 3. Starting a new project . . . . . . . . . . . . . . . . . . . 5 4. Supported Features . . . . . . . . . . . . . . . . . . . . . 5 5. Unsupported Features . . . . . . . . . . . . . . . . . . . . 6 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 7 7. Pandoc Constructs . . . . . . . . . . . . . . . . . . . . . . 7 7.1. Paragraph . . . . . . . . . . . . . . . . . . . . . . . . 7 7.2. Section . . . . . . . . . . . . . . . . . . . . . . . . . 7 7.3. List Styles . . . . . . . . . . . . . . . . . . . . . . . 7 7.3.1. Symbol . . . . . . . . . . . . . . . . . . . . . . . 7 7.3.2. Number . . . . . . . . . . . . . . . . . . . . . . . 8 7.3.3. Empty . . . . . . . . . . . . . . . . . . . . . . . . 8 7.3.4. Roman . . . . . . . . . . . . . . . . . . . . . . . . 8 7.3.5. Letter . . . . . . . . . . . . . . . . . . . . . . . 9 7.3.6. Hanging . . . . . . . . . . . . . . . . . . . . . . . 9 7.4. Figure/Artwork . . . . . . . . . . . . . . . . . . . . . 10 7.4.1. References . . . . . . . . . . . . . . . . . . . . . 10 7.5. Block Quote . . . . . . . . . . . . . . . . . . . . . . . 11 7.6. References . . . . . . . . . . . . . . . . . . . . . . . 11 7.6.1. External . . . . . . . . . . . . . . . . . . . . . . 11 7.6.2. Internal . . . . . . . . . . . . . . . . . . . . . . 11 7.7. Spanx Styles . . . . . . . . . . . . . . . . . . . . . . 12 7.8. Tables . . . . . . . . . . . . . . . . . . . . . . . . . 12 7.8.1. References . . . . . . . . . . . . . . . . . . . . . 12 7.9. Indexes . . . . . . . . . . . . . . . . . . . . . . . . . 13 8. Usage guidelines . . . . . . . . . . . . . . . . . . . . . . 13 8.1. Working with multiple files . . . . . . . . . . . . . . . 13 8.2. Setting the title . . . . . . . . . . . . . . . . . . . . 13 8.3. Uploading the XML/txt . . . . . . . . . . . . . . . . . . 14 8.4. VIM syntax highlighting . . . . . . . . . . . . . . . . . 14 9. Security Considerations . . . . . . . . . . . . . . . . . . . 14 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 11.1. Informative References . . . . . . . . . . . . . . . . . 14 11.2. Normative References . . . . . . . . . . . . . . . . . . 14 11.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Appendix A. Tests . . . . . . . . . . . . . . . . . . . . . . . 15 A.1. A Very Long Title Considerations With Regards to the Already Deployed Routing Policy . . . . . . . . . . . . . 15 A.2. Markup in heading . . . . . . . . . . . . . . . . . . . . 15 A.3. Blockquote . . . . . . . . . . . . . . . . . . . . . . . 15 A.4. Verbatim code blocks . . . . . . . . . . . . . . . . . . 15 A.5. Reference Tests . . . . . . . . . . . . . . . . . . . . . 15 A.6. Spanx Tests . . . . . . . . . . . . . . . . . . . . . . . 15 .bp A.7. List Tests . . . . . . . . . . . . . . . . . . . . . . . 16 A.8. Table Tests . . . . . . . . . . . . . . . . . . . . . . . 19 A.9. Numbered examples . . . . . . . . . . . . . . . . . . . . 20 A.10. Figure tests . . . . . . . . . . . . . . . . . . . . . . 20 A.11. Verse tests . . . . . . . . . . . . . . . . . . . . . . . 21 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 21 .fi .in 3 .in 4 .ti 0 1. Introduction .in 3 This document presents a technique for using Pandoc syntax as a source format for documents in the \%Internet-Drafts \%(I-Ds) and Request for Comments (RFC) series. This version is adapted to work with "xml2rfc" version 2.x. Pandoc is an "almost plain text" format and therefor particularly well suited for editing \%RFC-like documents. .in 6 Note: this document is typeset in Pandoc and does not render completely correct when reading it on github. .in 4 .ti 0 2. Pandoc to RFC .in 6 Pandoc2rfc \%-- designed to do the right thing, until it doesn't. .in 3 When writing [RFC4641] we directly wrote the XML. Needless to say it was tedious even thought the XML of xml2rfc [1] is very "light". The latest version of xml2rfc version 2 can be found here [2]. During the last few years people have been developing markup languages that are very easy to remember and type. These languages have become known as "almost plain \%text"-markup languages. One of the first was the Markdown [3] syntax. One that was developed later and incorporates Markdown and a number of extensions is Pandoc [4]. The power of Pandoc also comes from the fact that it can be translated to numerous output formats, including, but not limited to: HTML, (plain) Markdown and "docbook" XML. So using Pandoc for writing RFCs seems like a sane choice. As "xml2rfc" uses XML, the easiest way would be to create "docbook" XML and transform that using XSLT. Pandoc2rfc does just that. The conversions are, in some way amusing, as we start off with (almost) plain text, use elaborate XML and end up with plain text again. .bp .in 0 .nf +-------------------+ pandoc +---------+ | ALMOST PLAIN TEXT | ------> | DOCBOOK | +-------------------+ +---------+ | | non-existent | | xsltproc faster way | | v v +------------+ xml2rfc +---------+ | PLAIN TEXT | <-------- | XML2RFC | +------------+ +---------+ .fi .in 3 .ce 1 Figure\01: Attempt to justify Pandoc2rfc. The XML generated (the output after the "xsltproc" step in Figure\01) is suitable for inclusion in either the "middle" or "back" section of an RFC. The simplest way is to create a template XML file and include the appropriate XML: .in 0 .nf ]> Writing I-Ds and RFCs using Pandoc v2 &pandocMiddle; &pandocBack; .fi .in 3 .ce 1 Figure\02: A minimal template.xml. See the Makefile for an example of this. In this case you need to edit 3 documents: .in 7 .ti 3 1. middle.pdc \%- contains the main body of text; .ti 3 2. back.pdc \%- holds appendices and references; .bp .ti 3 3. template.xml (probably a fairly static file). .in 3 The draft ("draft.txt") you are reading now, is automatically created when you call "make". The homepage of Pandoc2rfc is this github repository [5]. .in 6 .ti 0 2.1. Dependencies .in 3 It needs "xsltproc" and "pandoc" to be installed. See the Pandoc user manual for the details [6] on how to type in Pandoc style. And ofcourse "xml2rfc" version two. When using Pandoc2rfc consider adding the following sentence to an Acknowledgements section: .in 0 .nf This document was produced using the Pandoc2rfc tool. .fi .in 3 .in 4 .ti 0 3. Starting a new project .in 3 When starting a new project with "pandoc2rfc" you'll need to copy the following files: .in 6 .ti 3 o "Makefile" .ti 3 o "transform.xslt" .ti 3 o And the above mentioned files: .in 9 .ti 6 * "middle.pdc" .ti 6 * "back.pdc" .ti 6 * "template.xml" .in 3 After that you can start editing. .in 4 .ti 0 4. Supported Features .in 6 .ti 3 o Sections with an anchor and title attributes (Section\07.2); .ti 3 o Lists .in 9 .ti 6 * style=symbols (Section\07.3.1); .ti 6 * style=numbers (Section\07.3.2); .ti 6 * style=empty (Section\07.3.3); .bp .ti 6 * style=format %i, use roman lowercase numerals, (Section\07.3.4); .ti 6 * style=format (%d), use roman uppercase numerals (Section\07.3.4); .ti 6 * style=letters \%(lower- and uppercase, Section\07.3.5); .ti 6 * style=hanging (Section\07.3.6); .in 6 .ti 3 o Figure/artwork with a title (Section\07.4); .ti 3 o Block quote this is converted to "" paragraph (Section\07.5); .ti 3 o References .in 9 .ti 6 * external (eref) (Section\07.6.1); .ti 6 * internal (xref) (Section\07.6.2), you can refer to: .in 12 .ti 9 + section (handled by Pandoc, see Section\07.6)); .ti 9 + figures (handled by XSLT, see Section\07.4.1); .ti 9 + tables (handled by XSLT, see Section\07.8.1). .in 6 .ti 3 o Citations, by using internal references; .ti 3 o Spanx style=verb, style=emph and style=strong (Section\07.7); .ti 3 o Tables with an anchor and title (Section\07.8); .ti 3 o Indexes, by using footnotes (Section\07.9). .in 4 .ti 0 5. Unsupported Features .in 6 .ti 3 o Lists inside a table ("xml2rfc" doesn't handle this); .ti 3 o Pandoc markup in the caption for figures/artwork. Pandoc markup for table captions _is_ supported; .ti 3 o crefs: for comments (no input syntax available), use HTML comments: \%""; .bp .in 4 .ti 0 6. Acknowledgements .in 3 The following people have helped to make Pandoc2rfc what it is today: Benno Overeinder, Erlend Hamnaberg, Matthijs Mekking, Trygve Laugstoel. This document was prepared using Pandoc2rfc. .in 4 .ti 0 7. Pandoc Constructs .in 3 So, what syntax do you need to use to get the correct output? Well, it is _just_ Pandoc. The best introduction to the Pandoc style is given in this README from Pandoc itself [7]. For convenience we list the most important ones in the following sections. .in 6 .ti 0 7.1. Paragraph .in 3 Paragraphs are separated with an empty line. .in 6 .ti 0 7.2. Section .in 3 Just use the normal sectioning commands available in Pandoc, for instance: .in 0 .nf # Section1 One Bla .fi .in 3 Converts to: "
" If you have another section that is also named "Section1 One", that anchor will be called \%"section1-one-1", but _only_ when the sections are in the _same_ source file! Referencing the section is done with "see \%[](#section1-one)", as in see Section\07.2. .in 6 .ti 0 7.3. List Styles .in 3 A good number of styles are supported. .in 8 .ti 0 7.3.1. Symbol .in 0 .nf A symbol list. * Item one; * Item two. .fi .in 3 .bp Converts to "": .in 6 .ti 3 o Item one; .ti 3 o Item two. .in 8 .ti 0 7.3.2. Number .in 0 .nf A numbered list. 1. Item one; 1. Item two. .fi .in 3 Converts to "": .in 7 .ti 3 1. Item one; .ti 3 2. Item two. .in 8 .ti 0 7.3.3. Empty .in 3 Using the default list markers from Pandoc: .in 0 .nf A list using the default list markers. #. Item one; #. Item two. .fi .in 3 Converts to "": .in 6 Item one; Item two. .in 8 .ti 0 7.3.4. Roman .in 3 Use the supported Pandoc syntax: .in 0 .nf ii. Item one; ii. Item two. .fi .in 3 Converts to "": .in 9 .ti 3 i. Item one; .ti 3 ii. Item two. .bp .in 3 If you use uppercase Roman numerals, they convert to a different style: .in 0 .nf II. Item one; II. Item two. .fi .in 3 Yields "": .in 8 .ti 3 (1) Item one; .ti 3 (2) Item two. .ti 0 7.3.5. Letter .in 3 A numbered list. .in 0 .nf a. Item one; b. Item two. .fi .in 3 Converts to "": .in 7 .ti 3 a. Item one; .ti 3 b. Item two. .in 3 Uppercasing the letters works too (note two spaces after the letter. .in 0 .nf A. Item one; B. Item two. .fi .in 3 Becomes: .in 7 .ti 3 A. Item one; .ti 3 B. Item two. .in 8 .ti 0 7.3.6. Hanging .in 3 This is more like a description list, so we need to use: .bp .in 0 .nf First item that needs clarification: : Explanation one More stuff, because item is difficult to explain. * item1 * item2 Second item that needs clarification: : Explanation two .fi .in 3 Converts to: "" and "" If you want a newline after the hangTexts, search for the string "OPTION" in "transform.xsl" and uncomment it. .in 6 .ti 0 7.4. Figure/Artwork .in 3 Indent the paragraph with 4 spaces. .in 0 .nf Like this .fi .in 3 Converts to: "
..." Note that "xml2rfc" supports a caption with "". Pandoc does not support this, but Pandoc2rfc does. If you add a "@Figure: some text" as the last line, the artwork gets a "title" attribute with the text after "@Figure:". It will also be possible to reference the artwork. If a caption is supplied the artwork will be centered. If a caption is needed but the figure should not be centered use "@figure:\\". .in 8 .ti 0 7.4.1. References .in 3 The reference anchor attribute will be: "fig:" + "first 10 (normalized) characters from the caption". Where normalized means: .in 6 .ti 3 o Take the first 10 characters of the caption (i.e. this is the text _after_ the string "@Figure:"); .ti 3 o Spaces and single quotes (') are translated to a minus \%"-"; .ti 3 o Uppercase letters translated to lowercase. .in 3 So the first artwork with a caption will get \%"fig:a-minimal-" as a reference. See for instance Figure\02. .bp This anchoring is completely handled from within the "xslt". Note that duplicate anchors are an XML validation error which will make "xml2rfc" fail. .in 6 .ti 0 7.5. Block Quote .in 3 Any paragraph like: .in 0 .nf > quoted text .fi .in 3 Converts to: " ..." paragraph, making it indented. .in 6 .ti 0 7.6. References .in 8 .ti 0 7.6.1. External .in 3 Any reference like: .in 0 .nf [Click here](URI) .fi .in 3 Converts to: "Click here ..." .in 8 .ti 0 7.6.2. Internal .in 3 Any reference like: .in 0 .nf [Click here](#localid) .fi .in 3 Converts to: "Click here ..." For referring to RFCs (for which you manually need add the reference source in the template, with an external XML entity), you can just use: .in 0 .nf [](#RFC2119) .fi .in 3 And it does the right thing. Referencing sections is done with: .in 0 .nf See [](#pandoc-constructs) .fi .in 3 The word 'Section' is inserted automatically: ... see Section\07 ... For referencing figures/artworks see Section\07.4. For referencing tables see Section\07.8. .bp .in 6 .ti 0 7.7. Spanx Styles .in 3 The verb style can be selected with \%back-tics: "`text`" Converts to: " ..." And the emphasis style with asterisks: "*text*" or underscores: "_text_" Converts to: " ..." And the emphasis style with double asterisks: "**text**" Converts to: " ..." .in 6 .ti 0 7.8. Tables .in 3 A table can be entered as: .in 0 .nf Right Left Center Default ------- ------ ---------- ------- 12 12 12 12 123 123 123 123 1 1 1 1 Table: A caption describing the table. .fi .in 3 .ce 1 Figure\03: A caption describing the figure describing the table. Is translated to "" element in "xml2rfc". You can choose multiple styles as input, but they all are converted to the same style (plain "") table in "xml2rfc". The column alignment is copied over to the generated XML. .in 8 .ti 0 7.8.1. References .in 3 The caption is _always_ translated to a "title" attribute. If a table has a caption, it will _also_ get a reference. The reference anchor attribute will be: \%"tab-" + "first 10 (normalized) characters from the caption". Where normalized means: .in 6 .ti 3 o Take the first 10 characters of the caption (i.e. this is the text _after_ the string "Table:"); .ti 3 o Spaces and single quotes (') are translated to a minus \%"-"; .ti 3 o Uppercase letters translated to lowercase. .in 3 So the first table with a caption will get \%"tab-a-caption-" for reference use. See for instance .bp This anchoring is completely handled from within the "xslt". Note that duplicate anchors are an XML validation error which will make "xml2rfc" fail. .in 6 .ti 0 7.9. Indexes .in 3 The footnote syntax of Pandoc is slightly abused to support an index. Footnotes are entered in two steps, you have a marker in the text, and later you give actual footnote text. Like this: .in 0 .nf [^1] [^1]: footnote text .fi .in 3 We \%re-use this syntax for the "" tag. The above text translates to: .in 0 .nf .fi .in 3 Sub items are also supported. Use an exclamation mark ("!") to separate them: .in 0 .nf [^1]: item!sub item .fi .in 3 .in 4 .ti 0 8. Usage guidelines .in 6 .ti 0 8.1. Working with multiple files .in 3 As an author you will probably break up a draft in multiple files, each dealing with a subject or section. When doing so sections with the same title will clash with each other. Pandoc can deal with this situation, but only if the different sections are in the _same_ file or processed in the same Pandoc run. Concatenating the different section files before processing them is a solution to this problem. You can, for instance, amend the "Makefile" and add something like this: .in 0 .nf allsections.pdc: section.pdc.1 section.pdc.2 section.pdc.3 cat $@ > allsections.pdc .fi .in 3 And then process "allsection.pdc" in the normal way. .in 6 .ti 0 8.2. Setting the title .in 3 If you use double quotes in the documents title in the "docName" attribute, like: .in 0 .nf .bp .fi .in 3 The Makefile will pick this up automatically and make a symbolic link: .in 0 .nf draft-gieben-writing-rfcs-pandoc-00.txt -> draft.txt .fi .in 3 This makes uploading the file to the \%i-d tracker a bit easier. .in 6 .ti 0 8.3. Uploading the XML/txt .in 3 The "draft.xml" target will generate an XML file with all XML included, so you can upload just one file to the \%I-D tracker. .in 6 .ti 0 8.4. VIM syntax highlighting .in 3 If you are a VIM user you might be interested in a syntax highlighting file (see [VIM]) that slightly lightens up your reading experience while viewing a draft.txt from VIM. .in 4 .ti 0 9. Security Considerations .in 3 This document raises no security issues. .in 5 .ti 0 10. IANA Considerations .in 3 This document has no actions for IANA. .in 5 .ti 0 11. References .in 7 .ti 0 11.1. Informative References .in 14 .ti 3 [VIM] Gieben, R., "VIM syntax file for RFCs and \%I-Ds", October 2012, . .in 7 .ti 0 11.2. Normative References .in 14 .ti 3 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP\014, RFC\02119, March 1997. .ti 3 [RFC4641] Kolkman, O. and R. Gieben, "DNSSEC Operational Practices", RFC\04641, September 2006. .in 7 .ti 0 11.3. URIs .ti 3 [1] http://xml.resource.org/experimental .ti 3 [2] http://pypi.python.org/pypi/xml2rfc/ .ti 3 [3] http://daringfireball.net/projects/markdown/ .bp .ti 3 [4] http://johnmacfarlane.net/pandoc/ .ti 3 [5] https://github.com/miekg/pandoc2rfc .ti 3 [6] http://johnmacfarlane.net/pandoc/README.html .ti 3 [7] http://johnmacfarlane.net/pandoc/README.html .ti 3 [8] http://miek.nl .in 13 .ti 0 Appendix\0A. Tests .in 3 This appendix consists out of a few tests that should all render to proper "xml2rfc" XML. .in 6 .ti 0 A.1. A Very Long Title Considerations With Regards to the Already Deployed Routing Policy .in 3 Test a very long title. .in 6 .ti 0 A.2. Markup in heading .in 3 This is discarded by "xml2rfc". .in 6 .ti 0 A.3. Blockquote This is a blockquote, how does it look? .ti 0 A.4. Verbatim code blocks .in 0 .nf A verbatim code block jkasjksajassjasjsajsajkas .fi .in 3 .in 6 .ti 0 A.5. Reference Tests .in 3 Refer to RFC 2119 [RFC2119] if you will. Or maybe you want to inspect Figure\02 in Section\02 again. Or you might want to Click here [8]. .in 6 .ti 0 A.6. Spanx Tests underscores: _underscores_ asterisks: _asterisks_ double asterisks: *double asterisks* backticks: "backticks" .bp .ti 0 A.7. List Tests .in 7 .ti 3 1. First we do .ti 3 2. And then .in 10 .ti 7 * item 1 .ti 7 * item 2 .in 3 And the other around. .in 6 .ti 3 o First we do .ti 3 o Then .in 10 .ti 6 1. Something .ti 6 2. Another thing .in 3 Description lists: .in 6 .ti 3 Item to explain: It works because of herbs. .ti 3 Another item to explain: More explaining. .sp 1 Multiple paragraphs in such a list. .in 3 lists in description lists. .in 6 .ti 3 Item to explain: It works because of .in 10 .ti 6 1. One .ti 6 2. Two .in 6 .ti 3 Another item to explain: More explaining .ti 3 Item to explain: It works because of .in 10 .ti 6 1. One1 .ti 6 2. Two1 .in 13 .ti 10 + Itemize list .ti 10 + Another item .bp .in 6 .ti 3 Another item to explain again: More explaining .in 3 list with description lists. .in 7 .ti 3 1. More .in 10 .ti 7 Item to explain: Explanation ... .ti 7 Item to explain: Another explanation ... .in 7 .ti 3 2. Go'bye .in 3 Multiple paragraphs in a list. .in 7 .ti 3 1. This is the first bullet point and it needs multiple paragraphs... .sp 1 \&... to be explained properly. .ti 3 2. This is the next bullet. New paragraphs should be indented with 4 four spaces. .ti 3 3. Another item with some artwork, indented by 8 spaces. .in 0 .nf Artwork .fi .in 3 .in 7 .ti 3 4. Final item. .in 3 xml2rfc does not allow this, so the second paragraph is faked with a .in 0 .nf .fi .in 3 Ordered lists. .in 7 .ti 3 1. First item .ti 3 2. Second item .in 3 A lowercase roman list: .in 9 .ti 3 i. Item 1 .ti 3 ii. Item 2 .in 3 An uppercase roman list. .in 8 .ti 3 (1) Item1 .bp .ti 3 (2) Item2 .ti 3 (3) Item 3 .in 3 And default list markers. Some surrounding text, to make it look better. .in 6 First item. Use lot of text to get a real paragraphs sense. First item. Use lot of text to get a real paragraphs sense. First item. Use lot of text to get a real paragraphs sense. First item. Use lot of text to get a real paragraphs sense. Second item. So this is the second para in your list. Enjoy; Another item. .in 3 Text at the end. Lowercase letters list. .in 7 .ti 3 a. First item .ti 3 b. Second item .in 3 Uppercase letters list. .in 7 .ti 3 A. First item .ti 3 B. Second item .in 3 And artwork in a description list. .in 6 .ti 3 Item1: Tell something about it. Tell something about it. Tell something about it. Tell something about it. Tell something about it. Tell something about it. .in 0 .nf miek.nl. IN NS a.miek.nl. a.miek.nl. IN A 192.0.2.1 ; <- this is glue .fi .in 3 .sp 1 .in 6 Tell some more about it. Tell some more about it. Tell some more about it. .ti 3 Item2: Another description .in 3 List with a sublist with a paragraph above the sublist .in 7 .ti 3 1. First Item .bp .ti 3 2. Second item .ti 3 3. Third item .sp 1 A paragraph that comes first .in 11 .ti 7 A. But what do you know .ti 7 B. This is another list .in 6 .ti 0 A.8. Table\0Tests .in 0 .nf +--------+-------+---------+----------+ | Right | Left | Center | Default | +--------+-------+---------+----------+ | 12 | 12 | 12 | 12 | | 123 | 123 | 123 | 123 | | 1 | 1 | 1 | 1 | +--------+-------+---------+----------+ .fi .in 3 .ce 1 Table\01: Demonstration of simple table syntax. .in 0 .nf +-----------+-----------+---------------+---------------------------+ | Centered | Default | Right Aligned | Left Aligned | | Header | Aligned | | | +-----------+-----------+---------------+---------------------------+ | First | row | 12.0 | Example of a row that | | | | | spans multiple lines. | | Second | row | 5.0 | Here's another one. Note | | | | | the blank line between | | | | | rows. | +-----------+-----------+---------------+---------------------------+ .fi .in 3 .ce 2 Table\02: Here's the caption. It, too, may span multiple lines. This is a multiline table. This is verbatim text. .in 0 .nf +---------------+---------------+--------------------+ | Fruit | Price | Advantages | +---------------+---------------+--------------------+ | Bananas | $1.34 | built-in wrapper | | Oranges | $2.10 | cures scurvy | +---------------+---------------+--------------------+ .fi .in 3 .ce 1 Table\03: Sample grid table. Grid tables without a caption .bp .in 0 .nf +---------------+---------------+--------------------+ | Fruit | Price | Advantages | +---------------+---------------+--------------------+ | Bananas | $1.34 | built-in wrapper | | Oranges | $2.10 | cures scurvy | +---------------+---------------+--------------------+ .fi .in 3 This table has no caption, and therefor no reference. But you can refer to some of the other tables, with for instance: .in 0 .nf See [](#tab-here-s-the) .fi .in 3 Which will become "See Table\02". We should also be able to refer to the table numbers directly, to say things like 'Look at Tables 1, 2 and 3.' .in 6 .ti 0 A.9. Numbered examples .in 3 This is another example: .in 7 .ti 3 1. Another bla bla.. .in 3 as (1) shows... .in 7 .ti 0 A.10. Figure\0tests .in 0 .nf This is a figure This is a figure This is a figure This is a figure .fi .in 3 .ce 2 Figure\04: This is the caption, with text in `typewriter`. Which isnt converted to a style, because this is copied \%as-is. And how a figure that is not centered, do to using "figure" and not "Figure". .in 0 .nf This is a figure This is a figure .fi .in 3 .ce 1 Figure\05: A non centered figure. Test the use of "@title": .in 0 .nf This is a figure with a title This is a figure with a title @title: and here it is: a title, don't mess it up * .bp .fi .in 3 .in 7 .ti 0 A.11. Verse tests .in 3 This is a verse text This is another line .ti 0 Index .in 3 L .in 6 list .in 9 default markers 18 .in 9 Uppercase Letters 18 .in 3 T .in 6 table .in 9 grid 20 .in 9 simple 19 .in 0 Author's Address .nf R. (Miek) Gieben Google 123 Buckingham Palace Road London SW1W 9SH UK Email: miek@miek.nl URI: http://miek.nl/ .fi .in 3 xml2rfc-2.9.6/tests/valid/abbreviations.html0000644000175000017500000000021212472420041021635 0ustar henrikhenrik00000000000000

Various abbreviations which aren't end of sentence: Jr. AND Sr. AND i.e. AND Mr. AND Mrs. etc. -- done. Start of next sentence.

xml2rfc-2.9.6/tests/valid/status_independent_historic.nroff0000644000175000017500000000164113237442436025002 0ustar henrikhenrik00000000000000.pl 10.0i .po 0 .ll 7.2i .lt 7.2i .nr LL 7.2i .nr LT 7.2i .hy 0 .ad l .ds LH RFC 9999 .ds CH Abbreviated Title .ds RH December 2010 .ds LF Doe .ds CF Best Current Practice .ds RF FORMFEED[Page %] .ti 0 Status of This Memo .in 3 This document is not an Internet Standards Track specification; it is published for the historical record. This document defines a Historic Document for the Internet community. This is a contribution to the RFC Series, independently of any other RFC stream. The RFC Editor has chosen to publish this document at its discretion and makes no statement about its value for implementation or deployment. Documents approved for publication by the RFC Editor are not candidates for any level of Internet Standard; see Section 2 of RFC 5741. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc9999. xml2rfc-2.9.6/tests/valid/status_irtf_info_nowg.nroff0000644000175000017500000000151212336226773023612 0ustar henrikhenrik00000000000000.pl 10.0i .po 0 .ll 7.2i .lt 7.2i .nr LL 7.2i .nr LT 7.2i .hy 0 .ad l .ds LH RFC 9999 .ds CH Abbreviated Title .ds RH December 2010 .ds LF Doe .ds CF Best Current Practice .ds RF FORMFEED[Page %] .ti 0 Status of This Memo .in 3 This document is not an Internet Standards Track specification; it is published for informational purposes. This document is a product of the Internet Research Task Force (IRTF). The IRTF publishes the results of Internet-related research and development activities. These results might not be suitable for deployment. Documents approved for publication by the IRSG are not a candidate for any level of Internet Standard; see Section 2 of RFC 5741. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc9999.xml2rfc-2.9.6/tests/valid/utf8.nroff0000644000175000017500000000473113237622212020057 0ustar henrikhenrik00000000000000.\" automatically generated by xml2rfc v2.9.3a1 on 2018-02-10T16:32:49Z .pl 10.0i .po 0 .ll 7.2i .lt 7.2i .nr LL 7.2i .nr LT 7.2i .hy 0 .ad l .ds LH Internet-Draft .ds CH Abbreviated Title .ds RH December 2010 .ds LF Doe .ds CF Expires June 13, 2011 .ds RF FORMFEED[Page %] .in 0 .nf Network Working Group J. Doe, Ed. Internet-Draft Company Intended status: Informational December 10, 2010 Expires: June 13, 2011 .fi .ce 1 Put Your Internet Draft Title .ce 1 \%draft-sample-input-00 Abstract .in 3 Insert an abstract: MANDATORY. This template is for creating an \%Internet-Draft. With some out of scope characters in Chinese, by Xing Xing, 这里是中文译本 .in 0 Status of This Memo .in 3 This \%Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. \%Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as \%Internet-Drafts. The list of current \%Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. \%Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use \%Internet-Drafts as reference material or to cite them other than as "work in progress." This \%Internet-Draft will expire on June 13, 2011. .in 0 Copyright Notice .in 3 Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents \%(http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section\04.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. .bp .in 4 .ti 0 1. Some unicode strings .in 3 Text body needs to deal with funny characters Pure out of scope 这里是中文译本 Some \%re-mapped characters are ¢ or © More \%re-mapped characters are ˜ and € and ^ .in 0 Author's Address .nf John Doe (editor) Company Springfield, IL US Email: jdoe@example.com .fi .in 3 xml2rfc-2.9.6/tests/valid/rfc6787.txt0000644000175000017500000171720413151604207020012 0ustar henrikhenrik00000000000000 Internet Engineering Task Force (IETF) D. Burnett Request for Comments: 6787 Voxeo Category: Standards Track S. Shanmugham ISSN: 2070-1721 Cisco Systems, Inc. November 2012 Media Resource Control Protocol Version 2 (MRCPv2) Abstract The Media Resource Control Protocol Version 2 (MRCPv2) allows client hosts to control media service resources such as speech synthesizers, recognizers, verifiers, and identifiers residing in servers on the network. MRCPv2 is not a "stand-alone" protocol -- it relies on other protocols, such as the Session Initiation Protocol (SIP), to coordinate MRCPv2 clients and servers and manage sessions between them, and the Session Description Protocol (SDP) to describe, discover, and exchange capabilities. It also depends on SIP and SDP to establish the media sessions and associated parameters between the media source or sink and the media server. Once this is done, the MRCPv2 exchange operates over the control session established above, allowing the client to control the media processing resources on the speech resource server. Status of This Memo This is an Internet Standards Track document. This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741. Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc6787. Copyright Notice Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents Burnett & Shanmugham Standards Track [Page 1] RFC 6787 MRCPv2 November 2012 carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 8 2. Document Conventions . . . . . . . . . . . . . . . . . . . . 9 2.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 10 2.2. State-Machine Diagrams . . . . . . . . . . . . . . . . . 10 2.3. URI Schemes . . . . . . . . . . . . . . . . . . . . . . . 11 3. Architecture . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1. MRCPv2 Media Resource Types . . . . . . . . . . . . . . . 12 3.2. Server and Resource Addressing . . . . . . . . . . . . . 13 4. MRCPv2 Basics . . . . . . . . . . . . . . . . . . . . . . . . 14 4.1. Connecting to the Server . . . . . . . . . . . . . . . . 14 4.2. Managing Resource Control Channels . . . . . . . . . . . 14 4.3. SIP Session Example . . . . . . . . . . . . . . . . . . . 17 4.4. Media Streams and RTP Ports . . . . . . . . . . . . . . . 22 4.5. MRCPv2 Message Transport . . . . . . . . . . . . . . . . 23 4.6. MRCPv2 Session Termination . . . . . . . . . . . . . . . 24 5. MRCPv2 Specification . . . . . . . . . . . . . . . . . . . . 24 5.1. Common Protocol Elements . . . . . . . . . . . . . . . . 25 5.2. Request . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.3. Response . . . . . . . . . . . . . . . . . . . . . . . . 28 5.4. Status Codes . . . . . . . . . . . . . . . . . . . . . . 29 5.5. Events . . . . . . . . . . . . . . . . . . . . . . . . . 31 6. MRCPv2 Generic Methods, Headers, and Result Structure . . . . 32 6.1. Generic Methods . . . . . . . . . . . . . . . . . . . . . 32 6.1.1. SET-PARAMS . . . . . . . . . . . . . . . . . . . . . 32 6.1.2. GET-PARAMS . . . . . . . . . . . . . . . . . . . . . 33 6.2. Generic Message Headers . . . . . . . . . . . . . . . . . 34 6.2.1. Channel-Identifier . . . . . . . . . . . . . . . . . 35 6.2.2. Accept . . . . . . . . . . . . . . . . . . . . . . . 36 Burnett & Shanmugham Standards Track [Page 2] RFC 6787 MRCPv2 November 2012 6.2.3. Active-Request-Id-List . . . . . . . . . . . . . . . 36 6.2.4. Proxy-Sync-Id . . . . . . . . . . . . . . . . . . . . 37 6.2.5. Accept-Charset . . . . . . . . . . . . . . . . . . . 37 6.2.6. Content-Type . . . . . . . . . . . . . . . . . . . . 37 6.2.7. Content-ID . . . . . . . . . . . . . . . . . . . . . 38 6.2.8. Content-Base . . . . . . . . . . . . . . . . . . . . 38 6.2.9. Content-Encoding . . . . . . . . . . . . . . . . . . 38 6.2.10. Content-Location . . . . . . . . . . . . . . . . . . 39 6.2.11. Content-Length . . . . . . . . . . . . . . . . . . . 40 6.2.12. Fetch Timeout . . . . . . . . . . . . . . . . . . . . 40 6.2.13. Cache-Control . . . . . . . . . . . . . . . . . . . . 40 6.2.14. Logging-Tag . . . . . . . . . . . . . . . . . . . . . 42 6.2.15. Set-Cookie . . . . . . . . . . . . . . . . . . . . . 42 6.2.16. Vendor-Specific Parameters . . . . . . . . . . . . . 44 6.3. Generic Result Structure . . . . . . . . . . . . . . . . 45 6.3.1. Natural Language Semantics Markup Language . . . . . 46 7. Resource Discovery . . . . . . . . . . . . . . . . . . . . . 46 8. Speech Synthesizer Resource . . . . . . . . . . . . . . . . . 48 8.1. Synthesizer State Machine . . . . . . . . . . . . . . . . 48 8.2. Synthesizer Methods . . . . . . . . . . . . . . . . . . . 49 8.3. Synthesizer Events . . . . . . . . . . . . . . . . . . . 49 8.4. Synthesizer Header Fields . . . . . . . . . . . . . . . . 50 8.4.1. Jump-Size . . . . . . . . . . . . . . . . . . . . . . 50 8.4.2. Kill-On-Barge-In . . . . . . . . . . . . . . . . . . 51 8.4.3. Speaker-Profile . . . . . . . . . . . . . . . . . . . 52 8.4.4. Completion-Cause . . . . . . . . . . . . . . . . . . 52 8.4.5. Completion-Reason . . . . . . . . . . . . . . . . . . 53 8.4.6. Voice-Parameter . . . . . . . . . . . . . . . . . . . 53 8.4.7. Prosody-Parameters . . . . . . . . . . . . . . . . . 54 8.4.8. Speech-Marker . . . . . . . . . . . . . . . . . . . . 54 8.4.9. Speech-Language . . . . . . . . . . . . . . . . . . . 55 8.4.10. Fetch-Hint . . . . . . . . . . . . . . . . . . . . . 55 8.4.11. Audio-Fetch-Hint . . . . . . . . . . . . . . . . . . 56 8.4.12. Failed-URI . . . . . . . . . . . . . . . . . . . . . 56 8.4.13. Failed-URI-Cause . . . . . . . . . . . . . . . . . . 56 8.4.14. Speak-Restart . . . . . . . . . . . . . . . . . . . . 56 8.4.15. Speak-Length . . . . . . . . . . . . . . . . . . . . 57 8.4.16. Load-Lexicon . . . . . . . . . . . . . . . . . . . . 57 8.4.17. Lexicon-Search-Order . . . . . . . . . . . . . . . . 58 8.5. Synthesizer Message Body . . . . . . . . . . . . . . . . 58 8.5.1. Synthesizer Speech Data . . . . . . . . . . . . . . . 58 8.5.2. Lexicon Data . . . . . . . . . . . . . . . . . . . . 60 8.6. SPEAK Method . . . . . . . . . . . . . . . . . . . . . . 61 8.7. STOP . . . . . . . . . . . . . . . . . . . . . . . . . . 63 8.8. BARGE-IN-OCCURRED . . . . . . . . . . . . . . . . . . . . 65 8.9. PAUSE . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.10. RESUME . . . . . . . . . . . . . . . . . . . . . . . . . 68 8.11. CONTROL . . . . . . . . . . . . . . . . . . . . . . . . . 71 Burnett & Shanmugham Standards Track [Page 3] RFC 6787 MRCPv2 November 2012 8.12. SPEAK-COMPLETE . . . . . . . . . . . . . . . . . . . . . 72 8.13. SPEECH-MARKER . . . . . . . . . . . . . . . . . . . . . . 73 8.14. DEFINE-LEXICON . . . . . . . . . . . . . . . . . . . . . 76 9. Speech Recognizer Resource . . . . . . . . . . . . . . . . . 76 9.1. Recognizer State Machine . . . . . . . . . . . . . . . . 78 9.2. Recognizer Methods . . . . . . . . . . . . . . . . . . . 79 9.3. Recognizer Events . . . . . . . . . . . . . . . . . . . . 79 9.4. Recognizer Header Fields . . . . . . . . . . . . . . . . 79 9.4.1. Confidence-Threshold . . . . . . . . . . . . . . . . 81 9.4.2. Sensitivity-Level . . . . . . . . . . . . . . . . . . 81 9.4.3. Speed-Vs-Accuracy . . . . . . . . . . . . . . . . . . 82 9.4.4. N-Best-List-Length . . . . . . . . . . . . . . . . . 82 9.4.5. Input-Type . . . . . . . . . . . . . . . . . . . . . 82 9.4.6. No-Input-Timeout . . . . . . . . . . . . . . . . . . 83 9.4.7. Recognition-Timeout . . . . . . . . . . . . . . . . . 83 9.4.8. Waveform-URI . . . . . . . . . . . . . . . . . . . . 83 9.4.9. Media-Type . . . . . . . . . . . . . . . . . . . . . 84 9.4.10. Input-Waveform-URI . . . . . . . . . . . . . . . . . 84 9.4.11. Completion-Cause . . . . . . . . . . . . . . . . . . 84 9.4.12. Completion-Reason . . . . . . . . . . . . . . . . . . 86 9.4.13. Recognizer-Context-Block . . . . . . . . . . . . . . 87 9.4.14. Start-Input-Timers . . . . . . . . . . . . . . . . . 87 9.4.15. Speech-Complete-Timeout . . . . . . . . . . . . . . . 88 9.4.16. Speech-Incomplete-Timeout . . . . . . . . . . . . . . 88 9.4.17. DTMF-Interdigit-Timeout . . . . . . . . . . . . . . . 89 9.4.18. DTMF-Term-Timeout . . . . . . . . . . . . . . . . . . 89 9.4.19. DTMF-Term-Char . . . . . . . . . . . . . . . . . . . 89 9.4.20. Failed-URI . . . . . . . . . . . . . . . . . . . . . 89 9.4.21. Failed-URI-Cause . . . . . . . . . . . . . . . . . . 90 9.4.22. Save-Waveform . . . . . . . . . . . . . . . . . . . . 90 9.4.23. New-Audio-Channel . . . . . . . . . . . . . . . . . . 90 9.4.24. Speech-Language . . . . . . . . . . . . . . . . . . . 91 9.4.25. Ver-Buffer-Utterance . . . . . . . . . . . . . . . . 91 9.4.26. Recognition-Mode . . . . . . . . . . . . . . . . . . 91 9.4.27. Cancel-If-Queue . . . . . . . . . . . . . . . . . . . 92 9.4.28. Hotword-Max-Duration . . . . . . . . . . . . . . . . 92 9.4.29. Hotword-Min-Duration . . . . . . . . . . . . . . . . 92 9.4.30. Interpret-Text . . . . . . . . . . . . . . . . . . . 93 9.4.31. DTMF-Buffer-Time . . . . . . . . . . . . . . . . . . 93 9.4.32. Clear-DTMF-Buffer . . . . . . . . . . . . . . . . . . 93 9.4.33. Early-No-Match . . . . . . . . . . . . . . . . . . . 93 9.4.34. Num-Min-Consistent-Pronunciations . . . . . . . . . . 94 9.4.35. Consistency-Threshold . . . . . . . . . . . . . . . . 94 9.4.36. Clash-Threshold . . . . . . . . . . . . . . . . . . . 94 9.4.37. Personal-Grammar-URI . . . . . . . . . . . . . . . . 95 9.4.38. Enroll-Utterance . . . . . . . . . . . . . . . . . . 95 9.4.39. Phrase-Id . . . . . . . . . . . . . . . . . . . . . . 95 9.4.40. Phrase-NL . . . . . . . . . . . . . . . . . . . . . . 95 Burnett & Shanmugham Standards Track [Page 4] RFC 6787 MRCPv2 November 2012 9.4.41. Weight . . . . . . . . . . . . . . . . . . . . . . . 96 9.4.42. Save-Best-Waveform . . . . . . . . . . . . . . . . . 96 9.4.43. New-Phrase-Id . . . . . . . . . . . . . . . . . . . . 96 9.4.44. Confusable-Phrases-URI . . . . . . . . . . . . . . . 97 9.4.45. Abort-Phrase-Enrollment . . . . . . . . . . . . . . . 97 9.5. Recognizer Message Body . . . . . . . . . . . . . . . . . 97 9.5.1. Recognizer Grammar Data . . . . . . . . . . . . . . . 97 9.5.2. Recognizer Result Data . . . . . . . . . . . . . . . 101 9.5.3. Enrollment Result Data . . . . . . . . . . . . . . . 101 9.5.4. Recognizer Context Block . . . . . . . . . . . . . . 102 9.6. Recognizer Results . . . . . . . . . . . . . . . . . . . 102 9.6.1. Markup Functions . . . . . . . . . . . . . . . . . . 103 9.6.2. Overview of Recognizer Result Elements and Their Relationships . . . . . . . . . . . . . . . . . . . . 104 9.6.3. Elements and Attributes . . . . . . . . . . . . . . . 105 9.7. Enrollment Results . . . . . . . . . . . . . . . . . . . 109 9.7.1. Element . . . . . . . . . . . . . . . . 110 9.7.2. Element . . . . . . . . . . . 110 9.7.3. Element . . . . . . . 110 9.7.4. Element . . . . . . . . . . . . 110 9.7.5. Element . . . . . . . . . . . . . 111 9.7.6. Element . . . . . . . . . . . . . . 111 9.7.7. Element . . . . . . . . . . . . 111 9.8. DEFINE-GRAMMAR . . . . . . . . . . . . . . . . . . . . . 111 9.9. RECOGNIZE . . . . . . . . . . . . . . . . . . . . . . . . 115 9.10. STOP . . . . . . . . . . . . . . . . . . . . . . . . . . 121 9.11. GET-RESULT . . . . . . . . . . . . . . . . . . . . . . . 122 9.12. START-OF-INPUT . . . . . . . . . . . . . . . . . . . . . 123 9.13. START-INPUT-TIMERS . . . . . . . . . . . . . . . . . . . 124 9.14. RECOGNITION-COMPLETE . . . . . . . . . . . . . . . . . . 124 9.15. START-PHRASE-ENROLLMENT . . . . . . . . . . . . . . . . . 126 9.16. ENROLLMENT-ROLLBACK . . . . . . . . . . . . . . . . . . . 127 9.17. END-PHRASE-ENROLLMENT . . . . . . . . . . . . . . . . . . 128 9.18. MODIFY-PHRASE . . . . . . . . . . . . . . . . . . . . . . 128 9.19. DELETE-PHRASE . . . . . . . . . . . . . . . . . . . . . . 129 9.20. INTERPRET . . . . . . . . . . . . . . . . . . . . . . . . 129 9.21. INTERPRETATION-COMPLETE . . . . . . . . . . . . . . . . . 131 9.22. DTMF Detection . . . . . . . . . . . . . . . . . . . . . 132 10. Recorder Resource . . . . . . . . . . . . . . . . . . . . . . 132 10.1. Recorder State Machine . . . . . . . . . . . . . . . . . 133 10.2. Recorder Methods . . . . . . . . . . . . . . . . . . . . 133 10.3. Recorder Events . . . . . . . . . . . . . . . . . . . . 133 10.4. Recorder Header Fields . . . . . . . . . . . . . . . . . 133 10.4.1. Sensitivity-Level . . . . . . . . . . . . . . . . . 134 10.4.2. No-Input-Timeout . . . . . . . . . . . . . . . . . . 134 10.4.3. Completion-Cause . . . . . . . . . . . . . . . . . . 134 10.4.4. Completion-Reason . . . . . . . . . . . . . . . . . 135 10.4.5. Failed-URI . . . . . . . . . . . . . . . . . . . . . 135 Burnett & Shanmugham Standards Track [Page 5] RFC 6787 MRCPv2 November 2012 10.4.6. Failed-URI-Cause . . . . . . . . . . . . . . . . . . 136 10.4.7. Record-URI . . . . . . . . . . . . . . . . . . . . . 136 10.4.8. Media-Type . . . . . . . . . . . . . . . . . . . . . 136 10.4.9. Max-Time . . . . . . . . . . . . . . . . . . . . . . 137 10.4.10. Trim-Length . . . . . . . . . . . . . . . . . . . . 137 10.4.11. Final-Silence . . . . . . . . . . . . . . . . . . . 137 10.4.12. Capture-On-Speech . . . . . . . . . . . . . . . . . 137 10.4.13. Ver-Buffer-Utterance . . . . . . . . . . . . . . . . 138 10.4.14. Start-Input-Timers . . . . . . . . . . . . . . . . . 138 10.4.15. New-Audio-Channel . . . . . . . . . . . . . . . . . 138 10.5. Recorder Message Body . . . . . . . . . . . . . . . . . 138 10.6. RECORD . . . . . . . . . . . . . . . . . . . . . . . . . 139 10.7. STOP . . . . . . . . . . . . . . . . . . . . . . . . . . 140 10.8. RECORD-COMPLETE . . . . . . . . . . . . . . . . . . . . 141 10.9. START-INPUT-TIMERS . . . . . . . . . . . . . . . . . . . 142 10.10. START-OF-INPUT . . . . . . . . . . . . . . . . . . . . . 142 11. Speaker Verification and Identification . . . . . . . . . . . 143 11.1. Speaker Verification State Machine . . . . . . . . . . . 144 11.2. Speaker Verification Methods . . . . . . . . . . . . . . 146 11.3. Verification Events . . . . . . . . . . . . . . . . . . 147 11.4. Verification Header Fields . . . . . . . . . . . . . . . 148 11.4.1. Repository-URI . . . . . . . . . . . . . . . . . . . 148 11.4.2. Voiceprint-Identifier . . . . . . . . . . . . . . . 148 11.4.3. Verification-Mode . . . . . . . . . . . . . . . . . 149 11.4.4. Adapt-Model . . . . . . . . . . . . . . . . . . . . 150 11.4.5. Abort-Model . . . . . . . . . . . . . . . . . . . . 150 11.4.6. Min-Verification-Score . . . . . . . . . . . . . . . 150 11.4.7. Num-Min-Verification-Phrases . . . . . . . . . . . . 151 11.4.8. Num-Max-Verification-Phrases . . . . . . . . . . . . 151 11.4.9. No-Input-Timeout . . . . . . . . . . . . . . . . . . 151 11.4.10. Save-Waveform . . . . . . . . . . . . . . . . . . . 151 11.4.11. Media-Type . . . . . . . . . . . . . . . . . . . . . 152 11.4.12. Waveform-URI . . . . . . . . . . . . . . . . . . . . 152 11.4.13. Voiceprint-Exists . . . . . . . . . . . . . . . . . 153 11.4.14. Ver-Buffer-Utterance . . . . . . . . . . . . . . . . 153 11.4.15. Input-Waveform-URI . . . . . . . . . . . . . . . . . 153 11.4.16. Completion-Cause . . . . . . . . . . . . . . . . . . 153 11.4.17. Completion-Reason . . . . . . . . . . . . . . . . . 156 11.4.18. Speech-Complete-Timeout . . . . . . . . . . . . . . 156 11.4.19. New-Audio-Channel . . . . . . . . . . . . . . . . . 156 11.4.20. Abort-Verification . . . . . . . . . . . . . . . . . 156 11.4.21. Start-Input-Timers . . . . . . . . . . . . . . . . . 156 11.5. Verification Message Body . . . . . . . . . . . . . . . 157 11.5.1. Verification Result Data . . . . . . . . . . . . . . 157 11.5.2. Verification Result Elements . . . . . . . . . . . . 157 11.6. START-SESSION . . . . . . . . . . . . . . . . . . . . . 161 11.7. END-SESSION . . . . . . . . . . . . . . . . . . . . . . 162 11.8. QUERY-VOICEPRINT . . . . . . . . . . . . . . . . . . . . 163 Burnett & Shanmugham Standards Track [Page 6] RFC 6787 MRCPv2 November 2012 11.9. DELETE-VOICEPRINT . . . . . . . . . . . . . . . . . . . 164 11.10. VERIFY . . . . . . . . . . . . . . . . . . . . . . . . . 165 11.11. VERIFY-FROM-BUFFER . . . . . . . . . . . . . . . . . . . 165 11.12. VERIFY-ROLLBACK . . . . . . . . . . . . . . . . . . . . 168 11.13. STOP . . . . . . . . . . . . . . . . . . . . . . . . . . 169 11.14. START-INPUT-TIMERS . . . . . . . . . . . . . . . . . . . 170 11.15. VERIFICATION-COMPLETE . . . . . . . . . . . . . . . . . 170 11.16. START-OF-INPUT . . . . . . . . . . . . . . . . . . . . . 171 11.17. CLEAR-BUFFER . . . . . . . . . . . . . . . . . . . . . . 171 11.18. GET-INTERMEDIATE-RESULT . . . . . . . . . . . . . . . . 171 12. Security Considerations . . . . . . . . . . . . . . . . . . . 172 12.1. Rendezvous and Session Establishment . . . . . . . . . . 173 12.2. Control Channel Protection . . . . . . . . . . . . . . . 173 12.3. Media Session Protection . . . . . . . . . . . . . . . . 173 12.4. Indirect Content Access . . . . . . . . . . . . . . . . 174 12.5. Protection of Stored Media . . . . . . . . . . . . . . . 175 12.6. DTMF and Recognition Buffers . . . . . . . . . . . . . . 175 12.7. Client-Set Server Parameters . . . . . . . . . . . . . . 175 12.8. DELETE-VOICEPRINT and Authorization . . . . . . . . . . 175 13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 176 13.1. New Registries . . . . . . . . . . . . . . . . . . . . . 176 13.1.1. MRCPv2 Resource Types . . . . . . . . . . . . . . . 176 13.1.2. MRCPv2 Methods and Events . . . . . . . . . . . . . 176 13.1.3. MRCPv2 Header Fields . . . . . . . . . . . . . . . . 178 13.1.4. MRCPv2 Status Codes . . . . . . . . . . . . . . . . 180 13.1.5. Grammar Reference List Parameters . . . . . . . . . 180 13.1.6. MRCPv2 Vendor-Specific Parameters . . . . . . . . . 181 13.2. NLSML-Related Registrations . . . . . . . . . . . . . . 181 13.2.1. 'application/nlsml+xml' Media Type Registration . . 181 13.3. NLSML XML Schema Registration . . . . . . . . . . . . . 182 13.4. MRCPv2 XML Namespace Registration . . . . . . . . . . . 183 13.5. Text Media Type Registrations . . . . . . . . . . . . . 183 13.5.1. text/grammar-ref-list . . . . . . . . . . . . . . . 183 13.6. 'session' URI Scheme Registration . . . . . . . . . . . 184 13.7. SDP Parameter Registrations . . . . . . . . . . . . . . 185 13.7.1. Sub-Registry "proto" . . . . . . . . . . . . . . . . 186 13.7.2. Sub-Registry "att-field (media-level)" . . . . . . . 186 14. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 188 14.1. Message Flow . . . . . . . . . . . . . . . . . . . . . . 188 14.2. Recognition Result Examples . . . . . . . . . . . . . . 197 14.2.1. Simple ASR Ambiguity . . . . . . . . . . . . . . . . 197 14.2.2. Mixed Initiative . . . . . . . . . . . . . . . . . . 198 14.2.3. DTMF Input . . . . . . . . . . . . . . . . . . . . . 199 14.2.4. Interpreting Meta-Dialog and Meta-Task Utterances . 199 14.2.5. Anaphora and Deixis . . . . . . . . . . . . . . . . 200 14.2.6. Distinguishing Individual Items from Sets with One Member . . . . . . . . . . . . . . . . . . . . . . . 201 14.2.7. Extensibility . . . . . . . . . . . . . . . . . . . 202 Burnett & Shanmugham Standards Track [Page 7] RFC 6787 MRCPv2 November 2012 15. ABNF Normative Definition . . . . . . . . . . . . . . . . . . 202 16. XML Schemas . . . . . . . . . . . . . . . . . . . . . . . . . 217 16.1. NLSML Schema Definition . . . . . . . . . . . . . . . . 217 16.2. Enrollment Results Schema Definition . . . . . . . . . . 218 16.3. Verification Results Schema Definition . . . . . . . . . 220 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 223 17.1. Normative References . . . . . . . . . . . . . . . . . . 223 17.2. Informative References . . . . . . . . . . . . . . . . . 226 Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . 228 Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 228 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 229 1. Introduction MRCPv2 is designed to allow a client device to control media processing resources on the network. Some of these media processing resources include speech recognition engines, speech synthesis engines, speaker verification, and speaker identification engines. MRCPv2 enables the implementation of distributed Interactive Voice Response platforms using VoiceXML [W3C.REC-voicexml20-20040316] browsers or other client applications while maintaining separate back-end speech processing capabilities on specialized speech processing servers. MRCPv2 is based on the earlier Media Resource Control Protocol (MRCP) [RFC4463] developed jointly by Cisco Systems, Inc., Nuance Communications, and Speechworks, Inc. Although some of the method names are similar, the way in which these methods are communicated is different. There are also more resources and more methods for each resource. The first version of MRCP was essentially taken only as input to the development of this protocol. There is no expectation that an MRCPv2 client will work with an MRCPv1 server or vice versa. There is no migration plan or gateway definition between the two protocols. The protocol requirements of Speech Services Control (SPEECHSC) [RFC4313] include that the solution be capable of reaching a media processing server, setting up communication channels to the media resources, and sending and receiving control messages and media streams to/from the server. The Session Initiation Protocol (SIP) [RFC3261] meets these requirements. The proprietary version of MRCP ran over the Real Time Streaming Protocol (RTSP) [RFC2326]. At the time work on MRCPv2 was begun, the consensus was that this use of RTSP would break the RTSP protocol or cause backward-compatibility problems, something forbidden by Section 3.2 of [RFC4313]. This is the reason why MRCPv2 does not run over RTSP. Burnett & Shanmugham Standards Track [Page 8] RFC 6787 MRCPv2 November 2012 MRCPv2 leverages these capabilities by building upon SIP and the Session Description Protocol (SDP) [RFC4566]. MRCPv2 uses SIP to set up and tear down media and control sessions with the server. In addition, the client can use a SIP re-INVITE method (an INVITE dialog sent within an existing SIP session) to change the characteristics of these media and control session while maintaining the SIP dialog between the client and server. SDP is used to describe the parameters of the media sessions associated with that dialog. It is mandatory to support SIP as the session establishment protocol to ensure interoperability. Other protocols can be used for session establishment by prior agreement. This document only describes the use of SIP and SDP. MRCPv2 uses SIP and SDP to create the speech client/server dialog and set up the media channels to the server. It also uses SIP and SDP to establish MRCPv2 control sessions between the client and the server for each media processing resource required for that dialog. The MRCPv2 protocol exchange between the client and the media resource is carried on that control session. MRCPv2 exchanges do not change the state of the SIP dialog, the media sessions, or other parameters of the dialog initiated via SIP. It controls and affects the state of the media processing resource associated with the MRCPv2 session(s). MRCPv2 defines the messages to control the different media processing resources and the state machines required to guide their operation. It also describes how these messages are carried over a transport- layer protocol such as the Transmission Control Protocol (TCP) [RFC0793] or the Transport Layer Security (TLS) Protocol [RFC5246]. (Note: the Stream Control Transmission Protocol (SCTP) [RFC4960] is a viable transport for MRCPv2 as well, but the mapping onto SCTP is not described in this specification.) 2. Document Conventions The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119]. Since many of the definitions and syntax are identical to those for the Hypertext Transfer Protocol -- HTTP/1.1 [RFC2616], this specification refers to the section where they are defined rather than copying it. For brevity, [HX.Y] is to be taken to refer to Section X.Y of RFC 2616. All the mechanisms specified in this document are described in both prose and an augmented Backus-Naur form (ABNF [RFC5234]). Burnett & Shanmugham Standards Track [Page 9] RFC 6787 MRCPv2 November 2012 The complete message format in ABNF form is provided in Section 15 and is the normative format definition. Note that productions may be duplicated within the main body of the document for reading convenience. If a production in the body of the text conflicts with one in the normative definition, the latter rules. 2.1. Definitions Media Resource An entity on the speech processing server that can be controlled through MRCPv2. MRCP Server Aggregate of one or more "Media Resource" entities on a server, exposed through MRCPv2. Often, 'server' in this document refers to an MRCP server. MRCP Client An entity controlling one or more Media Resources through MRCPv2 ("Client" for short). DTMF Dual-Tone Multi-Frequency; a method of transmitting key presses in-band, either as actual tones (Q.23 [Q.23]) or as named tone events (RFC 4733 [RFC4733]). Endpointing The process of automatically detecting the beginning and end of speech in an audio stream. This is critical both for speech recognition and for automated recording as one would find in voice mail systems. Hotword Mode A mode of speech recognition where a stream of utterances is evaluated for match against a small set of command words. This is generally employed either to trigger some action or to control the subsequent grammar to be used for further recognition. 2.2. State-Machine Diagrams The state-machine diagrams in this document do not show every possible method call. Rather, they reflect the state of the resource based on the methods that have moved to IN-PROGRESS or COMPLETE states (see Section 5.3). Note that since PENDING requests essentially have not affected the resource yet and are in the queue to be processed, they are not reflected in the state-machine diagrams. Burnett & Shanmugham Standards Track [Page 10] RFC 6787 MRCPv2 November 2012 2.3. URI Schemes This document defines many protocol headers that contain URIs (Uniform Resource Identifiers [RFC3986]) or lists of URIs for referencing media. The entire document, including the Security Considerations section (Section 12), assumes that HTTP or HTTP over TLS (HTTPS) [RFC2818] will be used as the URI addressing scheme unless otherwise stated. However, implementations MAY support other schemes (such as 'file'), provided they have addressed any security considerations described in this document and any others particular to the specific scheme. For example, implementations where the client and server both reside on the same physical hardware and the file system is secured by traditional user-level file access controls could be reasonable candidates for supporting the 'file' scheme. 3. Architecture A system using MRCPv2 consists of a client that requires the generation and/or consumption of media streams and a media resource server that has the resources or "engines" to process these streams as input or generate these streams as output. The client uses SIP and SDP to establish an MRCPv2 control channel with the server to use its media processing resources. MRCPv2 servers are addressed using SIP URIs. SIP uses SDP with the offer/answer model described in RFC 3264 [RFC3264] to set up the MRCPv2 control channels and describe their characteristics. A separate MRCPv2 session is needed to control each of the media processing resources associated with the SIP dialog between the client and server. Within a SIP dialog, the individual resource control channels for the different resources are added or removed through SDP offer/answer carried in a SIP re-INVITE transaction. The server, through the SDP exchange, provides the client with a difficult-to-guess, unambiguous channel identifier and a TCP port number (see Section 4.2). The client MAY then open a new TCP connection with the server on this port number. Multiple MRCPv2 channels can share a TCP connection between the client and the server. All MRCPv2 messages exchanged between the client and the server carry the specified channel identifier that the server MUST ensure is unambiguous among all MRCPv2 control channels that are active on that server. The client uses this channel identifier to indicate the media processing resource associated with that channel. For information on message framing, see Section 5. SIP also establishes the media sessions between the client (or other source/sink of media) and the MRCPv2 server using SDP "m=" lines. Burnett & Shanmugham Standards Track [Page 11] RFC 6787 MRCPv2 November 2012 One or more media processing resources may share a media session under a SIP session, or each media processing resource may have its own media session. The following diagram shows the general architecture of a system that uses MRCPv2. To simplify the diagram, only a few resources are shown. MRCPv2 client MRCPv2 Media Resource Server |--------------------| |------------------------------------| ||------------------|| ||----------------------------------|| || Application Layer|| ||Synthesis|Recognition|Verification|| ||------------------|| || Engine | Engine | Engine || ||Media Resource API|| || || | || | || || ||------------------|| ||Synthesis|Recognizer | Verifier || || SIP | MRCPv2 || ||Resource | Resource | Resource || ||Stack | || || Media Resource Management || || | || ||----------------------------------|| ||------------------|| || SIP | MRCPv2 || || TCP/IP Stack ||--MRCPv2-|| Stack | || || || ||----------------------------------|| ||------------------||---SIP---|| TCP/IP Stack || |--------------------| || || | ||----------------------------------|| SIP |------------------------------------| | / |-------------------| RTP | | / | Media Source/Sink |---------/ | | |-------------------| Figure 1: Architectural Diagram 3.1. MRCPv2 Media Resource Types An MRCPv2 server may offer one or more of the following media processing resources to its clients. Basic Synthesizer A speech synthesizer resource that has very limited capabilities and can generate its media stream exclusively from concatenated audio clips. The speech data is described using a limited subset of the Speech Synthesis Markup Language (SSML) [W3C.REC-speech-synthesis-20040907] elements. A basic synthesizer MUST support the SSML tags ,