Vanetza
Loading...
Searching...
No Matches
router.hpp
1#ifndef ROUTER_HPP_UKYYCAR0
2#define ROUTER_HPP_UKYYCAR0
3
4#include <vanetza/common/byte_order.hpp>
5#include <vanetza/common/hook.hpp>
6#include <vanetza/common/its_aid.hpp>
7#include <vanetza/access/ethertype.hpp>
8#include <vanetza/geonet/beacon_header.hpp>
9#include <vanetza/geonet/cbf_packet_buffer.hpp>
10#include <vanetza/geonet/common_header.hpp>
11#include <vanetza/geonet/extended_pdu.hpp>
12#include <vanetza/geonet/gbc_header.hpp>
13#include <vanetza/geonet/gbc_memory.hpp>
14#include <vanetza/geonet/interface.hpp>
15#include <vanetza/geonet/location_table.hpp>
16#include <vanetza/geonet/mib.hpp>
17#include <vanetza/geonet/packet.hpp>
18#include <vanetza/geonet/packet_buffer.hpp>
19#include <vanetza/geonet/pending_packet.hpp>
20#include <vanetza/geonet/pdu.hpp>
21#include <vanetza/geonet/pdu_variant.hpp>
22#include <vanetza/geonet/repeater.hpp>
23#include <vanetza/geonet/sequence_number.hpp>
24#include <vanetza/geonet/shb_header.hpp>
25#include <vanetza/geonet/timestamp.hpp>
26#include <vanetza/units/length.hpp>
27#include <vanetza/units/time.hpp>
28#include <vanetza/security/security_entity.hpp>
29#include <boost/variant.hpp>
30#include <cstdint>
31#include <memory>
32#include <random>
33#include <map>
34
35namespace vanetza
36{
37
38// forward declarations
39class MacAddress;
40struct PositionFix;
41class Runtime;
42
43namespace dcc
44{
45 struct DataRequest;
46 class RequestInterface;
47} // namespace dcc
48
49namespace geonet
50{
51
52extern const access::EtherType ether_type;
53
57class NextHop;
59struct ShbDataRequest;
60struct GbcDataRequest;
61struct DataConfirm;
62struct DataIndication;
63struct LinkLayer;
64
65/**
66 * Router is the central entity for GeoNet communication
67 *
68 * Incoming and outgoing GeoNet packets are handled by the router.
69 * It may even dispatch own packets (beacons) if necessary.
70 *
71 * This implementation follows EN 302 636-4-1 v1.3.1
72 */
73class Router
74{
75public:
76 typedef std::unique_ptr<DataRequest> DataRequestPtr;
77 typedef std::unique_ptr<Pdu> PduPtr;
78 typedef std::unique_ptr<DownPacket> DownPacketPtr;
79 typedef std::unique_ptr<UpPacket> UpPacketPtr;
80
81 using PendingPacketForwarding = PendingPacket<GbcPdu, const MacAddress&>;
82
83 /// Reason for packet drop used by drop hook
85 {
86 Parse_Basic_Header,
87 Parse_Common_Header,
88 Parse_Secured_Header,
89 Parse_Extended_Header,
90 ITS_Protocol_Version,
91 Decap_Unsuccessful_Non_Strict,
92 Decap_Unsuccessful_Strict,
93 Hop_Limit,
94 Payload_Size,
95 Security_Entity_Missing,
96 Packet_Size,
97 Internal_Error,
98 };
99
100 // Reason for stopping packet forwarding
101 enum class ForwardingStopReason
102 {
103 Hop_Limit,
104 Source_PDR,
105 Sender_PDR,
106 Outside_Destination_Area
107 };
108
109 Router(Runtime&, const MIB&);
110 ~Router();
111
112 /**
113 * \brief Request to send payload per single hop broadcast (SHB).
114 * If security is enabled, the message gets encapsulated in a security envelope.
115 * Returns whether data was valid to be sent.
116 *
117 * \param request
118 * \param payload from upper layers
119 * \return result code if packet has been accepted
120 */
121 DataConfirm request(const ShbDataRequest&, DownPacketPtr);
122
123 /**
124 * \brief Request to send payload per GeoBroadcast (GBC).
125 * If security is enabled, the message gets encapsulated in a security envelope.
126 * Returns whether data was valid to be sent.
127 *
128 * \param request
129 * \param payload from upper layers
130 * \return result code if packet has been accepted
131 */
132 DataConfirm request(const GbcDataRequest&, DownPacketPtr);
133
134 // These three requests are not supported yet
135 DataConfirm request(const GucDataRequest&, DownPacketPtr);
136 DataConfirm request(const GacDataRequest&, DownPacketPtr);
137 DataConfirm request(const TsbDataRequest&, DownPacketPtr);
138
139 /**
140 * \brief Handle the received packet on network layer.
141 * Packet handling involves these steps:
142 * - header processing
143 * - packet forwarding
144 * - passing to transport layer
145 * - security decapsulation
146 *
147 * \param packet received packet from access layer
148 * \param sender MAC address of sender
149 * \param destination MAC address of destination (might be broadcast)
150 */
151 void indicate(UpPacketPtr, const MacAddress& sender, const MacAddress& destination);
152
153 /**
154 * \brief When a packet is dropped, this Hook is invoked
155 * \tparam PacketDropReason why Router decided to drop packet
156 */
158
159 /**
160 * \brief When packet forwarding is stopped, this Hook is invoked
161 * \tparam ForwardingStopReason why Router decided not to forward packet
162 */
164
165 /**
166 * \brief Update router's local position vector
167 *
168 * \param fix current position fix
169 */
170 void update_position(const PositionFix&);
171
172 /**
173 * \brief Register a transport protocol handler.
174 *
175 * \param proto register handler for this upper protocol
176 * \param ifc use this interface or disable handling if nullptr
177 */
178 void set_transport_handler(UpperProtocol proto, TransportInterface* ifc);
179
180 /**
181 * \brief Register security entity used when itsGnSecurity is enabled
182 *
183 * \param entity security entity
184 */
186
187 /**
188 * \brief Register access layer interface
189 *
190 * \param ifc interface used for passing packets down to access layer
191 */
193
194 /**
195 * \brief Register generator for DCC-MCO fields
196 *
197 * \param dcc DCC-MCO field generator or nullptr for disabling feature
198 */
200
201 /**
202 * \brief Set Router's own GeoNetworking address
203 *
204 * \param addr
205 */
206 void set_address(const Address&);
207
208 /**
209 * \brief Get Management Information Base (MIB)
210 * \return read-only reference to MIB
211 */
212 const MIB& get_mib() const { return m_mib; }
213
214 /**
215 * \brief Get the Contention-Based-Forwarding buffer
216 *
217 * \return read-only reference to CBF packet buffer
218 */
219 const CbfPacketBuffer& get_cbf_buffer() const { return m_cbf_buffer; }
220
221 /**
222 * \brief Get the LocationTable.
223 * The table holds information about neighbouring ITS-Routers.
224 *
225 * \return read-only reference to LocationTable
226 */
227 const LocationTable& get_location_table() const { return m_location_table; }
228
229 /**
230 * \brief Get the local position vector.
231 * This vector describes the current position of the router.
232 *
233 * \return read-only reference to LongPositionVector
234 */
235 const LongPositionVector& get_local_position_vector() const { return m_local_position_vector; }
236
237 /**
238 * \brief Check if router is outside the sectorial contention area
239 * See TS 102 636-4-1 v1.2.3 section E.4 and figure E.2 for details.
240 *
241 * \param sender
242 * \param forwarder
243 * \return bool true if either sender or forwarder is outside
244 */
245 bool outside_sectorial_contention_area(const MacAddress& sender, const MacAddress& forwarder) const;
246
247 /**
248 * \brief Set seed for internal random number generator (RNG)
249 * RNG is used e.g. for random Beacon jitter
250 *
251 * \param seed reset RNG's state to this seed
252 */
253 void set_random_seed(std::uint_fast32_t seed);
254
255 /**
256 * Forwarding algorithm selection procedure as given by Annex D
257 * \param pdu GeoNetworking PDU
258 * \param payload packet payload
259 * \param ll link-layer control info (unavailable for source operations)
260 * \return routing decision (next hop's address, buffered, or discarded)
261 */
262 NextHop forwarding_algorithm_selection(PendingPacketForwarding&&, const LinkLayer* ll = nullptr);
263
264private:
265 typedef std::map<UpperProtocol, TransportInterface*> transport_map_t;
266
267 /**
268 * \brief Send Beacon packet to all neighbours with updated position vector.
269 * Only to be called when the beacon timer expires.
270 */
272
273 /**
274 * \brief Reschedule timer for next Beacon transmission
275 * Timer will be scheduled according to MIB's Beacon timer settings.
276 */
277 void reset_beacon_timer();
278
279 /**
280 * \brief Reschedule timer for next Beacon transmission
281 * \param next Duration until next transmission
282 */
283 void reset_beacon_timer(Clock::duration next);
284
285 /**
286 * \brief Process BasicHeader at packet indication.
287 * \param ctx Context holding data for further parsing
288 */
290
291 /**
292 * \brief Process CommonHeader at packet indication.
293 * \param ctx Context holding data for further parsing
294 * \param basic Previously decoded BasicHeader
295 */
297
298 /**
299 * \brief Process ExtendedHeader at packet indication.
300 * \param ctx Context holding data for further parsing
301 * \param common Previously decoded CommonHeader
302 */
304
305 /**
306 * \brief Process SecuredMessage at packet indication.
307 * \param ctx Context holding data for further parsing
308 * \param basic Previously decoded BasicHeader
309 */
311
312 /**
313 * \brief Process ExtendedHeader information.
314 * Update router's LocationTable and neighbour relationship.
315 *
316 * \param pdu containing the ExtendedHeader
317 * \param packet received packet
318 * \param ll link-layer control info
319 * \return pass up decision (always false for Beacons)
320 */
321 bool process_extended(const ExtendedPduConstRefs<BeaconHeader>&, const UpPacket&, const LinkLayer& ll);
322
323 /**
324 * \brief Process ExtendedHeader information.
325 * Update router's LocationTable and neighbour relationship.
326 * Pass packet up to transport layer for further processing.
327 *
328 * \param pdu containing the ExtendedHeader
329 * \param packet received packet
330 * \param ll link-layer control info
331 * \return pass up decision (true for all non-duplicate SHBs)
332 */
333 bool process_extended(const ExtendedPduConstRefs<ShbHeader>&, const UpPacket&, const LinkLayer& ll);
334
335 /**
336 * \brief packet handling of received TSB packet
337 *
338 * \param pdu PDU with TSB header
339 * \param packet received packet
340 * \param ll link-layer control info
341 * \return pass up decision (true for all non-duplicate TSBs)
342 */
343 bool process_extended(const ExtendedPduConstRefs<TsbHeader>&, const UpPacket&, const LinkLayer& ll);
344
345 /**
346 * \brief Process ExtendedHeader information.
347 * Update router's LocationTable and neighbour relationship.
348 * Pass packet up to transport layer for further processing.
349 * Forward packets.
350 *
351 * \param pdu containing the ExtendedHeader
352 * \param packet received packet
353 * \param ll link-layer control info
354 * \return pass up decision (depends on addressed area and router position)
355 */
356 bool process_extended(const ExtendedPduConstRefs<GeoBroadcastHeader>&, const UpPacket&, const LinkLayer& ll);
357
358 /**
359 * \brief Send all packets in the broadcast forwarding buffer with expired waiting time.
360 */
362
363 /**
364 * \brief Send all matching packets in the unicast forwarding buffer with expired waiting time.
365 * \param addr unicast packets for this address
366 */
368
369 /**
370 * \brief Executes media specific functionalities
371 * Details are described in TS 102 636-4-2.
372 *
373 * \param profile e.g. ITS-G5
374 */
375 void execute_media_procedures(CommunicationProfile);
376
377 /**
378 * \brief Executes ITS-G5 media specific procedures
379 * Details are described in TS 102 636-4-2.
380 */
382
383 /**
384 * \brief Pass down the packet to the access layer.
385 *
386 * \param addr MAC address of destination
387 * \param pdu header information
388 * \param payload Packet payload
389 */
390 void pass_down(const MacAddress&, PduPtr, DownPacketPtr);
391
392 /**
393 * \brief Send packet using the information in the DataRequest.
394 * The packet is formed using the data in PDU and payload.
395 *
396 * \param request containing transmission parameters
397 * \param pdu header information
398 * \param payload Packet payload
399 */
400 void pass_down(const dcc::DataRequest&, PduPtr, DownPacketPtr);
401
402 /**
403 * \brief Pass packet up to the transport layer.
404 *
405 * \param ind containing network information
406 * \param packet payload to be passed up to the next layer
407 */
408 void pass_up(const DataIndication&, UpPacketPtr);
409
410 /**
411 * \brief Decide if GBC packet shall be passed up to transport layer.
412 *
413 * \param within_destination is router located within destination area
414 * \param gbc GeoBroadcast header
415 *
416 * \return true if packet shall be passed up
417 */
418 bool decide_pass_up(bool within_destination, const GeoBroadcastHeader& gbc);
419
420 /**
421 * \brief Helper method to handle duplicate addresses.
422 * If own address collides with the address of a received packet
423 * Router's address is set to a new random address.
424 * \note Behaviour depends on MIB's itsGnLocalAddrConfMethod.
425 *
426 * \param source address of source (from packet header)
427 * \param sender address of sender (link layer)
428 */
429 void detect_duplicate_address(const Address& source, const MacAddress& sender);
430
431 /**
432 * \brief Detect duplicate packets
433 * See EN 302 636-4-1 v1.3.1 Annex A.2
434 *
435 * \param source source address
436 * \param sn sequence number
437 * \return true if packet is detected as a duplicate
438 */
439 bool detect_duplicate_packet(const Address& source, SequenceNumber sn);
440
441 /**
442 * \brief Determine next hop for greedy forwarding.
443 * See EN 302 636-4-1 v1.3.1 Annex E.2
444 *
445 * \param pdu
446 * \param payload
447 * \return next hop
448 */
449 NextHop greedy_forwarding(PendingPacketForwarding&&);
450
451 /**
452 * \brief Determine next hop for non-area contention-based forwarding
453 * See EN 302 636-4-1 v1.3.1 Annex E.3
454 *
455 * \param pdu
456 * \param payload
457 * \param sender optional sender MAC address (if not first hop)
458 * \return next hop
459 */
460 NextHop non_area_contention_based_forwarding(PendingPacketForwarding&&, const MacAddress* sender);
461
462 /**
463 * \brief Determine next hop for area contention-based forwarding
464 * See EN 302 636-4-1 v1.3.1 Annex F.3
465 *
466 * \param pdu
467 * \param payload
468 * \param sender optional sender MAC address (if not first hop)
469 * \return next hop
470 */
471 NextHop area_contention_based_forwarding(PendingPacketForwarding&&, const MacAddress* sender);
472
473 /**
474 * \brief Determine CBF buffering time for a packet.
475 * Complies to EN 302 636-4-1 v1.3.1 Annex E.3 (non-area CBF, eq. E.1) and F.3 (area CBF, eq. F.1)
476 *
477 * \param dist distance or progress (interpretation depends on non-area vs. area CBF)
478 * \return CBF time-out
479 */
480 units::Duration timeout_cbf(units::Length distance) const;
481
482 /**
483 * \brief Determine (area) CBF buffering time for a packet from a sender
484 *
485 * This is a shortcut for a re-curring pattern in Annex F.3 and F.4:
486 * 1) sender position is looked up in location table
487 * 2) position accuracy of sender is validated (if it is found)
488 * 3) progress is then distance between sender and local router
489 *
490 * \param sender MAC address of sender
491 * \return CBF time-out
492 */
493 units::Duration timeout_cbf(const MacAddress& sender) const;
494
495 /**
496 * \brief Determine next hop for area advanced forwarding
497 * See EN 302 636-4-1 v1.3.1 Annex F.4
498 *
499 * \param pdu
500 * \param payload
501 * \param ll optional link-layer control info (if not source operations)
502 * \return next hop
503 */
504 NextHop area_advanced_forwarding(PendingPacketForwarding&&, const LinkLayer* sender);
505
506 /**
507 * \brief Callback function for dispatching a packet repetition.
508 * Invoked by Repeater when a scheduled repetition is due.
509 *
510 * \param request
511 * \param payload
512 */
513 void dispatch_repetition(const DataRequestVariant&, DownPacketPtr);
514
515 /**
516 * \brief Encaspulate a packet according to security profile
517 *
518 * \param aid ITS-AID
519 * \param ssp Service Specific Permissions
520 * \param pdu PDU
521 * \param packet Packet with payload
522 */
523 DownPacketPtr encap_packet(ItsAid aid, ByteBuffer ssp, Pdu& pdu, DownPacketPtr packet);
524
525 /**
526 * \brief Create an initialized Single-Hop-Broadcast PDU
527 *
528 * \param request
529 * \return PDU object
530 */
531 std::unique_ptr<ShbPdu> create_shb_pdu(const ShbDataRequest&);
532
533 /**
534 * \brief Create an initialzed Beacon PDU
535 *
536 * \return PDU object
537 */
538 std::unique_ptr<BeaconPdu> create_beacon_pdu();
539
540 /**
541 * \brief Create an initialized GeoBroadcast PDU
542 *
543 * \param request
544 * \return PDU object
545 */
546 std::unique_ptr<GbcPdu> create_gbc_pdu(const GbcDataRequest&);
547
548 const MIB& m_mib;
549 Runtime& m_runtime;
550 dcc::RequestInterface* m_request_interface;
551 DccFieldGenerator* m_dcc_field_generator;
552 security::SecurityEntity* m_security_entity;
553 transport_map_t m_transport_ifcs;
554 LocationTable m_location_table;
555 PacketBuffer m_bc_forward_buffer;
556 PacketBuffer m_uc_forward_buffer;
557 CbfPacketBuffer m_cbf_buffer;
558 LongPositionVector m_local_position_vector;
559 SequenceNumber m_local_sequence_number;
560 Repeater m_repeater;
561 std::mt19937 m_random_gen;
562 GbcMemory m_gbc_memory;
563};
564
565/**
566 * Get string representation of packet drop reason
567 * \param pdr packet drop reason code
568 * \return string representation
569 */
570std::string stringify(Router::PacketDropReason pdr);
571
572} // namespace geonet
573} // namespace vanetza
574
575#endif /* ROUTER_HPP_UKYYCAR0 */
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:890
void flush_broadcast_forwarding_buffer()
Send all packets in the broadcast forwarding buffer with expired waiting time.
Definition router.cpp:1265
void indicate_extended(IndicationContext &, const CommonHeader &)
Process ExtendedHeader at packet indication.
Definition router.cpp:526
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:1293
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:764
void pass_up(const DataIndication &, UpPacketPtr)
Pass packet up to the transport layer.
Definition router.cpp:702
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:862
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:710
void indicate_common(IndicationContext &, const BasicHeader &)
Process CommonHeader at packet indication.
Definition router.cpp:424
DownPacketPtr encap_packet(ItsAid aid, ByteBuffer ssp, Pdu &pdu, DownPacketPtr packet)
Encaspulate a packet according to security profile.
Definition router.cpp:1341
bool decide_pass_up(bool within_destination, const GeoBroadcastHeader &gbc)
Decide if GBC packet shall be passed up to transport layer.
Definition router.cpp:1252
void set_access_interface(dcc::RequestInterface *ifc)
Register access layer interface.
Definition router.cpp:200
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:217
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:844
std::unique_ptr< ShbPdu > create_shb_pdu(const ShbDataRequest &)
Create an initialized Single-Hop-Broadcast PDU.
Definition router.cpp:1308
void flush_unicast_forwarding_buffer(const Address &addr)
Send all matching packets in the unicast forwarding buffer with expired waiting time.
Definition router.cpp:1270
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:1276
std::unique_ptr< BeaconPdu > create_beacon_pdu()
Create an initialzed Beacon PDU.
Definition router.cpp:1319
void indicate_basic(IndicationContextBasic &)
Process BasicHeader at packet indication.
Definition router.cpp:399
void set_dcc_field_generator(DccFieldGenerator *dcc)
Register generator for DCC-MCO fields.
Definition router.cpp:206
Hook< PacketDropReason > packet_dropped
When a packet is dropped, this Hook is invoked.
Definition router.hpp:157
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:222
void pass_down(const MacAddress &, PduPtr, DownPacketPtr)
Pass down the packet to the access layer.
Definition router.cpp:688
void dispatch_repetition(const DataRequestVariant &, DownPacketPtr)
Callback function for dispatching a packet repetition. Invoked by Repeater when a scheduled repetitio...
Definition router.cpp:758
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:803
void indicate(UpPacketPtr, const MacAddress &sender, const MacAddress &destination)
Handle the received packet on network layer. Packet handling involves these steps:
Definition router.cpp:374
void set_transport_handler(UpperProtocol proto, TransportInterface *ifc)
Register a transport protocol handler.
Definition router.cpp:190
void reset_beacon_timer()
Reschedule timer for next Beacon transmission Timer will be scheduled according to MIB's Beacon timer...
Definition router.cpp:737
void update_position(const PositionFix &)
Update router's local position vector.
Definition router.cpp:170
void execute_media_procedures(CommunicationProfile)
Executes media specific functionalities Details are described in TS 102 636-4-2.
Definition router.cpp:645
void set_security_entity(security::SecurityEntity *entity)
Register security entity used when itsGnSecurity is enabled.
Definition router.cpp:195
std::unique_ptr< GbcPdu > create_gbc_pdu(const GbcDataRequest &)
Create an initialized GeoBroadcast PDU.
Definition router.cpp:1331
void set_address(const Address &)
Set Router's own GeoNetworking address.
Definition router.cpp:212
NextHop forwarding_algorithm_selection(PendingPacketForwarding &&, const LinkLayer *ll=nullptr)
Definition router.cpp:597
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:661
bool process_extended(const ExtendedPduConstRefs< BeaconHeader > &, const UpPacket &, const LinkLayer &ll)
Process ExtendedHeader information. Update router's LocationTable and neighbour relationship.
Definition router.cpp:1109
void indicate_secured(IndicationContextBasic &, const BasicHeader &)
Process SecuredMessage at packet indication.
Definition router.cpp:467
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:950
BasicHeader specified in ETSI EN 302 636-4-1 v1.2.1, section 8.6.