Vanetza
Loading...
Searching...
No Matches
repeater.hpp
1#ifndef REPEATER_HPP_AH49FXB1
2#define REPEATER_HPP_AH49FXB1
3
4#include <vanetza/common/clock.hpp>
5#include <vanetza/geonet/data_request.hpp>
6#include <vanetza/geonet/packet.hpp>
7#include <functional>
8#include <list>
9#include <memory>
10
11namespace vanetza
12{
13// forward declaration
14class Runtime;
15
16namespace geonet
17{
18
19/**
20 * Repeater eases handling of packet repetitions.
21 * Packet repetitions are repeated requests with same payload.
22 */
24{
25public:
26 using Callback = std::function<void(const DataRequestVariant&, std::unique_ptr<DownPacket>)>;
27
28 /**
29 * Create a Repeater instance
30 * \param rt runtime used for scheduling repetitions
31 * \param cb callback to be invoked when repetition is due
32 */
33 Repeater(Runtime& rt, const Callback& cb);
34 ~Repeater();
35
36 /**
37 * Add another repetition
38 * \param request any kind of GeoNet data request
39 * \param payload request's payload
40 */
41 template<class REQUEST>
42 void add(const REQUEST& request, const DownPacket& payload)
43 {
44 if (request.repetition) {
45 add(request, *request.repetition, payload);
46 }
47 }
48
49private:
51 {
52 Repetition(const DataRequestVariant&, const DownPacket&);
53
54 DataRequestVariant m_request;
55 std::unique_ptr<DownPacket> m_payload;
56 };
57
58 /**
59 * Add packet repetition to internal book keeping
60 */
61 void add(const DataRequestVariant&, const DataRequest::Repetition&, const DownPacket&);
62
63 /**
64 * Triggered when repetition is due according to runtime
65 */
66 void trigger(std::list<Repetition>::iterator, Clock::time_point);
67
68 std::list<Repetition> m_repetitions;
69 Callback m_repeat_fn;
70 Runtime& m_runtime;
71};
72
73} // namespace geonet
74} // namespace vanetza
75
76#endif /* REPEATER_HPP_AH49FXB1 */
ChunckPacket is a packet consisting of several memory chunks.
virtual const PositionFix & position_fix()=0
virtual void cancel(const void *scope)=0
void update_rate(Clock::duration interval)
PositionUpdater(Runtime &runtime, PositionProvider &pos, Router &router)
void add(const DataRequestVariant &, const DataRequest::Repetition &, const DownPacket &)
Definition repeater.cpp:26
void trigger(std::list< Repetition >::iterator, Clock::time_point)
Definition repeater.cpp:38
Repeater(Runtime &rt, const Callback &cb)
Definition repeater.cpp:16
void add(const REQUEST &request, const DownPacket &payload)
Definition repeater.hpp:42
void reset_beacon_timer(Clock::duration next)
Reschedule timer for next Beacon transmission.
Definition router.cpp:744
const CbfPacketBuffer & get_cbf_buffer() const
Get the Contention-Based-Forwarding buffer.
Definition router.hpp:219
NextHop area_advanced_forwarding(PendingPacketForwarding &&, const LinkLayer *sender)
Determine next hop for area advanced forwarding See EN 302 636-4-1 v1.3.1 Annex F....
Definition router.cpp:884
void flush_broadcast_forwarding_buffer()
Send all packets in the broadcast forwarding buffer with expired waiting time.
Definition router.cpp:1262
void indicate_extended(IndicationContext &, const CommonHeader &)
Process ExtendedHeader at packet indication.
Definition router.cpp:520
const MIB & get_mib() const
Get Management Information Base (MIB).
Definition router.hpp:212
bool detect_duplicate_packet(const Address &source, SequenceNumber sn)
Detect duplicate packets See EN 302 636-4-1 v1.3.1 Annex A.2.
Definition router.cpp:1291
void pass_down(const dcc::DataRequest &, PduPtr, DownPacketPtr)
Send packet using the information in the DataRequest. The packet is formed using the data in PDU and ...
Definition router.cpp:660
NextHop greedy_forwarding(PendingPacketForwarding &&)
Determine next hop for greedy forwarding. See EN 302 636-4-1 v1.3.1 Annex E.2.
Definition router.cpp:758
bool process_extended(const ExtendedPduConstRefs< ShbHeader > &, const UpPacket &, const LinkLayer &ll)
Process ExtendedHeader information. Update router's LocationTable and neighbour relationship....
Definition router.cpp:972
void pass_up(const DataIndication &, UpPacketPtr)
Pass packet up to the transport layer.
Definition router.cpp:696
units::Duration timeout_cbf(units::Length distance) const
Determine CBF buffering time for a packet. Complies to EN 302 636-4-1 v1.3.1 Annex E....
Definition router.cpp:856
void on_beacon_timer_expired()
Send Beacon packet to all neighbours with updated position vector. Only to be called when the beacon ...
Definition router.cpp:704
void indicate_common(IndicationContext &, const BasicHeader &)
Process CommonHeader at packet indication.
Definition router.cpp:418
DownPacketPtr encap_packet(ItsAid aid, ByteBuffer ssp, Pdu &pdu, DownPacketPtr packet)
Encaspulate a packet according to security profile.
Definition router.cpp:1339
bool decide_pass_up(bool within_destination, const GeoBroadcastHeader &gbc)
Decide if GBC packet shall be passed up to transport layer.
Definition router.cpp:1246
void set_access_interface(dcc::RequestInterface *ifc)
Register access layer interface.
Definition router.cpp:201
void set_random_seed(std::uint_fast32_t seed)
Set seed for internal random number generator (RNG) RNG is used e.g. for random Beacon jitter.
Definition router.cpp:218
units::Duration timeout_cbf(const MacAddress &sender) const
Determine (area) CBF buffering time for a packet from a sender.
Definition router.cpp:872
NextHop area_contention_based_forwarding(PendingPacketForwarding &&, const MacAddress *sender)
Determine next hop for area contention-based forwarding See EN 302 636-4-1 v1.3.1 Annex F....
Definition router.cpp:838
std::unique_ptr< ShbPdu > create_shb_pdu(const ShbDataRequest &)
Create an initialized Single-Hop-Broadcast PDU.
Definition router.cpp:1306
void flush_unicast_forwarding_buffer(const Address &addr)
Send all matching packets in the unicast forwarding buffer with expired waiting time.
Definition router.cpp:1267
void detect_duplicate_address(const Address &source, const MacAddress &sender)
Helper method to handle duplicate addresses. If own address collides with the address of a received p...
Definition router.cpp:1274
std::unique_ptr< BeaconPdu > create_beacon_pdu()
Create an initialzed Beacon PDU.
Definition router.cpp:1317
void indicate_basic(IndicationContextBasic &)
Process BasicHeader at packet indication.
Definition router.cpp:393
void set_dcc_field_generator(DccFieldGenerator *dcc)
Register generator for DCC-MCO fields.
Definition router.cpp:207
Hook< PacketDropReason > packet_dropped
When a packet is dropped, this Hook is invoked.
Definition router.hpp:157
bool process_extended(const ExtendedPduConstRefs< TsbHeader > &, const UpPacket &, const LinkLayer &ll)
packet handling of received TSB packet
Definition router.cpp:1007
Hook< ForwardingStopReason > forwarding_stopped
When packet forwarding is stopped, this Hook is invoked.
Definition router.hpp:163
PacketDropReason
Reason for packet drop used by drop hook.
Definition router.hpp:85
const LocationTable & get_location_table() const
Get the LocationTable. The table holds information about neighbouring ITS-Routers.
Definition router.hpp:227
DataConfirm request(const ShbDataRequest &, DownPacketPtr)
Request to send payload per single hop broadcast (SHB). If security is enabled, the message gets enca...
Definition router.cpp:223
void pass_down(const MacAddress &, PduPtr, DownPacketPtr)
Pass down the packet to the access layer.
Definition router.cpp:682
void dispatch_repetition(const DataRequestVariant &, DownPacketPtr)
Callback function for dispatching a packet repetition. Invoked by Repeater when a scheduled repetitio...
Definition router.cpp:752
NextHop non_area_contention_based_forwarding(PendingPacketForwarding &&, const MacAddress *sender)
Determine next hop for non-area contention-based forwarding See EN 302 636-4-1 v1....
Definition router.cpp:797
bool process_extended(const ExtendedPduConstRefs< GeoBroadcastHeader > &, const UpPacket &, const LinkLayer &ll)
Process ExtendedHeader information. Update router's LocationTable and neighbour relationship....
Definition router.cpp:1125
void indicate(UpPacketPtr, const MacAddress &sender, const MacAddress &destination)
Handle the received packet on network layer. Packet handling involves these steps:
Definition router.cpp:375
void set_transport_handler(UpperProtocol proto, TransportInterface *ifc)
Register a transport protocol handler.
Definition router.cpp:191
void reset_beacon_timer()
Reschedule timer for next Beacon transmission Timer will be scheduled according to MIB's Beacon timer...
Definition router.cpp:731
void update_position(const PositionFix &)
Update router's local position vector.
Definition router.cpp:171
void execute_media_procedures(CommunicationProfile)
Executes media specific functionalities Details are described in TS 102 636-4-2.
Definition router.cpp:639
void set_security_entity(security::SecurityEntity *entity)
Register security entity used when itsGnSecurity is enabled.
Definition router.cpp:196
std::unique_ptr< GbcPdu > create_gbc_pdu(const GbcDataRequest &)
Create an initialized GeoBroadcast PDU.
Definition router.cpp:1329
void set_address(const Address &)
Set Router's own GeoNetworking address.
Definition router.cpp:213
NextHop forwarding_algorithm_selection(PendingPacketForwarding &&, const LinkLayer *ll=nullptr)
Definition router.cpp:591
DataConfirm request(const GbcDataRequest &, DownPacketPtr)
Request to send payload per GeoBroadcast (GBC). If security is enabled, the message gets encapsulated...
Definition router.cpp:285
const LongPositionVector & get_local_position_vector() const
Get the local position vector. This vector describes the current position of the router.
Definition router.hpp:235
void execute_itsg5_procedures()
Executes ITS-G5 media specific procedures Details are described in TS 102 636-4-2.
Definition router.cpp:655
bool process_extended(const ExtendedPduConstRefs< BeaconHeader > &, const UpPacket &, const LinkLayer &ll)
Process ExtendedHeader information. Update router's LocationTable and neighbour relationship.
Definition router.cpp:1103
void indicate_secured(IndicationContextBasic &, const BasicHeader &)
Process SecuredMessage at packet indication.
Definition router.cpp:461
bool outside_sectorial_contention_area(const MacAddress &sender, const MacAddress &forwarder) const
Check if router is outside the sectorial contention area See TS 102 636-4-1 v1.2.3 section E....
Definition router.cpp:944
BasicHeader specified in ETSI EN 302 636-4-1 v1.2.1, section 8.6.