<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:annotation>
    <xs:documentation xml:lang="en">
    Copyright 2006-2007 The MITRE Corporation

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

    The US Government will not be charged any license fee and/or royalties
    related to this software. Neither name of The MITRE Corporation; nor the
    names of its contributors may be used to endorse or promote products
    derived from this software without specific prior written permission.
    </xs:documentation>
</xs:annotation>

<!-- TYPES -->

    <!-- Simple types -->

    <xs:simpleType name="dtnStatusType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="justBooted"/>
            <xs:enumeration value="shuttingDown"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="bundlePriorityType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="bulk"/>
            <xs:enumeration value="normal"/>
            <xs:enumeration value="expedited"/>
            <xs:enumeration value="_unknown_priority_"/>
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="eventSourceType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="peer"/>
            <xs:enumeration value="application"/>
            <xs:enumeration value="dataStore"/>
            <xs:enumeration value="admin"/>
            <xs:enumeration value="fragmentation"/>
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="bundleForwardActionType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="forward"/>
            <xs:enumeration value="copy"/>
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="contactReasonType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="no_info"/>
            <xs:enumeration value="user"/>
            <xs:enumeration value="broken"/>
            <xs:enumeration value="cl_error"/>
            <xs:enumeration value="cl_version"/>
            <xs:enumeration value="shutdown"/>
            <xs:enumeration value="reconnect"/>
            <xs:enumeration value="idle"/>
            <xs:enumeration value="timeout"/>
            <xs:enumeration value="blocked"/>
            <xs:enumeration value="unblocked"/>
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="linkTypeType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="alwayson"/>
            <xs:enumeration value="ondemand"/>
            <xs:enumeration value="scheduled"/>
            <xs:enumeration value="opportunistic"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="linkStateType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="unavailable"/>
            <xs:enumeration value="available"/>
            <xs:enumeration value="opening"/>
            <xs:enumeration value="open"/>
            <xs:enumeration value="busy"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="eidTypeType">
        <xs:union>
            <xs:simpleType>
                <xs:restriction base="xs:string">
                   <xs:enumeration value="*:*"/>
                   <xs:enumeration value="dtn:none"/>
                </xs:restriction>
            </xs:simpleType>
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:pattern value="\S+://(\S|/)+/\*"/>
                </xs:restriction>
            </xs:simpleType>
            <xs:simpleType>
                <xs:restriction base="xs:anyURI"/>
            </xs:simpleType>
        </xs:union>
    </xs:simpleType>

    <xs:simpleType name="percentType">
	<xs:restriction base="xs:integer">
	    <xs:minInclusive value="0"/>
	    <xs:maxInclusive value="100"/>
	</xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="failureActionType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="drop"/>
            <xs:enumeration value="defer"/>
            <xs:enumeration value="exec"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="bundleLocationType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="memory"/>
            <xs:enumeration value="disk"/>
            <xs:enumeration value="nodata"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Bundle Type -->
    
    <xs:attributeGroup name="bundleAttributes">
        <xs:attribute name="bundleid" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Local bundle identifier.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="is_fragment" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether the bundle is a fragment.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="is_admin" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether the bundle is an administrative record.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="do_not_fragment" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether the bundle may be fragmented.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="priority" type="bundlePriorityType" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Bundle priority or class of service.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="custody_requested" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether bundle custody is requested.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="local_custody" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether the local node has custody of the bundle.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="singleton_dest" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether the destination is exactly one endpoint.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="custody_rcpt" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether custody receipts are requested.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="receive_rcpt" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether hop-by-hop reception receipts are requested.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="forward_rcpt" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether hop-by-hop forwarding reports are requested.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="delivery_rcpt" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether end-to-end delivery receipts are requested.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="deletion_rcpt" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether bundle deletion reports are requested.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="app_acked_rcpt" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether application acknowlegements are requested.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="creation_ts_seconds" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Seconds since 1/1/2000.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="creation_ts_seqno" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Subsecond sequence number.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="expiration" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Bundle expiration time.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="orig_length" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Length of original bundle.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="frag_offset" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Offset of fragment in the original bundle.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="owner" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Declared DTN node that "owns" the bundle (could be empty).
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:attributeGroup>

    <xs:complexType name="eidType">
        <xs:attribute name="uri" type="eidTypeType" use="required"/>
    </xs:complexType>

    <xs:attributeGroup name="payloadAttributes">
        <xs:attribute name="length" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Payload length.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="rcvd_length" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Actual length of payload available.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="base_offset" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
For bundle fragments, offset into the file (todo)
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:attributeGroup>

    <xs:complexType name="gbofIdType">
        <xs:sequence>
            <xs:element name="source" type="eidType"/>
        </xs:sequence>

        <xs:attribute name="creation_ts" type="xs:long" use="required">
            <xs:annotation><xs:documentation xml:lang="en">
                Seconds (and subsecond sequence number) since 1/1/2000.
            </xs:documentation></xs:annotation>
	</xs:attribute>
        <xs:attribute name="is_fragment" type="xs:boolean" use="required">
            <xs:annotation><xs:documentation xml:lang="en">
                Whether the bundle is a fragment.
            </xs:documentation></xs:annotation>
        </xs:attribute>
        <xs:attribute name="frag_length" type="xs:unsignedInt" use="required">
            <xs:annotation><xs:documentation xml:lang="en">
                Fragment length.
            </xs:documentation></xs:annotation>
	</xs:attribute>
        <xs:attribute name="frag_offset" type="xs:unsignedInt" use="required">
            <xs:annotation><xs:documentation xml:lang="en">
                Offset of fragment in the original bundle.
            </xs:documentation></xs:annotation>
        </xs:attribute>
    </xs:complexType>

    <xs:complexType name="bundleType">
        <xs:sequence>
            <xs:element name="source" type="eidType"/>
            <xs:element name="dest" type="eidType"/>
            <xs:element name="custodian" type="eidType"/>
            <xs:element name="replyto" type="eidType"/>
            <xs:element name="prevhop" type="eidType"/>
            <xs:element name="length" type="xs:unsignedInt"/>
            <xs:element name="location" type="bundleLocationType"/>
            <xs:element name="payload_file" type="xs:string" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
        <xs:attributeGroup ref="bundleAttributes"/>
    </xs:complexType>
    
    <!-- Contact Type -->
    
    <xs:attributeGroup name="contactAttributes">
        <xs:attribute name="start_time_sec" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Time when the contact began (seconds and subsecond sequence number since 1/1/2000).
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="start_time_usec" type="xs:unsignedInt" use="required"/>
        <xs:attribute name="duration" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Contact duration (0 if unknown).
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="bps" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Approximate bandwidth available.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="latency" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Approximate latency.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="pkt_loss_prob" type="percentType" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Packet loss probability.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:attributeGroup>
    
    <xs:complexType name="contactType">
        <xs:sequence>
            <xs:element name="link_attr" type="linkType"/>
        </xs:sequence>
        <xs:attributeGroup ref="contactAttributes"/>
    </xs:complexType>
        
    <!-- Convergence Layer Info Type -->
    
    <xs:attributeGroup name="clInfoAttributes">
        <xs:attribute name="local_addr" type="xs:string">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Local address.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="remote_addr" type="xs:string">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Remote address.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="local_port" type="xs:unsignedShort">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Local port.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="remote_port" type="xs:unsignedShort">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Remote port.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="segment_ack_enabled" type="xs:boolean">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Use per segment acks.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="negative_ack_enabled" type="xs:boolean">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Use negative acks.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="keepalive_interval" type="xs:unsignedInt">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Seconds between keepalive packets.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="segment_length" type="xs:unsignedInt">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Maximum size of transmitted segments.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="busy_queue_depth" type="xs:unsignedInt">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Maximum number of bundles allowed in connection queue.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="reactive_frag_enabled" type="xs:boolean">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether reactive fragmentation is enabled.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="sendbuf_length" type="xs:unsignedInt">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Buffer size for sending data (bytes).
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="recvbuf_length" type="xs:unsignedInt">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Buffer size for receiving data (bytes).
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="data_timeout" type="xs:unsignedInt">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Milliseconds to wait for data arrival.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="rate" type="xs:unsignedByte">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Rate (in bps)
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="bucket_depth" type="xs:unsignedInt">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Token bucket depth (in bits)
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="channel" type="xs:unsignedInt">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Default channel.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:attributeGroup>

    <xs:complexType name="clInfoType">
        <xs:attributeGroup ref="clInfoAttributes"/>
    </xs:complexType>
        
    <!-- Link Type -->
    
    <xs:attributeGroup name="linkAttributes">
        <xs:attribute name="type" type="linkTypeType" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Type of the link.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="nexthop" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Next hop (ie, underlay) address.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="state" type="linkStateType" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
State of the link.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="is_reachable" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether the link is reachable.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="is_usable" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether the link is usable.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="how_reliable" type="percentType" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
How reliable the link is.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="how_available" type="percentType" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
How available the link is.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
<!-- @@@ should this be here?
        <xs:attribute name="reactive_frag_enabled" type="xs:boolean" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether reactive fragmentation is enabled.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
-->
        <xs:attribute name="clayer" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Name of the convergence layer.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="min_retry_interval" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Minimum amount to wait between attempts to re-open the link (seconds).
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="max_retry_interval" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Maximum amount to wait between attempts to re-open the link (seconds).
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="idle_close_time" type="xs:unsignedInt" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Seconds of idle time before the link is closed. Zero for always on links (i.e. they are never closed).
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:attributeGroup>
    
    <xs:complexType name="linkType">
        <xs:sequence>
            <xs:element name="clinfo" type="clInfoType" minOccurs="0"/>
            <xs:element name="remote_eid" type="eidType"/>
        </xs:sequence>
        <xs:attributeGroup ref="linkAttributes"/>
    </xs:complexType>

    <!-- Route Entry Type -->
    
    <xs:attributeGroup name="routeEntryAttributes">
        <xs:attribute name="route_priority" type="xs:integer" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Route priority.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="action" type="bundleForwardActionType" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Forwarding behavior.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="link" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Next hop link.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:attributeGroup>
    
    <xs:complexType name="routeEntryType">
        <xs:sequence>
            <xs:element name="dest_pattern" type="eidType"/>
            <xs:element name="source_pattern" type="eidType"/>
        </xs:sequence>
        <xs:attributeGroup ref="routeEntryAttributes"/>
    </xs:complexType>
    
    <!-- Custody Signal Type -->
    
    <xs:attributeGroup name="custodySignalAttributes">
        <xs:attribute name="admin_type" type="xs:unsignedByte" use="required"/>
        <xs:attribute name="admin_flags" type="xs:unsignedByte" use="required"/>
        <xs:attribute name="succeeded" type="xs:boolean" use="required"/>
        <xs:attribute name="reason" type="xs:unsignedByte" use="required"/>
        <xs:attribute name="orig_frag_offset" type="xs:unsignedLong" use="required"/>
        <xs:attribute name="orig_frag_length" type="xs:unsignedLong" use="required"/>
        <xs:attribute name="custody_signal_seconds" type="xs:unsignedInt" use="required"/>
        <xs:attribute name="custody_signal_seqno" type="xs:unsignedInt" use="required"/>
        <xs:attribute name="orig_creation_seconds" type="xs:unsignedInt" use="required"/>
        <xs:attribute name="orig_creation_seqno" type="xs:unsignedInt" use="required"/>
    </xs:attributeGroup>

    <xs:complexType name="custodySignalType">
        <xs:attributeGroup ref="custodySignalAttributes"/>
    </xs:complexType>

    <!-- Registration Type -->

    <xs:attributeGroup name="registrationAttributes">
        <xs:attribute name="regid" type="xs:unsignedInt" use="required"/>
        <xs:attribute name="action" type="failureActionType" use="required"/>
        <xs:attribute name="script" type="xs:string" use="required"/>
        <xs:attribute name="expiration" type="xs:unsignedInt" use="required"/>
    </xs:attributeGroup>

    <xs:complexType name="registrationType">
        <xs:sequence>
            <xs:element name="endpoint" type="eidType"/>
        </xs:sequence>
        <xs:attributeGroup ref="registrationAttributes"/>
    </xs:complexType>

    <!-- Link Configuration Parameters -->

    <xs:attributeGroup name="linkConfigParams">
        <xs:attribute name="is_usable" type="xs:boolean">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether the link is allowed to be used to transmit bundles.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="reactive_frag_enabled" type="xs:boolean">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Whether reactive fragmentation is enabled.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="nexthop" type="xs:string">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Next hop address.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <!-- Following are DTN2 parameters not listed in the DP interface -->
        <xs:attribute name="min_retry_interval" type="xs:unsignedInt">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Minimum amount to wait between attempts to re-open the link (seconds).
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="max_retry_interval" type="xs:unsignedInt">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Maximum amount to wait between attempts to re-open the link (seconds).
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="idle_close_time" type="xs:unsignedInt">
            <xs:annotation>
                <xs:documentation xml:lang="en">
Seconds of idle time before the link is closed. Zero for always on links (i.e. they are never closed).
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:attributeGroup>
    
    <xs:complexType name="linkConfigType">
        <xs:sequence>
            <xs:element name="cl_params" type="key_value_pair" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attributeGroup ref="linkConfigParams"/>
    </xs:complexType>
        
    <!-- Generic parameters -->

    <xs:complexType name="key_value_pair">
        <xs:sequence>
	    <xs:element name="name" type="xs:string"/>
	    <xs:choice minOccurs="1" maxOccurs="1">
		<xs:element name="bool_value" type="xs:boolean"/> 
		<xs:element name="u_int_value" type="xs:unsignedInt"/>
		<xs:element name="int_value" type="xs:int"/>
		<xs:element name="str_value" type="xs:string"/>
	    </xs:choice> 
        </xs:sequence>
    </xs:complexType>

    <!-- Bundle Attributes Query types -->

    <xs:simpleType name="bundleAttributesSimpleQueryType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="bundleid"/>
            <xs:enumeration value="is_admin"/>
            <xs:enumeration value="do_not_fragment"/>
            <xs:enumeration value="priority"/>
            <xs:enumeration value="custody_requested"/>
            <xs:enumeration value="local_custody"/>
            <xs:enumeration value="singleton_dest"/>
            <xs:enumeration value="custody_rcpt"/>
            <xs:enumeration value="receive_rcpt"/>
            <xs:enumeration value="forward_rcpt"/>
            <xs:enumeration value="delivery_rcpt"/>
            <xs:enumeration value="deletion_rcpt"/>
            <xs:enumeration value="app_acked_rcpt"/>
            <xs:enumeration value="expiration"/>
            <xs:enumeration value="orig_length"/>
            <xs:enumeration value="owner"/>
            <xs:enumeration value="source"/>
            <xs:enumeration value="dest"/>
            <xs:enumeration value="custodian"/>
            <xs:enumeration value="replyto"/>
            <xs:enumeration value="prevhop"/>
            <xs:enumeration value="location"/>
            <xs:enumeration value="payload_file"/>
            <xs:enumeration value="meta_block_list"/>
        </xs:restriction>
    </xs:simpleType>

<!--    <xs:simpleType name="bundleMetaBlockTypeType">
        <xs:restriction base="xs:unsignedByte">
            <xs:minInclusive value="2"/>
        </xs:restriction>
    </xs:simpleType>
-->

    <xs:complexType name="bundleMetaBlockQueryType">
        <xs:choice>
            <xs:element name="type" type="xs:long"/>
            <xs:element name="identifier" type="xs:unsignedInt"/>
        </xs:choice>
    </xs:complexType>

    <xs:complexType name="bundleAttributesQueryType">
        <xs:choice>
            <xs:element name="query" type="bundleAttributesSimpleQueryType"/>
            <xs:element name="meta_blocks" type="bundleMetaBlockQueryType"/>
        </xs:choice>
    </xs:complexType>

    <xs:attributeGroup name="bundleQueriedAttributes">
        <xs:attribute name="bundleid" type="xs:unsignedInt" use="optional"/>
        <xs:attribute name="is_admin" type="xs:boolean" use="optional"/>
        <xs:attribute name="do_not_fragment" type="xs:boolean" use="optional"/>
        <xs:attribute name="priority" type="bundlePriorityType" use="optional"/>
        <xs:attribute name="custody_requested" type="xs:boolean" use="optional"/>
        <xs:attribute name="local_custody" type="xs:boolean" use="optional"/>
        <xs:attribute name="singleton_dest" type="xs:boolean" use="optional"/>
        <xs:attribute name="custody_rcpt" type="xs:boolean" use="optional"/>
        <xs:attribute name="receive_rcpt" type="xs:boolean" use="optional"/>
        <xs:attribute name="forward_rcpt" type="xs:boolean" use="optional"/>
        <xs:attribute name="delivery_rcpt" type="xs:boolean" use="optional"/>
        <xs:attribute name="deletion_rcpt" type="xs:boolean" use="optional"/>
        <xs:attribute name="app_acked_rcpt" type="xs:boolean" use="optional"/>
        <xs:attribute name="expiration" type="xs:unsignedInt" use="optional"/>
        <xs:attribute name="orig_length" type="xs:unsignedInt" use="optional"/>
        <xs:attribute name="owner" type="xs:string" use="optional"/>
        <xs:attribute name="location" type="bundleLocationType" use="optional"/>
        <xs:attribute name="payload_file" type="xs:string" use="optional"/>
    </xs:attributeGroup>

    <xs:complexType name="metadataBlockType">
        <xs:attribute name="identifier" type="xs:unsignedInt" use="required"/>
        <xs:attribute name="generated" type="xs:boolean" use="required"/>
        <xs:attribute name="type" type="xs:unsignedInt" use="required"/>
        <xs:attribute name="contents" type="xs:base64Binary" use="required"/>
    </xs:complexType>

    <xs:complexType name="bundleAttributesReportType">
        <xs:sequence>
            <xs:element name="dest" type="eidType" minOccurs="0" maxOccurs="1"/>
            <xs:element name="custodian" type="eidType" minOccurs="0" maxOccurs="1"/>
            <xs:element name="replyto" type="eidType" minOccurs="0" maxOccurs="1"/>
            <xs:element name="prevhop" type="eidType" minOccurs="0" maxOccurs="1"/>
            <xs:element name="meta_blocks" type="metadataBlockType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attributeGroup ref="bundleQueriedAttributes"/>
    </xs:complexType>

    
    
<!-- EVENTS -->

    <!-- Bundle Received Event -->

    <xs:element name="bundle_received_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a new bundle arrival.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/> 
                <xs:element name="dest" type="eidType"/>
                <xs:element name="custodian" type="eidType"/>
                <xs:element name="replyto" type="eidType"/>
                <xs:element name="prevhop" type="eidType" minOccurs="0"/>
            </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
            <xs:attribute name="expiration" type="xs:unsignedInt" use="required"/>
            <xs:attribute name="bytes_received" type="xs:unsignedInt" use="required"/>
            <xs:attribute name="num_meta_blocks" type="xs:unsignedInt" use="optional"/>
        </xs:complexType>
    </xs:element>

    <!-- Data Transmitted Event -->
    
    <xs:element name="data_transmitted_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a bundle or bundle fragment transmission.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/> 
            </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
            <xs:attribute name="bytes_sent" type="xs:unsignedInt" use="required"/>
            <xs:attribute name="reliably_sent" type="xs:unsignedInt" use="required"/>
        </xs:complexType>
    </xs:element>
    
    <!-- Bundle Delivered Event -->

    <xs:element name="bundle_delivered_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a new bundle arrival that is destined for this node.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/> 
            </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Bundle Delivery Event -->

    <xs:element name="bundle_delivery_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a new bundle arrival that is destined for an external router.  External routers access the bundle using the payload filename attribute.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/>
                <xs:element name="bundle" type="bundleType"/>
            </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Bundle Send Cancelled Event -->

    <xs:element name="bundle_send_cancelled_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals when a bundle that was previously requested to be sent using RequestSendBundle is cancelled upon a subsequent request of RequestCancelBundleSend.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/> 
                <xs:element name="link_id" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Bundle Expired Event -->
    
    <xs:element name="bundle_expired_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals bundle expiration.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/> 
            </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Bundle Injected Event -->

    <xs:element name="bundle_injected_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals that a Inject Bundle Request was successful, and correlates the newly generated GBOF_ID with the Request ID. This event does NOT signal that the bundle was transmitted, because a Send Bundle Request is required for that.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="request_id" type="xs:string"/>
                <xs:element name="gbof_id" type="gbofIdType"/> 
            </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Link Opened Event -->
    
    <xs:element name="link_opened_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals when a link is opened.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="contact_attr" type="contactType"/>
            </xs:sequence>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>
    
    <!-- Link Closed Event -->

    <xs:element name="link_closed_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals when a link has closed.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="contact_attr" type="contactType"/>
            </xs:sequence>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
            <xs:attribute name="reason" type="contactReasonType" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Link Created Event -->
    
    <xs:element name="link_created_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals the creation of a new link.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="link_attr" type="linkType"/>
            </xs:sequence>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
            <xs:attribute name="reason" type="contactReasonType" use="required"/>
        </xs:complexType>
    </xs:element>
    
    <!-- Link Deleted Event -->

    <xs:element name="link_deleted_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a link deletion.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
            <xs:attribute name="reason" type="contactReasonType" use="required"/>
        </xs:complexType>
    </xs:element>
    
    <!-- Link Available Event -->

    <xs:element name="link_available_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals availability of a link.  ONDEMAND links still need to be opened (open_link_request) before they can be used.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
            <xs:attribute name="reason" type="contactReasonType" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Link Unavailable Event -->
    
    <xs:element name="link_unavailable_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a link as unavailable.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
            <xs:attribute name="reason" type="contactReasonType" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Link Attribute Change Event -->
    
    <xs:element name="link_attribute_changed_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a link attribute has changed.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="link_attr" type="linkType"/>
            </xs:sequence>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
            <xs:attribute name="reason" type="contactReasonType" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Contact Attribute Change Event -->

    <xs:element name="contact_attribute_changed_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals when a contact attribute has changed.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="contact_eid" type="eidType"/>
                <xs:element name="contact_attr" type="contactType"/>
            </xs:sequence>
            <xs:attribute name="reason" type="contactReasonType" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Link Busy Event -->
    
    <xs:element name="link_busy_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a link as busy.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="link" type="linkType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <!-- EID Reachable Event -->

    <xs:element name="eid_reachable_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals discovery of a new EID.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="peer_eid" type="eidType"/>
            </xs:sequence>
            <xs:attribute name="interface_name" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Route Add Event -->
    
    <xs:element name="route_add_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a new static route added from the DTN console.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="route_entry" type="routeEntryType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <!-- Route Delete Event -->

    <xs:element name="route_delete_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a static route was deleted from the DTN console.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="dest" type="eidType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Custody Signal Event -->
    
    <xs:element name="custody_signal_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a bundle custody transfer.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/> 
                <xs:element name="custody_signal_attr" type="custodySignalType"/>
            </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
        </xs:complexType>
    </xs:element>
    
    <!-- Custody Timeout Event -->

    <xs:element name="custody_timeout_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a bundle custody transfer timeout.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/> 
            </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Intentional Name Resolved Event -->
    
    <xs:element name="intentional_name_resolved_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Pass-through response to intentional name resolver.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
        <xs:sequence>
            <xs:element name="request_id" type="xs:string" minOccurs="1" maxOccurs="1"/>
            <xs:element name="response_id" type="xs:string" minOccurs="1" maxOccurs="1"/>
            <xs:element name="router_eid" type="eidType" minOccurs="1" maxOccurs="1"/>
            <xs:element name="lb_dp_eid" type="eidType" minOccurs="0" maxOccurs="1"/>
            <xs:element name="intentional_name" type="eidType" minOccurs="1" maxOccurs="1"/>
            <xs:element name="grain_state" type="xs:string" minOccurs="1" maxOccurs="1"/>
            <xs:element name="canonical_eids" type="eidType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="app_eids" type="eidType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Registration Added Event -->

    <xs:element name="registration_added_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a new application registration
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="registration" type="registrationType"/>
            </xs:sequence>
            <xs:attribute name="source" type="eventSourceType" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Registration Removed Event -->

    <xs:element name="registration_removed_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a registration removal
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="registration" type="registrationType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Registration Expired Event -->

    <xs:element name="registration_expired_event">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Signals a registration expiration
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="regid" type="xs:unsignedInt" use="required"/>
        </xs:complexType>
    </xs:element>



<!-- REQUESTS --> 

    <!-- Open Link Request -->

    <xs:element name="open_link_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Request that a link be opened.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>
    
    <!-- Close Link Request -->

    <xs:element name="close_link_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Request that a link be closed.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Add Link Request -->
    
    <xs:element name="add_link_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Request that a link be added.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
	    <xs:sequence>
	        <xs:element name="link_config_params" type="linkConfigType" minOccurs="0"/>
                <xs:element name="remote_eid" type="eidType"/>
	    </xs:sequence>
	    <xs:attribute name="link_id" type="xs:string" use="required"/>
            <xs:attribute name="link_type" type="linkTypeType" use="required"/>
            <xs:attribute name="clayer" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Delete Link Request -->
    
    <xs:element name="delete_link_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Request that a link be deleted.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Reconfigure Link Request -->

    <xs:element name="reconfigure_link_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Request that a link be reconfigured.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
	    <xs:sequence>
	        <xs:element name="link_config_params" type="linkConfigType"/>
	    </xs:sequence>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>
    
    <!-- Send Bundle Request -->

    <xs:element name="send_bundle_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Request that a bundle with "gbof_id" and "local_id" be sent on "link_id" with a particular "fwd_action". See bundleForwardActionType.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
	    <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/> 
                <xs:element name="metadata_block" type="metadataBlockType"
                            minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>

            <xs:attribute name="local_id" type="xs:long" use="required"/>
	    <xs:attribute name="link_id" type="xs:string" use="required"/>
	    <xs:attribute name="fwd_action" type="bundleForwardActionType" use="required"/>
	    <xs:attribute name="frag_size" type="xs:unsignedLong" use="optional"/>
	    <xs:attribute name="frag_offset" type="xs:unsignedLong" use="optional"/>
        </xs:complexType>
    </xs:element>

    <!-- Send Bundle Broadcast Request -->

    <xs:element name="send_bundle_broadcast_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Request that a bundle with "gbof_id" and "local_id" be broadcasted with a particular "fwd_action". See bundleForwardActionType.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
	    <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/> 
	        <xs:element name="metadata_block" type="metadataBlockType"
                            minOccurs="0" maxOccurs="unbounded"/>
	    </xs:sequence>

            <xs:attribute name="local_id" type="xs:long" use="required"/>
	    <xs:attribute name="fwd_action" type="bundleForwardActionType" use="required"/>
	    <xs:attribute name="frag_size" type="xs:unsignedLong" use="optional"/>
	    <xs:attribute name="frag_offset" type="xs:unsignedLong" use="optional"/>
        </xs:complexType>
    </xs:element>

    <!-- Cancel Bundle Request -->
    
    <xs:element name="cancel_bundle_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Request that a bundle transmission be cancelled.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
	    <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/> 
	    </xs:sequence>

            <xs:attribute name="local_id" type="xs:long" use="required"/>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Inject Bundle Request -->

    <xs:element name="inject_bundle_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Request that a router generated bundle be sent.  Pay special attention to required and optional attributes.  This message type requires that the bundle payload be base64 encoded.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
	    <xs:sequence>
		<xs:element name="source" type="eidType"/>
		<xs:element name="dest" type="eidType"/>
		<xs:element name="replyto" type="eidType" minOccurs="0"/>
		<xs:element name="custodian" type="eidType" minOccurs="0"/>
	    </xs:sequence>
            <xs:attribute name="request_id" type="xs:string" use="required"/>
            <xs:attribute name="link_id" type="xs:string" use="required"/>
            <xs:attribute name="fwd_action" type="bundleForwardActionType" use="optional"/>
            <xs:attribute name="priority" type="bundlePriorityType" use="optional"/>
            <xs:attribute name="expiration" type="xs:unsignedInt" use="optional"/>
            <xs:attribute name="payload_file" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Delete Bundle Request -->
    
    <xs:element name="delete_bundle_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Request that a stored bundle be deleted.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
	    <xs:sequence>
                <xs:element name="gbof_id" type="gbofIdType"/> 
	    </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Set CL Params Request -->
    
    <xs:element name="set_cl_params_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Pass-through request to BPA to set convergence layer adapter params.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
        <xs:sequence>
            <xs:element name="cl_params" type="key_value_pair" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
	<xs:attribute name="clayer" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>

    <!-- Intentional Name Resolution Request -->
    
    <xs:element name="intentional_name_resolution_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Pass-through request to intentional name resolver.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
        <xs:sequence>
            <xs:element name="gbof_id" type="gbofIdType" minOccurs="1" maxOccurs="1"/>
            <xs:element name="request_id" type="xs:string" minOccurs="1" maxOccurs="1"/>
            <xs:element name="router_eid" type="eidType" minOccurs="1" maxOccurs="1"/>
            <xs:element name="intentional_name" type="eidType" minOccurs="1" maxOccurs="1"/>
            <xs:element name="grain_state" type="xs:string" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Deliver Bundle To Application Request -->

    <xs:element name="deliver_bundle_to_app_request">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Requests delivery of a specific bundle to a specific registration on this node.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="endpoint" type="eidType"/>
                <xs:element name="gbof_id" type="gbofIdType"/>
            </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
        </xs:complexType>
    </xs:element>


<!-- QUERIES / REPORTS -->

    <!-- Links -->

    <xs:element name="link_query" type="xs:anyType">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Query for information on links.
            </xs:documentation>
        </xs:annotation>
    </xs:element>

    <xs:element name="link_report">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Meta-information on links.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="link" type="linkType" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="link_attributes_query">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Query for information on links.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="query_id" type="xs:string"/>
                <xs:element name="link_id" type="xs:string"/>
                <xs:element name="query_params" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="link_attributes_report">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Meta-information on links.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="query_id" type="xs:string"/>

                <xs:element name="report_params" type="key_value_pair" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Contacts -->

    <xs:element name="contact_query" type="xs:anyType">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Query for information on contacts.
            </xs:documentation>
        </xs:annotation>
    </xs:element>

    <xs:element name="contact_report">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Meta-information on contacts.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="contact" type="contactType" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <!-- Static Routes -->

    <xs:element name="route_query" type="xs:anyType">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Query for information on static routes.
            </xs:documentation>
        </xs:annotation>
    </xs:element>

    <xs:element name="route_report">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Meta-information on static routes.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="route_entry" type="routeEntryType" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <!-- Bundles -->
    
    <xs:element name="bundle_query" type="xs:anyType">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Query for information on bundles (incl. custody bundles).
            </xs:documentation>
        </xs:annotation>
    </xs:element>

    <xs:element name="bundle_report">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Meta-information on bundles.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="bundle" type="bundleType"  minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="bundle_attributes_query">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Query for information on bundles (incl. custody bundles).
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="query_id" type="xs:string"/>
                <xs:element name="gbof_id" type="gbofIdType"/> 
                <xs:element name="query_params" type="bundleAttributesQueryType" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="local_id" type="xs:long" use="required"/>
        </xs:complexType>
    </xs:element>

    <xs:element name="bundle_attributes_report">
        <xs:annotation>
            <xs:documentation xml:lang="en">
Meta-information on bundles.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="query_id" type="xs:string"/>
                <xs:element name="report_params" type="bundleAttributesReportType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="bpa">
    <xs:annotation>
        <xs:documentation xml:lang="en">
Carry two or more router message on a single packet.
        </xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:all>
            <xs:element ref="bundle_received_event" minOccurs="0"/>
            <xs:element ref="data_transmitted_event" minOccurs="0"/>
            <xs:element ref="bundle_delivered_event" minOccurs="0"/>
            <xs:element ref="bundle_delivery_event" minOccurs="0"/>
            <xs:element ref="bundle_expired_event" minOccurs="0"/>
            <xs:element ref="bundle_send_cancelled_event" minOccurs="0"/>
            <xs:element ref="bundle_injected_event" minOccurs="0"/>
            <xs:element ref="link_opened_event" minOccurs="0"/>
            <xs:element ref="link_closed_event" minOccurs="0"/>
            <xs:element ref="link_created_event" minOccurs="0"/>
            <xs:element ref="link_deleted_event" minOccurs="0"/>
            <xs:element ref="link_available_event" minOccurs="0"/>
            <xs:element ref="link_unavailable_event" minOccurs="0"/>
            <xs:element ref="link_attribute_changed_event" minOccurs="0"/>
            <xs:element ref="contact_attribute_changed_event" minOccurs="0"/>
            <xs:element ref="link_busy_event" minOccurs="0"/>
            <xs:element ref="eid_reachable_event" minOccurs="0"/>
            <xs:element ref="route_add_event" minOccurs="0"/>
            <xs:element ref="route_delete_event" minOccurs="0"/>
            <xs:element ref="custody_signal_event" minOccurs="0"/>
            <xs:element ref="custody_timeout_event" minOccurs="0"/>
            <xs:element ref="intentional_name_resolved_event" minOccurs="0"/>
            <xs:element ref="registration_added_event" minOccurs="0"/>
            <xs:element ref="registration_removed_event" minOccurs="0"/>
            <xs:element ref="registration_expired_event" minOccurs="0"/>
            <xs:element ref="open_link_request" minOccurs="0"/>
            <xs:element ref="close_link_request" minOccurs="0"/>
            <xs:element ref="add_link_request" minOccurs="0"/>
            <xs:element ref="delete_link_request" minOccurs="0"/>
            <xs:element ref="reconfigure_link_request" minOccurs="0"/>
            <xs:element ref="send_bundle_request" minOccurs="0"/>
            <xs:element ref="send_bundle_broadcast_request" minOccurs="0"/>
            <xs:element ref="cancel_bundle_request" minOccurs="0"/>
            <xs:element ref="inject_bundle_request" minOccurs="0"/>
            <xs:element ref="delete_bundle_request" minOccurs="0"/>
            <xs:element ref="set_cl_params_request" minOccurs="0"/>
            <xs:element ref="intentional_name_resolution_request" minOccurs="0"/>
            <xs:element ref="deliver_bundle_to_app_request" minOccurs="0"/>
            <xs:element ref="link_query" minOccurs="0"/>
            <xs:element ref="link_report" minOccurs="0"/>
            <xs:element ref="link_attributes_query" minOccurs="0"/>
            <xs:element ref="link_attributes_report" minOccurs="0"/>
            <xs:element ref="contact_query" minOccurs="0"/>
            <xs:element ref="contact_report" minOccurs="0"/>
            <xs:element ref="route_query" minOccurs="0"/>
            <xs:element ref="route_report" minOccurs="0"/>
            <xs:element ref="bundle_query" minOccurs="0"/>
            <xs:element ref="bundle_report" minOccurs="0"/>
            <xs:element ref="bundle_attributes_query" minOccurs="0"/>
            <xs:element ref="bundle_attributes_report" minOccurs="0"/>
        </xs:all>
        <xs:attribute name="eid" type="xs:string" use="optional"/>
        <xs:attribute name="hello_interval" type="xs:unsignedShort" use="optional"/>
        <xs:attribute name="alert" type="dtnStatusType" use="optional"/>
    </xs:complexType>
</xs:element>

</xs:schema>

