llarp/vpn/packet_router.hpp

Namespaces

Name
llarp
[crypto.hpp]
llarp::vpn

Classes

Name
class llarp::vpn::PacketRouter
struct llarp::vpn::Layer4Handler

Source code

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

namespace llarp::vpn
{
  using PacketHandlerFunc_t = std::function<void(llarp::net::IPPacket)>;

  struct Layer4Handler;

  class PacketRouter
  {
    PacketHandlerFunc_t m_BaseHandler;
    std::unordered_map<uint8_t, std::unique_ptr<Layer4Handler>> m_IPProtoHandler;

   public:
    explicit PacketRouter(PacketHandlerFunc_t baseHandler);

    void
    HandleIPPacket(llarp::net::IPPacket pkt);

    void
    AddIProtoHandler(uint8_t proto, PacketHandlerFunc_t func);

    void
    AddUDPHandler(huint16_t localport, PacketHandlerFunc_t func);

    void
    RemoveUDPHandler(huint16_t localport);
  };

  struct Layer4Handler
  {
    virtual ~Layer4Handler() = default;

    virtual void
    HandleIPPacket(llarp::net::IPPacket pkt) = 0;

    virtual void AddSubHandler(nuint16_t, PacketHandlerFunc_t){};
  };

}  // namespace llarp::vpn

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