1<?xml version="1.0" encoding="UTF-8"?>
2
3<!--
4
5        CDDL HEADER START
6
7        The contents of this file are subject to the terms of the
8        Common Development and Distribution License (the "License").
9        You may not use this file except in compliance with the License.
10
11        You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
12        or http://www.opensolaris.org/os/licensing.
13        See the License for the specific language governing permissions
14        and limitations under the License.
15
16        When distributing Covered Code, include this CDDL HEADER in each
17        file and include the License file at usr/src/OPENSOLARIS.LICENSE.
18        If applicable, add the following below this CDDL HEADER, with the
19        fields enclosed by brackets "[]" replaced with your own identifying
20        information: Portions Copyright [yyyy] [name of copyright owner]
21
22        CDDL HEADER END
23
24        Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
25        Use is subject to license terms.
26
27
28-->
29
30<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
31            targetNamespace="http://www.sun.com/schema/isnsmanagement"
32            xmlns:isns="http://www.sun.com/schema/isnsmanagement"
33            elementFormDefault="qualified">
34
35    <!--
36        Object type names that are asspcoated with isns Object,
37        Discovery Domain, Discovery Domain Set, Node.
38    -->
39    <xsd:element name="isnsObjectType">
40        <xsd:simpleType>
41            <xsd:restriction base="xsd:string">
42                <xsd:enumeration value="DiscoveryDomainSet"></xsd:enumeration>
43                <xsd:enumeration value="DiscoveryDomain"></xsd:enumeration>
44                <xsd:enumeration value="Node"></xsd:enumeration>
45            </xsd:restriction>
46        </xsd:simpleType>
47    </xsd:element>
48
49    <!--
50        Association type name for Discovery Domain membership and Discovery
51        Domain Set membership.
52    -->
53    <xsd:element name="AssociationType">
54        <xsd:simpleType>
55            <xsd:restriction base="xsd:string">
56                <xsd:enumeration value="DiscoveryDomainMember"/>
57                <xsd:enumeration value="DiscoveryDomainSetMember"/>
58            </xsd:restriction>
59        </xsd:simpleType>
60    </xsd:element>
61
62    <!--
63        Discovery Domain object.
64        Attribute name represent DD Symbolic Name defined in the iSNS spec.
65        Group isnsDDAttrGroup represents other attrtibutes defined in the
66        iSNS spec.
67        Note that the existence of isnsDDAttrGroup is made as optional.
68    -->
69    <xsd:element name="DiscoveryDomain">
70        <xsd:complexType>
71            <xsd:group ref="isns:isnsDDAttrGroup" minOccurs="0"/>
72            <xsd:attribute name="name" type="xsd:string" use="required"/>
73            <xsd:attribute name="id" type="xsd:positiveInteger" use="optional"/>
74            <xsd:attribute name="nodeCount" type="xsd:nonNegativeInteger" use="optional"/>
75        </xsd:complexType>
76    </xsd:element>
77    <xsd:group name="isnsDDAttrGroup">
78        <xsd:sequence>
79            <xsd:element name="BootList_Enabled" type="xsd:boolean"/>
80        </xsd:sequence>
81    </xsd:group>
82
83    <!--
84        Discovery Domain Set object.
85        Attribute name represent DD Set Symbolic Name defined in the iSNS spec.
86        Group isnsDDsetAttrGroup represents other attrtibutes defined in the
87        iSNS spec.
88        Note that the existence of isnsDDsetAttrGroup is made as optional.
89    -->
90    <xsd:element name="DiscoveryDomainSet">
91        <xsd:complexType>
92            <xsd:group ref="isns:isnsDDsetAttrGroup" minOccurs="0"/>
93            <xsd:attribute name="name" type="xsd:string" use="required"/>
94            <xsd:attribute name="id" type="xsd:positiveInteger" use="optional"/>
95        </xsd:complexType>
96    </xsd:element>
97    <xsd:group name="isnsDDsetAttrGroup">
98        <xsd:sequence>
99            <xsd:element name="Enabled" type="xsd:boolean"/>
100        </xsd:sequence>
101    </xsd:group>
102
103    <!--
104       isnsServer object for administratively configurable setting.
105    -->
106    <xsd:element name="isnsServer">
107        <xsd:complexType>
108            <xsd:group ref="isns:isnsServerAttrGroup" minOccurs="0"/>
109        </xsd:complexType>
110    </xsd:element>
111
112    <xsd:group name="isnsServerAttrGroup">
113        <xsd:sequence>
114                <xsd:element name="datastoreLocation" type="xsd:string"></xsd:element>
115                <xsd:element name="esiRetryThreshold" type="xsd:nonNegativeInteger"></xsd:element>
116                <xsd:element name="managementSCNEnabled" type="xsd:boolean"></xsd:element>
117                <xsd:element name="controlNodeName" type="xsd:string" nillable="true"></xsd:element>
118        </xsd:sequence>
119    </xsd:group>
120
121    <!--
122        Node object. Attribute name represent iSCSI name for a node
123        defined in the iSNS spec.
124        Group isnsNodeAttrGroup represents other attrtibutes including
125        Network Entity, Portal and Portal Group Tag.
126        Note that the existence of isnsNodeAttrGroup is made as optional.
127    -->
128    <xsd:element name="Node">
129        <xsd:complexType>
130            <xsd:group ref="isns:isnsNodeAttrGroup" minOccurs="0"/>
131            <xsd:attributeGroup ref="isns:nodeAttrs"/>
132        </xsd:complexType>
133    </xsd:element>
134
135    <!--
136       Attributes for Node object.
137       name and nodeType are specified.
138       Both attributes are required.
139    -->
140    <xsd:attributeGroup name="nodeAttrs">
141        <xsd:attribute name="name" type="xsd:string" use="required"/>
142        <xsd:attribute name="alias" type="xsd:string"/>
143        <!--
144           Add support for management clients needing XML documents
145           with properties representing whether or not the given node is
146           assigned or not, is registered or not, and a status timestamp stating
147           when the last time this information was determined.
148
149           @todo Since these properties are client-specific, we want to factor
150           them out into a separate schema that includes and extends this one.
151           Since this task has proven difficult in the short term, we defer this
152           until a future product cycle.
153        -->
154        <xsd:attribute name="assigned" type="xsd:boolean" use="optional"/>
155        <xsd:attribute name="registered" type="xsd:boolean" use="optional"/>
156        <xsd:attribute name="timestamp" type="xsd:string" use="optional"/>
157        <xsd:attribute name="type">
158            <xsd:simpleType>
159                <xsd:restriction base="xsd:string">
160                    <xsd:enumeration value="Target"/>
161                    <xsd:enumeration value="Initiator"/>
162                    <xsd:enumeration value="Control"/>
163                    <xsd:enumeration value="Unknown"/>
164                    <xsd:enumeration value="Control/Target"/>
165                    <xsd:enumeration value="Control/Initiator"/>
166                </xsd:restriction>
167            </xsd:simpleType>
168        </xsd:attribute>
169    </xsd:attributeGroup>
170
171    <!--
172       Child elements for Node object.
173    -->
174    <xsd:group name="isnsNodeAttrGroup">
175        <xsd:sequence>
176            <xsd:element name="SCN_Subscription" minOccurs="0" maxOccurs="8">
177                <xsd:simpleType>
178                    <xsd:restriction base="xsd:string">
179                        <xsd:enumeration value="Initiator and Self information only"/>
180                        <xsd:enumeration value="Target and Self information only"/>
181                        <xsd:enumeration value="Management Registration/SCN"/>
182                        <xsd:enumeration value="Object Removed"/>
183                        <xsd:enumeration value="Object Added"/>
184                        <xsd:enumeration value="Object Updated"/>
185                        <xsd:enumeration value="DD/DD-Set Member Removed"/>
186                        <xsd:enumeration value="DD/DD-Set Member Added"/>
187                    </xsd:restriction>
188                </xsd:simpleType>
189            </xsd:element>
190            <!--
191                Network Entity attributes
192            -->
193            <xsd:element name="Network_Entity">
194                <xsd:complexType>
195                    <xsd:sequence>
196                    <xsd:element name="Entity_ID">
197                        <xsd:simpleType>
198                            <xsd:restriction base="xsd:string">
199                                <xsd:minLength value="4"/>
200                                <xsd:maxLength value="256"/>
201                            </xsd:restriction>
202                       </xsd:simpleType>
203                    </xsd:element>
204                    <xsd:element name="Entity_Protocol" type="xsd:integer" minOccurs="0"></xsd:element>
205                    <xsd:element name="Management_IP_Addr" minOccurs="0">
206                        <xsd:simpleType>
207                            <xsd:restriction base="xsd:string">
208                                <xsd:maxLength value="46"/>
209                            </xsd:restriction>
210                        </xsd:simpleType>
211                    </xsd:element>
212                    <xsd:element name="Entity_Reg_Timestamp" type="xsd:unsignedLong" minOccurs="0"/>
213                    <xsd:element name="Protocol_Version_Range" minOccurs="0">
214                        <xsd:complexType>
215                            <xsd:sequence>
216                                <xsd:element name="minVersion" type="xsd:unsignedShort"/>
217                                <xsd:element name="maxVersion" type="xsd:unsignedShort"/>
218                            </xsd:sequence>
219                        </xsd:complexType>
220                    </xsd:element>
221                    <xsd:element name="Registration_Period" type="xsd:unsignedInt" minOccurs="0"/>
222                </xsd:sequence>
223            </xsd:complexType>
224            </xsd:element>
225
226           <!--
227                Portal attributes including Portal Group Tag
228           -->
229
230            <xsd:element name="Portal" maxOccurs="unbounded" >
231                <xsd:complexType>
232                    <xsd:sequence>
233                        <xsd:element name="IP_Addr">
234                            <xsd:simpleType>
235                                <xsd:restriction base="xsd:string">
236                                    <xsd:maxLength value="46"/>
237                                </xsd:restriction>
238                            </xsd:simpleType>
239                        </xsd:element>
240                        <xsd:element name="UDP_TCP_port">
241                            <xsd:complexType>
242                                <xsd:sequence>
243                                    <xsd:element name="Port_Type">
244                                        <xsd:simpleType>
245                                            <xsd:restriction base="xsd:string">
246                                                <xsd:enumeration value="TCP"/>
247                                                <xsd:enumeration value="UDP"/>
248                                            </xsd:restriction>
249                                        </xsd:simpleType>
250                                    </xsd:element>
251                                    <xsd:element name="Port_Number" type="xsd:unsignedShort"/>
252                                </xsd:sequence>
253                            </xsd:complexType>
254                        </xsd:element>
255                        <xsd:element name="Group_Tag">
256                            <xsd:simpleType>
257                                <xsd:restriction base="xsd:nonNegativeInteger">
258                                    <xsd:maxInclusive value="65535"/>
259                                </xsd:restriction>
260                            </xsd:simpleType>
261                        </xsd:element>
262                        <xsd:element name="Symbolic_Name" minOccurs="0">
263                            <xsd:simpleType>
264                                <xsd:restriction base="xsd:string">
265                                    <xsd:maxLength value="256"/>
266                                </xsd:restriction>
267                            </xsd:simpleType>
268                        </xsd:element>
269                        <xsd:element name="ESI_Interval" type="xsd:positiveInteger" minOccurs="0"/>
270                        <xsd:element name="ESI_Port" minOccurs="0">
271                            <xsd:complexType>
272                                <xsd:sequence>
273                                    <xsd:element name="Port_Type">
274                                        <xsd:simpleType>
275                                            <xsd:restriction base="xsd:string">
276                                                <xsd:enumeration value="TCP"/>
277                                                <xsd:enumeration value="UDP"/>
278                                            </xsd:restriction>
279                                        </xsd:simpleType>
280                                    </xsd:element>
281                                    <xsd:element name="Port_Number" type="xsd:unsignedShort"/>
282                                </xsd:sequence>
283                            </xsd:complexType>
284                            </xsd:element>
285                        <xsd:element name="SCN_Port" minOccurs="0">
286                            <xsd:complexType>
287                                <xsd:sequence>
288                                    <xsd:element name="Port_Type">
289                                        <xsd:simpleType>
290                                            <xsd:restriction base="xsd:string">
291                                                <xsd:enumeration value="TCP"/>
292                                                <xsd:enumeration value="UDP"/>
293                                            </xsd:restriction>
294                                        </xsd:simpleType>
295                                    </xsd:element>
296                                    <xsd:element name="Port_Number" type="xsd:unsignedShort"/>
297                                </xsd:sequence>
298                            </xsd:complexType>
299                        </xsd:element>
300                   </xsd:sequence>
301                </xsd:complexType>
302            </xsd:element>
303        </xsd:sequence>
304    </xsd:group>
305
306    <!--
307        Discovery Domain Membership Association.
308        Attribute DDName represents Discovery Domain name and NodeName
309        a node name to indicate the association pair.
310        Note that the element has only attributes.
311    -->
312    <xsd:element name="DiscoveryDomainMember">
313        <xsd:complexType>
314            <xsd:attribute name="DDName" type="xsd:string" use="required"/>
315            <xsd:attribute name="NodeName" type="xsd:string" use="required"/>
316        </xsd:complexType>
317    </xsd:element>
318
319    <!--
320        Discovery Domain Set Membership Association.
321        Attribute DDName represents Discovery Domain name and DDsetName
322        Discovery Domain Set name to indicate the association pair.
323        Note that the element has only attributes.
324    -->
325    <xsd:element name="DiscoveryDomainSetMember">
326        <xsd:complexType>
327            <xsd:attribute name="DDName" type="xsd:string" use="required"/>
328            <xsd:attribute name="DDsetName" type="xsd:string" use="required"/>
329        </xsd:complexType>
330    </xsd:element>
331    <xsd:element name="Association">
332        <xsd:complexType>
333            <xsd:choice>
334                <xsd:element ref="isns:DiscoveryDomainMember"/>
335                <xsd:element ref="isns:DiscoveryDomainSetMember"/>
336            </xsd:choice>
337        </xsd:complexType>
338    </xsd:element>
339
340    <!--
341        Super element for iSNS object, Discovery Domain, Disocvery Domain
342        set and Node.
343    -->
344    <xsd:element name="isnsObject">
345        <xsd:complexType>
346            <xsd:choice>
347                <xsd:element ref="isns:Node"/>
348                <xsd:element ref="isns:DiscoveryDomain"/>
349                <xsd:element ref="isns:DiscoveryDomainSet"/>
350            </xsd:choice>
351        </xsd:complexType>
352    </xsd:element>
353
354
355    <!--
356        Result element represent the response value for an isns request
357        operation including status and error information.
358    -->
359    <xsd:element name="result">
360        <xsd:complexType>
361            <xsd:sequence>
362                <xsd:element name="status" type="xsd:integer" minOccurs="1"/>
363                <xsd:element name="message" minOccurs="0" nillable="false">
364                    <xsd:simpleType>
365                        <xsd:restriction base="xsd:string">
366                            <xsd:whiteSpace value="preserve"/>
367                        </xsd:restriction>
368                    </xsd:simpleType>
369                </xsd:element>
370            </xsd:sequence>
371        </xsd:complexType>
372     </xsd:element>
373
374     <!--
375        Request operations for iSNS management applicatioin.
376        Any of request can be included multiple times.
377     -->
378     <xsd:element name="isnsRequest">
379         <xsd:complexType>
380             <xsd:sequence>
381                 <xsd:element name="description" type="xsd:string" minOccurs="0"/>
382                 <xsd:choice maxOccurs="1">
383
384                 <!--
385                    get operation returns details of a given iSNS object instance.
386
387                    input: an object instance.  Specifying only the name
388                        attribute of an isnsObject insance will be sufficient
389                        for the server to serve the request.
390                        Ex) <get
391                    output: an object instance with fully populated
392                        isns{Node|Discveroy_Domain|Discovery_Domain_Set]AttrGroup
393                        or error info when there is failure.
394                 -->
395                    <xsd:element name="get">
396                         <xsd:complexType>
397                             <xsd:choice>
398                                <xsd:element ref="isns:isnsObject" maxOccurs="unbounded"/>
399                                <xsd:element ref="isns:isnsServer" maxOccurs="1"/>
400                             </xsd:choice>
401                         </xsd:complexType>
402                    </xsd:element>
403
404                <!--
405                    getAssociated operation returns a list of object
406                    instances that are asscoiated with the given Association
407                    type name and a given object instance.
408
409                    input: an Association type name and an object instance.
410                        Specifying the name attribute is sufficient for
411                        the request.
412                        Ex) <get
413                    output: a list of object instances which is assciated with
414                        the given object instance through the given association.
415
416                        When there is failure for the request, error info will
417                        be returned.
418                -->
419                     <xsd:element name="getAssociated">
420                         <xsd:complexType>
421                             <xsd:sequence maxOccurs="unbounded">
422                                 <xsd:element ref="isns:AssociationType"/>
423                                 <xsd:element ref="isns:isnsObject"/>
424                             </xsd:sequence>
425                         </xsd:complexType>
426                     </xsd:element>
427
428                         <!--
429                    create operation either creates a new object instance
430                    or modify an object instance if the name of the given object
431                    instance already exists.
432
433                    input: an object instance with fully populated
434                        isns{Node|Discveroy_Domain|Discovery_Domain_Set]AttrGroup
435
436                    output: status
437                -->
438                     <xsd:element name="createModify">
439                         <xsd:complexType>
440                             <xsd:choice>
441                                 <xsd:element ref="isns:DiscoveryDomainMember" maxOccurs="unbounded" />
442                                 <xsd:element ref="isns:DiscoveryDomain" maxOccurs="unbounded"/>
443                                 <xsd:element ref="isns:DiscoveryDomainSetMember" maxOccurs="unbounded"/>
444                                 <xsd:element ref="isns:DiscoveryDomainSet" maxOccurs="unbounded"/>
445                             </xsd:choice>
446                         </xsd:complexType>
447                     </xsd:element>
448
449
450                         <!--
451                    delete operation delete the given object instance.
452
453                    input: an object instance.  Specifying only the name
454                        attribute of an isnsObject insance will be sufficient
455                        for the server to serve the request.
456                        Ex) <get
457                    output: status
458                -->
459                     <xsd:element name="delete">
460                         <xsd:complexType>
461                             <xsd:choice>
462                                 <xsd:element ref="isns:DiscoveryDomain" maxOccurs="unbounded"/>
463                                 <xsd:element ref="isns:DiscoveryDomainSet" maxOccurs="unbounded"/>
464                                 <xsd:element ref="isns:DiscoveryDomainMember" maxOccurs="unbounded"/>
465                                 <xsd:element ref="isns:DiscoveryDomainSetMember" maxOccurs="unbounded"/>
466                             </xsd:choice>
467                         </xsd:complexType>
468                     </xsd:element>
469
470               <!--
471                    enumerate operation returns a list of object instances for the
472                    given object type.
473
474                    input: an object type name.
475                        Ex) <get
476                    output: a list of object instances for the given obect type
477                    or error info when there is failure.
478                -->
479                     <xsd:element name="enumerate">
480                         <xsd:complexType>
481                             <xsd:sequence>
482                                 <xsd:element ref="isns:isnsObjectType"/>
483                             </xsd:sequence>
484                         </xsd:complexType>
485                     </xsd:element>
486                     </xsd:choice>
487             </xsd:sequence>
488         </xsd:complexType>
489    </xsd:element>
490
491
492   <!--
493       isnsResponse returns either object instance information or
494       status.
495
496       When the request is 'get'
497            the response should be fully populated an obejct instance.
498       When the request is createModify or delete
499            the response should be status.
500       When the request is getAssociated or enumerate
501            the response should be a list of an object instance
502            with name attribute set.
503    -->
504
505    <xsd:element name="isnsResponse">
506        <xsd:complexType>
507            <xsd:sequence>
508            <xsd:element name="description" type="xsd:string" minOccurs="0"/>
509            <xsd:element ref="isns:result" maxOccurs="1" minOccurs="1"/>
510            <xsd:choice minOccurs="0">
511                <xsd:element ref="isns:isnsObject" maxOccurs="unbounded" minOccurs="0"/>
512                <xsd:element ref="isns:isnsServer" maxOccurs="1" minOccurs="0"/>
513                <xsd:element ref="isns:Association" maxOccurs="unbounded" minOccurs="0"/>
514            </xsd:choice>
515            </xsd:sequence>
516        </xsd:complexType>
517    </xsd:element>
518</xsd:schema>
519