diff --git a/repos/os/recipes/pkg/test-black_hole/runtime b/repos/os/recipes/pkg/test-black_hole/runtime
index a95f68f3c8..a5374ebd2a 100644
--- a/repos/os/recipes/pkg/test-black_hole/runtime
+++ b/repos/os/recipes/pkg/test-black_hole/runtime
@@ -3,7 +3,7 @@
-
+
Finished
@@ -76,6 +76,7 @@
+
diff --git a/repos/os/src/test/black_hole/main.cc b/repos/os/src/test/black_hole/main.cc
index a50553c203..92a4547822 100644
--- a/repos/os/src/test/black_hole/main.cc
+++ b/repos/os/src/test/black_hole/main.cc
@@ -33,6 +33,7 @@
#include
#include
#include
+#include
using namespace Genode;
@@ -60,8 +61,8 @@ class Black_hole_test::Nic_test
Env &_env;
Allocator &_alloc;
Signal_context_capability _sigh;
- Allocator_avl _tx_blk_alloc { &_alloc };
- Nic::Connection _connection { _env, &_tx_blk_alloc, BUF_SIZE, BUF_SIZE };
+ Nic::Packet_allocator _packet_alloc { &_alloc };
+ Nic::Connection _connection { _env, &_packet_alloc, BUF_SIZE, BUF_SIZE };
unsigned long _nr_of_sent_pkts { 0 };
unsigned long _nr_of_acked_pkts { 0 };
@@ -151,25 +152,35 @@ class Black_hole_test::Uplink_test
PKT_SIZE = 100,
};
- Env &_env;
- Allocator &_alloc;
- Signal_context_capability _sigh;
- Allocator_avl _tx_blk_alloc { &_alloc };
- Constructible _connection { };
- unsigned long _nr_of_sent_pkts { 0 };
- unsigned long _nr_of_acked_pkts { 0 };
+ Env &_env;
+ Allocator &_alloc;
+ Timer::Connection &_timer;
+ Signal_context_capability _sigh;
+ Timer::Periodic_timeout _timeout { _timer, *this, &Uplink_test::_execute_link_down_up_step, Microseconds { 1000000 } };
+ Constructible _packet_alloc { };
+ Constructible _connection { };
+ unsigned long _nr_of_sent_pkts { 0 };
+ unsigned long _nr_of_acked_pkts { 0 };
+ unsigned long _nr_of_link_down_up_steps { 0 };
- void _reconstruct_connection()
+ void _execute_link_down_up_step(Duration)
{
_connection.destruct();
+ _packet_alloc.destruct();
+ _nr_of_sent_pkts = 0;
+
+ _packet_alloc.construct(&_alloc);
_connection.construct(
- _env, &_tx_blk_alloc, BUF_SIZE,
+ _env, &(*_packet_alloc), BUF_SIZE,
BUF_SIZE, Net::Mac_address { 2 });
_connection->tx_channel()->sigh_ready_to_submit(_sigh);
_connection->tx_channel()->sigh_ack_avail(_sigh);
_connection->rx_channel()->sigh_ready_to_ack(_sigh);
_connection->rx_channel()->sigh_packet_avail(_sigh);
+ _submit_pkts();
+
+ _nr_of_link_down_up_steps++;
}
void _submit_pkts()
@@ -194,15 +205,14 @@ class Black_hole_test::Uplink_test
Uplink_test(Env &env,
Allocator &alloc,
+ Timer::Connection &timer,
Signal_context_capability sigh)
:
_env { env },
_alloc { alloc },
+ _timer { timer },
_sigh { sigh }
- {
- _reconstruct_connection();
- _submit_pkts();
- }
+ { }
void handle_signal()
{
@@ -231,14 +241,13 @@ class Black_hole_test::Uplink_test
_nr_of_acked_pkts++;
}
_submit_pkts();
- _reconstruct_connection();
- _nr_of_sent_pkts = 0;
- _submit_pkts();
}
bool finished() const
{
- return _nr_of_acked_pkts > 100;
+ return
+ _nr_of_acked_pkts > 200 &&
+ _nr_of_link_down_up_steps > 2;
}
};
@@ -363,13 +372,14 @@ class Black_hole_test::Main
private:
Env &_env;
+ Timer::Connection _timer { _env };
Heap _heap { _env.ram(), _env.rm() };
Signal_handler _signal_handler { _env.ep(), *this, &Main::_handle_signal };
Audio_in::Connection _audio_in { _env, "left" };
Audio_out::Connection _audio_out { _env, "left" };
Gpu::Connection _gpu { _env };
Nic_test _nic_test { _env, _heap, _signal_handler };
- Uplink_test _uplink_test { _env, _heap, _signal_handler };
+ Uplink_test _uplink_test { _env, _heap, _timer, _signal_handler };
Capture_test _capture_test { _env };
Event_test _event_test { _env };
Usb_test _usb_test { _env, _heap };