You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lokinet/llarp/net
Jason Rhinelander 752879d712
QUIC lokinet integration refactor
Refactors how quic packets get handled: the actual tunnels now live in
tunnel.hpp's TunnelManager which holds and manages all the quic<->tcp
tunnelling.  service::Endpoint now holds a TunnelManager rather than a
quic::Server.  We only need one quic server, but we need a separate quic
client instance per outgoing quic tunnel, and TunnelManager handles all
that glue now.

Adds QUIC packet handling to get to the right tunnel code.  This
required multiplexing incoming quic packets, as follows:

Adds a very small quic tunnel packet header of 4 bytes:

    [1, SPORT, ECN] for client->server packets, where SPORT is our
    source "port" (really: just a uint16_t unique quic instance
    identifier)

or

    [2, DPORT, ECN] for server->client packets where the DPORT is the SPORT
    from above.

(This also reworks ECN bits to get properly carried over lokinet.)

We don't need a destination/source port for the server-side because
there is only ever one quic server (and we know we're going to it when
the first byte of the header is 1).

Removes the config option for quic exposing ports; a full lokinet will
simply accept anything incoming on quic and tunnel it to the requested
port on the the local endpoint IP (this handler will come in a following
commit).

Replace ConvoTags with full addresses: we need to carry the port, as
well, which the ConvoTag can't give us, so change those to more general
SockAddrs from which we can extract both the ConvoTag *and* the port.

Add a pending connection queue along with new quic-side handlers to call
when a stream becomes available (TunnelManager uses this to wire up
pending incoming conns with quic streams as streams open up).

Completely get rid of tunnel_server/tunnel_client.cpp code; it is now
moved to tunnel.hpp.

Add listen()/forget() methods in TunnelManager for setting up quic
listening sockets (for liblokinet usage).

Add open()/close() methods in TunnelManager for spinning up new quic
clients for outgoing quic connections.
3 years ago
..
address_info.cpp standardize include format and pragma once 3 years ago
address_info.hpp Replace ::Hash nested structs with std::hash specializations 3 years ago
exit_info.cpp standardize include format and pragma once 3 years ago
exit_info.hpp standardize include format and pragma once 3 years ago
ip.cpp standardize include format and pragma once 3 years ago
ip.hpp standardize include format and pragma once 3 years ago
ip_address.cpp standardize include format and pragma once 3 years ago
ip_address.hpp Replace ::Hash nested structs with std::hash specializations 3 years ago
ip_packet.cpp standardize include format and pragma once 3 years ago
ip_packet.hpp Convert protocol type to enum class 3 years ago
ip_range.cpp standardize include format and pragma once 3 years ago
ip_range.hpp standardize include format and pragma once 3 years ago
ip_range_map.hpp standardize include format and pragma once 3 years ago
net.cpp standardize include format and pragma once 3 years ago
net.h standardize include format and pragma once 3 years ago
net.hpp standardize include format and pragma once 3 years ago
net_bits.hpp standardize include format and pragma once 3 years ago
net_if.hpp standardize include format and pragma once 3 years ago
net_int.cpp SockAddr endian cleanups & add uint128 ctors 3 years ago
net_int.hpp SockAddr endian cleanups & add uint128 ctors 3 years ago
route.cpp standardize include format and pragma once 3 years ago
route.hpp initial route poking 4 years ago
sock_addr.cpp QUIC lokinet integration refactor 3 years ago
sock_addr.hpp QUIC lokinet integration refactor 3 years ago
uint128.hpp Replace ::Hash nested structs with std::hash specializations 3 years ago