committed by
Norman Feske
parent
3ffdcfe96e
commit
8df8ac1254
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user