llarp/vpn/egres_packet_router.hpp

Namespaces

Name
llarp
[crypto.hpp]
llarp::vpn

Classes

Name
struct llarp::vpn::EgresLayer4Handler
class llarp::vpn::EgresPacketRouter

Source code

#pragma once
#include <llarp/net/net_int.hpp>
#include <llarp/net/ip_packet.hpp>
#include <llarp/endpoint_base.hpp>
#include <functional>
#include <unordered_map>

namespace llarp::vpn
{
  using AddressVariant_t = llarp::EndpointBase::AddressVariant_t;
  using EgresPacketHandlerFunc = std::function<void(AddressVariant_t, net::IPPacket)>;

  struct EgresLayer4Handler
  {
    virtual ~EgresLayer4Handler() = default;

    virtual void
    HandleIPPacketFrom(AddressVariant_t from, net::IPPacket pkt) = 0;

    virtual void AddSubHandler(nuint16_t, EgresPacketHandlerFunc){};
    virtual void RemoveSubHandler(nuint16_t){};
  };

  class EgresPacketRouter
  {
    EgresPacketHandlerFunc m_BaseHandler;
    std::unordered_map<uint8_t, std::unique_ptr<EgresLayer4Handler>> m_IPProtoHandler;

   public:
    explicit EgresPacketRouter(EgresPacketHandlerFunc baseHandler);

    void
    HandleIPPacketFrom(AddressVariant_t, net::IPPacket pkt);

    void
    AddIProtoHandler(uint8_t proto, EgresPacketHandlerFunc func);

    void
    AddUDPHandler(huint16_t localport, EgresPacketHandlerFunc func);

    void
    RemoveUDPHandler(huint16_t localport);
  };
}  // namespace llarp::vpn

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