1<?xml version='1.0' encoding='UTF-8' ?>
2
3<!--
4 CDDL HEADER START
5
6 The contents of this file are subject to the terms of the
7 Common Development and Distribution License (the "License").
8 You may not use this file except in compliance with the License.
9
10 You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
11 or http://www.opensolaris.org/os/licensing.
12 See the License for the specific language governing permissions
13 and limitations under the License.
14
15 When distributing Covered Code, include this CDDL HEADER in each
16 file and include the License file at usr/src/OPENSOLARIS.LICENSE.
17 If applicable, add the following below this CDDL HEADER, with the
18 fields enclosed by brackets "[]" replaced with your own identifying
19 information: Portions Copyright [yyyy] [name of copyright owner]
20
21 CDDL HEADER END
22
23 Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
24
25 DO NOT EDIT THIS FILE.
26
27 Copyright 2014 Nexenta Systems, Inc. All rights reserved.
28-->
29
30<!--
31  verify_cfg
32
33    Identifies the program to be invoked by zonecfg to verify that the
34    zone's configuration is legal, and that all the configured devices,
35    attributes, etc. are legal for this brand.
36
37    The program is called with a single argument: the path to a file
38    containing a temporary config.xml file the zone.  It should return 0
39    on success and non-0 on failure.  Any detailed error messages should be
40    displayed to stderr.
41
42    It has no attributes.
43
44-->
45<!ELEMENT verify_cfg	(#PCDATA) >
46<!ATTLIST verify_cfg>
47<!--
48  verify_adm
49
50    Identifies the program invoked by zoneadm to perform brand-specific
51    checks as to the viability of a zone on this specific machine.
52
53    The following replacements are performed:
54
55      %z	Name of zone
56      %R	Zonepath of zone
57      Additional arguments, if any, are appended.
58
59    The program should return 0 on success and non-0 on failure.  Any
60    detailed error messages should be displayed to stderr.
61
62    It has no attributes.
63
64-->
65<!ELEMENT verify_adm	(#PCDATA) >
66<!ATTLIST verify_adm>
67
68<!--
69  install
70
71    Identifies the program to invoke when installing a zone.  The following
72    replacements are performed:
73
74      %z	Name of zone
75      %R	Zonepath of zone
76      Additional arguments, if any, are appended.
77
78    It has no attributes.
79-->
80<!ELEMENT install	(#PCDATA) >
81<!ATTLIST install>
82
83<!--
84  installopts
85
86    Identifies the command-line options supported by the brand's
87    installation program, allowing zoneadm to parse the install line
88    properly.
89
90    It has no attributes.
91-->
92<!ELEMENT installopts	(#PCDATA) >
93<!ATTLIST installopts>
94
95<!--
96  boot
97
98    This is a program which gets run by zoneadmd when a zone is booted.
99    The program will be invoked as the last step in the zone booting
100    process before the the first process is spawned inside the zone.
101
102    If this programs succeeds it should not generate any output.
103    If this program returns an error, any output generated by the
104    program will be sent to the zoneadmd message log.
105
106    The following replacements are performed:
107
108      %z	Name of zone
109      %R	Zonepath of zone
110      Additional arguments, if any, are appended.
111
112    It has no attributes.
113-->
114<!ELEMENT boot	(#PCDATA) >
115<!ATTLIST boot>
116
117<!--
118  sysboot
119
120    This is a program that will be run by zoneadm during system boot for an
121    installed zone that won't automatically boot.
122
123    If the program succeeds, then it should not generate output.
124    If the program returns an error, then the output it generates will be
125    sent to the zones SMF service's message log.
126
127    The following replacements are performed:
128
129      %z	Name of the target zone
130      %R	Zonepath of the target zone
131      Additional arguments, if any, are appended.
132
133    This element has no attributes.
134-->
135<!ELEMENT sysboot	(#PCDATA) >
136<!ATTLIST sysboot>
137
138<!--
139  halt
140
141    This is a program which gets run by zoneadmd when a zone is being
142    halted.  This callback is provided to allow a brand to cleanup any
143    special configuration that was setup during boot.
144
145    This program will also be invoked by zoneadmd if any part of the zone
146    booting process fail, even if the booting process failed before the
147    brand boot program was invoked.  It is also possible that if the zone
148    fails to halt after invoking this program, future attempts to halt the
149    zone will invoke this program again.  So this program should be
150    designed to clean up any resources allocated to a zone but it should
151    also be able to gracefully handle the case where resources that it
152    expects to release are not actually allocated (or have been already
153    released.)
154
155    If this programs succeeds it should not generate any output.  If this
156    program returns an error, any output generated by the program will be
157    sent to the zoneadmd message log.
158
159    The following replacements are performed:
160
161      %z	Name of zone
162      %R	Zonepath of zone
163      Additional arguments, if any, are appended.
164
165    It has no attributes.
166-->
167<!ELEMENT halt	(#PCDATA) >
168<!ATTLIST halt>
169
170<!--
171  shutdown
172
173    This is a program which gets run by zoneadmd when a zone is being
174    shutdown gracefully. Currently only asynchronous mode is supported.
175
176    If this program succeeds it should not generate any output. If this
177    program returns an error, any output generated by the program will be
178    sent to the zoneadmd message log.
179
180    The following replacements are performed:
181
182      %z	Name of zone
183      %R	Zonepath of zone
184      Additional arguments, if any, are appended.
185
186    It has no attributes.
187-->
188<!ELEMENT shutdown	(#PCDATA) >
189<!ATTLIST shutdown>
190
191<!--
192  modname
193
194    Path to the kernel module that implements the kernel-level
195    functionality of the brand.
196
197    It has no attributes.
198-->
199<!ELEMENT modname	(#PCDATA) >
200<!ATTLIST modname>
201
202<!--
203  initname
204
205    Path to the initial executable that should be launched when booting a
206    branded zone.
207
208    It has no attributes.
209-->
210<!ELEMENT initname	(#PCDATA) >
211<!ATTLIST initname>
212
213<!--
214  login_cmd
215
216    Path to the initial login binary that should be executed when
217    attempting to zlogin into a branded zone.
218
219    The following replacements are performed:
220
221      %Z	Name of the current zone
222      %u	User login name
223
224    It has no attributes.
225-->
226<!ELEMENT login_cmd	(#PCDATA) >
227<!ATTLIST login_cmd>
228
229<!--
230  forcedlogin_cmd
231
232    Path to the initial login binary that should be executed when
233    attempting to zlogin into a branded zone without authentication.
234
235    The following replacements are performed:
236
237      %Z	Name of the current zone
238      %u	User login name
239
240    It has no attributes.
241-->
242<!ELEMENT forcedlogin_cmd	(#PCDATA) >
243<!ATTLIST forcedlogin_cmd>
244
245<!--
246  user_cmd
247
248    Path to the binary that will translate a user name to a passwd(4) entry.
249
250    The following replacements are performed:
251
252      %u        User login name
253
254    It has no attributes.  The passwd(4) entry is used to determine $LOGNAME,
255    $HOME, and $SHELL for non-interactive "zlogin -l <user> <cmd>".
256-->
257<!ELEMENT user_cmd   (#PCDATA) >
258<!ATTLIST user_cmd>
259
260<!--
261  attach
262
263    Path to a hook that will perform any necessary processing on
264    a zone to allow it to be attached.  The zone will be in the "configured"
265    state when this hook is run.  This hook is never called when the zone
266    is "force attached" (-F).
267
268    If this hook exits with a non-zero exit status, the attach operation
269    will fail.
270
271    The following replacements are performed:
272
273      %z	Name of zone
274      %R	Zonepath of zone
275      Additional arguments, if any, are appended.
276
277    If no hook is provided, the internal zoneadm attach code will be used.
278
279    It has no attributes.
280-->
281<!ELEMENT attach	(#PCDATA) >
282<!ATTLIST attach>
283
284<!--
285  postattach
286
287    Path to a hook that will perform any necessary post-processing on
288    a zone after it has been attached.  The zone will be in the "installed"
289    state when this hook is run.  This hook is never called when the zone
290    is "force attached" (-F).
291
292    If this hook exits with a non-zero exit status, the attach operation
293    will fail and the zone state will be reset to "configured".
294
295    The following replacements are performed:
296
297      %z	Name of zone
298      %R	Zonepath of zone
299      Additional arguments, if any, are appended.
300
301    It has no attributes.
302-->
303<!ELEMENT postattach	(#PCDATA) >
304<!ATTLIST postattach>
305
306<!--
307  postclone
308
309    Path to a hook that will perform any necessary post-processing on
310    a zone after it has been cloned.  The zone will be in the "incomplete"
311    state when this hook is run.
312
313    If this hook exits with a non-zero exit status, the clone operation
314    will fail and the zone will be left in the "incomplete" state,
315    otherwise the state will be changed to the "installed" state.
316
317    The following replacements are performed:
318
319      %z	Name of zone
320      %R	Zonepath of zone
321      Additional arguments, if any, are appended.
322
323    It has no attributes.
324-->
325<!ELEMENT postclone	(#PCDATA) >
326<!ATTLIST postclone>
327
328<!--
329  postinstall
330
331    Path to a script that will perform any necessary post-processing on
332    a zone after it has been freshly installed.  This hook will run after the
333    install hook completes and the zone is in the installed state.  The
334    additional arguments are the same as what is passed to the install hook.
335
336    The following replacements are performed:
337
338      %z	Name of zone
339      %R	Zonepath of zone
340      Additional arguments, if any, are appended.
341
342    It has no attributes.
343-->
344<!ELEMENT postinstall	(#PCDATA) >
345<!ATTLIST postinstall>
346
347<!--
348  predetach
349
350    Path to a hook that will perform any necessary pre-processing on
351    a zone before it is detached.  The zone will be in the "installed"
352    state when this hook is run.
353
354    It is possible that if the zone fails to detach after invoking this
355    hook, future attempts to detach the zone will invoke this hook again.
356    So this hook should be designed to gracefully handle the case where
357    it is run multiple times on the same zone.  If this hook exits with
358    a non-zero exit status, the detach operation will fail.
359
360    This hook is most commonly used when there is pre-processing for detaching
361    a zone but the built-in detach support will be used for the actual
362    detach.  Otherwise, if a detach hook is provided, then it can be used
363    to do both preprocessing as well as the actual detach.
364
365    The following replacements are performed:
366
367      %z	Name of zone
368      %R	Zonepath of zone
369      Additional arguments, if any, are appended.
370
371    It has no attributes.
372-->
373<!ELEMENT predetach	(#PCDATA) >
374<!ATTLIST predetach>
375
376<!--
377  detach
378
379    Path to a hook that will perform any necessary processing on
380    a zone to allow it to be detached.  The zone will be in the "installed"
381    state when this hook is run.
382
383    It is possible that if the zone fails to detach while running this
384    hook, future attempts to detach the zone will invoke this hook again.
385    So this hook should be designed to gracefully handle the case where
386    it is run multiple times on the same zone.  If this hook exits with
387    a non-zero exit status, the detach operation will fail and the zone will
388    be left in the "installed" state, otherwise the state will be changed
389    to "configured".
390
391    The following replacements are performed:
392
393      %z	Name of zone
394      %R	Zonepath of zone
395      Additional arguments, if any, are appended.
396
397    If no hook is provided, the internal zoneadm detach code will be used.
398
399    It has no attributes.
400-->
401<!ELEMENT detach	(#PCDATA) >
402<!ATTLIST detach>
403
404<!--
405  clone
406    Path to a hook that will perform any necessary processing on a zone to
407    allow it to be installed via cloning.  Cloning is an alternative to
408    installing so this hook should result in the same effect for the zone.
409    The zone will be in the "incomplete" state when this hook is run.
410
411    If this hook exits with a non-zero exit status, the clone operation
412    will fail and the zone will be left in the "incomplete" state, otherwise
413    the state will be changed to "installed".
414
415    The following replacements are performed:
416
417      %z	Name of zone
418      %R	Zonepath of zone
419      1st arg   name of source zone
420      Additional arguments, if any, are appended.
421
422    If no hook is provided, the internal zoneadm cloning code will be used.
423-->
424<!ELEMENT clone	(#PCDATA) >
425<!ATTLIST clone>
426
427<!--
428  preuninstall
429
430    Path to a script that will perform any necessary pre-processing on
431    a zone before it is uninstalled.  The zone will be in the "installed"
432    state when this hook is run.
433
434    It is possible that if the zone fails to uninstall after invoking this
435    hook, future attempts to uninstall the zone will invoke this hook
436    again.  So this hook should be designed to gracefully handle the case
437    where it is run multiple times on the same zone.  If this hook exits
438    with a non-zero exit status, the uninstall operation will fail.
439
440    The following replacements are performed:
441
442      %z	Name of zone
443      %R	Zonepath of zone
444      Additional arguments, if any, are appended.
445
446    It has no attributes.
447-->
448<!ELEMENT preuninstall	(#PCDATA) >
449<!ATTLIST preuninstall>
450
451<!--
452  uninstall
453    Identifies the hook to invoke when uninstalling a zone.  The zone will
454    be in the "incomplete" state when this hook is run.
455
456    If this hook exits with a non-zero exit status, the uninstall operation
457    will fail and the zone will be left in the "incomplete" state, otherwise
458    the state will be changed to "configured".
459
460    The following replacements are performed:
461
462      %z	Name of zone
463      %R	Zonepath of zone
464      Additional arguments, if any, are appended.
465
466    If no hook is provided, the internal zoneadm uninstall code will be used.
467-->
468<!ELEMENT uninstall	(#PCDATA) >
469<!ATTLIST uninstall>
470
471<!--
472  presnap
473    Identifies the hook to invoke before snapshotting a zone using the
474    built-in ZFS clone support.
475
476    If this hook exits with a non-zero exit status, the snapshot operation
477    will fail and the zfs clone operation will fail.
478
479    The following replacements are performed:
480
481      %z	Name of zone
482      %R	Zonepath of zone
483-->
484<!ELEMENT presnap	(#PCDATA) >
485<!ATTLIST presnap>
486
487<!--
488  postsnap
489    Identifies the hook to invoke after snapshotting a zone using the
490    built-in ZFS clone support.
491
492    If this hook exits with a non-zero exit status, the zfs clone operation
493    will fail.
494
495    The following replacements are performed:
496
497      %z	Name of zone
498      %R	Zonepath of zone
499-->
500<!ELEMENT postsnap	(#PCDATA) >
501<!ATTLIST postsnap>
502
503<!--
504  validatesnap
505    Identifies the hook to invoke to validate a snapshot of a zone using the
506    built-in ZFS clone support.  This will validate a snapshot that was
507    explicitly specified to the clone command when the user wants to
508    re-use a snapshot from an earlier clone operation.
509
510    If this hook exits with a non-zero exit status, the snapshot validation
511    operation will fail, meaning the zfs snapshot cannot be used to install
512    the zone.
513
514    The following replacements are performed:
515
516      %z	Name of zone
517      %R	Zonepath of zone
518      1st arg   snapshot name
519      2nd arg   snapshot path
520-->
521<!ELEMENT validatesnap	(#PCDATA) >
522<!ATTLIST validatesnap>
523
524<!--
525  prestatechange
526    Identifies the hook to invoke before zoneadmd makes a state change.
527    If this hook exits with a non-zero exit status, the action failed
528    and no further state change activity will take place.
529
530    The following replacements are performed:
531
532      %z	Name of zone
533      %R	Zonepath of zone
534      1st arg   integer representing current state of zone
535			2 - installed
536			3 - ready
537			4 - running
538			5 - shutting down
539			6 - down
540			7 - mounted
541      2nd arg   integer representing transition command
542			0 - ready
543			1 - boot
544			4 - halt
545      3rd arg   Alternate root (zonepath is mounted under this root)
546			empty string if zone not mounted under alternate root
547-->
548<!ELEMENT prestatechange	(#PCDATA) >
549<!ATTLIST prestatechange>
550
551<!--
552  poststatechange
553    Identifies the hook to invoke after zoneadmd makes a successful state
554    change.  If this hook exits with a non-zero exit status, the action failed
555    and zoneadmd treats the overall state change as failed, although
556    all of the actions up to running the hook will have taken place.
557
558    The following replacements are performed:
559
560      %z	Name of zone
561      %R	Zonepath of zone
562    See prestatechange comment for 1st, 2nd and 3rd argument values.
563-->
564<!ELEMENT poststatechange	(#PCDATA) >
565<!ATTLIST poststatechange>
566
567<!--
568  query
569    Identifies a hook which can be called to get brand-specific information
570    about the zone.  There is no specific place in zones where this is called,
571    calls within the zone infrastructure can be added as needed.
572
573    One example of the use of this hook is to query the implicit ZFS datasets
574    supported by the brand.
575
576    If this hook exits with a non-zero exit status, the query failed,
577    although in general, this hook shouldn't return non-zero.
578
579    The following replacements are performed:
580
581      %z	Name of zone
582      %R	Zonepath of zone
583      1st arg   Arbitrary string which the hook can use to determine what
584		data to return.  Brands implementing this hook should be
585		tolerant of arguments they don't support and simply do
586		nothing.
587-->
588<!ELEMENT query	(#PCDATA) >
589<!ATTLIST query>
590
591<!--
592  privilege
593
594    Add a privilege to the default, prohibited, or required set for all
595    zones of this brand with ip-type matched.  If a privilege is added
596    to the default set all zones of this brand with ip-type matched on
597    the system will inherit this privilege unless the privilege is
598    removed via limitpriv in zonecfg(1m).  If a privilege is added to
599    the prohibited set it can not be added to any zones with ip-type
600    matched via limitpriv in zonecfg(1m).  If a privilege is added to
601    the required set then all zones of this brand with ip-type matched
602    on the system will inherit this privilege and it can't be removed via
603    limitpriv in zonecfg(1m).
604
605    Its attributes are
606      set	The name of the set the privilege should go into.
607      name	The name of the privilege.
608      ip-type	Optional, indicates that adding of the privilege to the
609		set only applies to certain IP types. Can be "shared" or
610		"exclusive". If it is not specified, the default value
611		"all" will be used, which means it is applicable regardless
612		the IP type.
613
614-->
615<!ELEMENT privilege	(#PCDATA) >
616<!ATTLIST privilege	set	( default | prohibited | required ) #REQUIRED
617			name	CDATA #REQUIRED
618			ip-type ( shared | exclusive ) "all" >
619
620<!--
621  brand
622
623    The toplevel container for a brand configuration.
624
625    Its attributes are
626
627      name	The name of the brand.  This must match the name of the
628		directory in which the configuration file is stored.
629-->
630
631<!ELEMENT brand		(modname?, initname, login_cmd, forcedlogin_cmd,
632			user_cmd, install,
633			installopts?, boot?, sysboot?, halt?, shutdown?,
634			verify_cfg?, verify_adm?, postattach?, postclone?,
635			postinstall?, predetach?, attach?, detach?, clone?,
636			presnap?, postsnap?, validatesnap?,
637			preuninstall?, uninstall?,
638			prestatechange?, poststatechange?, query?,
639			privilege+)>
640
641<!ATTLIST brand		name		CDATA #REQUIRED>
642