12#include <l4/ixl/memory.h>
21class Ixl_net_request final :
public Net_request
27 explicit Ixl_net_transfer(Ixl_net_request
const &request)
30 _cur_buf =
Buffer(
reinterpret_cast<char *
>(request.buf()->data),
32 _req_id = _request.buf();
36 Ixl_net_transfer(Ixl_net_transfer
const &) =
delete;
37 Ixl_net_transfer &operator = (Ixl_net_transfer
const &) =
delete;
39 void copy_header(Virtio_net::Hdr *dst_header)
const override
41 dst_header->flags.data_valid() = 0;
42 dst_header->flags.need_csum() = 0;
43 dst_header->gso_type = 0;
44 dst_header->hdr_len =
sizeof(Virtio_net::Hdr);
45 dst_header->gso_size = 0;
46 dst_header->csum_start = 0;
47 dst_header->csum_offset = 0;
48 dst_header->num_buffers = 1;
51 bool done()
override {
return _cur_buf.
done(); }
54 Ixl_net_request
const &_request;
57 void dump_request(Port_iface *port)
const
59 Dbg debug(Dbg::Request, Dbg::Debug,
"REQ-IXL");
60 if (debug.is_active())
62 debug.printf(
"%s: Next packet: %p - %x bytes\n",
63 port->get_name(), _pkt.pos, _pkt.left);
68 explicit Ixl_net_request(Ixl::pkt_buf *buf) : _buf(buf)
70 _pkt =
Buffer(
reinterpret_cast<char *
>(buf->data), buf->size);
74 Ixl_net_request(Ixl_net_request
const &) =
delete;
75 Ixl_net_request &operator=(Ixl_net_request
const &) =
delete;
78 Ixl_net_request(Ixl_net_request &&other)
81 _pkt = std::move(other._pkt);
87 Ixl_net_request &operator=(Ixl_net_request &&other)
91 Ixl::pkt_buf_free(_buf);
94 _pkt = std::move(other._pkt);
106 Ixl::pkt_buf_free(_buf);
111 Ixl::pkt_buf *buf()
const {
return _buf; }
113 Ixl_net_transfer transfer_src()
const
114 {
return Ixl_net_transfer(*
this); }
A network request to only a single destination.
Data buffer used to transfer packets.
bool done() const
Check if there are no more bytes left in the buffer.