1#ifndef FLOW_CONTROL_HPP_PG7RKD8V
2#define FLOW_CONTROL_HPP_PG7RKD8V
4#include <vanetza/common/clock.hpp>
5#include <vanetza/common/hook.hpp>
6#include <vanetza/dcc/data_request.hpp>
7#include <vanetza/dcc/interface.hpp>
8#include <vanetza/dcc/profile.hpp>
9#include <vanetza/dcc/transmission.hpp>
10#include <vanetza/net/chunk_packet.hpp>
11#include <boost/optional/optional.hpp>
12#include <vanetza/access/access_category.hpp>
31
32
33
34
35
36
40 using PacketDropHook =
Hook<access::AccessCategory,
const ChunkPacket*>;
41 using PacketTransmitHook =
Hook<access::AccessCategory,
const ChunkPacket*>;
44
45
46
47
48
53
54
55
56
60
61
62
66
67
68
72
73
74
75
76
80
81
82
88 PendingTransmission(
Clock::time_point expiry,
const DataRequest& request, std::unique_ptr<ChunkPacket> packet) :
89 expiry(expiry), request(request), packet(std::move(packet)) {}
91 Clock::time_point expiry;
93 std::unique_ptr<ChunkPacket> packet;
95 Profile profile()
const override {
return request.dcc_profile; }
96 const access::
DataRateG5* data_rate()
const override {
return &access::G5_6Mbps; }
97 std::size_t body_length()
const override {
return packet ? packet->size() : 0; }
102 void enqueue(
const DataRequest&, std::unique_ptr<ChunkPacket>);
104 void transmit(
const DataRequest&, std::unique_ptr<ChunkPacket>);
117 std::size_t m_queue_length;
118 PacketDropHook m_packet_drop_hook;
119 PacketTransmitHook m_packet_transmit_hook;
ChunckPacket is a packet consisting of several memory chunks.
virtual void cancel(const void *scope)=0
virtual Clock::time_point now() const =0
FlowControl(Runtime &, TransmitRateControl &, access::Interface &)
void set_packet_drop_hook(PacketDropHook::callback_type &&)
void queue_length(std::size_t length)
void request(const DataRequest &, std::unique_ptr< ChunkPacket >) override
void set_packet_transmit_hook(PacketTransmitHook::callback_type &&)
virtual void notify(const Transmission &tx)=0
virtual Clock::duration delay(const Transmission &tx)=0