<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT xbone (credential?, command)> 
<!ATTLIST xbone
    version CDATA #REQUIRED
    release CDATA #REQUIRED
>

<!ELEMENT credential (property+)>

<!ELEMENT command (create_overlay_reply| 
                   create_overlay |
                   list_overlays_reply | 
                   list_overlays | 
                   overlay_status_reply |
                   overlay_status | 
                   discover_daemons_reply |
                   discover_daemons | 
                   destroy_overlay_reply | 
                   destroy_overlay | 
                   destroyall_overlays_reply | 
                   destroyall_overlays | 
                   error_reply)>

<!ELEMENT create_overlay (property+, xol_program)>
<!ELEMENT create_overlay_reply (property+, node*)>

<!ELEMENT list_overlays EMPTY>
<!ELEMENT list_overlays_reply (property?, argstring*)>

<!ELEMENT overlay_status (property+)>
<!ELEMENT overlay_status_reply (property+, node*)>

<!ELEMENT discover_daemons_reply (property+, node*)>
<!ELEMENT discover_daemons (property+)>

<!ELEMENT destroy_overlay (property+)>
<!ELEMENT destroy_overlay_reply (property+)>

<!ELEMENT destroyall_overlays EMPTY>
<!ELEMENT destroyall_overlays_reply (property+)>

<!ELEMENT error_reply (property+)>

<!ELEMENT argstring EMPTY>
<!ATTLIST argstring
    value CDATA #REQUIRED
>

<!ELEMENT node (property+, tunnel*)>

<!ELEMENT tunnel (property+)>

<!ELEMENT xol_program (define_prop*, node_def+, vnode)> 
<!ATTLIST xol_program
    version CDATA #REQUIRED
>

<!ELEMENT define_prop (property)>
<!ATTLIST define_prop
    synonym CDATA #REQUIRED
>

<!ELEMENT node_def (iface+, vnode*, link*, property*, application*)>
<!ATTLIST node_def
    ident CDATA #REQUIRED
>

<!ELEMENT iface (renames|property*)>
<!ATTLIST iface
    ident CDATA #REQUIRED
>

<!ELEMENT renames (endpoint, property*)>
                 
<!ELEMENT vnode (property*)> 
<!ATTLIST vnode
    ident CDATA #REQUIRED
    type  CDATA #REQUIRED
> 

<!ELEMENT link (endpoint, endpoint, property*)>
<!ATTLIST link
    ident CDATA #REQUIRED
>

<!ELEMENT property EMPTY>
<!ATTLIST property
    tag CDATA #REQUIRED
    value CDATA #IMPLIED
>

<!ELEMENT endpoint EMPTY> 
<!ATTLIST endpoint
    node CDATA #REQUIRED
    iface CDATA #REQUIRED
> 

<!ELEMENT application EMPTY>
<!ATTLIST application
    program  CDATA #REQUIRED
    script   CDATA #REQUIRED
    checksum CDATA #IMPLIED
    suid     CDATA #IMPLIED
    nodes    CDATA #IMPLIED
    ifaces   CDATA #IMPLIED
>
