66 [[nodiscard]]
constexpr std::size_t
size()
const
85 :
id(id_arg),
wide(wide_arg)
104 return static_cast<uint16_t
>((
id & ~epoch_packet_id_mask) >> 48ULL);
115 std::uint64_t net_id;
116 buf.
read(
reinterpret_cast<unsigned char *
>(&net_id),
sizeof(net_id));
121 std::uint32_t net_id;
122 buf.
read(
reinterpret_cast<unsigned char *
>(&net_id),
sizeof(net_id));
133 buf.
write(
reinterpret_cast<const unsigned char *
>(&net_id),
sizeof(net_id));
137 const std::uint32_t net_id = htonl(
static_cast<std::uint32_t
>(
id));
138 buf.
write(
reinterpret_cast<const unsigned char *
>(&net_id),
sizeof(net_id));
148 buf.
prepend(
reinterpret_cast<const unsigned char *
>(&net_id),
sizeof(net_id));
152 const std::uint32_t net_id = htonl(
static_cast<std::uint32_t
>(
id));
153 buf.
prepend(
reinterpret_cast<const unsigned char *
>(&net_id),
sizeof(net_id));
158 [[nodiscard]] std::string
str()
const
160 std::ostringstream
os;
161 os << std::hex <<
"[0x" <<
id <<
"]";
195 throw packet_id_wrap();
220 [[nodiscard]] std::string
str()
const
233 [[nodiscard]]
constexpr std::size_t
length()
const
255 return pid_.
id >= wrap_at;
283template <
unsigned int REPLAY_WINDOW_ORDER,
284 unsigned int PKTID_RECV_EXPIRE>
291#if defined(__GNUC__) && (__GNUC__ < 11)
328 PacketIDDataReceiveType &operator=(
const PacketIDDataReceiveType &other) =
default;
331 void init(
const char *name_arg,
386 expire = now + PKTID_RECV_EXPIRE;
411 extent +=
static_cast<std::size_t
>(delta);
414 for (
unsigned i = 1; i < delta; ++i)
417 history[newbase / 8] &=
static_cast<uint8_t
>(~(1U << (newbase % 8)));
438 std::uint8_t *p = &
history[ri / 8];
439 const std::uint8_t mask =
static_cast<uint8_t
>(1U << (ri % 8));
461 [[nodiscard]] std::string
str()
const
463 std::ostringstream
os;
468 [[nodiscard]] std::size_t
constexpr length()
const
488 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)
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)