mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-19 05:37:54 +00:00
init: 'unscoped_label' session-routing attribute
This patch enhances init with the ability to route individual environment sessions. Prior this patch, environment sessions could be routed only by an all-encompassing '<service>' node that would match both child-initiated and environment sessions. In contrast to the existing 'label', 'label_prefix', and 'label_suffix' attributes of '<service>' nodes, which are always scoped with ther name of the corresponding child, the 'unscoped_label' allows the definition of routing rules for all session requests, including init's requests for the child's environment sessions. For example, to route the ROM session requests for a child's dynamic linker, the following route would match: <route> <service name="ROM" unscoped_label="ld.lib.so"> ... </service> </route> Issue #2215
This commit is contained in:
parent
0b5db07948
commit
652f92c9c9
@ -173,6 +173,21 @@ namespace Init {
|
||||
service_node.has_attribute("label_prefix") ||
|
||||
service_node.has_attribute("label_suffix");
|
||||
|
||||
char const *unscoped_attr = "unscoped_label";
|
||||
if (service_node.has_attribute(unscoped_attr)) {
|
||||
|
||||
/*
|
||||
* If an 'unscoped_label' attribute is provided, don't consider any
|
||||
* scoped label attribute.
|
||||
*/
|
||||
if (route_depends_on_child_provided_label)
|
||||
warning("service node contains both scoped and unscoped label attributes");
|
||||
|
||||
typedef String<Session_label::capacity()> Label;
|
||||
Label const label = service_node.attribute_value(unscoped_attr, Label());
|
||||
return label == label_from_args(args);
|
||||
}
|
||||
|
||||
if (!route_depends_on_child_provided_label)
|
||||
return true;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user