diff --git a/repos/dde_linux/run/nic_router_uplinks.run b/repos/dde_linux/run/nic_router_uplinks.run
index f657a1a4b3..51202f93ae 100644
--- a/repos/dde_linux/run/nic_router_uplinks.run
+++ b/repos/dde_linux/run/nic_router_uplinks.run
@@ -154,7 +154,7 @@ append config {
-
+
@@ -196,7 +196,7 @@ append config {
-
+
@@ -242,7 +242,6 @@ append config {
-
@@ -318,40 +317,40 @@ append_platform_drv_boot_modules
build_boot_image $boot_modules
-append done_string ".*router.config: change.*"
-append done_string ".*router.config: sleep 3001 milliseconds.*"
-append done_string ".*64 bytes from 1.1.1.1: icmp_seq=.*"
+append done_string ".*router.config: change"
+append done_string ".*router.config: sleep 3001 milliseconds"
+append done_string ".*64 bytes from 1.1.1.1: icmp_seq="
-append done_string ".*router.config: change.*"
-append done_string ".*router.config: sleep 3002 milliseconds.*"
-append done_string ".*64 bytes from 1.1.1.1: icmp_seq=.*"
+append done_string ".*router.config: change"
+append done_string ".*router.config: sleep 3002 milliseconds"
+append done_string ".*64 bytes from 1.1.1.1: icmp_seq="
-append done_string ".*router.config: change.*"
-append done_string ".*router.config: sleep 3003 milliseconds.*"
-append done_string "From 10.0.1.79 icmp_seq=.* Destination Unreachable"
+append done_string ".*router.config: change"
+append done_string ".*router.config: sleep 3003 milliseconds"
+append done_string ".*downlink.*invalid domain.*invalid ICMP rule"
-append done_string ".*router.config: change.*"
-append done_string ".*router.config: sleep 3004 milliseconds.*"
-append done_string ".*64 bytes from 1.1.1.1: icmp_seq=.*"
+append done_string ".*router.config: change"
+append done_string ".*router.config: sleep 3004 milliseconds"
+append done_string ".*64 bytes from 1.1.1.1: icmp_seq="
-append done_string ".*router.config: change.*"
-append done_string ".*router.config: sleep 3005 milliseconds.*"
-append done_string ".*64 bytes from 1.1.1.1: icmp_seq=.*"
+append done_string ".*router.config: change"
+append done_string ".*router.config: sleep 3005 milliseconds"
+append done_string ".*64 bytes from 1.1.1.1: icmp_seq="
-append done_string ".*router.config: change.*"
-append done_string ".*router.config: sleep 3006 milliseconds.*"
-append done_string "From 10.0.1.79 icmp_seq=.* Destination Unreachable"
+append done_string ".*router.config: change"
+append done_string ".*router.config: sleep 3006 milliseconds"
+append done_string ".*downlink.*invalid domain.*invalid ICMP rule"
-append done_string ".*router.config: change.*"
-append done_string ".*router.config: sleep 3007 milliseconds.*"
-append done_string ".*64 bytes from 1.1.1.1: icmp_seq=.*"
+append done_string ".*router.config: change"
+append done_string ".*router.config: sleep 3007 milliseconds"
+append done_string ".*64 bytes from 1.1.1.1: icmp_seq="
-append done_string ".*router.config: change.*"
-append done_string ".*router.config: sleep 3008 milliseconds.*"
-append done_string ".*64 bytes from 1.1.1.1: icmp_seq=.*"
+append done_string ".*router.config: change"
+append done_string ".*router.config: sleep 3008 milliseconds"
+append done_string ".*64 bytes from 1.1.1.1: icmp_seq="
-append done_string ".*router.config: change.*"
-append done_string ".*router.config: sleep 600000 milliseconds.*"
-append done_string "From 10.0.1.79 icmp_seq=.* Destination Unreachable"
+append done_string ".*router.config: change"
+append done_string ".*router.config: sleep 600000 milliseconds"
+append done_string ".*From 10.0.1.79 icmp_seq=.* Destination Unreachable"
run_genode_until $done_string 60
diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc
index 003c19d42d..f132a40d70 100644
--- a/repos/os/src/server/nic_router/interface.cc
+++ b/repos/os/src/server/nic_router/interface.cc
@@ -233,9 +233,8 @@ Interface::_transport_rules(Domain &local_domain, L3_protocol const prot) const
}
-void Interface::_attach_to_domain_raw(Domain_name const &domain_name)
+void Interface::_attach_to_domain_raw(Domain &domain)
{
- Domain &domain = _config().domains().find_by_name(domain_name);
_domain = domain;
Signal_transmitter(_link_state_sigh).submit();
_interfaces.remove(this);
@@ -255,7 +254,7 @@ void Interface::_detach_from_domain_raw()
void Interface::_attach_to_domain(Domain_name const &domain_name)
{
- _attach_to_domain_raw(domain_name);
+ _attach_to_domain_raw(_config().domains().find_by_name(domain_name));
attach_to_domain_finish();
}
@@ -1566,15 +1565,15 @@ void Interface::handle_config_2()
try {
/* if the domains differ, detach completely from the domain */
Domain &old_domain = domain();
+ Domain &new_domain = _config().domains().find_by_name(new_domain_name);
if (old_domain.name() != new_domain_name) {
_detach_from_domain();
- _attach_to_domain_raw(new_domain_name);
+ _attach_to_domain_raw(new_domain);
return;
}
/* move to new domain object without considering any state objects */
_detach_from_domain_raw();
- _attach_to_domain_raw(new_domain_name);
- Domain &new_domain = domain();
+ _attach_to_domain_raw(new_domain);
/* remember that the interface stays attached to the same domain */
_update_domain = *new (_alloc)
@@ -1590,9 +1589,7 @@ void Interface::handle_config_2()
catch (Pointer::Invalid) {
/* the interface had no domain but now it may get one */
- try {
- _attach_to_domain_raw(new_domain_name);
- }
+ try { _attach_to_domain_raw(_config().domains().find_by_name(new_domain_name)); }
catch (Domain_tree::No_match) { }
}
}
diff --git a/repos/os/src/server/nic_router/interface.h b/repos/os/src/server/nic_router/interface.h
index e56a5e9042..32284d59f1 100644
--- a/repos/os/src/server/nic_router/interface.h
+++ b/repos/os/src/server/nic_router/interface.h
@@ -269,7 +269,7 @@ class Net::Interface : private Interface_list::Element
void _attach_to_domain(Domain_name const &domain_name);
- void _attach_to_domain_raw(Domain_name const &domain_name);
+ void _attach_to_domain_raw(Domain &domain);
void _apply_foreign_arp();