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();