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)
50 func callUp(peerId *govpn.PeerId) (string, error) {
51 upPath := path.Join(govpn.PeersPath, peerId.String(), "up.sh")
52 result, err := govpn.ScriptCall(upPath, "")
56 sepIndex := bytes.Index(result, []byte{'\n'})
58 sepIndex = len(result)
60 ifaceName := string(result[:sepIndex])