From 03144093b315c9329c98df87c0e2ca466767e322 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 25 Sep 2017 17:43:00 +0200 Subject: [PATCH] nic_router: do link garbage collect on each packet Previously, garbage collect was only done when an incoming packet passed the Ethernet checks. Now it is really done first when receiving a packet at an interface. Ref #2490 --- repos/os/src/server/nic_router/interface.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 629c94fef3..5c904ecb32 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -306,9 +306,6 @@ void Interface::_handle_ip(Ethernet_frame ð, Genode::size_t const eth_size, Packet_descriptor const &pkt) { - _destroy_closed_links(_closed_udp_links, _alloc); - _destroy_closed_links(_closed_tcp_links, _alloc); - /* read packet information */ Ipv4_packet &ip = *new (eth.data()) Ipv4_packet(eth_size - sizeof(Ethernet_frame)); @@ -542,6 +539,11 @@ void Interface::_handle_eth(void *const eth_base, size_t const eth_size, Packet_descriptor const &pkt) { + /* do garbage collection over transport-layer links */ + _destroy_closed_links(_closed_udp_links, _alloc); + _destroy_closed_links(_closed_tcp_links, _alloc); + + /* inspect and handle ethernet frame */ try { Ethernet_frame * const eth = new (eth_base) Ethernet_frame(eth_size); if (_config().verbose()) {