Supported by the GlobalNOC at Indiana University

GMOC Data Exchange Format v3

The RELAX NG standard and compact XML syntax specifying the 3.0 version of the GENI data exchange format is given below.

start = element gmoc_topology { gmoc-topo-content }
gmoc-topo-content =
  attribute version { xsd:integer },
  attribute time { xsd:integer },
  element location { location-content }*,
  element contact { contact-content }*,
  element organization { organization-content }*,
  (element point_of_presence { pop-content-old }
   | element pop { pop-content })*,
  element sa { sa-content }*,
  element aggregate { aggregate-content }*,
  element slice { slice-content-old }*,
  (element device { device-content }
   | element resource { resource-content })*,
  element net_topology { net_topology-content }*
location-content =
  attribute name { text },
  (element address { address-content }
   | element geo_location { geo_location-content }
   | (element address { address-content },
      element geo_location { geo_location-content }))
address-content =
  (attribute address { text }
   | attribute street1 { text })?,
  attribute street2 { text }?,
  attribute city { text },
  (attribute province { text }
   | attribute state { text }),
  attribute country { text },
  attribute postal_code { text }?
geo_location-content =
  attribute latitude { xsd:double },
  attribute longitude { xsd:double }
contact-content =
  attribute urn { text }?,
  (attribute email_address { text }
   | attribute email { text }),
  attribute last_name { text },
  (attribute given_names { text }
   | attribute given_name { text }),
  attribute phone { text }?,
  (attribute organization_name { text }
   | attribute organization { text })?
organization-content =
  attribute urn { text }?,
  attribute type { text }?,
  attribute name { text },
  attribute primary_contact { text },
  attribute secondary_contact { text }?,
  (attribute location_name { text }
   | attribute location { text })
sa-content =
  attribute name { text },
  attribute urn { text },
  attribute type { text },
  attribute version { text },
  attribute pop { text },
  attribute organization { text },
  element slice { slice-content }*,
  element user { user-content }*
aggregate-content =
  attribute type { text },
  attribute name { text },
  attribute version { text },
  attribute pop { text },
  attribute organization { text },
  element sliver { sliver-content }*
sliver-content =
  attribute local_name { text },
  attribute uuid { text },
  attribute created { xsd:integer },
  attribute expires { xsd:integer },
  attribute creator { text },
  attribute slice_urn { text },
  attribute slice_uuid { text },
  attribute state { "Up" | "Down" | "Degraded" | "Unknown" },
  attribute approved { text }?,
  element resource_mapping { resource-mapping-content }*
resource-mapping-content =
  attribute resource { text },
  attribute type { text },
  attribute local_name { text }
resource-content =
  attribute type { text },
  attribute name { text },
  attribute aggregate { text }?,
  attribute pop { text },
  attribute organization { text },
  attribute description { text },
  element interface { interface-content }*
interface-content =
  attribute name { text },
  attribute parent { text }?,
  attribute contracted_bw { xsd:double }?,
  attribute max_bps { xsd:integer }?,
  attribute state { "Up" | "Down" | "Degraded" | "Unknown" }?,
  attribute admin_state {
    "Planning"
    | "Provisioning"
    | "Available"
    | "NormalOperation"
    | "Maintenance"
    | "Unknown"
    | "Decomissioned"
  }?,
  element address { interface-address-content }*,
  element vlan { xsd:integer }*
interface-address-content =
  attribute type { "MAC" | "IPv4" | "IPv6" },
  attribute netmask_len { text }?,
  xsd:string
slice-content =
  attribute urn { text },
  attribute uuid { text }?,
  attribute created { xsd:integer }?,
  attribute expires { xsd:integer }?,
  attribute creator { text }?,
  attribute operator { text },
  attribute primary_contact { text }
user-content = attribute urn { text }
slice-content-old =
  attribute name { text },
  attribute operator_org_name { text },
  attribute primary_contact_email { text }
pop-content-old =
  attribute name { text },
  attribute location_name { text },
  attribute operator_org_name { text },
  attribute admin_org_name { text }?
pop-content =
  attribute name { text },
  attribute location { text },
  attribute operator { text },
  attribute admin { text }?
device-content =
  attribute name { text },
  element device_location { device_location-content },
  attribute operator_org_name { text },
  attribute admin_org_name { text }?,
  attribute device_type { text },
  attribute sw_version { text }?,
  attribute hw_version { text }?,
  attribute dns_name { text }?,
  attribute operational_state { operational_state-type }?,
  attribute administrative_state { administrative_state-type }?,
  element interface { interface-content-old }*
device_location-content =
  attribute pop_name { text }
  | attribute parent_device_name { text }
interface-content-old =
  attribute name { text },
  attribute contracted_bw { xsd:double }?,
  attribute max_bps { xsd:double }?,
  attribute administrative_state { administrative_state-type }?,
  attribute operational_state { operational_state-type }?,
  element net_addr { net_addr-content }*,
  element slice_name { text }*
net_addr-content =
  attribute net_addr_type { "IPv4" | "IPv6" | "MAC" },
  attribute addr { text },
  attribute netmask_len { xsd:integer }?
administrative_state-type =
  xsd:string {
    pattern =
      "Planning|Provisioning|Available|Assigned|Maintenance|Unknown|Decomissioned"
  }
operational_state-type =
  xsd:string { pattern = "Up|Degraded|Down|Unknown" }
net_topology-content =
  element network { network-content }+,
  element circuit_hierarchy { circuit_hierarchy-content }*
network-content =
  attribute name { text },
  attribute operator_org_name { text },
  attribute admin_org_name { text }?,
  element circuit { circuit-content }*
circuit-content =
  attribute name { text },
  attribute type {
    "unspecified"
    | "100ME"
    | "1GE"
    | "10GE"
    | "ETHCHAN"
    | "OC12"
    | "OC48"
    | "OC192"
    | "CHAN"
    | "VLAN"
    | "802.11"
  }?,
  attribute administrative_state { administrative_state-type }?,
  attribute channel { xsd:integer }?,
  attribute reserved_bw { xsd:integer }?,
  attribute vlan { xsd:integer }?,
  element endpoint { circuit_endpoint-content }*
circuit_endpoint-content =
  attribute device_name { text },
  attribute interface_name { text }
circuit_hierarchy-content =
  element upper_circuit_name { text },
  element lower_circuit_name { text }

 

<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <start>
    <element name="gmoc_topology">
      <ref name="gmoc-topo-content"/>
    </element>
  </start>

  <define name="gmoc-topo-content">
    <attribute name="version">
      <data type="integer"/>
    </attribute>
    <attribute name="time">
      <data type="integer"/>
    </attribute>
    <zeroOrMore>
      <element name="location">
        <ref name="location-content"/>
      </element>
    </zeroOrMore>
    <zeroOrMore>
      <element name="contact">
        <ref name="contact-content"/>
      </element>
    </zeroOrMore>
    <zeroOrMore>
      <element name="organization">
        <ref name="organization-content"/>
      </element>
    </zeroOrMore>
    <zeroOrMore>
      <choice>
        <element name="point_of_presence">
          <ref name="pop-content-old"/>
        </element>
        <element name="pop">
          <ref name="pop-content"/>
        </element>
      </choice>
    </zeroOrMore>
    <zeroOrMore>
      <element name="sa">
        <ref name="sa-content"/>
      </element>
    </zeroOrMore>
    <zeroOrMore>
      <element name="aggregate">
        <ref name="aggregate-content"/>
      </element>
    </zeroOrMore>
    <zeroOrMore>
      <element name="slice">
        <ref name="slice-content-old"/>
      </element>
    </zeroOrMore>
    <zeroOrMore>
      <choice>
        <element name="device">
          <ref name="device-content"/>
        </element>
        <element name="resource">
          <ref name="resource-content"/>
        </element>
      </choice>
    </zeroOrMore>
    <zeroOrMore>
      <element name="net_topology">
        <ref name="net_topology-content"/>
      </element>
    </zeroOrMore>
  </define>

  <define name="location-content">
    <attribute name="name"/>
    <choice>
      <element name="address">
        <ref name="address-content"/>
      </element>
      <element name="geo_location">
        <ref name="geo_location-content"/>
      </element>
      <group>
        <element name="address">
          <ref name="address-content"/>
        </element>
        <element name="geo_location">
          <ref name="geo_location-content"/>
        </element>
      </group>
    </choice>
  </define>

  <define name="address-content">
    <optional>
      <choice>
        <attribute name="address"/>
        <attribute name="street1"/>
      </choice>
    </optional>
    <optional>
      <attribute name="street2"/>
    </optional>
    <attribute name="city"/>
    <choice>
      <attribute name="province"/>
      <attribute name="state"/>
    </choice>
    <attribute name="country"/>
    <optional>
      <attribute name="postal_code"/>
    </optional>
  </define>

  <define name="geo_location-content">
    <attribute name="latitude">
      <data type="double"/>
    </attribute>
    <attribute name="longitude">
      <data type="double"/>
    </attribute>
  </define>

  <define name="contact-content">
    <optional>
      <attribute name="urn"/>
    </optional>
    <choice>
      <attribute name="email_address"/>
      <attribute name="email"/>
    </choice>
    <attribute name="last_name"/>
    <choice>
      <attribute name="given_names"/>
      <attribute name="given_name"/>
    </choice>
    <optional>
      <attribute name="phone"/>
    </optional>
    <optional>
      <choice>
        <attribute name="organization_name"/>
        <attribute name="organization"/>
      </choice>
    </optional>
  </define>

  <define name="organization-content">
    <optional>
      <attribute name="urn"/>
    </optional>
    <optional>
      <attribute name="type"/>
    </optional>
    <attribute name="name"/>
    <attribute name="primary_contact"/>
    <optional>
      <attribute name="secondary_contact"/>
    </optional>
    <choice>
      <attribute name="location_name"/>
      <attribute name="location"/>
    </choice>
  </define>

  <define name="sa-content">
    <attribute name="name"/>
    <attribute name="urn"/>
    <attribute name="type"/>
    <attribute name="version"/>
    <attribute name="pop"/>
    <attribute name="organization"/>
    <zeroOrMore>
      <element name="slice">
        <ref name="slice-content"/>
      </element>
    </zeroOrMore>
    <zeroOrMore>
      <element name="user">
        <ref name="user-content"/>
      </element>
    </zeroOrMore>
  </define>

  <define name="aggregate-content">
    <attribute name="type"/>
    <attribute name="name"/>
    <attribute name="version"/>
    <attribute name="pop"/>
    <attribute name="organization"/>
    <zeroOrMore>
      <element name="sliver">
        <ref name="sliver-content"/>
      </element>
    </zeroOrMore>
  </define>

  <define name="sliver-content">
    <attribute name="local_name"/>
    <attribute name="uuid"/>
    <attribute name="created">
      <data type="integer"/>
    </attribute>
    <attribute name="expires">
      <data type="integer"/>
    </attribute>
    <attribute name="creator"/>
    <attribute name="slice_urn"/>
    <attribute name="slice_uuid"/>
    <attribute name="state">
      <choice>
        <value>Up</value>
        <value>Down</value>
        <value>Degraded</value>
        <value>Unknown</value>
      </choice>
    </attribute>
    <optional>
      <attribute name="approved"/>
    </optional>
    <zeroOrMore>
      <element name="resource_mapping">
        <ref name="resource-mapping-content"/>
      </element>
    </zeroOrMore>
  </define>

  <define name="resource-mapping-content">
    <attribute name="resource"/>
    <attribute name="type"/>
    <attribute name="local_name"/>
  </define>

  <define name="resource-content">
    <attribute name="type"/>
    <attribute name="name"/>
    <optional>
      <attribute name="aggregate"/>
    </optional>
    <attribute name="pop"/>
    <attribute name="organization"/>
    <attribute name="description"/>
    <zeroOrMore>
      <element name="interface">
        <ref name="interface-content"/>
      </element>
    </zeroOrMore>
  </define>

  <define name="interface-content">
    <attribute name="name"/>
    <optional>
      <attribute name="parent"/>
    </optional>
    <optional>
      <attribute name="contracted_bw">
        <data type="double"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="max_bps">
        <data type="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="state">
        <choice>
          <value>Up</value>
          <value>Down</value>
          <value>Degraded</value>
          <value>Unknown</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="admin_state">
        <choice>
          <value>Planning</value>
          <value>Provisioning</value>
          <value>Available</value>
          <value>NormalOperation</value>
          <value>Maintenance</value>
          <value>Unknown</value>
          <value>Decomissioned</value>
        </choice>
      </attribute>
    </optional>
    <zeroOrMore>
      <element name="address">
        <ref name="interface-address-content"/>
      </element>
    </zeroOrMore>
    <zeroOrMore>
      <element name="vlan">
        <data type="integer"/>
      </element>
    </zeroOrMore>
  </define>

  <define name="interface-address-content">
    <attribute name="type">
      <choice>
        <value>MAC</value>
        <value>IPv4</value>
        <value>IPv6</value>
      </choice>
    </attribute>
    <optional>
      <attribute name="netmask_len"/>
    </optional>
    <data type="string"/>
  </define>

  <define name="slice-content">
    <attribute name="urn"/>
    <optional>
      <attribute name="uuid"/>
    </optional>
    <optional>
      <attribute name="created">
        <data type="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="expires">
        <data type="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="creator"/>
    </optional>
    <attribute name="operator"/>
    <attribute name="primary_contact"/>
  </define>

  <define name="user-content">
    <attribute name="urn"/>
  </define>

  <define name="slice-content-old">
    <attribute name="name"/>
    <attribute name="operator_org_name"/>
    <attribute name="primary_contact_email"/>
  </define>

  <define name="pop-content-old">
    <attribute name="name"/>
    <attribute name="location_name"/>
    <attribute name="operator_org_name"/>
    <optional>
      <attribute name="admin_org_name"/>
    </optional>
  </define>

  <define name="pop-content">
    <attribute name="name"/>
    <attribute name="location"/>
    <attribute name="operator"/>
    <optional>
      <attribute name="admin"/>
    </optional>
  </define>

  <define name="device-content">
    <attribute name="name"/>
    <element name="device_location">
      <ref name="device_location-content"/>
    </element>
    <attribute name="operator_org_name"/>
    <optional>
      <attribute name="admin_org_name"/>
    </optional>
    <attribute name="device_type"/>
    <optional>
      <attribute name="sw_version"/>
    </optional>
    <optional>
      <attribute name="hw_version"/>
    </optional>
    <optional>
      <attribute name="dns_name"/>
    </optional>
    <optional>
      <attribute name="operational_state">
        <ref name="operational_state-type"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="administrative_state">
        <ref name="administrative_state-type"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <element name="interface">
        <ref name="interface-content-old"/>
      </element>
    </zeroOrMore>
  </define>

  <define name="device_location-content">
    <choice>
      <attribute name="pop_name"/>
      <attribute name="parent_device_name"/>
    </choice>
  </define>

  <define name="interface-content-old">
    <attribute name="name"/>
    <optional>
      <attribute name="contracted_bw">
        <data type="double"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="max_bps">
        <data type="double"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="administrative_state">
        <ref name="administrative_state-type"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="operational_state">
        <ref name="operational_state-type"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <element name="net_addr">
        <ref name="net_addr-content"/>
      </element>
    </zeroOrMore>
    <zeroOrMore>
      <element name="slice_name">
        <text/>
      </element>
    </zeroOrMore>
  </define>

  <define name="net_addr-content">
    <attribute name="net_addr_type">
      <choice>
        <value>IPv4</value>
        <value>IPv6</value>
        <value>MAC</value>
      </choice>
    </attribute>
    <attribute name="addr"/>
    <optional>
      <attribute name="netmask_len">
        <data type="integer"/>
      </attribute>
    </optional>
  </define>

  <define name="administrative_state-type">
    <data type="string">
      <param name="pattern">Planning|Provisioning|Available|Assigned|Maintenance|Unknown|Decomissioned</param>
    </data>
  </define>

  <define name="operational_state-type">
    <data type="string">
      <param name="pattern">Up|Degraded|Down|Unknown</param>
    </data>
  </define>

  <define name="net_topology-content">
    <oneOrMore>
      <element name="network">
        <ref name="network-content"/>
      </element>
    </oneOrMore>
    <zeroOrMore>
      <element name="circuit_hierarchy">
        <ref name="circuit_hierarchy-content"/>
      </element>
    </zeroOrMore>
  </define>

  <define name="network-content">
    <attribute name="name"/>
    <attribute name="operator_org_name"/>
    <optional>
      <attribute name="admin_org_name"/>
    </optional>
    <zeroOrMore>
      <element name="circuit">
        <ref name="circuit-content"/>
      </element>
    </zeroOrMore>
  </define>

  <define name="circuit-content">
    <attribute name="name"/>
    <optional>
      <attribute name="type">
        <choice>
          <value>unspecified</value>
          <value>100ME</value>
          <value>1GE</value>
          <value>10GE</value>
          <value>ETHCHAN</value>
          <value>OC12</value>
          <value>OC48</value>
          <value>OC192</value>
          <value>CHAN</value>
          <value>VLAN</value>
          <value>802.11</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="administrative_state">
        <ref name="administrative_state-type"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="channel">
        <data type="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="reserved_bw">
        <data type="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="vlan">
        <data type="integer"/>
      </attribute>
    </optional>
    <zeroOrMore>
      <element name="endpoint">
        <ref name="circuit_endpoint-content"/>
      </element>
    </zeroOrMore>
  </define>

  <define name="circuit_endpoint-content">
    <attribute name="device_name"/>
    <attribute name="interface_name"/>
  </define>

  <define name="circuit_hierarchy-content">
    <element name="upper_circuit_name">
      <text/>
    </element>
    <element name="lower_circuit_name">
      <text/>
    </element>
  </define>
</grammar>

Your request has been completed.