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         working_directory       CDATA #IMPLIED
 540         project                 CDATA #IMPLIED
 541         resource_pool           CDATA #IMPLIED >
 542 
 543 <!-- Restarter delegation, methods, and monitors -->
 544 
 545 <!--
 546   exec_method
 547 
 548     This element describes one of the methods used by the designated
 549     restarter to act on the service instance.  Its interpretation is
 550     left to the restarter to which a particular service instance is
 551     delegated.  It contains a set of attributes, an optional method
 552     context, and an optional stability element for the optional
 553     properties that can be included.
 554 
 555     Its attributes are
 556 
 557         type    The type of method, either "method" or "monitor".
 558 
 559         name    Name of this execution method.  The method names are
 560                 usually a defined interface of the restarter to which an
 561                 instance of this service is delegated.
 562 
 563         exec    The string identifying the action to take.  For
 564                 svc.startd(1M), this is a string suitable to pass to
 565                 exec(2).
 566 
 567         timeout_seconds [integer] Duration, in seconds, to wait for this
 568                 method to complete.  A '0' or '-1' denotes an infinite
 569                 timeout.
 570 
 571         delete  If in the repository, the property group for this method
 572                 should be removed.
 573 -->
 574 
 575 <!ELEMENT exec_method
 576         ( method_context?, stability?, ( propval | property )* ) >
 577 
 578 <!ATTLIST exec_method
 579         type            ( method | monitor ) #REQUIRED
 580         name            CDATA #REQUIRED
 581         exec            CDATA #REQUIRED
 582         timeout_seconds CDATA #REQUIRED
 583         delete          ( true | false ) "false" >
 584 
 585 <!--
 586   restarter
 587 
 588     A flag element identifying the restarter to which this service or
 589     service instance is delegated.  Contains the FMRI naming the
 590     delegated restarter.
 591 
 592     This element has no attributes.
 593 -->
 594 
 595 <!ELEMENT restarter
 596         ( service_fmri ) >
 597 
 598 <!ATTLIST restarter>
 599 
 600 <!--
 601   Templates
 602 -->
 603 
 604 <!--
 605   doc_link
 606 
 607     The doc_link relates a resource described by the given URI to the
 608     service described by the containing template.  The resource is
 609     expected to be a documentation or elucidatory reference of some
 610     kind.
 611 
 612     Its attributes are
 613 
 614       name      A label for this resource.
 615 
 616       uri       A URI to the resource.
 617 -->
 618 
 619 <!ELEMENT doc_link EMPTY>
 620 
 621 <!ATTLIST doc_link
 622         name            CDATA #REQUIRED
 623         uri             CDATA #REQUIRED >
 624 
 625 <!--
 626   manpage
 627 
 628     The manpage element connects the reference manual page to the
 629     template's service.
 630 
 631     Its attributes are
 632 
 633       title     The manual page title.
 634 
 635       section   The manual page's section.
 636 
 637       manpath   The MANPATH environment variable, as described in man(1)
 638                 that is required to reach the named manual page
 639 -->
 640 
 641 <!ELEMENT manpage EMPTY>
 642 
 643 <!ATTLIST manpage
 644         title           CDATA #REQUIRED
 645         section         CDATA #REQUIRED
 646         manpath         CDATA ":default" >
 647 
 648 <!--
 649   documentation
 650 
 651     The documentation element groups an arbitrary number of doc_link
 652     and manpage references.
 653 
 654     It has no attributes.
 655 -->
 656 
 657 <!ELEMENT documentation
 658         ( doc_link | manpage )* >
 659 
 660 <!ATTLIST documentation>
 661 
 662 <!--
 663   loctext
 664 
 665     The loctext element is a container for localized text.
 666 
 667     Its sole attribute is
 668 
 669         xml:lang The name of the locale, in the form accepted by LC_ALL,
 670                 etc.  See locale(5).
 671 -->
 672 <!ELEMENT loctext
 673         (#PCDATA) >
 674 
 675 <!ATTLIST loctext
 676         xml:lang        CDATA #REQUIRED >
 677 
 678 <!--
 679   description
 680 
 681     The description holds a set of potentially longer, localized strings that
 682     consist of a short description of the service.
 683 
 684     The description has no attributes.
 685 -->
 686 <!ELEMENT description
 687         ( loctext+ ) >
 688 
 689 <!ATTLIST description>
 690 
 691 <!--
 692   common_name
 693 
 694     The common_name holds a set of short, localized strings that
 695     represent a well-known name for the service in the given locale.
 696 
 697     The common_name has no attributes.
 698 -->
 699 <!ELEMENT common_name
 700         ( loctext+ ) >
 701 
 702 <!ATTLIST common_name>
 703 
 704 <!--
 705   units
 706 
 707     The units a numerical property is expressed in.
 708 -->
 709 
 710 <!ELEMENT units
 711         ( loctext+ ) >
 712 
 713 <!ATTLIST units>
 714 
 715 <!--
 716   visibility
 717 
 718     Expresses how a property is typically accessed.  This isn't
 719     intended as access control, but as an indicator as to how a
 720     property is used.
 721 
 722     Its attributes are:
 723 
 724       value     'hidden', 'readonly', or 'readwrite' indicating that
 725                 the property should be hidden from the user, shown but
 726                 read-only, or modifiable.
 727 -->
 728 
 729 <!ELEMENT visibility EMPTY>
 730 
 731 <!ATTLIST visibility
 732         value   ( hidden | readonly | readwrite ) #REQUIRED >
 733 
 734 <!--
 735   value
 736 
 737     Describes a legal value for a property value, and optionally contains a
 738     human-readable name and description for the specified property
 739     value.
 740 
 741     Its attributes are:
 742 
 743       name      A string representation of the value.
 744 -->
 745 
 746 <!ELEMENT value
 747         ( common_name?, description? ) >
 748 
 749 <!ATTLIST value
 750         name    CDATA #REQUIRED >
 751 
 752 <!--
 753   values
 754 
 755     Human-readable names and descriptions for valid values of a property.
 756 -->
 757 
 758 <!ELEMENT values
 759         (value+) >
 760 
 761 <!ATTLIST values>
 762 
 763 <!--
 764   cardinality
 765 
 766     Places a constraint on the number of values the property can take
 767     on.
 768 
 769     Its attributes are:
 770         min     minimum number of values
 771         max     maximum number of values
 772 
 773     Both attributes are optional.  If min is not specified, it defaults to
 774     0.  If max is not specified it indicates an unlimited number of values.
 775     If neither is specified this indicates 0 or more values.
 776 -->
 777 
 778 <!ELEMENT cardinality EMPTY>
 779 
 780 <!ATTLIST cardinality
 781         min     CDATA "0"
 782         max     CDATA "18446744073709551615">
 783 
 784 <!--
 785   internal_separators
 786 
 787     Indicates the separators used within a property's value used to
 788     separate the actual values.  Used in situations where multiple
 789     values are packed into a single property value instead of using a
 790     multi-valued property.
 791 -->
 792 
 793 <!ELEMENT internal_separators
 794         (#PCDATA) >
 795 
 796 <!ATTLIST internal_separators>
 797 
 798 <!--
 799   range
 800 
 801     Indicates a range of possible integer values.
 802 
 803     Its attributes are:
 804 
 805       min       The minimum value of the range (inclusive).
 806       max       The maximum value of the range (inclusive).
 807 -->
 808 
 809 <!ELEMENT range EMPTY>
 810 
 811 <!ATTLIST range
 812         min     CDATA #REQUIRED
 813         max     CDATA #REQUIRED >
 814 
 815 <!--
 816   constraints
 817 
 818     Provides a set of constraints on the values a property can take on.
 819 -->
 820 
 821 <!ELEMENT constraints
 822         ( value*, range* ) >
 823 <!ATTLIST constraints>
 824 
 825 <!--
 826   include_values
 827 
 828     Includes an entire set of values in the choices block.
 829 
 830     Its attributes are:
 831 
 832         type    Either "constraints" or "values", indicating an
 833                 inclusion of all values allowed by the property's
 834                 constraints or all values for which there are
 835                 human-readable names and descriptions, respectively.
 836 -->
 837 
 838 <!ELEMENT include_values EMPTY>
 839 
 840 <!ATTLIST include_values
 841         type    ( constraints | values ) #REQUIRED >
 842 
 843 <!--
 844   choices
 845 
 846     Provides a set of common choices for the values a property can take
 847     on.  Useful in those cases where the possibilities are unenumerable
 848     or merely inconveniently legion, and a manageable subset is desired
 849     for presentation in a user interface.
 850 -->
 851 
 852 <!ELEMENT choices
 853         ( value*, range*, include_values* ) >
 854 
 855 <!ATTLIST choices>
 856 
 857 <!--
 858   prop_pattern
 859 
 860 
 861     The prop_pattern describes one property of the enclosing property group
 862     pattern.
 863 
 864     Its attributes are:
 865 
 866         name    The property's name.
 867         type    The property's type.
 868         required
 869                 If the property group is present, this property is required.
 870 
 871         type can be omitted if required is false.
 872 -->
 873 
 874 <!ELEMENT prop_pattern
 875         ( common_name?, description?, units?, visibility?, cardinality?,
 876           internal_separators?, values?, constraints?, choices? ) >
 877 
 878 <!ATTLIST prop_pattern
 879         name            CDATA   #REQUIRED
 880         type            ( count | integer | opaque | host | hostname |
 881                         net_address | net_address_v4 | net_address_v6 | time |
 882                         astring | ustring | boolean | fmri | uri ) #IMPLIED
 883         required        ( true | false )        "false" >
 884 
 885 <!--
 886   pg_pattern
 887 
 888     The pg_pattern describes one property group.
 889     Depending on the element's attributes, these descriptions may apply
 890     to just the enclosing service/instance, instances of the enclosing
 891     service, delegates of the service (assuming it is a restarter), or
 892     all services.
 893 
 894     Its attributes are:
 895 
 896         name    The property group's name.  If not specified, it
 897                 matches all property groups with the specified type.
 898         type    The property group's type.  If not specified, it
 899                 matches all property groups with the specified name.
 900         required
 901                 If the property group is required.
 902         target  The scope of the pattern, which may be all, delegate,
 903                 instance, or this.  'all' is reserved for framework use
 904                 and applies the template to all services on the system.
 905                 'delegate' is reserved for restarters, and means the
 906                 template applies to all services which use the restarter.
 907                 'this' would refer to the defining service or instance.
 908                 'instance' can only be used in a service's template block,
 909                 and means the definition applies to all instances of this
 910                 service.
 911 
 912 -->
 913 
 914 <!ELEMENT pg_pattern
 915         ( common_name?, description?, prop_pattern* ) >
 916 
 917 <!ATTLIST pg_pattern
 918         name            CDATA   ""
 919         type            CDATA   ""
 920         required        ( true | false )        "false"
 921         target          ( this | instance | delegate | all )    "this" >
 922 
 923 <!--
 924   template
 925 
 926     The template contains a collection of metadata about the service.
 927     It contains a localizable string that serves as a common,
 928     human-readable name for the service.  (This name should be less than
 929     60 characters in a single byte locale.)  The template may optionally
 930     contain a longer localizable description of the service, a
 931     collection of links to documentation, either in the form of manual
 932     pages or in the form of URI specifications to external documentation
 933     sources (such as docs.sun.com).
 934 
 935     The template has no attributes.
 936 -->
 937 <!ELEMENT template
 938         ( common_name, description?, documentation?, pg_pattern* ) >
 939 
 940 <!ATTLIST template>
 941 
 942 <!-- Notification Parameters -->
 943 
 944 <!ELEMENT paramval EMPTY>
 945 
 946 <!ATTLIST paramval
 947         name            CDATA #REQUIRED
 948         value           CDATA #REQUIRED>
 949 
 950 <!ELEMENT parameter
 951         ( value_node* )>
 952 
 953 <!ATTLIST parameter
 954         name            CDATA #REQUIRED>
 955 
 956 <!ELEMENT event EMPTY>
 957 
 958 <!ATTLIST event
 959         value           CDATA #REQUIRED>
 960 
 961 <!ELEMENT type
 962         ( ( parameter | paramval )* )>
 963 
 964 <!ATTLIST type
 965         name            CDATA #REQUIRED
 966         active          ( true | false ) "true" >
 967 
 968 <!--
 969   notification parameters
 970 
 971     This element sets the notification parameters for Software Events and
 972     Fault Management problem lifecycle events.
 973 -->
 974 
 975 <!ELEMENT notification_parameters
 976         ( event, type+ )>
 977 
 978 <!ATTLIST notification_parameters>
 979 
 980 <!-- Services and instances -->
 981 
 982 <!--
 983   create_default_instance
 984 
 985     A flag element indicating that an otherwise empty default instance
 986     of this service (named "default") should be created at install, with
 987     its enabled property set as given.
 988 
 989     Its attribute is
 990 
 991         enabled [boolean] The initial value for the enabled state of
 992                 this instance.
 993 -->
 994 
 995 <!ELEMENT create_default_instance EMPTY >
 996 
 997 <!ATTLIST create_default_instance
 998         enabled         ( true | false ) #REQUIRED >
 999 
1000 <!--
1001   single_instance
1002 
1003     A flag element stating that this service can only have a single
1004     instance on a particular system.
1005 -->
1006 
1007 <!ELEMENT single_instance EMPTY>
1008 
1009 <!ATTLIST single_instance>
1010 
1011 <!--
1012   instance
1013 
1014     The service instance is the object representing a software component
1015     that will run on the system if enabled.  It contains an enabled
1016     element, a set of dependencies on other services, potentially
1017     customized methods or configuration data, an optional method
1018     context, and a pointer to its restarter.  (If no restarter is
1019     specified, the master restarter, svc.startd(1M), is assumed to be
1020     responsible for the service.)
1021 
1022     Its attributes are
1023 
1024         name    The canonical name for this instance of the service.
1025 
1026         enabled [boolean] The initial value for the enabled state of
1027                 this instance.
1028 -->
1029 
1030 <!ELEMENT instance
1031         ( restarter?, dependency*, dependent*, method_context?,
1032         exec_method*, notification_parameters*, property_group*,
1033         template? ) >
1034 
1035 <!ATTLIST instance
1036         name            CDATA #REQUIRED
1037         enabled         ( true | false ) #REQUIRED >
1038 
1039 <!--
1040   service
1041 
1042     The service contains the set of instances defined by default for
1043     this service, an optional method execution context, any default
1044     methods, the template, and various restrictions or advice applicable
1045     at installation.  The method execution context and template elements
1046     are required for service_bundle documents with type "manifest", but
1047     are optional for "profile" or "archive" documents.
1048 
1049     Its attributes are
1050 
1051         name    The canonical name for the service.
1052 
1053         version [integer] The integer version for this service.
1054 
1055         type    Whether this service is a simple service, a delegated
1056                 restarter, or a milestone (a synthetic service that
1057                 collects a group of dependencies).
1058 -->
1059 
1060 <!ELEMENT service
1061         ( create_default_instance?, single_instance?, restarter?,
1062         dependency*, dependent*, method_context?, exec_method*,
1063         notification_parameters*, property_group*, instance*,
1064         stability?, template? ) >
1065 
1066 <!ATTLIST service
1067         name            CDATA #REQUIRED
1068         version         CDATA #REQUIRED
1069         type            ( service | restarter | milestone ) #REQUIRED >
1070 
1071 <!--
1072   service_bundle
1073 
1074     The bundle possesses two attributes:
1075 
1076         type    How this file is to be understood by the framework (or
1077                 used in a non-framework compliant way). Standard types
1078                 are 'archive', 'manifest', and 'profile'.
1079         
1080         name    A name for the bundle.  Manifests should be named after
1081                 the package which delivered them; profiles should be
1082                 named after the "feature set nickname" they intend to
1083                 enable.
1084 -->
1085 
1086 <!ELEMENT service_bundle
1087         ( service_bundle* | service* | xi:include* )>
1088 
1089 <!ATTLIST service_bundle
1090         type            CDATA #REQUIRED
1091         name            CDATA #REQUIRED>