diff --git a/cmd/vnet/vnet-main.go b/cmd/vnet/vnet-main.go index 99eb022a8..c26014116 100644 --- a/cmd/vnet/vnet-main.go +++ b/cmd/vnet/vnet-main.go @@ -22,11 +22,13 @@ import ( ) var ( - listen = flag.String("listen", "/tmp/qemu.sock", "path to listen on") - nat = flag.String("nat", "easy", "type of NAT to use") - nat2 = flag.String("nat2", "hard", "type of NAT to use for second network") - portmap = flag.Bool("portmap", false, "enable portmapping") - dgram = flag.Bool("dgram", false, "enable datagram mode; for use with macOS Hypervisor.Framework and VZFileHandleNetworkDeviceAttachment") + listen = flag.String("listen", "/tmp/qemu.sock", "path to listen on") + nat = flag.String("nat", "easy", "type of NAT to use") + nat2 = flag.String("nat2", "hard", "type of NAT to use for second network") + portmap = flag.Bool("portmap", false, "enable portmapping") + dgram = flag.Bool("dgram", false, "enable datagram mode; for use with macOS Hypervisor.Framework and VZFileHandleNetworkDeviceAttachment") + blend = flag.Bool("blend", true, "blend reality (controlplane.tailscale.com and DERPs) into the virtual network") + pcapFile = flag.String("pcap", "", "if non-empty, filename to write pcap") ) func main() { @@ -57,6 +59,8 @@ func main() { } var c vnet.Config + c.SetPCAPFile(*pcapFile) + c.SetBlendReality(*blend) node1 := c.AddNode(c.AddNetwork("2.1.1.1", "192.168.1.1/24", vnet.NAT(*nat))) c.AddNode(c.AddNetwork("2.2.2.2", "10.2.0.1/16", vnet.NAT(*nat2))) if *portmap { diff --git a/tstest/natlab/vnet/conf.go b/tstest/natlab/vnet/conf.go index 1703e0c12..7e4a1207e 100644 --- a/tstest/natlab/vnet/conf.go +++ b/tstest/natlab/vnet/conf.go @@ -29,19 +29,31 @@ import ( // values to modify the config before calling NewServer. // Once the NewServer is called, Config is no longer used. type Config struct { - nodes []*Node - networks []*Network - pcapFile string + nodes []*Node + networks []*Network + pcapFile string + blendReality bool } +// SetPCAPFile sets the filename to write a pcap file to, +// or empty to disable pcap file writing. func (c *Config) SetPCAPFile(file string) { c.pcapFile = file } +// NumNodes returns the number of nodes in the configuration. func (c *Config) NumNodes() int { return len(c.nodes) } +// SetBlendReality sets whether to blend the real controlplane.tailscale.com and +// DERP servers into the virtual network. This is mostly useful for interactive +// testing when working on natlab. +func (c *Config) SetBlendReality(v bool) { + c.blendReality = v +} + +// FirstNetwork returns the first network in the config, or nil if none. func (c *Config) FirstNetwork() *Network { if len(c.networks) == 0 { return nil