mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-17 06:38:28 +00:00
run: target-specific config schemata
The run tool now by default checks configurations with target-specific XML schemata. Each component may define a config schema file in its target.mk via the CONFIG_XSD variable. When the run tool has checked an configuration of an init instance, it additionally goes through the start nodes of the config. For each start node it checks whether there is an XSD file that matches. If so, the run tool also checks the config of the start node (if existant). This is done recursively. I.e., also the child configs of a sub-init of a sub-init of the top-level init receive a config check. Issue #2600
This commit is contained in:
committed by
Christian Helmuth
parent
568865bde0
commit
fb2398dbf2
142
repos/os/src/init/config.xsd
Normal file
142
repos/os/src/init/config.xsd
Normal file
@ -0,0 +1,142 @@
|
||||
<?xml version="1.0"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
|
||||
<xs:complexType name="template_service">
|
||||
<xs:choice minOccurs="1" maxOccurs="3">
|
||||
<xs:element name="parent"/>
|
||||
<xs:element name="any-child"/>
|
||||
<xs:element name="child">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="xs:string" />
|
||||
<xs:attribute name="label" type="xs:string" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:choice>
|
||||
<xs:attribute name="name" type="xs:string" />
|
||||
<xs:attribute name="label" type="xs:string" />
|
||||
<xs:attribute name="label_prefix" type="xs:string" />
|
||||
<xs:attribute name="label_suffix" type="xs:string" />
|
||||
<xs:attribute name="unscoped_label" type="xs:string" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="template_route">
|
||||
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element name="service" type="template_service"/>
|
||||
<xs:element name="any-service" type="template_service"/>
|
||||
</xs:choice>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="config">
|
||||
<xs:complexType>
|
||||
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||
|
||||
<xs:element name="affinity-space">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="width" type="xs:int" />
|
||||
<xs:attribute name="height" type="xs:int" />
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "affinity-space" -->
|
||||
|
||||
<xs:element name="parent-provides">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="service" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="xs:string" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "parent-provides" -->
|
||||
|
||||
<xs:element name="alias">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="xs:string" />
|
||||
<xs:attribute name="child" type="xs:string" />
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "alias" -->
|
||||
|
||||
<xs:element name="default-route" type="template_route"/>
|
||||
|
||||
<xs:element name="default">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="caps" type="xs:int" />
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "default" -->
|
||||
|
||||
<xs:element name="resource">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="xs:string" />
|
||||
<xs:attribute name="preserve" type="xs:string" />
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "resource" -->
|
||||
|
||||
<xs:element name="start" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||
|
||||
<xs:element name="binary">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="xs:string" />
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "binary" -->
|
||||
|
||||
<xs:element name="affinity">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="xpos" type="xs:int" />
|
||||
<xs:attribute name="ypos" type="xs:int" />
|
||||
<xs:attribute name="width" type="xs:int" />
|
||||
<xs:attribute name="height" type="xs:int" />
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "affinity" -->
|
||||
|
||||
<xs:element name="resource">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="xs:string" />
|
||||
<xs:attribute name="quantum" type="xs:string" />
|
||||
<xs:attribute name="constrain_phys" type="xs:string" />
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "resource" -->
|
||||
|
||||
<xs:element name="configfile">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="xs:string" />
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "configfile" -->
|
||||
|
||||
<xs:element name="provides">
|
||||
<xs:complexType>
|
||||
<xs:choice maxOccurs="unbounded">
|
||||
<xs:element name="service">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="name" type="xs:string" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:choice>
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "provides" -->
|
||||
|
||||
<xs:element name="route" type="template_route"/>
|
||||
|
||||
<xs:element name="config">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute processContents="skip"/>
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "config" -->
|
||||
|
||||
</xs:choice>
|
||||
<xs:attribute name="name" type="xs:string" />
|
||||
<xs:attribute name="caps" type="xs:int" />
|
||||
<xs:attribute name="priority" type="xs:int" />
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "start" -->
|
||||
|
||||
</xs:choice>
|
||||
<xs:attribute name="prio_levels" type="xs:int" />
|
||||
<xs:attribute name="verbose" type="xs:string" />
|
||||
</xs:complexType>
|
||||
</xs:element> <!-- "config" -->
|
||||
</xs:schema>
|
@ -2,3 +2,5 @@ TARGET = init
|
||||
SRC_CC = main.cc child.cc server.cc
|
||||
LIBS = base
|
||||
INC_DIR += $(PRG_DIR)
|
||||
|
||||
CONFIG_XSD = config.xsd
|
||||
|
Reference in New Issue
Block a user