fix remote_rom

Issue #106
This commit is contained in:
Johannes Schlatow
2018-06-13 13:59:38 +02:00
committed by Norman Feske
parent 3ffdcfe96e
commit 8df8ac1254

View File

@@ -42,6 +42,7 @@ namespace Remote_rom {
}; };
/* Packet format we use for inter-system communication */ /* Packet format we use for inter-system communication */
/* FIXME do not inherit from Ethernet_frame and Ipv4_packet but use construct_at_data with size_guard */
class Remote_rom::Packet_base : public Ethernet_frame, public Ipv4_packet class Remote_rom::Packet_base : public Ethernet_frame, public Ipv4_packet
{ {
public: public:
@@ -73,8 +74,8 @@ class Remote_rom::Packet_base : public Ethernet_frame, public Ipv4_packet
Packet_base(size_t size) Packet_base(size_t size)
: :
Ethernet_frame(sizeof(Packet_base) + size), Ethernet_frame(),
Ipv4_packet(sizeof(Packet_base) + size - sizeof(Ethernet_frame)), Ipv4_packet(),
_payload_size(size) _payload_size(size)
{ } { }
@@ -124,14 +125,14 @@ class Remote_rom::Packet_base : public Ethernet_frame, public Ipv4_packet
*/ */
void *addr() { return payload; } void *addr() { return payload; }
void prepare_ethernet(const Mac_address &src, const Mac_address &dst=Ethernet_frame::BROADCAST) void prepare_ethernet(const Mac_address &src, const Mac_address &dst=Ethernet_frame::broadcast())
{ {
Ethernet_frame::src(src); Ethernet_frame::src(src);
Ethernet_frame::dst(dst); Ethernet_frame::dst(dst);
Ethernet_frame::type(Ethernet_frame::Type::IPV4); Ethernet_frame::type(Ethernet_frame::Type::IPV4);
} }
void prepare_ipv4(const Ipv4_address &src, const Ipv4_address &dst=Ipv4_packet::BROADCAST) void prepare_ipv4(const Ipv4_address &src, const Ipv4_address &dst=Ipv4_packet::broadcast())
{ {
Ipv4_packet::version(4); Ipv4_packet::version(4);
Ipv4_packet::header_length(5); Ipv4_packet::header_length(5);
@@ -143,7 +144,7 @@ class Remote_rom::Packet_base : public Ethernet_frame, public Ipv4_packet
void set_checksums() void set_checksums()
{ {
Ipv4_packet::checksum(Ipv4_packet::calculate_checksum(*this)); Ipv4_packet::update_checksum();
} }
/** /**
@@ -242,7 +243,7 @@ class Remote_rom::Backend_base
/* check IP */ /* check IP */
Ipv4_packet &ip_packet = *(Packet_base*)content; Ipv4_packet &ip_packet = *(Packet_base*)content;
if (_accept_ip == Ipv4_packet::BROADCAST || _accept_ip == ip_packet.dst()) if (_accept_ip == Ipv4_packet::broadcast() || _accept_ip == ip_packet.dst())
_handler.receive(*(Packet_base*)content); _handler.receive(*(Packet_base*)content);
_nic.rx()->acknowledge_packet(_rx_packet); _nic.rx()->acknowledge_packet(_rx_packet);
@@ -329,9 +330,9 @@ class Remote_rom::Backend_base
_accept_ip = _src_ip; _accept_ip = _src_ip;
} catch (...) { } catch (...) {
Genode::warning("No IP configured, falling back to broadcast mode!"); Genode::warning("No IP configured, falling back to broadcast mode!");
_src_ip = Ipv4_packet::CURRENT; _src_ip = Ipv4_packet::current();
_dst_ip = Ipv4_packet::BROADCAST; _dst_ip = Ipv4_packet::broadcast();
_accept_ip = Ipv4_packet::BROADCAST; _accept_ip = Ipv4_packet::broadcast();
} }
} }
@@ -373,7 +374,7 @@ class Remote_rom::Backend_server : public Backend_server_base, public Backend_ba
Nic::Packet_descriptor pd = alloc_tx_packet(DataPacket::packet_size(size)); Nic::Packet_descriptor pd = alloc_tx_packet(DataPacket::packet_size(size));
DataPacket *packet = new (_nic.tx()->packet_content(pd)) DataPacket(); DataPacket *packet = new (_nic.tx()->packet_content(pd)) DataPacket();
packet->prepare_ethernet(_mac_address, Ethernet_frame::BROADCAST); packet->prepare_ethernet(_mac_address, Ethernet_frame::broadcast());
packet->prepare_ipv4(_src_ip, _dst_ip); packet->prepare_ipv4(_src_ip, _dst_ip);
packet->prepare(_forwarder->module_name(), offset, size); packet->prepare(_forwarder->module_name(), offset, size);