Proto commits in zllovesuki/specter

These 70 commits are when the Protocol Buffers files have changed:

Commit:9b1ba3b
Author:Rachel Chen

pki: introduce certificate renewal

The documentation is generated from this commit.

Commit:6db3a8f
Author:Rachel Chen
Committer:Rachel Chen

spec: move BuildVersion and BuildTime into spec overlay: include spec.BuildVersion as part of negotiation tun/server: show connected clients version if available

Commit:9d27df7
Author:Rachel Chen
Committer:Rachel Chen

tun: add keyless tls support

Commit:3b76686
Author:Rachel Chen

rpc: use in-memory buffered stream instead of synchronous net.Pipe

Commit:c350ed9
Author:Rachel Chen
Committer:Rachel Chen

(wip) client cert renewal TODO: implement renewal logic in client

Commit:e4f5a8e
Author:Rachel Chen

go.mod: update module path to be under go.miragespace.co

Commit:1371c9e
Author:Rachel Chen

chord: added ListKeys to query the network for keys with prefix

Commit:320c4e9
Author:Rachel Chen

wip

Commit:31da4e8
Author:Rachel Chen
Committer:Rachel Chen

tun: allow the internal endpoint query tunnels on client this commit introduces the ability to list the connected clients on /clients internal endpoint, and make reverse RPC query to the client to list the configured tunnels. other notable changes in this commit: spec/transport: introduce ListConnected() chord: merge /stats and /ring into a single router

Commit:b155ad8
Author:Rachel Chen
Committer:Rachel Chen

acme: add support for custom domain and DNS This commit introduces major change in functionality, where specter will now self-host the ACME DNS. Self-hosting DNS also allows for allowing client to register custom domain to be used for the tunnel, with automatic TLS issuance.

Commit:a6d5871
Author:Rachel Chen

[wip] external kv

Commit:9dc9818
Author:Rachel Chen

pki: use client certificate for authentication This commit refactors the client transport and authentication flow, where client certificate is used instead of ClientID + Token. This is a breaking change that will require configs from previous versions to be migrated.

Commit:42688c1
Author:Rachel Chen

spec/protocol: add UnpublishTunnel; tun/server: implement UnpublishTunnel and ReleaseTunnel; tun/client: expose UnpublishTunnel and ReleaseTunnel to Phantom

Commit:8fb40d0
Author:Rachel Chen
Committer:Rachel Chen

spec/protocol: add RegisteredHostnames and ReleaseTunnel to TunnelService - also restructure the tunnel.proto to not move Link message structure too much tun/client: make some APIs private, and expose GetRegisteredHostnames for Phantom

Commit:9c68d63
Author:Rachel Chen

use typos-cli to fix all typos

Commit:8a4168d
Author:Rachel Chen
Committer:Rachel Chen

Support for multiple virtual nodes on a physical node

Commit:813aec2
Author:Rachel Chen

spec/protocol: rename tunnel related definitions to Tunnel/Destination semantic

Commit:8c162cf
Author:Rachel Chen
Committer:Rachel Chen

tun/gateway: add support for forwarding internal endpoint from one node to another

Commit:0c04424
Author:Rachel Chen
Committer:Rachel Chen

rpc: use twirp over software defined transport for rpc This commit refactor the entire RPC system and use twirp as the framework instead of handrolled rpc. The benefit of codegen and the full http ecosystem makes extending easier. Other changes in this commit: Makefile: add codegen for twirp and apply vtprotobuf patch where applicable spec/mocks: fix PipeTransport() sending delegation to the wrong end chord: stats handler now shows RPC stats

Commit:aea04f7
Author:Rachel Chen

somehow there's another version of the paper

Commit:083e2e1
Author:Rachel Chen
Committer:Rachel Chen

attempting to fix lookup error and connection reuse once and for all

Commit:ed1ee94
Author:Rachel Chen
Committer:Rachel Chen

wip: refactor transport reuse with negotiation

Commit:2fec0be
Author:Rachel Chen
Committer:Rachel Chen

wip: refactor to use new stream per rpc call

Commit:0e957cd
Author:Rachel Chen
Committer:Rachel Chen

spec/chord: add context.Context to KV operations This commit includes major refactor of chord.KV to include context.Context in order to be able to pass request context. This is most useful when we are implementing replication to next N successors for KV operations. Actual implementation is left as an exercise for later.

Commit:be10162
Author:Rachel Chen

spec/tun: use proto to send status code; tun: provide tunnel feedback when connecting to remote node

Commit:946ed3f
Author:Rachel Chen

kv/aof: store checksum and verify checksum on read

Commit:78ad2a1
Author:Rachel Chen
Committer:Rachel Chen

kv/aof: implement LogEntry and version This commit allows for versioning LogEntry instead of storing raw Mutations to the AOF log. This allows for later implementations to, for example, compress log entries before storing to disk.

Commit:52be37e
Author:Rachel Chen
Committer:Rachel Chen

kv/aof: implement append only persistence This commit introduces a new chord.KVProvider implementation that will persist most kv mutations to disk with append-only logs, and restoring the in-memory state on start-up by replaying the logs. Lease operations are not persisted as they are deemed volatile, and the new KV implementation is meant for persisting SimpleKV and PrefixKV which they are much more useful in case the node crashes.

Commit:3cfdc12
Author:Rachel Chen

tun/server: report to client how many servers were the tunnel published to

Commit:721692f
Author:Rachel Chen
Committer:Rachel Chen

cmd/client: support for connecting TCP target This commit introduces support for one-off or listener mode to connect to tunneled target from the specter client. Some changes to the gateway had to be made because of quic's EarlyConnection where the stream is not established despite using .OpenStreamSync(). Therefore, the client needs to poke the gateway. Other changes in this commit: util: move GetOutboundIP to util package tun/client: call .Sync() before closing the config file

Commit:c3b1ec3
Author:Rachel Chen
Committer:Rachel Chen

tun/client: self healing tunnels tun client will now establish multiple connections to specter server and automatically request more nodes to be connected to in order to maintain at most 3 links. tunnel will now live in its own command space Other changes in this commit: cmd/specter: move App definition to this package spec/overlay: remove unused interfaces integrations: attempting to create integration tests CI: add integration job

Commit:f1ca8b1
Author:Rachel Chen
Committer:Rachel Chen

tun/client: multiple and persistent tunnels tun/client now supports persisting some states to disk, and publish new tunnels automatically when the config file changes. fix #6 and #5 TODO: auto-healing broken connection with specter server TODO: context cancellation in http acceptor Other changes in this commit: spec/protocol: consolidate tunnel RPC into ClientRequest/ClientResponse cmd/client: update to use only tun/client exported APIs

Commit:628b66a
Author:Rachel Chen

chord/kv: add PrefixContains interface

Commit:6d7e1f9
Author:Rachel Chen

spec/proto: reuse keys for children prefix

Commit:e096cab
Author:Rachel Chen
Committer:Rachel Chen

chord/kv: implement atomic leave; This commit completes the second part of the algorithm proposed by Ali Ghodsi of request lock from the successor before leaving. More tests are needed to verify the mechanism. Changes in this commit: chord/kv_membership: remove the lock on predecessor when joining; break out finish operation into advisory stablize and release; implement leave locking as per algorithm README: update chord KV status

Commit:c311064
Author:Rachel Chen
Committer:Rachel Chen

chord/kv: partial atomic ring maintenance During the process of implementing certmagic.Storage over specter KV, and validating the v1 implementation of key consistency, it was discovered that concurrent joins can lead to temporary loss of key consistency, which means certmagic will "lose" the writes it just issued mere milliseconds ago. The atomic ring maintenance algorithm proposed by Ali Ghodsi is shown to be correct and can maintain key consistency during membership change, at the expense of availability (because of asynchronous network). With some minor modifications, such algorithm is partially implemented (albeit deviated greatly), and shown to be maintaining key consistency just enough for our limited purpose. Changes in this commit: acme: implement certmagic.Storage using specter KV backend allowing for self bootstrapping chord/kv: implement atomic ring maintenance with the assumption that the joining will not fail during the process spec/chord: added extended interfaces to allow for atomic join spec/protocol: added corresponding RPCs for extended interfaces cmd/server: use specter KV backed storage for certmagic cmd/client: allow specifying tunnel target for test client Dockerfile: added validator build target, added test client build target README: added reference to Ali Ghodsi's paper and dissertation

Commit:6a641dc
Author:Rachel Chen

spec/chord_kv: separate operations into 3 categories; kv: move MemoryMap into kv/memory; spec/protocol: rename KV field names to reflect category change

Commit:97d3668
Author:Rachel Chen
Committer:Rachel Chen

spec/chord_kv: introduces Lease Acquire/Renew/Release This commit introduces new APIs to chord.KV interface, and allowing a caller to hold a lease for a specific lease name, with time-to-live auto expiring leases. TODO: grab a monitonic clock from the time package somehow

Commit:b78153b
Author:Rachel Chen
Committer:Rachel Chen

spec/chord_kv: implement prefix kv This commit introduces prefix/children KV interfaces, allowing the caller to track an array of keys under a prefix. This is useful for tracking key hierarchy (as the property of DHT does not allow for a simple prefix search).

Commit:ad6a5f2
Author:Rachel Chen
Committer:Rachel Chen

tun/gateway: fix http3 multiplex h3 and specter-tcp/1 cipher: generate dynamic *tls.Config for http3; spec/protocol: rename TCP proto; tun/gateway: add quic logo for http3 test in browser tun/gateway: add http3 related tests

Commit:a8ffc92
Author:Rachel Chen
Committer:Rachel Chen

spec/chord_kv: export protocol.KVTransfer to support future complex KV operations

Commit:71b8047
Author:Rachel Chen

spec/chord_kv: rename interfaces to be more accurate

Commit:7d88685
Author:Rachel Chen
Committer:Rachel Chen

spec/chord: shrink RPC KV definitions to only DirectPuts (renamed from LocalPuts) chord/kv_test: use 400 keys in transferIn

Commit:bdcbc1a
Author:Rachel Chen
Committer:Rachel Chen

kv: implement atomic MakeKey

Commit:a1cabc0
Author:Rachel Chen

tun/gateway: enable http2 support on gateway

Commit:3b64a68
Author:Rachel Chen

go.mod: use kon.nect.sh vanity url

Commit:273efc7
Author:Rachel Chen

Makefile: add android to release target; chord: use KV interfaces on LocalNode instead of directly from KV in key transfer; cmd: added colored level in logger; overlay: rearrange fields for alignment; rpc: use const size

Commit:21fabf7
Author:Rachel Chen

spec: move proto definitions to separate folder; Makefile: force test with -count=1

Commit:f0894bd
Author:Rachel Chen
Committer:Rachel Chen

for the last time, fix the key transfer procedure by the successor to the predecessor notifying

Commit:7f22a70
Author:Rachel Chen

spec/protocol: add kv operation to request keys to transfer; node: fix key transfer in procedure by only requesting keys from successor upon joining

Commit:a2de922
Author:Rachel Chen

tun: multi connect in the working, however chord KV key transfer is broken?

Commit:517de79
Author:Rachel Chen

go.mod: rename module path to github.com/zllovesuki/specter

Commit:c47f515
Author:Rachel Chen

spec/tun: include helper functions to generate identities keys; spec/protocol: include tun.IdentitiesPair for forward and backward resolution

Commit:da9a3cc
Author:Rachel Chen

spec/transport: add support for optional datagram; overlay: implement datagram support for application

Commit:e0b4257
Author:Rachel Chen
Committer:Rachel Chen

go.mod: upgrade indirect depenencies; sprc/tun: decorate alpn with actual names and figuring out how to access those descriptors; tun: use buffer pool

Commit:114522e
Author:Rachel Chen

[WIP] tun: implementing server rpc handler

Commit:8b4a34e
Author:Rachel Chen

[WIP] tun: starting implementing the tunnel part of the project; spec: added tun specific protobuf; transport: added Identity() for tunnel server

Commit:d02bc1a
Author:Rachel Chen

overlay: exploit the fact that remote will always come to us first to reuse quic connection bidirectionally; node: return error upon leaving, and notify after key transfer; spec: add new Connection proto for negotiation

Commit:66f6adf
Author:Rachel Chen

chord/kv: implement local KV operations; node: implement key transfer to succcessor upon leaving; rpc: move spec into spec/rpc; rpc: change size buffer length into constant

Commit:3e69903
Author:Rachel Chen

overlay: use net.Conn instead of custom type, and wrap quic.Stream for net.Conn; rpc: refactor rpc to return response, and completely redo rpc protocol buffer definitions

Commit:06621eb
Author:Rachel Chen

chord/kv: implement FindKeys for key transfer [WIP full implementation]; node: skip certain tasks when not running in ring

Commit:9310b69
Author:Rachel Chen
Committer:Rachel Chen

rpc: now use context.Context; spec: move transport and rpc interface for abstraction; chord/kv: start working on key transfer

Commit:4ce3ed8
Author:Rachel Chen

overlay: transport should have one 1 type of rpc

Commit:097bb1b
Author:Rachel Chen

chord: use extended successors list for better tolerance; transport: use reaper to remove dead quic connections; transport: use quic datagram to actively check for liveness

Commit:58bbe6e
Author:Rachel Chen

chord: new node/leaves now correctly fix the ring; TODO: connections are cached, need to evict

Commit:287a1d8
Author:Rachel Chen

chord: RemoteNode sort of works via RPC, but it is extremely incorrect; [WIP] fix chord implementation

Commit:693d9d1
Author:Rachel Chen

[WIP] overlay: start implementing RPC via QUIC

Commit:39999f7
Author:Rachel Chen

chord: add kv interface; kv: start working on kv implementation; node: move chord VNode implementations to separate module

Commit:e641c91
Author:Rachel Chen

spec: update rpc spec

Commit:494a44c
Author:Rachel Chen

spec: start to define RPC specs