mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-01 15:10:56 +00:00
nic_router: handle invalid DHCP server
This commit is contained in:
parent
49dc2b264f
commit
0592ac56c9
@ -57,14 +57,21 @@ Configuration::Configuration(Env &env,
|
|||||||
/* read domains */
|
/* read domains */
|
||||||
node.for_each_sub_node("domain", [&] (Xml_node const node) {
|
node.for_each_sub_node("domain", [&] (Xml_node const node) {
|
||||||
try { _domains.insert(*new (_alloc) Domain(*this, node, _alloc)); }
|
try { _domains.insert(*new (_alloc) Domain(*this, node, _alloc)); }
|
||||||
catch (Domain::Invalid) { warning("invalid domain"); }
|
catch (Domain::Invalid) { log("invalid domain"); }
|
||||||
});
|
});
|
||||||
/* do those parts of domain init that require the domain tree to be complete */
|
/* do those parts of domain init that require the domain tree to be complete */
|
||||||
|
List<Domain> invalid_domains;
|
||||||
_domains.for_each([&] (Domain &domain) {
|
_domains.for_each([&] (Domain &domain) {
|
||||||
if (_verbose) {
|
try {
|
||||||
log("Domain: ", domain); }
|
domain.init(_domains);
|
||||||
|
if (_verbose) {
|
||||||
domain.init(_domains);
|
log("[", domain, "] initiated domain"); }
|
||||||
|
}
|
||||||
|
catch (Domain::Invalid) { invalid_domains.insert(&domain); }
|
||||||
|
});
|
||||||
|
invalid_domains.for_each([&] (Domain &domain) {
|
||||||
|
_domains.remove(domain);
|
||||||
|
destroy(_alloc, &domain);
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
/* check whether we shall create a report generator */
|
/* check whether we shall create a report generator */
|
||||||
|
@ -247,7 +247,7 @@ void Domain::init(Domain_tree &domains)
|
|||||||
try {
|
try {
|
||||||
Xml_node const dhcp_server_node = _node.sub_node("dhcp-server");
|
Xml_node const dhcp_server_node = _node.sub_node("dhcp-server");
|
||||||
if (_ip_config_dynamic) {
|
if (_ip_config_dynamic) {
|
||||||
log("[", *this, "] cannot be DHCP server and client at the same time");
|
log("[", *this, "] invalid domain (DHCP server and client at once)");
|
||||||
throw Invalid();
|
throw Invalid();
|
||||||
}
|
}
|
||||||
Dhcp_server &dhcp_server = *new (_alloc)
|
Dhcp_server &dhcp_server = *new (_alloc)
|
||||||
@ -262,6 +262,11 @@ void Domain::init(Domain_tree &domains)
|
|||||||
log("[", *this, "] DHCP server: ", _dhcp_server()); }
|
log("[", *this, "] DHCP server: ", _dhcp_server()); }
|
||||||
}
|
}
|
||||||
catch (Xml_node::Nonexistent_sub_node) { }
|
catch (Xml_node::Nonexistent_sub_node) { }
|
||||||
|
catch (Dhcp_server::Invalid) {
|
||||||
|
if (_config.verbose()) {
|
||||||
|
log("[", *this, "] invalid domain (invalid DHCP server)"); }
|
||||||
|
throw Invalid();
|
||||||
|
}
|
||||||
|
|
||||||
/* read forward rules */
|
/* read forward rules */
|
||||||
_read_forward_rules(tcp_name(), domains, _node, "tcp-forward",
|
_read_forward_rules(tcp_name(), domains, _node, "tcp-forward",
|
||||||
@ -374,7 +379,7 @@ void Domain_tree::destroy_each(Deallocator &dealloc)
|
|||||||
{
|
{
|
||||||
while (Avl_string_base *first_ = first()) {
|
while (Avl_string_base *first_ = first()) {
|
||||||
Domain &domain_ = domain(*first_);
|
Domain &domain_ = domain(*first_);
|
||||||
remove(first_);
|
Avl_tree::remove(first_);
|
||||||
destroy(dealloc, &domain_);
|
destroy(dealloc, &domain_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -221,6 +221,8 @@ struct Net::Domain_tree : Genode::Avl_tree<Genode::Avl_string_base>
|
|||||||
|
|
||||||
void insert(Domain &domain) { Avl_tree::insert(&domain.avl_member()); }
|
void insert(Domain &domain) { Avl_tree::insert(&domain.avl_member()); }
|
||||||
|
|
||||||
|
void remove(Domain &domain) { Avl_tree::remove(&domain.avl_member()); }
|
||||||
|
|
||||||
void destroy_each(Genode::Deallocator &dealloc);
|
void destroy_each(Genode::Deallocator &dealloc);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user