12 type PeerState struct {
14 terminator chan struct{}
19 handshakes map[string]*govpn.Handshake = make(map[string]*govpn.Handshake)
22 peers map[string]*PeerState = make(map[string]*PeerState)
23 peersLock sync.RWMutex
25 peersById map[govpn.PeerId]string = make(map[govpn.PeerId]string)
26 peersByIdLock sync.RWMutex
28 knownPeers govpn.KnownPeers
32 func peerReady(ps PeerState) {
34 heartbeat := time.NewTicker(ps.peer.Timeout)
39 ps.peer.EthProcess(nil)
42 case data = <-ps.tap.Sink:
43 ps.peer.EthProcess(data)
51 func callUp(peerId *govpn.PeerId) (string, error) {
52 upPath := path.Join(govpn.PeersPath, peerId.String(), "up.sh")
53 result, err := govpn.ScriptCall(upPath, "")
57 sepIndex := bytes.Index(result, []byte{'\n'})
59 sepIndex = len(result)
61 ifaceName := string(result[:sepIndex])