mirror of
https://github.com/tailscale/tailscale.git
synced 2024-12-01 22:15:51 +00:00
sameLAN
Change-Id: I575dcab31ca812edf7d04fa126772611cf89b9a7 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
9cfc83982f
commit
1a84047379
@ -87,7 +87,7 @@ func findKernelPath(goMod string) (string, error) {
|
||||
return "", fmt.Errorf("failed to find kernel in %v", goMod)
|
||||
}
|
||||
|
||||
type addNodeFunc func(c *vnet.Config) *vnet.Node
|
||||
type addNodeFunc func(c *vnet.Config) *vnet.Node // returns nil to omit test
|
||||
|
||||
func easy(c *vnet.Config) *vnet.Node {
|
||||
n := c.NumNodes() + 1
|
||||
@ -96,6 +96,17 @@ func easy(c *vnet.Config) *vnet.Node {
|
||||
fmt.Sprintf("192.168.%d.1/24", n), vnet.EasyNAT))
|
||||
}
|
||||
|
||||
func sameLAN(c *vnet.Config) *vnet.Node {
|
||||
nw := c.FirstNetwork()
|
||||
if nw == nil {
|
||||
return nil
|
||||
}
|
||||
if !nw.CanTakeMoreNodes() {
|
||||
return nil
|
||||
}
|
||||
return c.AddNode(nw)
|
||||
}
|
||||
|
||||
func one2one(c *vnet.Config) *vnet.Node {
|
||||
n := c.NumNodes() + 1
|
||||
return c.AddNode(c.AddNetwork(
|
||||
@ -132,6 +143,9 @@ func (nt *natTest) runTest(node1, node2 addNodeFunc) pingRoute {
|
||||
node1(&c),
|
||||
node2(&c),
|
||||
}
|
||||
if nodes[0] == nil || nodes[1] == nil {
|
||||
t.Skip("skipping test; not applicable combination")
|
||||
}
|
||||
|
||||
var err error
|
||||
nt.vnet, err = vnet.New(&c)
|
||||
@ -413,6 +427,7 @@ type nodeType struct {
|
||||
{"easyPMP", easyPMP},
|
||||
{"hardPMP", hardPMP},
|
||||
{"one2one", one2one},
|
||||
{"sameLAN", sameLAN},
|
||||
}
|
||||
|
||||
sem := syncs.NewSemaphore(2)
|
||||
@ -420,9 +435,10 @@ type nodeType struct {
|
||||
mu sync.Mutex
|
||||
res = make(map[string]pingRoute)
|
||||
)
|
||||
for i, a := range types {
|
||||
for _, b := range types[i:] {
|
||||
for _, a := range types {
|
||||
for _, b := range types {
|
||||
key := a.name + "-" + b.name
|
||||
keyBack := b.name + "-" + a.name
|
||||
t.Run(key, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
@ -431,6 +447,10 @@ type nodeType struct {
|
||||
|
||||
filename := key + ".cache"
|
||||
contents, _ := os.ReadFile(filename)
|
||||
if len(contents) == 0 {
|
||||
filename2 := keyBack + ".cache"
|
||||
contents, _ = os.ReadFile(filename2)
|
||||
}
|
||||
route := pingRoute(strings.TrimSpace(string(contents)))
|
||||
|
||||
if route == "" {
|
||||
@ -464,13 +484,18 @@ type nodeType struct {
|
||||
pf("</tr>\n")
|
||||
|
||||
for _, a := range types {
|
||||
if a.name == "sameLAN" {
|
||||
continue
|
||||
}
|
||||
pf("<tr><td><b>%s</b></td>", a.name)
|
||||
for _, b := range types {
|
||||
key := a.name + "-" + b.name
|
||||
key2 := b.name + "-" + a.name
|
||||
v := cmp.Or(res[key], res[key2])
|
||||
v := cmp.Or(res[key], res[key2], "-")
|
||||
if v == "derp" {
|
||||
pf("<td><div style='color: red; font-weight: bold'>%s</div></td>", v)
|
||||
} else if v == "local" {
|
||||
pf("<td><div style='color: green; font-weight: bold'>%s</div></td>", v)
|
||||
} else {
|
||||
pf("<td>%s</td>", v)
|
||||
}
|
||||
|
@ -33,6 +33,13 @@ func (c *Config) NumNodes() int {
|
||||
return len(c.nodes)
|
||||
}
|
||||
|
||||
func (c *Config) FirstNetwork() *Network {
|
||||
if len(c.networks) == 0 {
|
||||
return nil
|
||||
}
|
||||
return c.networks[0]
|
||||
}
|
||||
|
||||
// AddNode creates a new node in the world.
|
||||
//
|
||||
// The opts may be of the following types:
|
||||
@ -145,6 +152,13 @@ type Network struct {
|
||||
err error // carried error
|
||||
}
|
||||
|
||||
func (n *Network) CanTakeMoreNodes() bool {
|
||||
if n.natType == One2OneNAT {
|
||||
return len(n.nodes) == 0
|
||||
}
|
||||
return len(n.nodes) < 150
|
||||
}
|
||||
|
||||
// NetworkService is a service that can be added to a network.
|
||||
type NetworkService string
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user