[[PageOutline]] In order to allow interoperability among different Aggregate Managers(AMs), GENI requires a common language for describing resources, resource requests, and reservations. GENI now uses standardized Request Specification (RSpec) documents which are XML documents following agreed schemas to represent resources. The schemas support Aggregate or resource specific extensions. [wiki:GeniRspec Ongoing work] covers agreeing upon ontologies for other resource types. = RSpec Types = In GENI there are three different types of RSpec, each used to describe resources when communicating with an AM. The communication with an AM, is based on the common [wiki:GAPI_AM_API_V2#APIMethods GENI AM API] that requires from AMs to use [wiki:GAPI_AM_API_V3/CommonConcepts#RSpecdatatype RSpec data types] to communicate. [[Image(rspec-types.png, 60%)]] ==== Advertisement RSpec ==== This is the document that is returned by an AM that describes the resources that the AM has. ==== Request RSpec ==== This is the document that a user sends to an AM to describe the resources that he wants to reserve. ==== Manifest RSpec ==== This is the document returned by an AM tha describes the resources that a user has at an AM. = RSpec Versions = Except from the three types of RSpecs, there are also different versions of RSpecs. The current version is the [wiki:RSpecSchema3 GENI v3]. == GENI v3 == The current GENI v3 RSpec schemas are based on the ProtoGENI v2 RSpecs. You can find some documentation and RSpec examples [http://www.protogeni.net/trac/protogeni/wiki/RSpec on the ProtoGENI website]. There you will also find a [http://www.protogeni.net/trac/protogeni/wiki/RSpecTutorial tutorial on RSpecs]. Although the examples are for ProtoGENI v2 RSpecs, it is easy to [wiki:HowTo/Convertv2tov3RSpecs convert them] to GENI v3. === OpenFlow v3 Extension === For OpenFlow resources there is an extension to the GENI v3 schema. More details about the schema can be found [wiki:HowTo/WriteOFv3Rspecs/Spec here], and [wiki:HowTo/WriteOFv3Rspecs these are instructions about how to write] one from scratch. == SFA RSpec == The SFA RSpec is the native RSpec format the PlanetLab AMs use. As of January 2012 PlanetLab support GENI v3 RSpecs. == ProtoGENI v2 (deprecated) == ProtoGENI v2 RSpec is the version that ProtoGENI AMs used to describe resources. The GENI community decided to adopt this version, and created the GENI v3 RSpecs based on this. It is easy to [wiki:HowTo/Convertv2tov3RSpecs convert RSpecs] from ProtoGENI v2 to GENI v3. = Writing RSpecs = You will only probably ever need to write Request RSpecs. The best way to write RSpecs is either to '''use a tool''' like [http://protogeni.net/flack Flack], or to '''modify an existing example''', or to '''modify an advertisement RSpec'''. For OpenFlow v3 RSpecs there is [wiki:HowTo/WriteOFv3Rspecs wiki page] that gives step-by-step instructions about how to write a valid RSpec. == Debugging RSpecs == If you write your own RSpecs, then you can use [https://www.protogeni.net/trac/protogeni/wiki/RSpecDebugging rspeclint] to verify the validity of the document. `rspeclint.py` is a script written in python that will check the validity of an xml document against its schema. ''' For comments and corrections on this page please [mailto:help@geni.net email us].'''