The CONTROL stream the facts, the enrolment and the overlay rekey were published into was the controller's, which ended by its unassignment (issue 1126) and whose stream is removed after group B's delivery: a publish there would fail every facts event before its haves are written. The facts go into the haves as they did after the report, the enrolment goes through mesh-enrolment alone, and overlay take is refused because no seat takes a rekey now. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
50 lines
1.8 KiB
Go
50 lines
1.8 KiB
Go
package link
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
)
|
|
|
|
// What a joining machine keeps of the enrolment's words: the tunnel it found, as it travels, and how long it asks
|
|
// while the seat mesh-enrolment says to ask again (Redeem). The enrolment through the controller's subject on the
|
|
// CONTROL stream ended with the controller (issue 1126).
|
|
|
|
// Approach is how a node reaches a mesh it does not yet belong to: the address, the certificate that address must
|
|
// present, and which bus is at the other end, the mesh's own (hearing.go); a token naming any other is refused before
|
|
// anything is sent.
|
|
type Approach struct {
|
|
Address string
|
|
Fingerprint string
|
|
Transport string
|
|
}
|
|
|
|
// Tunnel is a found tunnel as it travels: no private key.
|
|
type Tunnel struct {
|
|
Interface string `json:"interface"`
|
|
Unit string `json:"unit"`
|
|
Config string `json:"config"`
|
|
Port int `json:"port"`
|
|
Address string `json:"address"`
|
|
Range string `json:"range"`
|
|
MTU int `json:"mtu,omitempty"`
|
|
PublicKey string `json:"public_key"`
|
|
Peers []TunnelPeer `json:"peers,omitempty"`
|
|
}
|
|
|
|
// TunnelPeer is one peer of a found tunnel: its key, and the address the tunnel routes to it.
|
|
type TunnelPeer struct {
|
|
PublicKey string `json:"public_key"`
|
|
Address string `json:"address"`
|
|
}
|
|
|
|
// ErrRefused is what a node gets when the mesh will not have it.
|
|
var ErrRefused = errors.New("the mesh refused this enrolment")
|
|
|
|
// EnrolPatience is how long a node keeps asking while the mesh says "try again" — as long as the
|
|
// mesh holds a token for the one enrolment presenting it, so a node asking the whole time is never
|
|
// held off by its own earlier attempt.
|
|
const EnrolPatience = 2 * time.Minute
|
|
|
|
// AskAgainAfter is the pause between asks while the mesh says "try again".
|
|
const AskAgainAfter = 3 * time.Second
|