<?xml version="1.0" encoding="UTF-8"?>
<!-- Test parameters -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.ggf.org/namespaces/2004/08/gridNetworkMonitoring" xmlns:g="http://www.ggf.org/namespaces/2004/08/gridNetworkMonitoring">
  <xs:complexType name="ParameterSet">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:duration"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:packetSize"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:numPackets"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:packetSpacing"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:packetGap"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:protocolID"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:tos"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:dscp"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:flowLabel"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:lossThreshold"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:numBytes"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:includesDisk"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:tcpBufferSize"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:tcpType"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="g:numStreams"/>
      <xs:element ref="g:other"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="duration">
    <xs:annotation>
      <xs:documentation>The duration of the test</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:double">
          <xs:attribute name="units" use="required" type="xs:token"/>
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="packetSize">
    <xs:annotation>
      <xs:documentation>Type of packets being sent</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:int">
          <xs:attribute name="units" use="required" type="xs:token"/>
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="numPackets">
    <xs:annotation>
      <xs:documentation>Number of packets sent on network</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:int">
          <xs:attribute name="units" use="required" type="xs:token"/>
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="packetSpacing">
    <xs:annotation>
      <xs:documentation>What algorithm is used to space packets</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:restriction base="xs:anyType">
          <xs:simpleType>
            <xs:restriction base="xs:token">
              <xs:enumeration value="poisson"/>
              <xs:enumeration value="periodic"/>
            </xs:restriction>
          </xs:simpleType>
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:restriction>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="packetGap">
    <xs:annotation>
      <xs:documentation>Time between test packets, in seconds (for periodic tests)</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:double">
          <xs:attribute name="units" use="required" type="xs:token"/>
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="protocolID">
    <xs:annotation>
      <xs:documentation>IP version</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="tos">
    <xs:annotation>
      <xs:documentation>Type of service (IP precedence)</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:short">
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="dscp">
    <xs:annotation>
      <xs:documentation>Differentiated services code point</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:byte">
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="flowLabel">
    <xs:annotation>
      <xs:documentation>IPv6 option for QoS</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:byte">
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="lossThreshold">
    <xs:annotation>
      <xs:documentation>Threshold used to distinguish between a large finite delay and loss</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:int">
          <xs:attribute name="units" use="required" type="xs:token"/>
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="numBytes">
    <xs:annotation>
      <xs:documentation>Amount of test traffic</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:int">
          <xs:attribute name="units" use="required" type="xs:token"/>
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="includesDisk">
    <xs:annotation>
      <xs:documentation>Are bytes moving memory to memory or disk to disk*</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:boolean">
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="tcpBufferSize">
    <xs:annotation>
      <xs:documentation>Size of TCP buffers used</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:int">
          <xs:attribute name="units" use="required" type="xs:token"/>
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="tcpType">
    <xs:annotation>
      <xs:documentation>Reno, Vegas, HSTCP, ScalableTCP, etc</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="numStreams">
    <xs:annotation>
      <xs:documentation>Number of parallel streams</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:unsignedShort">
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="other">
    <xs:annotation>
      <xs:documentation>Additional user-defined parameters</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="g:Extensibility">
          <xs:attributeGroup ref="g:ParameterAttributes"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:attributeGroup name="ParameterAttributes">
    <xs:annotation>
      <xs:documentation>Attributes that apply to all (or nearly all) parameters</xs:documentation>
    </xs:annotation>
    <xs:attributeGroup ref="g:Required"/>
    <xs:attribute name="report" type="xs:boolean">
      <xs:annotation>
        <xs:documentation>If true, the value of this parameter should be reported in the response</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="range" type="xs:token">
      <xs:annotation>
        <xs:documentation>If "min", the parameter should be at least the given value; if "max", the parameter should be at most the given value; if "exact", the parameter should be exactly this value.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:attributeGroup>
</xs:schema>

