by Dan Gunter
NM-WG home# Test parametersnamespace local = "" default namespace tns = "http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"grammar{ ParameterSet =## The duration of the testelementduration{ xsd:float, element units { token } }?,## Type of packets being sent# XXX: Unfortunately, enumerations break wsdl2py!!#element packetType { token "TCP" | token "ICMP" | token "UDP" }?,elementpacketType{ token }?,## Size of packets sent on networkelementpacketSize{ xsd:int, element units { token } }?,## Number of packets sent on networkelementnumPackets{ xsd:int, element units { token } }?,## What algorithm is used to space packets# XXX: Unfortunately, enumerations break wsdl2py!!#element packetSpacing { token "poisson" | token "periodic" }?,elementpacketSpacing{ token }?,## Time between test packets, in seconds (for periodic tests)elementpacketGap{ xsd:float, element units { token } }?,## IP versionelementprotocolID{ token }?,## Type of service (IP precedence)elementtos{ xsd:short }?,## Differentiated services code pointelementdscp{ xsd:byte }?,## IPv6 option for QoSelementflowLabel{ xsd:byte }?,## Threshold used to distinguish between a large finite delay and losselementlossThreshold{ xsd:int, element units { token } }?,## Amount of test trafficelementnumBytes{ xsd:int, element units { token } }?,## Are bytes moving memory to memory or disk to disk?elementincludesDisk{ xsd:boolean }?,## Size of TCP buffers usedelementtcpBufferSize{ xsd:int, element units { token } }?,## Reno, Vegas, HSTCP, ScalableTCP, etcelementtcpType{ token }?,## Number of parallel streamselementnumStreams{ xsd:int }?,## Additional user-defined parameterselementother{ Extensibility }? }
# NMWG Requestnamespace local = "" default namespace tns = "http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"grammar{ start =elementnetworkMeasurementRequest{elementid{ token },elementnetworkMeasurementQuery{ NetworkMeasurementQuery }* } NetworkMeasurementQuery =elementcharacteristic{ token }?,elementtimeRange{ TimeRange }? TimeRange =elementstartTime{ xsd:float },elementendTime{ xsd:float },elementmiddle{ xsd:float }? }
# NMWG Report subject## Implementation note: Had to take out some of the# inheritance because my tool to convert RELAX-NG to# XSD (Trang) will generate xs:group references. The# original version has been left as a comment. -dkgnamespace local = "" default namespace tns = "http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"grammar{ Address =## Host addresselementhost{ token },## Portelementport{ xsd:int }?,## Protocol (e.g IP) version: "IPv4" | "IPv6" | ...elementversion{ token }# Original inheritance hierarchy, see implementation note.# InternalNode = Node# Router = InternalNodeNode =elementaddress{ Address },elementname{ string }? Path =elementsource{ Node }?,elementdestination{ Node }? Hop = Path Host =elementoperatingSystem{ OperatingSystem },elementinterface{ NetworkInterface }* OperatingSystem = SoftwareDescription NetworkInterface =elementaddress{ Address },elementcard{ NIC } NIC =## The logical name of the card as seen## by the OS. E.g. eth0 hme0:1elementlogicalInterfaceName{ string },elementcard{ HardwareDescription }?,elementfirmware{ SoftwareDescription }?,elementdriver{ SoftwareDescription }?,elementtxqueuelen{ xsd:float, element units { token } }?,elementmtu{ xsd:float, element units { token } }?,elementiobus{ string }?,elementcpu{ CPU },elementmaxTCPReadBuffer{ xsd:float, element units { token } }?,elementmaxTCPWriteBuffer{ xsd:float, element units { token } }?,elementtimer{ TimerDevice }?,## The protocol stack on this host, highest to lowest layerelementprotocolStack{ element protocol { ProtocolLayer }+ }? CPU =elementtype{ string },elementspeed{ xsd:double, element units { token } } ProtocolLayer = Extensibility## Piece of softwareSoftwareDescription =elementname{ string },elementmajor{ xsd:int }?,elementminor{ xsd:int }?,elementrelease{ xsd:int }?,elementbuildDate{ xsd:int }?,elementvendor{ string }?,elementversionString{ string }*## Piece of hardwareHardwareDescription =elementcomponentType{ token },elementmanufacturere{ string },elementversion{ string } }
# Network toolnamespace local = "" default namespace tns = "http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"grammar{# Network measurement toolTool =elementname{ text },elementmajor{ xsd:int }?,elementminor{ xsd:int }?,elementrelease{ xsd:int }?,elementbuildDate{ xsd:date }?,elementvendor{ text }?,elementversionString{ text }* }
namespace local = "" default namespace tns = "http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"# Extensibility element(s)# Only restriction is that they must be in a namespace,# and it must differ from this oneExtensibility = AnyElement* AnyElement =element*- ( tns:* | local:* ) { text*, AnyAttribute*, AnyElement* } AnyAttribute = attribute * { text }*
default namespace = "http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"# This is a schema for publishing network# measurement data. It is based on the GGF NM-WG document: "A# Hierarchy of Network Performance Characteristics for Grid# Applications and Services". Naming of characteristics should# follow the conventions of the GGF DAMED-WG document, "An# Analysis of 'Top N' Event Event Descriptions".# First utils#include "nm_values.rnc"include"nm_extend.rnc"include"nm_time.rnc"# Then, core modulesinclude"nm_subject.rnc"include"nm_result.rnc"include"nm_params.rnc"include"nm_tool.rnc" start =elementnetworkMeasurementReport{ NetworkMeasurementReport }## Type for root elementNetworkMeasurementReport =## Identifier for report, matches some request identifierelementid{ token },## Report versioningelementversion{ token }?,## One or more measurementselementnetworkMeasurement{ NetworkMeasurement }+ NetworkMeasurement =## Network characteristic being measuredelementcharacteristic{ token },## Network portion being measured# XXX: By labeling them with an element, we convince the# XXX: relax-ng to XSD converter to not use group references, which# XXX: is a feature not supported by wsdl2py#element subject { Node | Path },elementsubject{ element node { Node } | element path { Path } },## Tools, tool parameters, etc. used for this measurementelementmethodology{ Methodology }+,## Results of the measurementelementresults{ ResultSet } ResultSet =## Time interval spanning all results in the setelementtimeInterval{ TimeInterval },## A single resultelementresult{ Result }*,## A statistical summary of result(s)elementstatistic{ Statistic }* Methodology =## Which endpoint the methodology applies to, e.g. "source"elementendpoint{ Endpoint },## Tool used to make the measurementelementtool{ Tool },## Tool parameterselementparameterSet{ ParameterSet }*## Recognized values: source, destination, allEndpoint =elementwhich{ token }
# NMWG Report resultnamespace local = "" default namespace tns = "http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"grammar{## StatisticStatistic =## Time interval for the statistic.elementtimeInterval{ TimeInterval }*,## Name of statistic.## The following names, at least, should be## recognized: min, max, count, mean, median, stddevelementname{ token }, (## Single-valued statisticelementvalue{ xsd:double, element units { token } } |## Percentile statisticelementpercentile{elementvalue{ xsd:double, element units { token } }, element percent { xsd:int } } |## Confidence intervalelementconfidence{elementvalue{ xsd:double, element units { token } }, element interval { xsd:int } } |## User-defined statisticelementother{ Extensibility } )## Measurement resultResult =## Time interval for the result. It is optional so that multiple## results can share the same interval (in this case the## time interval would be in the parent element).elementtimeInterval{ TimeInterval }*,## Result value(elementdelay{ Delay } |elementpathLoss{ PathLoss } |elementjitter{ PathJitter } |elementreordering{ PathReordering } |elementbandwidth{ Bandwidth } |elementachievableBandwidth{ AchievableBandwidth } |elementavailableBandwidth{ AvailableBandwidth } |elementhopList{ HopList } |## Additional user-defined elements. Only restriction is that they## must be in a namespace, and it must differ from this oneelementother{ Extensibility } )## From IETF. One way Delay## (http://www.ietf.org/rfc/rfc2679.txt), Round Trip Delay## (http://www.ietf.org/rfc/rfc2681.txt).Delay =elementvalue{ xsd:double },elementunits{ token } PathLoss =## Number of packets since the previous loss (See RFC3357)elementlossDistance{ xsd:int, element units { token } },## Number of groups of lost packets (See RFC3357)elementlossPeriod{ xsd:int, element units { token } },## Percent of packets lost where if the distance between## the lost packet and the previously lost packet is no## greater than the "loss constraint" (See RFC3357)elementnoticeableRate{ xsd:int, element units { token } },## Total number of loss periods (See RFC3357)elementperiodTotal{ xsd:int, element units { token } },## Number of packets in a burst of loss (See RFC3357)elementperiodLengths{ xsd:int, element units { token } },## Number of packets between bursts of loss (See RFC3357)elementinterLossperiodLengths{ xsd:int, element units { token } },## Number of packets lost during the test (See RFC3357)elementnumPacketsLost{ xsd:int, element units { token } },## Average packet loss (in percent) (See RFC2680)elementpercentLoss{ xsd:int, element units { token } }## See RFC3393, http://www.ietf.org/rfc/rfc3393.txtPathJitter =elementjitterPeakToPeakIpdv{ xsd:double, element units { token } },elementjitter{ xsd:double, element units { token } }## See http://www.ietf.org/internet-drafts/draft-ietf-ippm-reordering-02.txtPathReordering =elementlateTime{ xsd:double, element units { token } },## Number of positions out of orderelementgap{ xsd:double, element units { token } },## Percent of packets reorderedelementpercentReordered{ xsd:int, element units { token } } Bandwidth =## Which hop is the bottleneck ("tight link")elementbandwidthBottleneck{ Hop },## The bandwidth measurementelementjitterPeakToPeakIpdv{ xsd:double, element units { token } } AchievableBandwidth =## Indication of what is the bottleneck (network, CPU,## NIC, memory, disk, etc.)elementachievableBottleneck{ string }?,## The measurementelementachievableThroughput{ xsd:double, element units { token } } AvailableBandwidth =## Which hop is the bottleneck ("tight link")elementbandwidthBottleneck{ Hop },## Mean Time Between FailureselementMTBF{ xsd:int, element units { token } },## Number of periods when path was not availableelementdowns{ xsd:int, element units { token } },## Median outage lengthelementmedianOutageLength{ xsd:int, element units { token } },## Percent availability = 100*(#unavailable cycles/total cycles)%elementpercentUp{ xsd:int, element units { token } } HopList =## Number of hopselementhopCount{ xsd:int },elementunits{ token } }
# Time-related definitionsnamespace local = "" default namespace tns = "http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"grammar{ TimeInterval =elementtimestamp{ xsd:double }+ TimerDevice =elementresolution{ xsd:double }&elementaccuracy{ xsd:double }&elementoffset{ xsd:double }&elementtimeSource{ string } }