From 9979d7596e68adc7ecfe6af1cdac4dc5c5b3dd5a Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Tue, 21 Jan 2025 15:15:58 +0100 Subject: [PATCH] Rewrote raw_nic to use lwIP. --- repos/mml/src/app/raw_nic/main.cpp | 46 +++++++----------------------- 1 file changed, 10 insertions(+), 36 deletions(-) diff --git a/repos/mml/src/app/raw_nic/main.cpp b/repos/mml/src/app/raw_nic/main.cpp index 8f740d703c..655305a6f4 100644 --- a/repos/mml/src/app/raw_nic/main.cpp +++ b/repos/mml/src/app/raw_nic/main.cpp @@ -1,20 +1,19 @@ #include +#include #include #include #include #include -/* CiAO/IP includes */ -#include -#include -#include -#include +/* lwIP includes */ +#include -class Raw_nic : public hw::hal::NetworkDevice +class Raw_nic { private: Nic::Packet_allocator _nic_tx_alloc; Nic::Connection _nic; + Timer::Connection _timer; Genode::Mutex _mutex{}; unsigned char _mac[6]; @@ -43,9 +42,9 @@ class Raw_nic : public hw::hal::NetworkDevice Nic::Packet_descriptor packet = rx.get_packet(); Genode::log("Received packet of size ", packet.size()); - void *eth_frame = rx.packet_content(packet); + //void *eth_frame = rx.packet_content(packet); - demux(eth_frame, packet.size()); + //demux(eth_frame, packet.size()); if (!rx.ready_to_ack()) return; @@ -63,7 +62,7 @@ class Raw_nic : public hw::hal::NetworkDevice Genode::log("Send packets"); } - void send(const void* pkt, unsigned pkt_size ) override + void send(const void* pkt, unsigned pkt_size ) { try { Nic::Packet_descriptor pkt_desc = _nic.tx()->alloc_packet(pkt_size); @@ -77,7 +76,7 @@ class Raw_nic : public hw::hal::NetworkDevice } } - Raw_nic(Genode::Env &env, Genode::Allocator &alloc) : _nic_tx_alloc(&alloc), _nic(env, &_nic_tx_alloc, BUFF_SIZE, BUFF_SIZE), _link_state_handler(env.ep(), *this, &Raw_nic::handle_link_state), _rx_packet_handler(env.ep(), *this, &Raw_nic::handle_rx_packets), _tx_ready_handler(env.ep(), *this, &Raw_nic::handle_tx_ready) { + Raw_nic(Genode::Env &env, Genode::Allocator &alloc) : _nic_tx_alloc(&alloc), _nic(env, &_nic_tx_alloc, BUFF_SIZE, BUFF_SIZE), _timer(env), _link_state_handler(env.ep(), *this, &Raw_nic::handle_link_state), _rx_packet_handler(env.ep(), *this, &Raw_nic::handle_rx_packets), _tx_ready_handler(env.ep(), *this, &Raw_nic::handle_tx_ready) { Genode::log("Created NIC session."); Genode::log("Registering callbacks"); _nic.link_state_sigh(_link_state_handler); @@ -89,34 +88,9 @@ class Raw_nic : public hw::hal::NetworkDevice Genode::log("MAC address from NIC session: ", _nic.mac_address()); _nic.mac_address().copy(_mac); Genode::log("Mac address read: ", _mac[0], ":", _mac[1], ":", _mac[2], ":", _mac[3], ":", _mac[4], ":", _mac[5]); - init(); - Genode::log("Initialized CiAO/IP"); - ipstack::Interface *interface = IP::getInterface(0); - if (interface) { - interface->setIPv4Addr(10, 0, 3,55); - interface->setIPv4Subnetmask(255, 255, 255, 0); - interface->setIPv4Up(true); - ipstack::Router::Inst().ipv4_set_gateway_addr(ipstack::IPv4_Packet::convert_ipv4_addr(10, 0, 3, 1)); - } + Lwip::genode_init(alloc, _timer); } - - /* CiAO/IP NetworkDevice public interface */ - const char* getName() override { - return "eth0"; - } - - unsigned getMTU() override { - return 1500; - } - - const unsigned char *getAddress() override { - return _mac; - } - - unsigned char getType() override { return 1; } - - }; void Libc::Component::construct(Libc::Env &env)