()
| 1159 | } |
| 1160 | |
| 1161 | func (lb *locoBackend) Start() error { |
| 1162 | if err := lb.ns.Start(nil /* no LocalBackend */); err != nil { |
| 1163 | return fmt.Errorf("failed to start netstack: %w", err) |
| 1164 | } |
| 1165 | |
| 1166 | e := lb.sys.Engine.Get() |
| 1167 | mc := lb.sys.MagicSock.Get() |
| 1168 | lb.logf("disco pub key: %v", mc.DiscoPublicKey()) |
| 1169 | |
| 1170 | mc.SetPrivateKey(lb.priv) |
| 1171 | mc.SetDERPMap(lb.dm) |
| 1172 | |
| 1173 | derpRegion := lb.derpRegionID() |
| 1174 | |
| 1175 | nm := &netmap.NetworkMap{ |
| 1176 | NodeKey: lb.pub, |
| 1177 | } |
| 1178 | if lb.serverPub.IsZero() { |
| 1179 | // We're the server. (hence the serverPub is zero) |
| 1180 | nm.SelfNode = (&tailcfg.Node{ |
| 1181 | ID: 1, |
| 1182 | StableID: "1", |
| 1183 | Name: "server.tailcat.", |
| 1184 | User: 100, |
| 1185 | Key: lb.pub, |
| 1186 | DiscoKey: mc.DiscoPublicKey(), |
| 1187 | Addresses: []netip.Prefix{lb.addrPrefix}, |
| 1188 | AllowedIPs: []netip.Prefix{lb.addrPrefix, allIPv6}, |
| 1189 | HomeDERP: derpRegion, |
| 1190 | }).View() |
| 1191 | } else { |
| 1192 | // We're the client. |
| 1193 | serverAddr := tcAddrForKey(lb.serverPub) |
| 1194 | serverAddrPrefix := netip.PrefixFrom(serverAddr, serverAddr.BitLen()) |
| 1195 | |
| 1196 | nm.SelfNode = (&tailcfg.Node{ |
| 1197 | ID: 2, |
| 1198 | StableID: "2", |
| 1199 | Name: "client.tailcat.", |
| 1200 | User: 100, |
| 1201 | Key: lb.pub, |
| 1202 | DiscoKey: mc.DiscoPublicKey(), |
| 1203 | Addresses: []netip.Prefix{lb.addrPrefix}, |
| 1204 | HomeDERP: derpRegion, |
| 1205 | }).View() |
| 1206 | nm.Peers = append(nm.Peers, (&tailcfg.Node{ |
| 1207 | ID: 1, |
| 1208 | StableID: "1", |
| 1209 | Name: "server.tailcat.", |
| 1210 | User: 100, |
| 1211 | Key: lb.serverPub, |
| 1212 | DiscoKey: nodePublicAsDiscoPublic(lb.serverPub), |
| 1213 | Addresses: []netip.Prefix{serverAddrPrefix}, |
| 1214 | AllowedIPs: []netip.Prefix{serverAddrPrefix, allIPv6}, |
| 1215 | HomeDERP: derpRegion, |
| 1216 | }).View()) |
| 1217 | } |
| 1218 | lb.mu.Lock() |
nothing calls this directly
no test coverage detected