llarp::iwp

Classes

Name
struct llarp::iwp::Hasher
struct llarp::iwp::InboundMessage
struct llarp::iwp::LinkLayer
struct llarp::iwp::OutboundMessage
struct llarp::iwp::Session

Types

Name
enum Command { ePING = 0, eXMIT = 1, eDATA = 2, eACKS = 3, eNACK = 4, eMACK = 5, eCLOS = 0xff}
using std::shared_ptr< LinkLayer > LinkLayer_ptr

Functions

Name
LinkLayer_ptr NewInboundLink(std::shared_ptr< KeyManager > keyManager, std::shared_ptr< EventLoop > loop, GetRCFunc getrc, LinkMessageHandler h, SignBufferFunc sign, BeforeConnectFunc_t before, SessionEstablishedHandler est, SessionRenegotiateHandler reneg, TimeoutHandler timeout, SessionClosedHandler closed, PumpDoneHandler pumpDone, WorkerFunc_t work)
LinkLayer_ptr NewOutboundLink(std::shared_ptr< KeyManager > keyManager, std::shared_ptr< EventLoop > loop, GetRCFunc getrc, LinkMessageHandler h, SignBufferFunc sign, BeforeConnectFunc_t before, SessionEstablishedHandler est, SessionRenegotiateHandler reneg, TimeoutHandler timeout, SessionClosedHandler closed, PumpDoneHandler pumpDone, WorkerFunc_t work)
ILinkSession::Packet_t CreatePacket(Command cmd, size_t plainsize, size_t min_pad =16, size_t pad_variance =16)
creates a packet with plaintext size + wire overhead + random pad

Attributes

Name
constexpr size_t FragmentSize
max size of data fragments
constexpr size_t CommandOverhead
plaintext header overhead size
constexpr size_t PacketOverhead
packet crypto overhead size
constexpr std::chrono::milliseconds DeliveryTimeout
Time how long we try delivery for.
constexpr auto ReceivalTimeout
Time how long we wait to recieve a message.
constexpr auto ReplayWindow
How long to keep a replay window for.
constexpr auto ACKResendInterval
How often to acks RX messages.
constexpr auto TXFlushInterval
How often to retransmit TX fragments.
constexpr std::chrono::milliseconds PingInterval
How often we send a keepalive.
constexpr auto SessionAliveTimeout
How long we wait for a session to die with no tx from them.

Types Documentation

enum Command

Enumerator Value Description
ePING 0 keep alive message
eXMIT 1 begin transission
eDATA 2 fragment data
eACKS 3 acknolege fragments
eNACK 4 negative ack
eMACK 5 multiack
eCLOS 0xff close session

using LinkLayer_ptr

using llarp::iwp::LinkLayer_ptr = typedef std::shared_ptr<LinkLayer>;

Functions Documentation

LinkLayer_ptr NewInboundLink(
    std::shared_ptr< KeyManager > keyManager,
    std::shared_ptr< EventLoop > loop,
    GetRCFunc getrc,
    LinkMessageHandler h,
    SignBufferFunc sign,
    BeforeConnectFunc_t before,
    SessionEstablishedHandler est,
    SessionRenegotiateHandler reneg,
    TimeoutHandler timeout,
    SessionClosedHandler closed,
    PumpDoneHandler pumpDone,
    WorkerFunc_t work
)
LinkLayer_ptr NewOutboundLink(
    std::shared_ptr< KeyManager > keyManager,
    std::shared_ptr< EventLoop > loop,
    GetRCFunc getrc,
    LinkMessageHandler h,
    SignBufferFunc sign,
    BeforeConnectFunc_t before,
    SessionEstablishedHandler est,
    SessionRenegotiateHandler reneg,
    TimeoutHandler timeout,
    SessionClosedHandler closed,
    PumpDoneHandler pumpDone,
    WorkerFunc_t work
)

function CreatePacket

ILinkSession::Packet_t CreatePacket(
    Command cmd,
    size_t plainsize,
    size_t min_pad =16,
    size_t pad_variance =16
)

creates a packet with plaintext size + wire overhead + random pad

Attributes Documentation

variable FragmentSize

static constexpr size_t FragmentSize = 1024;

max size of data fragments

variable CommandOverhead

static constexpr size_t CommandOverhead = 2;

plaintext header overhead size

variable PacketOverhead

static constexpr size_t PacketOverhead = HMACSIZE + TUNNONCESIZE;

packet crypto overhead size

variable DeliveryTimeout

static constexpr std::chrono::milliseconds DeliveryTimeout = 500ms;

Time how long we try delivery for.

variable ReceivalTimeout

static constexpr auto ReceivalTimeout = (DeliveryTimeout * 8) / 5;

Time how long we wait to recieve a message.

variable ReplayWindow

static constexpr auto ReplayWindow = (ReceivalTimeout * 3) / 2;

How long to keep a replay window for.

variable ACKResendInterval

static constexpr auto ACKResendInterval = DeliveryTimeout / 2;

How often to acks RX messages.

variable TXFlushInterval

static constexpr auto TXFlushInterval = (DeliveryTimeout / 5) * 4;

How often to retransmit TX fragments.

variable PingInterval

static constexpr std::chrono::milliseconds PingInterval = 5s;

How often we send a keepalive.

variable SessionAliveTimeout

static constexpr auto SessionAliveTimeout = PingInterval * 5;

How long we wait for a session to die with no tx from them.


Updated on 2026-01-10 at 22:49:45 +0000