<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://www.iana.org/assignments">

  <include href="../_support/iana-registry.rng"/>

  <start>
    <element name="registry">
      <ref name="registryMeta"/>
      
      <!-- Message Types-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
        
        <!-- BGP Path Attributes--> 
        
      </element>
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="code"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
       <!-- BGP Error Codes-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
       <!--BGP Error Subcodes-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="registry">
            <ref name="registryMeta"/>
            <zeroOrMore>
              <element name="record">
                <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
                <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
                <element name="value"><ref name="genericRange"/></element>
                <element name="name"><text/></element>
                <ref name="references"/>
              </element>
            </zeroOrMore>
          </element>
        </zeroOrMore>
      </element>
      
      
      <!--Outbound Route Filtering (ORF) Types-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <!--OPEN Optional Parameter Types-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      
      <!--Tunnel Encapsulation Types and Sub-TLVs-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>    

      <!-- BGP Layer 2 Encapsulation Types -->
      
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      
      <!-- BGP Layer 2 TLV Types -->
      
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      

     <!-- BGP AIGP Attribute Types -->
          
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>


     <!-- BGP Route Refresh Subcodes -->
       
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>

     <!-- PMSI Tunnel Types -->
       
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <!-- PMSI Tunnel Attribute Flags -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <!-- MCAST-VPN Route Types -->
       
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <!-- BGP Prefix-SID TLV Types -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <!-- BGP Prefix-SID Label-Index TLV Flags -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <!-- BGP Prefix-SID Originator SRGB TLV Flags -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <!-- BGP Graceful Restart Flags -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <element name="shortname"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
      
      <!-- BGP Graceful Restart Flags for Address Family-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <element name="shortname"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
	  
      <!-- SFP Attribute TLVs-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
            <element name="registration"><text/></element>
          </element>
        </zeroOrMore>
      </element>
	  
      <!-- SFP Association Type-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
            <element name="registration"><text/></element>
          </element>
        </zeroOrMore>
      </element>

      <!-- SFC SPI/SI Representation Flags-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
	  
      <!-- BFD Mode -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>
	  
      <!-- BFD Discriminator Optional TLV Type -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>

      <!-- SRv6 Service Sub-TLV Types -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>

      <!-- SRv6 Service Data Sub-Sub-TLV Types -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="description"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>

      <!-- BGP SRv6 Service SID Flags-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>

      <!-- Long-lived Graceful Restart Flags for Address Family-->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <element name="shortname"><text/></element>
            <ref name="references"/>
          </element>
        </zeroOrMore>
      </element>


      <!-- BGP BIER TLV and Sub-TLV Types -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <optional><element name="reference"><ref name="richText"/></element></optional>
          </element>
        </zeroOrMore>
        </element>

      <!-- BGP CAR NLRI Types -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <optional><element name="reference"><ref name="richText"/></element></optional>
          </element>
        </zeroOrMore>
        </element>

      <!-- BGP CAR NLRI Types -->
      
      <element name="registry">
        <ref name="registryMeta"/>
        <zeroOrMore>
          <element name="record">
            <optional><attribute name="date"><ref name="genericDate"/></attribute></optional>
            <optional><attribute name="updated"><ref name="genericDate"/></attribute></optional>
            <element name="value"><ref name="genericRange"/></element>
            <element name="name"><text/></element>
            <optional><element name="reference"><ref name="richText"/></element></optional>
          </element>
        </zeroOrMore>
        </element>
	  
      <ref name="people"/>
    </element>
  </start>

</grammar>
