<?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 (equivto*, ndecl+, instance)> 
<!ATTLIST xol_program
    version CDATA #REQUIRED
>

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

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

<!ELEMENT instance EMPTY> 
<!ATTLIST instance
    overlay CDATA #REQUIRED
    type 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
    prop CDATA #REQUIRED
    value CDATA #IMPLIED
>

<!ELEMENT endpoint EMPTY> 
<!ATTLIST endpoint
    vnode 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
>
