cmd/vnet: add --blend and --pcap flags

Updates #13038

Change-Id: Id16ea9eb94447a3d9651215f04b2525daf10b3eb
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick 2024-08-23 11:37:19 -07:00 committed by Brad Fitzpatrick
parent 3904e4d175
commit 3b70968c25
2 changed files with 24 additions and 8 deletions

View File

@ -22,11 +22,13 @@
) )
var ( var (
listen = flag.String("listen", "/tmp/qemu.sock", "path to listen on") listen = flag.String("listen", "/tmp/qemu.sock", "path to listen on")
nat = flag.String("nat", "easy", "type of NAT to use") nat = flag.String("nat", "easy", "type of NAT to use")
nat2 = flag.String("nat2", "hard", "type of NAT to use for second network") nat2 = flag.String("nat2", "hard", "type of NAT to use for second network")
portmap = flag.Bool("portmap", false, "enable portmapping") portmap = flag.Bool("portmap", false, "enable portmapping")
dgram = flag.Bool("dgram", false, "enable datagram mode; for use with macOS Hypervisor.Framework and VZFileHandleNetworkDeviceAttachment") 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() { func main() {
@ -57,6 +59,8 @@ func main() {
} }
var c vnet.Config 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))) 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))) c.AddNode(c.AddNetwork("2.2.2.2", "10.2.0.1/16", vnet.NAT(*nat2)))
if *portmap { if *portmap {

View File

@ -29,19 +29,31 @@
// values to modify the config before calling NewServer. // values to modify the config before calling NewServer.
// Once the NewServer is called, Config is no longer used. // Once the NewServer is called, Config is no longer used.
type Config struct { type Config struct {
nodes []*Node nodes []*Node
networks []*Network networks []*Network
pcapFile string 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) { func (c *Config) SetPCAPFile(file string) {
c.pcapFile = file c.pcapFile = file
} }
// NumNodes returns the number of nodes in the configuration.
func (c *Config) NumNodes() int { func (c *Config) NumNodes() int {
return len(c.nodes) 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 { func (c *Config) FirstNetwork() *Network {
if len(c.networks) == 0 { if len(c.networks) == 0 {
return nil return nil