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