Commit e996db45 authored by Jonathon Duerig's avatar Jonathon Duerig

Modified test-ptop.xml and test-top.xml to validate with schema. Fixed xsdgen...

Modified test-ptop.xml and test-top.xml to validate with schema. Fixed xsdgen and added proper targets for install-schemata.
parent 0d0c2ccf
......@@ -21,7 +21,7 @@ include $(OBJDIR)/Makeconf
all: assign
SCHEMATA = vtop.xsd ptop.xsd top.xsd
SCHEMATA = vtop.xsd ptop.xsd vtop-top.xsd ptop-top.xsd
include $(TESTBED_SRCDIR)/GNUmakerules
......
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://emulab.net/resources/ptop/0.1" xmlns:ptop="http://emulab.net/resources/ptop/0.1">
<!--
EMULAB-COPYRIGHT
Copyright (c) 2005-2007 University of Utah and the Flux Group.
All rights reserved.
-->
<!--
Definition of common data structures used for representing topologies -
shared between vtop (virtual topology) and ptop (physical topology)
formats.
-->
<xs:element name="node_type">
<xs:complexType>
<xs:attribute name="type_name" use="required">
<xs:annotation>
<xs:documentation>Name of the type - will almost certainly not be unique</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="type_slots" use="required">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="unlimited"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="static">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="true"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="link_type">
<xs:complexType>
<xs:attribute name="type_name" use="required"/>
</xs:complexType>
</xs:element>
<xs:group name="LinkEndPoints">
<xs:sequence>
<xs:element ref="ptop:source_interface"/>
<xs:element ref="ptop:destination_interface"/>
</xs:sequence>
</xs:group>
<xs:element name="source_interface" type="ptop:InterfaceSpec">
<xs:annotation>
<xs:documentation>First interface for this link</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="destination_interface" type="ptop:InterfaceSpec">
<xs:annotation>
<xs:documentation>Second interface for this link</xs:documentation>
</xs:annotation>
</xs:element>
<xs:group name="LinkCharacteristics">
<xs:sequence>
<xs:element ref="ptop:bandwidth"/>
<xs:element ref="ptop:latency"/>
<xs:element ref="ptop:packet_loss"/>
</xs:sequence>
</xs:group>
<xs:element name="bandwidth">
<xs:annotation>
<xs:documentation>Bandwidth of the link in kbps</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:float">
<xs:minExclusive value="0.0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="latency">
<xs:annotation>
<xs:documentation>Latency of the link in ms</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:float">
<xs:minInclusive value="0.0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="packet_loss">
<xs:simpleType>
<xs:restriction base="xs:float">
<xs:minInclusive value="0.0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="fd">
<xs:complexType>
<xs:attribute name="fd_name" use="required"/>
<xs:attribute name="fd_weight" use="required"/>
<xs:attribute name="violatable">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="true"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="global_operator">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="OnceOnly"/>
<xs:enumeration value="FirstFree"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="local_operator">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="GlobalSpec">
<xs:attribute name="global_operator" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="OnceOnly"/>
<xs:enumeration value="FirstFree"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<xs:attributeGroup name="LocalSpec">
<xs:attribute name="local_operator" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<xs:complexType name="InterfaceSpec">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="ptop:property"/>
</xs:sequence>
<xs:attribute name="node_name" use="required"/>
<xs:attribute name="interface_name" use="required"/>
<xs:attribute name="physical_node_name"/>
<xs:attribute name="physical_interface_name"/>
</xs:complexType>
<xs:group name="InterfaceContents">
<xs:sequence>
<xs:element ref="ptop:node_name"/>
<xs:element ref="ptop:interface_name"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="ptop:property">
<xs:annotation>
<xs:documentation>Properties of the interface</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:group>
<xs:element name="node_name" type="xs:string">
<xs:annotation>
<xs:documentation>Name of the node, which must match one of the nodes in this topology</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="interface_name" type="xs:string">
<xs:annotation>
<xs:documentation>Name of the interface itself</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="property">
<xs:complexType>
<xs:sequence>
<xs:element ref="ptop:property_name"/>
<xs:element ref="ptop:property_value"/>
<xs:element ref="ptop:property_penalty"/>
<xs:element minOccurs="0" ref="ptop:violatable"/>
</xs:sequence>
<xs:attribute name="global_operator">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="OnceOnly"/>
<xs:enumeration value="FirstFree"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="local_operator">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="property_name" type="xs:string">
<xs:annotation>
<xs:documentation>Name of this property</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="property_value" type="xs:string"/>
<xs:element name="property_penalty">
<xs:annotation>
<xs:documentation>The penalty associated with this property</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:float">
<xs:minInclusive value="0.0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="violatable">
<xs:annotation>
<xs:documentation>If this flag is present, not having the property is considered a violation</xs:documentation>
</xs:annotation>
<xs:complexType/>
</xs:element>
</xs:schema>
......@@ -12,37 +12,73 @@
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://emulab.net/resources/ptop/0.1" xmlns:ptop="http://emulab.net/resources/ptop/0.1">
<xs:include schemaLocation="top.xsd"/>
<xs:element name="type_limit">
<xs:complexType>
<xs:sequence>
<xs:element name="type_name" type="xs:string">
<xs:annotation>
<xs:documentation>Name of the type we are limiting</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="type_limit">
<xs:annotation>
<xs:documentation>Limit as to the number of nodes of this type the experiment can use</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:include schemaLocation="ptop-top.xsd"/>
<xs:group name="NodeFlagSpec">
<xs:sequence>
<xs:element minOccurs="0" ref="ptop:trivial_bandwidth"/>
<xs:element minOccurs="0" ref="ptop:subnode_of"/>
<xs:element minOccurs="0" ref="ptop:unique"/>
<xs:element minOccurs="0" ref="ptop:disallow_trivial_mix"/>
</xs:sequence>
</xs:group>
<xs:element name="trivial_bandwidth" type="xs:integer"/>
<xs:element name="subnode_of" type="xs:string"/>
<xs:element name="unique">
<xs:complexType/>
</xs:element>
<xs:element name="disallow_trivial_mix">
<xs:complexType/>
</xs:element>
<xs:element name="node" type="ptop:NodeContents"/>
<xs:complexType name="NodeContents">
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="ptop:node_type"/>
<xs:group ref="ptop:NodeFlagSpec">
<xs:annotation>
<xs:documentation>Legacy flags</xs:documentation>
</xs:annotation>
</xs:group>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="ptop:fd">
<xs:annotation>
<xs:documentation>Legacy features and desires</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="ptop:property"/>
</xs:sequence>
<xs:attribute name="name" use="required"/>
</xs:complexType>
<xs:element name="link" type="ptop:LinkContents"/>
<xs:complexType name="LinkContents">
<xs:sequence>
<xs:group ref="ptop:LinkEndPoints">
<xs:annotation>
<xs:documentation>The two interfaces which form the endpoints of this link.</xs:documentation>
</xs:annotation>
</xs:group>
<xs:group ref="ptop:LinkCharacteristics">
<xs:annotation>
<xs:documentation>The characteristics (bandwidth, latency, loss) which affect traffic.</xs:documentation>
</xs:annotation>
</xs:group>
<xs:element maxOccurs="unbounded" ref="ptop:link_type"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="ptop:property">
<xs:annotation>
<xs:documentation>Properties of this link</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="name" use="required">
<xs:annotation>
<xs:documentation>Name of the link - must be unique in the top</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:element name="ptop">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ptop:node"/>
<xs:element ref="ptop:link"/>
</xs:choice>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="ptop:type_limit"/>
</xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="ptop:node"/>
<xs:element ref="ptop:link"/>
</xs:choice>
<xs:attribute name="testbed" use="required"/>
</xs:complexType>
</xs:element>
......
......@@ -5,7 +5,8 @@
All rights reserved.
-->
<!DOCTYPE ptop SYSTEM "ptop.dtd">
<ptop testbed="emulab">
<ptop xmlns="http://emulab.net/resources/ptop/0.1" testbed="emulab">
<!--
<node name="pc1">
<node_type name="pc">
<limit slots="1" />
......@@ -62,4 +63,5 @@
</delay_spec>
<link_type type="ethernet" />
</link>
-->
</ptop>
......@@ -4,14 +4,8 @@
Copyright (c) 2005-2006 University of Utah and the Flux Group.
All rights reserved.
-->
<top pid="testbed" eid="xmltop" xmlns="http://emulab.net/resources/vtop/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://emulab.net/resources/vtop/1.0 file:/home/ricci/testbed/assign/top.xsd">
<node name="nodeA"><ass/>
<node_type>
<type_name>pc</type_name>
</node_type>
<desire>
<desire_name>fast</desire_name>
<desire_weight>0.2</desire_weight>
</desire>
<vtop pid="testbed" eid="xmltop" xmlns="http://emulab.net/resources/vtop/0.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<node name="nodeA">
<node_type type_name="pc" type_slots="1" />
</node>
</top>
</vtop>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://emulab.net/resources/vtop/0.2" xmlns:vtop="http://emulab.net/resources/vtop/0.2">
<!--
EMULAB-COPYRIGHT
Copyright (c) 2005-2007 University of Utah and the Flux Group.
All rights reserved.
-->
<!--
Definition of common data structures used for representing topologies -
shared between vtop (virtual topology) and ptop (physical topology)
formats.
-->
<xs:element name="node_type">
<xs:complexType>
<xs:attribute name="type_name" use="required">
<xs:annotation>
<xs:documentation>Name of the type - will almost certainly not be unique</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="type_slots" use="required">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="unlimited"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="static">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="true"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="link_type">
<xs:complexType>
<xs:attribute name="type_name" use="required"/>
</xs:complexType>
</xs:element>
<xs:group name="LinkEndPoints">
<xs:sequence>
<xs:element ref="vtop:source_interface"/>
<xs:element ref="vtop:destination_interface"/>
</xs:sequence>
</xs:group>
<xs:element name="source_interface" type="vtop:InterfaceSpec">
<xs:annotation>
<xs:documentation>First interface for this link</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="destination_interface" type="vtop:InterfaceSpec">
<xs:annotation>
<xs:documentation>Second interface for this link</xs:documentation>
</xs:annotation>
</xs:element>
<xs:group name="LinkCharacteristics">
<xs:sequence>
<xs:element ref="vtop:bandwidth"/>
<xs:element ref="vtop:latency"/>
<xs:element ref="vtop:packet_loss"/>
</xs:sequence>
</xs:group>
<xs:element name="bandwidth">
<xs:annotation>
<xs:documentation>Bandwidth of the link in kbps</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:float">
<xs:minExclusive value="0.0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="latency">
<xs:annotation>
<xs:documentation>Latency of the link in ms</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:float">
<xs:minInclusive value="0.0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="packet_loss">
<xs:simpleType>
<xs:restriction base="xs:float">
<xs:minInclusive value="0.0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="fd">
<xs:complexType>
<xs:attribute name="fd_name" use="required"/>
<xs:attribute name="fd_weight" use="required"/>
<xs:attribute name="violatable">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="true"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="global_operator">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="OnceOnly"/>
<xs:enumeration value="FirstFree"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="local_operator">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="GlobalSpec">
<xs:attribute name="global_operator" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="OnceOnly"/>
<xs:enumeration value="FirstFree"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<xs:attributeGroup name="LocalSpec">
<xs:attribute name="local_operator" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<xs:complexType name="InterfaceSpec">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="vtop:property"/>
</xs:sequence>
<xs:attribute name="node_name" use="required"/>
<xs:attribute name="interface_name" use="required"/>
<xs:attribute name="physical_node_name"/>
<xs:attribute name="physical_interface_name"/>
</xs:complexType>
<xs:group name="InterfaceContents">
<xs:sequence>
<xs:element ref="vtop:node_name"/>
<xs:element ref="vtop:interface_name"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="vtop:property">
<xs:annotation>
<xs:documentation>Properties of the interface</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:group>
<xs:element name="node_name" type="xs:string">
<xs:annotation>
<xs:documentation>Name of the node, which must match one of the nodes in this topology</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="interface_name" type="xs:string">
<xs:annotation>
<xs:documentation>Name of the interface itself</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="property">
<xs:complexType>
<xs:sequence>
<xs:element ref="vtop:property_name"/>
<xs:element ref="vtop:property_value"/>
<xs:element ref="vtop:property_penalty"/>
<xs:element minOccurs="0" ref="vtop:violatable"/>
</xs:sequence>
<xs:attribute name="global_operator">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="OnceOnly"/>
<xs:enumeration value="FirstFree"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="local_operator">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="property_name" type="xs:string">
<xs:annotation>
<xs:documentation>Name of this property</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="property_value" type="xs:string"/>
<xs:element name="property_penalty">
<xs:annotation>
<xs:documentation>The penalty associated with this property</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:float">
<xs:minInclusive value="0.0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="violatable">
<xs:annotation>
<xs:documentation>If this flag is present, not having the property is considered a violation</xs:documentation>
</xs:annotation>
<xs:complexType/>
</xs:element>
</xs:schema>
......@@ -11,43 +11,123 @@
Description of a virtual topology
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://emulab.net/resources/vtop/0.2" xmlns:top="http://emulab.net/resources/top/0.2" xmlns:vtop="http://emulab.net/resources/vtop/0.2">
<xs:import namespace="http://emulab.net/resources/top/0.2" schemaLocation="top.xsd"/>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://emulab.net/resources/vtop/0.2" xmlns:vtop="http://emulab.net/resources/vtop/0.2">
<xs:include schemaLocation="vtop-top.xsd"/>
<!--
We include the common topology specification schema, but override a few
elements
-->
<xs:element name="NodeSpec.NodeType" abstract="true">
<xs:annotation>
<xs:documentation>In the vtop file, a node is only allowed to have a single type</xs:documentation>
</xs:annotation>
<xs:group name="NodeFlagSpec">
<xs:sequence>
<xs:element minOccurs="0" ref="vtop:subnode_of"/>
<xs:element minOccurs="0" ref="vtop:unique"/>
<xs:element minOccurs="0" ref="vtop:disallow_trivial_mix"/>
</xs:sequence>
</xs:group>
<xs:element name="subnode_of" type="xs:string"/>
<xs:element name="unique">
<xs:complexType/>
</xs:element>
<xs:element name="disallow_trivial_mix">
<xs:complexType/>
</xs:element>
<xs:element name="node" type="vtop:NodeContents"/>
<xs:complexType name="NodeContents">
<xs:sequence>
<xs:element ref="vtop:node_type"/>
<xs:group ref="vtop:NodeFlagSpec">
<xs:annotation>
<xs:documentation>Legacy flags</xs:documentation>
</xs:annotation>
</xs:group>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="vtop:fd">
<xs:annotation>
<xs:documentation>Legacy features and desires</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="vtop:property"/>
</xs:sequence>
<xs:attribute name="name" use="required"/>
<xs:attribute name="assigned_to"/>
<xs:attribute name="hint_to"/>
</xs:complexType>
<xs:element name="link" type="vtop:LinkContents"/>
<xs:complexType name="LinkContents">
<xs:sequence>
<xs:group ref="vtop:LinkEndPoints">
<xs:annotation>
<xs:documentation>The two interfaces which form the endpoints of this link.</xs:documentation>
</xs:annotation>
</xs:group>
<xs:group ref="vtop:LinkCharacteristics">
<xs:annotation>
<xs:documentation>The characteristics (bandwidth, latency, loss) which affect traffic.</xs:documentation>
</xs:annotation>
</xs:group>
<xs:element ref="vtop:link_type"/>
<xs:group ref="vtop:LinkFlagSpec">
<xs:annotation>
<xs:documentation>"Legacy" link flags used by assign. Will be replaced by properties</xs:documentation>
</xs:annotation>
</xs:group>
<xs:group minOccurs="0" ref="vtop:LinkMapping">
<xs:annotation>
<xs:documentation>The annotated link/path</xs:documentation>
</xs:annotation>
</xs:group>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="vtop:property">
<xs:annotation>
<xs:documentation>Properties of this link</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="name" use="required">
<xs:annotation>
<xs:documentation>Name of the link - must be unique in the top</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:group name="LinkMapping">
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="vtop:component_hop"/>
</xs:sequence>
</xs:group>
<xs:element name="component_hop">
<xs:complexType>
<xs:sequence>
<xs:group ref="top:type_name"/>
<xs:choice>
<xs:element ref="top:type_slots"/>
<xs:element ref="top:unlimited"/>
</xs:choice>
<xs:element minOccurs="0" ref="top:static"/>
<xs:element ref="vtop:interface"/>
<xs:element ref="vtop:interface"/>
</xs:sequence>
<xs:attribute name="assigned_to" use="required"/>
</xs:complexType>
</xs:element>
<!--
Each interface represents a particular physical interface. If that
interface is one of the link end points, it is also mapped to that
virtual node and its interface name.
-->
<xs:element name="interface">
<xs:complexType>
<xs:attribute name="physical_node_name" use="required"/>
<xs:attribute name="physical_interface_name" use="required"/>
<xs:attribute name="virtual_node_name"/>
<xs:attribute name="virtual_interface_name"/>
</xs:complexType>
</xs:element>
<xs:group name="LinkSpec.LinkType">
<xs:sequence>
<xs:element minOccurs="0" ref="top:link_type"/>
</xs:sequence>
</xs:group>
<xs:element name="vclass">
<xs:complexType>
<xs:choice>
<xs:element ref="vtop:hard"/>
<xs:sequence>
<xs:element ref="vtop:soft"/>
<xs:element ref="vtop:weight"/>
</xs:sequence>
</xs:choice>
<xs:sequence>
<xs:choice>
<xs:element ref="vtop:hard"/>
<xs:sequence>
<xs:element ref="vtop:soft"/>
<xs:element ref="vtop:weight"/>
</xs:sequence>
</xs:choice>
<xs:element maxOccurs="unbounded" ref="vtop:physical_type"/>
</xs:sequence>
<xs:attribute name="name" use="required">
<xs:annotation>
<xs:documentation>Name of the virtual class</xs:documentation>
......@@ -68,6 +148,7 @@
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="physical_type" type="xs:string"/>