1 <?xml version="1.0" encoding="UTF-8"?>
   2 <!--
   3  Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
   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 
  25 <!--
  26   Service description DTD
  27 
  28     Most attributes are string values (or an individual string from a
  29     restricted set), but attributes with a specific type requirement are
  30     noted in the comment describing the element.
  31 -->
  32 
  33 <!--
  34   XInclude support
  35 
  36     A series of service bundles may be composed via the xi:include tag.
  37     smf(5) tools enforce that all bundles be of the same type.
  38 -->
  39 
  40 <!--
  41      These entities are used for the property, propval and property_group
  42      elements, that require type attributes for manifest, while for profiles
  43      the type attributes are only implied.
  44 -->
  45 
  46 <!ENTITY % profile "IGNORE">
  47 <!ENTITY % manifest "INCLUDE">
  48 
  49 <!ELEMENT xi:include
  50   (xi:fallback)
  51   >
  52 <!ATTLIST xi:include
  53   href CDATA #REQUIRED
  54   parse (xml|text) "xml"
  55   encoding CDATA #IMPLIED
  56   xmlns:xi CDATA #FIXED "http://www.w3.org/2001/XInclude"
  57   >
  58 
  59 <!ELEMENT xi:fallback
  60   ANY
  61   >
  62 <!ATTLIST xi:fallback
  63   xmlns:xi CDATA #FIXED "http://www.w3.org/2001/XInclude"
  64   >
  65 
  66 <!--
  67   stability
  68 
  69     This element associates an SMI stability level with the parent
  70     element.  See attributes(5) for an explanation of interface
  71     stability levels.
  72 
  73     Its attribute is
  74 
  75         value   The stability level of the parent element.
  76 -->
  77 
  78 <!ELEMENT stability EMPTY>
  79 
  80 <!ATTLIST stability
  81         value           ( Standard | Stable | Evolving | Unstable |
  82                         External | Obsolete ) #REQUIRED >
  83 
  84 <!-- Property value lists -->
  85 
  86 <!--
  87   value_node
  88 
  89     This element represents a single value within any of the typed
  90     property value lists.
  91 
  92     Its attribute is
  93 
  94         value   The value for this node in the list.
  95 -->
  96 
  97 <!ELEMENT value_node EMPTY>
  98 
  99 <!ATTLIST value_node
 100         value CDATA #REQUIRED>
 101 
 102 <!--
 103   count_list
 104   integer_list
 105   opaque_list
 106   host_list
 107   hostname_list
 108   net_address_list
 109   net_address_v4_list
 110   net_address_v6_list
 111   time_list
 112   astring_list
 113   ustring_list
 114   boolean_list
 115   fmri_list
 116   uri_list
 117 
 118     These elements represent the typed lists of values for a property.
 119     Each contains one or more value_node elements representing each
 120     value on the list.
 121 
 122     None of these elements has attributes.
 123 -->
 124 
 125 <!ELEMENT count_list
 126         ( value_node+ )>
 127 
 128 <!ATTLIST count_list>
 129 
 130 <!ELEMENT integer_list
 131         ( value_node+ )>
 132 
 133 <!ATTLIST integer_list>
 134 
 135 <!ELEMENT opaque_list
 136         ( value_node+ )>
 137 
 138 <!ATTLIST opaque_list>
 139 
 140 <!ELEMENT host_list
 141         ( value_node+ )>
 142 
 143 <!ATTLIST host_list>
 144 
 145 <!ELEMENT hostname_list
 146         ( value_node+ )>
 147 
 148 <!ATTLIST hostname_list>
 149 
 150 <!ELEMENT net_address_list
 151         ( value_node+ )>
 152 
 153 <!ATTLIST net_address_list>
 154 
 155 <!ELEMENT net_address_v4_list
 156         ( value_node+ )>
 157 
 158 <!ATTLIST net_address_v4_list>
 159 
 160 <!ELEMENT net_address_v6_list
 161         ( value_node+ )>
 162 
 163 <!ATTLIST net_address_v6_list>
 164 
 165 <!ELEMENT time_list
 166         ( value_node+ )>
 167 
 168 <!ATTLIST time_list>
 169 
 170 <!ELEMENT astring_list
 171         ( value_node+ )>
 172 
 173 <!ATTLIST astring_list>
 174 
 175 <!ELEMENT ustring_list
 176         ( value_node+ )>
 177 
 178 <!ATTLIST ustring_list>
 179 
 180 <!ELEMENT boolean_list
 181         ( value_node+ )>
 182 
 183 <!ATTLIST boolean_list>
 184 
 185 <!ELEMENT fmri_list
 186         ( value_node+ )>
 187 
 188 <!ATTLIST fmri_list>
 189 
 190 <!ELEMENT uri_list
 191         ( value_node+ )>
 192 
 193 <!ATTLIST uri_list>
 194 
 195 <!-- Properties and property groups -->
 196 
 197 <!--
 198    property
 199 
 200      This element is for a singly or multiply valued property within a
 201      property group.  It contains an appropriate value list element,
 202      which is expected to be consistent with the type attribute.
 203 
 204      Its attributes are
 205 
 206         name    The name of this property.
 207 
 208         type    The data type for this property.
 209 
 210         override These values should replace values already in the
 211                 repository.
 212 -->
 213 
 214 <![%profile;[
 215 <!ELEMENT property
 216         ( count_list | integer_list | opaque_list | host_list | hostname_list |
 217         net_address_list | net_address_v4_list | net_address_v6_list |
 218         time_list | astring_list | ustring_list | boolean_list | fmri_list |
 219         uri_list )? >
 220 
 221 <!ATTLIST property
 222         name            CDATA #REQUIRED
 223         type            ( count | integer | opaque | host | hostname |
 224                         net_address | net_address_v4 | net_address_v6 | time |
 225                         astring | ustring | boolean | fmri | uri ) #IMPLIED
 226         override        ( true | false ) "false" >
 227 ]]>
 228         
 229 <![%manifest;[
 230 <!ELEMENT property
 231         ( count_list | integer_list | opaque_list | host_list | hostname_list |
 232         net_address_list | net_address_v4_list | net_address_v6_list |
 233         time_list | astring_list | ustring_list | boolean_list | fmri_list |
 234         uri_list )? >
 235 
 236 <!ATTLIST property
 237         name            CDATA #REQUIRED
 238         type            ( count | integer | opaque | host | hostname |
 239                         net_address | net_address_v4 | net_address_v6 | time |
 240                         astring | ustring | boolean | fmri | uri ) #REQUIRED
 241         override        ( true | false ) "false" >
 242 ]]>
 243 
 244 <!--
 245    propval
 246 
 247      This element is for a singly valued property within a property
 248      group.  List-valued properties must use the property element above.
 249 
 250      Its attributes are
 251 
 252         name    The name of this property.
 253 
 254         type    The data type for this property.
 255 
 256         value   The value for this property.  Must match type
 257                 restriction of type attribute.
 258 
 259         override This value should replace any values already in the
 260                 repository.
 261 -->
 262 
 263 <![%profile;[
 264 <!ELEMENT propval EMPTY>
 265 
 266 <!ATTLIST propval
 267         name            CDATA #REQUIRED
 268         type            ( count | integer | opaque | host | hostname |
 269                         net_address | net_address_v4 | net_address_v6 | time |
 270                         astring | ustring | boolean | fmri | uri ) #IMPLIED
 271         value           CDATA #REQUIRED
 272         override        ( true | false ) "false" >
 273 ]]>
 274 
 275 <![%manifest;[
 276 <!ELEMENT propval EMPTY>
 277 
 278 <!ATTLIST propval
 279         name            CDATA #REQUIRED
 280         type            ( count | integer | opaque | host | hostname |
 281                         net_address | net_address_v4 | net_address_v6 | time |
 282                         astring | ustring | boolean | fmri | uri ) #REQUIRED
 283         value           CDATA #REQUIRED
 284         override        ( true | false ) "false" >
 285 ]]>
 286 
 287 <!--
 288   property_group
 289 
 290     This element is for a set of related properties on a service or
 291     instance.  It contains an optional stability element, as well as
 292     zero or more property-containing elements.
 293 
 294     Its attributes are
 295 
 296         name    The name of this property group.
 297 
 298         type    A category for this property group.  Groups of type
 299                 "framework", "implementation" or "template" are primarily
 300                 of interest to the service management facility, while
 301                 groups of type "application" are expected to be only of
 302                 interest to the service to which this group is attached.
 303                 Other types may be introduced using the service symbol
 304                 namespace conventions.
 305 
 306         delete  If in the repository, this property group should be removed.
 307 -->
 308 
 309 <![%profile;[
 310 <!ELEMENT property_group
 311         ( stability?, ( propval | property )* )>
 312 
 313 <!ATTLIST property_group
 314         name            CDATA #REQUIRED
 315         type            CDATA #IMPLIED
 316         delete          ( true | false ) "false" >
 317 ]]>
 318 
 319 <![%manifest;[
 320 <!ELEMENT property_group
 321         ( stability?, ( propval | property )* )>
 322 
 323 <!ATTLIST property_group
 324         name            CDATA #REQUIRED
 325         type            CDATA #REQUIRED
 326         delete          ( true | false ) "false" >
 327 ]]>
 328 
 329 <!--
 330   service_fmri
 331 
 332     This element defines a reference to a service FMRI (for either a
 333     service or an instance).
 334 
 335     Its attribute is
 336 
 337         value   The FMRI.
 338 -->
 339 
 340 <!ELEMENT service_fmri EMPTY>
 341 
 342 <!ATTLIST service_fmri
 343         value           CDATA #REQUIRED>
 344 
 345 <!-- Dependencies -->
 346 
 347 <!--
 348   dependency
 349 
 350     This element identifies a group of FMRIs upon which the service is
 351     in some sense dependent.  Its interpretation is left to the
 352     restarter to which a particular service instance is delegated.  It
 353     contains a group of service FMRIs, as well as a block of properties.
 354 
 355     Its attributes are
 356 
 357         name    The name of this dependency.
 358 
 359         grouping The relationship between the various FMRIs grouped
 360                 here; "require_all" of the FMRIs to be online, "require_any"
 361                 of the FMRIs to be online, or "exclude_all" of the FMRIs
 362                 from being online or in maintenance for the dependency to
 363                 be satisfied.  "optional_all" dependencies are satisfied
 364                 when all of the FMRIs are either online or unable to come
 365                 online (because they are disabled, misconfigured, or one
 366                 of their dependencies is unable to come online).
 367 
 368         restart_on The type of events from the FMRIs that the service should
 369                 be restarted for.  "error" restarts the service if the
 370                 dependency is restarted due to hardware fault.  "restart"
 371                 restarts the service if the dependency is restarted for
 372                 any reason, including hardware fault.  "refresh" restarts
 373                 the service if the dependency is refreshed or restarted for
 374                 any reason.  "none" will never restart the service due to
 375                 dependency state changes.
 376 
 377         type    The type of dependency: on another service ('service'), on
 378                 a filesystem path ('path'), or another dependency type.
 379 
 380         delete  This dependency should be deleted.
 381 -->
 382 
 383 <!ELEMENT dependency
 384         ( service_fmri*, stability?, ( propval | property )* ) >
 385 
 386 <!ATTLIST dependency
 387         name            CDATA #REQUIRED
 388         grouping        ( require_all | require_any | exclude_all |
 389                         optional_all ) #REQUIRED
 390         restart_on      ( error | restart | refresh | none ) #REQUIRED
 391         type            CDATA #REQUIRED
 392         delete          ( true | false ) "false" >
 393 
 394 <!-- Dependents -->
 395 
 396 <!--
 397   dependent
 398 
 399     This element identifies a service which should depend on this service.  It
 400     corresponds to a dependency in the named service.  The grouping and type
 401     attributes of that dependency are implied to be "require_all" and
 402     "service", respectively.
 403 
 404     Its attributes are
 405 
 406         name    The name of the dependency property group to create in the
 407                 dependent entity.
 408 
 409         grouping The grouping relationship of the dependency property
 410                 group to create in the dependent entity.  See "grouping"
 411                 attribute on the dependency element.
 412 
 413         restart_on The type of events from this service that the named service
 414                 should be restarted for.
 415 
 416         delete  True if this dependent should be deleted.
 417 
 418         override Whether to replace an existing dependent of the same name.
 419 
 420 -->
 421 
 422 <!ELEMENT dependent
 423         ( service_fmri, stability?, ( propval | property )* ) >
 424 
 425 <!ATTLIST dependent
 426         name            CDATA #REQUIRED
 427         grouping        ( require_all | require_any | exclude_all |
 428                         optional_all) #REQUIRED
 429         restart_on      ( error | restart | refresh | none) #REQUIRED
 430         delete          ( true | false ) "false"
 431         override        ( true | false ) "false" >
 432 
 433 <!-- Method execution context, security profile, and credential definitions -->
 434 
 435 <!--
 436   envvar
 437 
 438     An environment variable. It has two attributes:
 439 
 440         name    The name of the environment variable.
 441         value   The value of the environment variable.
 442 -->
 443 
 444 <!ELEMENT envvar EMPTY>
 445 
 446 <!ATTLIST envvar
 447         name            CDATA #REQUIRED
 448         value           CDATA #REQUIRED >
 449 
 450 <!--
 451   method_environment
 452 
 453     This element defines the environment for a method. It has no
 454     attributes, and one or more envvar child elements.
 455 -->
 456 
 457 <!ELEMENT method_environment (envvar+) >
 458 
 459 <!ATTLIST method_environment>
 460 
 461 <!--
 462   method_profile
 463 
 464     This element indicates which exec_attr(5) profile applies to the
 465     method context being defined.
 466 
 467     Its attribute is
 468 
 469         name    The name of the profile.
 470 -->
 471 
 472 <!ELEMENT method_profile EMPTY>
 473 
 474 <!ATTLIST method_profile
 475         name            CDATA #REQUIRED >
 476 
 477 <!--
 478   method_credential
 479 
 480     This element specifies credential attributes for the execution
 481     method to use.
 482 
 483     Its attributes are
 484 
 485         user    The user ID, in numeric or text form.
 486 
 487         group   The group ID, in numeric or text form.  If absent or
 488                 ":default", the group associated with the user in the
 489                 passwd database.
 490 
 491         supp_groups Supplementary group IDs to be associated with the
 492                 method, separated by commas or spaces.  If absent or
 493                 ":default", initgroups(3C) will be used.
 494 
 495         privileges An optional string specifying the privilege set.
 496 
 497         limit_privileges An optional string specifying the limit
 498                 privilege set.
 499 -->
 500 
 501 <!ELEMENT method_credential EMPTY>
 502 
 503 <!ATTLIST method_credential
 504         user            CDATA #REQUIRED
 505         group           CDATA #IMPLIED
 506         supp_groups     CDATA #IMPLIED
 507         privileges      CDATA #IMPLIED
 508         limit_privileges CDATA #IMPLIED >
 509 
 510 <!--
 511   method_context
 512 
 513     This element combines credential and resource management attributes
 514     for execution methods.  It may contain a method_environment, or
 515     a method_profile or method_credential element.
 516 
 517     Its attributes are
 518 
 519         working_directory The home directory to launch the method from.
 520                 ":default" can be used as a token to indicate use of the
 521                 user specified by the credential or profile specified.
 522 
 523         project The project ID, in numeric or text form.  ":default" can
 524                 be used as a token to indicate use of the project
 525                 identified by getdefaultproj(3PROJECT) for the non-root
 526                 user specified by the credential or profile specified.
 527                 If the user is root, ":default" designates the project
 528                 the restarter is running in.
 529 
 530         resource_pool The resource pool name to launch the method on.
 531                 ":default" can be used as a token to indicate use of the
 532                 pool specified in the project(4) entry given in the
 533                 "project" attribute above.
 534 -->
 535 <!ELEMENT method_context
 536         ( (method_profile | method_credential)?, method_environment? ) >
 537 
 538 <!ATTLIST method_context
 539         security_flags          CDATA #IMPLIED
 540         working_directory       CDATA #IMPLIED
 541         project                 CDATA #IMPLIED
 542         resource_pool           CDATA #IMPLIED >
 543 
 544 <!-- Restarter delegation, methods, and monitors -->
 545 
 546 <!--
 547   exec_method
 548 
 549     This element describes one of the methods used by the designated
 550     restarter to act on the service instance.  Its interpretation is
 551     left to the restarter to which a particular service instance is
 552     delegated.  It contains a set of attributes, an optional method
 553     context, and an optional stability element for the optional
 554     properties that can be included.
 555 
 556     Its attributes are
 557 
 558         type    The type of method, either "method" or "monitor".
 559 
 560         name    Name of this execution method.  The method names are
 561                 usually a defined interface of the restarter to which an
 562                 instance of this service is delegated.
 563 
 564         exec    The string identifying the action to take.  For
 565                 svc.startd(1M), this is a string suitable to pass to
 566                 exec(2).
 567 
 568         timeout_seconds [integer] Duration, in seconds, to wait for this
 569                 method to complete.  A '0' or '-1' denotes an infinite
 570                 timeout.
 571 
 572         delete  If in the repository, the property group for this method
 573                 should be removed.
 574 -->
 575 
 576 <!ELEMENT exec_method
 577         ( method_context?, stability?, ( propval | property )* ) >
 578 
 579 <!ATTLIST exec_method
 580         type            ( method | monitor ) #REQUIRED
 581         name            CDATA #REQUIRED
 582         exec            CDATA #REQUIRED
 583         timeout_seconds CDATA #REQUIRED
 584         delete          ( true | false ) "false" >
 585 
 586 <!--
 587   restarter
 588 
 589     A flag element identifying the restarter to which this service or
 590     service instance is delegated.  Contains the FMRI naming the
 591     delegated restarter.
 592 
 593     This element has no attributes.
 594 -->
 595 
 596 <!ELEMENT restarter
 597         ( service_fmri ) >
 598 
 599 <!ATTLIST restarter>
 600 
 601 <!--
 602   Templates
 603 -->
 604 
 605 <!--
 606   doc_link
 607 
 608     The doc_link relates a resource described by the given URI to the
 609     service described by the containing template.  The resource is
 610     expected to be a documentation or elucidatory reference of some
 611     kind.
 612 
 613     Its attributes are
 614 
 615       name      A label for this resource.
 616 
 617       uri       A URI to the resource.
 618 -->
 619 
 620 <!ELEMENT doc_link EMPTY>
 621 
 622 <!ATTLIST doc_link
 623         name            CDATA #REQUIRED
 624         uri             CDATA #REQUIRED >
 625 
 626 <!--
 627   manpage
 628 
 629     The manpage element connects the reference manual page to the
 630     template's service.
 631 
 632     Its attributes are
 633 
 634       title     The manual page title.
 635 
 636       section   The manual page's section.
 637 
 638       manpath   The MANPATH environment variable, as described in man(1)
 639                 that is required to reach the named manual page
 640 -->
 641 
 642 <!ELEMENT manpage EMPTY>
 643 
 644 <!ATTLIST manpage
 645         title           CDATA #REQUIRED
 646         section         CDATA #REQUIRED
 647         manpath         CDATA ":default" >
 648 
 649 <!--
 650   documentation
 651 
 652     The documentation element groups an arbitrary number of doc_link
 653     and manpage references.
 654 
 655     It has no attributes.
 656 -->
 657 
 658 <!ELEMENT documentation
 659         ( doc_link | manpage )* >
 660 
 661 <!ATTLIST documentation>
 662 
 663 <!--
 664   loctext
 665 
 666     The loctext element is a container for localized text.
 667 
 668     Its sole attribute is
 669 
 670         xml:lang The name of the locale, in the form accepted by LC_ALL,
 671                 etc.  See locale(5).
 672 -->
 673 <!ELEMENT loctext
 674         (#PCDATA) >
 675 
 676 <!ATTLIST loctext
 677         xml:lang        CDATA #REQUIRED >
 678 
 679 <!--
 680   description
 681 
 682     The description holds a set of potentially longer, localized strings that
 683     consist of a short description of the service.
 684 
 685     The description has no attributes.
 686 -->
 687 <!ELEMENT description
 688         ( loctext+ ) >
 689 
 690 <!ATTLIST description>
 691 
 692 <!--
 693   common_name
 694 
 695     The common_name holds a set of short, localized strings that
 696     represent a well-known name for the service in the given locale.
 697 
 698     The common_name has no attributes.
 699 -->
 700 <!ELEMENT common_name
 701         ( loctext+ ) >
 702 
 703 <!ATTLIST common_name>
 704 
 705 <!--
 706   units
 707 
 708     The units a numerical property is expressed in.
 709 -->
 710 
 711 <!ELEMENT units
 712         ( loctext+ ) >
 713 
 714 <!ATTLIST units>
 715 
 716 <!--
 717   visibility
 718 
 719     Expresses how a property is typically accessed.  This isn't
 720     intended as access control, but as an indicator as to how a
 721     property is used.
 722 
 723     Its attributes are:
 724 
 725       value     'hidden', 'readonly', or 'readwrite' indicating that
 726                 the property should be hidden from the user, shown but
 727                 read-only, or modifiable.
 728 -->
 729 
 730 <!ELEMENT visibility EMPTY>
 731 
 732 <!ATTLIST visibility
 733         value   ( hidden | readonly | readwrite ) #REQUIRED >
 734 
 735 <!--
 736   value
 737 
 738     Describes a legal value for a property value, and optionally contains a
 739     human-readable name and description for the specified property
 740     value.
 741 
 742     Its attributes are:
 743 
 744       name      A string representation of the value.
 745 -->
 746 
 747 <!ELEMENT value
 748         ( common_name?, description? ) >
 749 
 750 <!ATTLIST value
 751         name    CDATA #REQUIRED >
 752 
 753 <!--
 754   values
 755 
 756     Human-readable names and descriptions for valid values of a property.
 757 -->
 758 
 759 <!ELEMENT values
 760         (value+) >
 761 
 762 <!ATTLIST values>
 763 
 764 <!--
 765   cardinality
 766 
 767     Places a constraint on the number of values the property can take
 768     on.
 769 
 770     Its attributes are:
 771         min     minimum number of values
 772         max     maximum number of values
 773 
 774     Both attributes are optional.  If min is not specified, it defaults to
 775     0.  If max is not specified it indicates an unlimited number of values.
 776     If neither is specified this indicates 0 or more values.
 777 -->
 778 
 779 <!ELEMENT cardinality EMPTY>
 780 
 781 <!ATTLIST cardinality
 782         min     CDATA "0"
 783         max     CDATA "18446744073709551615">
 784 
 785 <!--
 786   internal_separators
 787 
 788     Indicates the separators used within a property's value used to
 789     separate the actual values.  Used in situations where multiple
 790     values are packed into a single property value instead of using a
 791     multi-valued property.
 792 -->
 793 
 794 <!ELEMENT internal_separators
 795         (#PCDATA) >
 796 
 797 <!ATTLIST internal_separators>
 798 
 799 <!--
 800   range
 801 
 802     Indicates a range of possible integer values.
 803 
 804     Its attributes are:
 805 
 806       min       The minimum value of the range (inclusive).
 807       max       The maximum value of the range (inclusive).
 808 -->
 809 
 810 <!ELEMENT range EMPTY>
 811 
 812 <!ATTLIST range
 813         min     CDATA #REQUIRED
 814         max     CDATA #REQUIRED >
 815 
 816 <!--
 817   constraints
 818 
 819     Provides a set of constraints on the values a property can take on.
 820 -->
 821 
 822 <!ELEMENT constraints
 823         ( value*, range* ) >
 824 <!ATTLIST constraints>
 825 
 826 <!--
 827   include_values
 828 
 829     Includes an entire set of values in the choices block.
 830 
 831     Its attributes are:
 832 
 833         type    Either "constraints" or "values", indicating an
 834                 inclusion of all values allowed by the property's
 835                 constraints or all values for which there are
 836                 human-readable names and descriptions, respectively.
 837 -->
 838 
 839 <!ELEMENT include_values EMPTY>
 840 
 841 <!ATTLIST include_values
 842         type    ( constraints | values ) #REQUIRED >
 843 
 844 <!--
 845   choices
 846 
 847     Provides a set of common choices for the values a property can take
 848     on.  Useful in those cases where the possibilities are unenumerable
 849     or merely inconveniently legion, and a manageable subset is desired
 850     for presentation in a user interface.
 851 -->
 852 
 853 <!ELEMENT choices
 854         ( value*, range*, include_values* ) >
 855 
 856 <!ATTLIST choices>
 857 
 858 <!--
 859   prop_pattern
 860 
 861 
 862     The prop_pattern describes one property of the enclosing property group
 863     pattern.
 864 
 865     Its attributes are:
 866 
 867         name    The property's name.
 868         type    The property's type.
 869         required
 870                 If the property group is present, this property is required.
 871 
 872         type can be omitted if required is false.
 873 -->
 874 
 875 <!ELEMENT prop_pattern
 876         ( common_name?, description?, units?, visibility?, cardinality?,
 877           internal_separators?, values?, constraints?, choices? ) >
 878 
 879 <!ATTLIST prop_pattern
 880         name            CDATA   #REQUIRED
 881         type            ( count | integer | opaque | host | hostname |
 882                         net_address | net_address_v4 | net_address_v6 | time |
 883                         astring | ustring | boolean | fmri | uri ) #IMPLIED
 884         required        ( true | false )        "false" >
 885 
 886 <!--
 887   pg_pattern
 888 
 889     The pg_pattern describes one property group.
 890     Depending on the element's attributes, these descriptions may apply
 891     to just the enclosing service/instance, instances of the enclosing
 892     service, delegates of the service (assuming it is a restarter), or
 893     all services.
 894 
 895     Its attributes are:
 896 
 897         name    The property group's name.  If not specified, it
 898                 matches all property groups with the specified type.
 899         type    The property group's type.  If not specified, it
 900                 matches all property groups with the specified name.
 901         required
 902                 If the property group is required.
 903         target  The scope of the pattern, which may be all, delegate,
 904                 instance, or this.  'all' is reserved for framework use
 905                 and applies the template to all services on the system.
 906                 'delegate' is reserved for restarters, and means the
 907                 template applies to all services which use the restarter.
 908                 'this' would refer to the defining service or instance.
 909                 'instance' can only be used in a service's template block,
 910                 and means the definition applies to all instances of this
 911                 service.
 912 
 913 -->
 914 
 915 <!ELEMENT pg_pattern
 916         ( common_name?, description?, prop_pattern* ) >
 917 
 918 <!ATTLIST pg_pattern
 919         name            CDATA   ""
 920         type            CDATA   ""
 921         required        ( true | false )        "false"
 922         target          ( this | instance | delegate | all )    "this" >
 923 
 924 <!--
 925   template
 926 
 927     The template contains a collection of metadata about the service.
 928     It contains a localizable string that serves as a common,
 929     human-readable name for the service.  (This name should be less than
 930     60 characters in a single byte locale.)  The template may optionally
 931     contain a longer localizable description of the service, a
 932     collection of links to documentation, either in the form of manual
 933     pages or in the form of URI specifications to external documentation
 934     sources (such as docs.sun.com).
 935 
 936     The template has no attributes.
 937 -->
 938 <!ELEMENT template
 939         ( common_name, description?, documentation?, pg_pattern* ) >
 940 
 941 <!ATTLIST template>
 942 
 943 <!-- Notification Parameters -->
 944 
 945 <!ELEMENT paramval EMPTY>
 946 
 947 <!ATTLIST paramval
 948         name            CDATA #REQUIRED
 949         value           CDATA #REQUIRED>
 950 
 951 <!ELEMENT parameter
 952         ( value_node* )>
 953 
 954 <!ATTLIST parameter
 955         name            CDATA #REQUIRED>
 956 
 957 <!ELEMENT event EMPTY>
 958 
 959 <!ATTLIST event
 960         value           CDATA #REQUIRED>
 961 
 962 <!ELEMENT type
 963         ( ( parameter | paramval )* )>
 964 
 965 <!ATTLIST type
 966         name            CDATA #REQUIRED
 967         active          ( true | false ) "true" >
 968 
 969 <!--
 970   notification parameters
 971 
 972     This element sets the notification parameters for Software Events and
 973     Fault Management problem lifecycle events.
 974 -->
 975 
 976 <!ELEMENT notification_parameters
 977         ( event, type+ )>
 978 
 979 <!ATTLIST notification_parameters>
 980 
 981 <!-- Services and instances -->
 982 
 983 <!--
 984   create_default_instance
 985 
 986     A flag element indicating that an otherwise empty default instance
 987     of this service (named "default") should be created at install, with
 988     its enabled property set as given.
 989 
 990     Its attribute is
 991 
 992         enabled [boolean] The initial value for the enabled state of
 993                 this instance.
 994 -->
 995 
 996 <!ELEMENT create_default_instance EMPTY >
 997 
 998 <!ATTLIST create_default_instance
 999         enabled         ( true | false ) #REQUIRED >
1000 
1001 <!--
1002   single_instance
1003 
1004     A flag element stating that this service can only have a single
1005     instance on a particular system.
1006 -->
1007 
1008 <!ELEMENT single_instance EMPTY>
1009 
1010 <!ATTLIST single_instance>
1011 
1012 <!--
1013   instance
1014 
1015     The service instance is the object representing a software component
1016     that will run on the system if enabled.  It contains an enabled
1017     element, a set of dependencies on other services, potentially
1018     customized methods or configuration data, an optional method
1019     context, and a pointer to its restarter.  (If no restarter is
1020     specified, the master restarter, svc.startd(1M), is assumed to be
1021     responsible for the service.)
1022 
1023     Its attributes are
1024 
1025         name    The canonical name for this instance of the service.
1026 
1027         enabled [boolean] The initial value for the enabled state of
1028                 this instance.
1029 -->
1030 
1031 <!ELEMENT instance
1032         ( restarter?, dependency*, dependent*, method_context?,
1033         exec_method*, notification_parameters*, property_group*,
1034         template? ) >
1035 
1036 <!ATTLIST instance
1037         name            CDATA #REQUIRED
1038         enabled         ( true | false ) #REQUIRED >
1039 
1040 <!--
1041   service
1042 
1043     The service contains the set of instances defined by default for
1044     this service, an optional method execution context, any default
1045     methods, the template, and various restrictions or advice applicable
1046     at installation.  The method execution context and template elements
1047     are required for service_bundle documents with type "manifest", but
1048     are optional for "profile" or "archive" documents.
1049 
1050     Its attributes are
1051 
1052         name    The canonical name for the service.
1053 
1054         version [integer] The integer version for this service.
1055 
1056         type    Whether this service is a simple service, a delegated
1057                 restarter, or a milestone (a synthetic service that
1058                 collects a group of dependencies).
1059 -->
1060 
1061 <!ELEMENT service
1062         ( create_default_instance?, single_instance?, restarter?,
1063         dependency*, dependent*, method_context?, exec_method*,
1064         notification_parameters*, property_group*, instance*,
1065         stability?, template? ) >
1066 
1067 <!ATTLIST service
1068         name            CDATA #REQUIRED
1069         version         CDATA #REQUIRED
1070         type            ( service | restarter | milestone ) #REQUIRED >
1071 
1072 <!--
1073   service_bundle
1074 
1075     The bundle possesses two attributes:
1076 
1077         type    How this file is to be understood by the framework (or
1078                 used in a non-framework compliant way). Standard types
1079                 are 'archive', 'manifest', and 'profile'.
1080         
1081         name    A name for the bundle.  Manifests should be named after
1082                 the package which delivered them; profiles should be
1083                 named after the "feature set nickname" they intend to
1084                 enable.
1085 -->
1086 
1087 <!ELEMENT service_bundle
1088         ( service_bundle* | service* | xi:include* )>
1089 
1090 <!ATTLIST service_bundle
1091         type            CDATA #REQUIRED
1092         name            CDATA #REQUIRED>