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