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-node-enroller 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
|