66 [[nodiscard]]
constexpr std::size_t
size()
const
86 :
id(id_arg),
wide(wide_arg)
105 return static_cast<uint16_t
>((
id & ~epoch_packet_id_mask) >> 48ull);
116 std::uint64_t net_id;
117 buf.
read(
reinterpret_cast<unsigned char *
>(&net_id),
sizeof(net_id));
122 std::uint32_t net_id;
123 buf.
read(
reinterpret_cast<unsigned char *
>(&net_id),
sizeof(net_id));
134 buf.
write(
reinterpret_cast<const unsigned char *
>(&net_id),
sizeof(net_id));
138 const std::uint32_t net_id = htonl(
static_cast<std::uint32_t
>(
id));
139 buf.
write(
reinterpret_cast<const unsigned char *
>(&net_id),
sizeof(net_id));
149 buf.
prepend(
reinterpret_cast<const unsigned char *
>(&net_id),
sizeof(net_id));
153 const std::uint32_t net_id = htonl(
static_cast<std::uint32_t
>(
id));
154 buf.
prepend(
reinterpret_cast<const unsigned char *
>(&net_id),
sizeof(net_id));
159 [[nodiscard]] std::string
str()
const
161 std::ostringstream os;
162 os << std::hex <<
"[0x" <<
id <<
"]";
196 throw packet_id_wrap();
221 [[nodiscard]] std::string
str()
const
234 [[nodiscard]]
constexpr std::size_t
length()
const
256 return pid_.
id >= wrap_at;
284template <
unsigned int REPLAY_WINDOW_ORDER,
285 unsigned int PKTID_RECV_EXPIRE>
292#if defined(__GNUC__) && (__GNUC__ < 11)
329 PacketIDDataReceiveType &operator=(
const PacketIDDataReceiveType &other) =
default;
332 void init(
const char *name_arg,
388 expire = now + PKTID_RECV_EXPIRE;
413 extent +=
static_cast<std::size_t
>(delta);
416 for (
unsigned i = 1; i < delta; ++i)
419 history[newbase / 8] &=
static_cast<uint8_t
>(~(1u << (newbase % 8)));
440 std::uint8_t *p = &
history[ri / 8];
441 const std::uint8_t mask =
static_cast<uint8_t
>(1u << (ri % 8));
463 [[nodiscard]] std::string
str()
const
465 std::ostringstream os;
470 [[nodiscard]] std::size_t
constexpr length()
const
490 std::string
name{
"not initialised"};
void prepend(const T *data, const size_t size)
Prepend data to the buffer.
void write(const T *data, const size_t size)
Write data to the buffer.
void read(NCT *data, const size_t size)
Read data from the buffer into the specified memory location.
static constexpr unsigned int REPLAY_WINDOW_BYTES
PacketIDData read_next(Buffer &buf) const
PacketIDData::data_id_t id_high
void init(const char *name_arg, const int unit_arg, bool wide_arg)
static constexpr unsigned int REPLAY_WINDOW_SIZE
std::size_t constexpr length() const
bool test_add(const PacketIDData &pin, const Time::base_type now, const SessionStats::Ptr &stats)
std::uint8_t history[REPLAY_WINDOW_BYTES]
"sliding window" bitmask of recent packet IDs received */
bool wide
< 32 or 64 bit packet counter
constexpr std::size_t replay_index(PacketIDData::data_id_t i) const
PacketIDData::data_id_t id_floor
Error::Type do_test_add(const PacketIDData &pin, const Time::base_type now)
constexpr std::size_t length() const
PacketIDDataSend(bool wide_arg, uint16_t epoch)
OPENVPN_SIMPLE_EXCEPTION(packet_id_wrap)
bool wrap_warning() const
void prepend_next(Buffer &buf)
static constexpr PacketIDData::data_id_t epoch_packet_id_max
void write_next(Buffer &buf)
virtual void error(const size_t type, const std::string *text=nullptr)
std::uint64_t rev64(const std::uint64_t value)
Support deferred server-side state creation when client connects.
PacketIDDataReceiveType< 8, 30 > PacketIDDataReceive
void write(Buffer &buf) const
static constexpr std::size_t short_id_size
void write_prepend(Buffer &buf) const
void read(ConstBuffer &buf)
PacketIDData(bool wide_arg, data_id_t id_arg)
PacketIDData(bool wide_arg)
constexpr std::size_t size() const
static constexpr data_id_t epoch_packet_id_mask
static constexpr std::size_t long_id_size
static constexpr size_t size(bool wide)