[netstack] add CLI flag to enable sniffing

Change-Id: I34f59811ddf73fbfb778d80d66ab0cabaffb04d4
diff --git a/src/connectivity/network/netstack/main.go b/src/connectivity/network/netstack/main.go
index 3521e6d..937e209 100644
--- a/src/connectivity/network/netstack/main.go
+++ b/src/connectivity/network/netstack/main.go
@@ -9,6 +9,7 @@
 	"flag"
 	"fmt"
 	"log"
+	"os"
 	"reflect"
 	"runtime"
 	"syscall/zx"
@@ -46,7 +47,7 @@
 	// logging service also adds a trailing newline.
 	data = bytes.TrimSuffix(data, []byte("\n"))
 
-	if err := logger.VLogf(logger.TraceVerbosity, "%s", data); err != nil {
+	if err := logger.VLogf(logger.DebugVerbosity, "%s", data); err != nil {
 		return 0, err
 	}
 
@@ -54,12 +55,16 @@
 }
 
 func Main() {
-	flag.Parse()
+	flags := flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
+	sniff := flags.Bool("sniff", false, "Enable the sniffer")
+	if err := flags.Parse(os.Args[1:]); err != nil {
+		panic(err)
+	}
 
 	ctx := context.CreateFromStartupInfo()
 
 	options := logger.LogInitOptions{
-		Loglevel:  logger.InfoLevel,
+		Loglevel:  logger.DebugLevel,
 		Connector: ctx.Connector(),
 		Tags:      []string{"netstack"},
 		MinSeverityForFileAndLineInfo: logger.InfoLevel,
@@ -70,7 +75,6 @@
 
 	log.SetOutput((*logWriter)(nil))
 	log.SetFlags(log.Lshortfile)
-	logger.Infof("started")
 
 	stk := tcpipstack.New([]string{
 		ipv4.ProtocolName,
@@ -103,6 +107,7 @@
 		arena:          arena,
 		dnsClient:      dns.NewClient(stk),
 		deviceSettings: ds,
+		sniff:          *sniff,
 	}
 	ns.mu.ifStates = make(map[tcpip.NICID]*ifState)
 	ns.mu.stack = stk
diff --git a/src/connectivity/network/netstack/netstack.go b/src/connectivity/network/netstack/netstack.go
index 251783a..7132d18 100644
--- a/src/connectivity/network/netstack/netstack.go
+++ b/src/connectivity/network/netstack/netstack.go
@@ -39,7 +39,6 @@
 )
 
 const (
-	sniff                            = false
 	deviceSettingsManagerNodenameKey = "DeviceName"
 	defaultNodename                  = "fuchsia-unset-device-name"
 
@@ -73,6 +72,7 @@
 		ifStates           map[tcpip.NICID]*ifState
 	}
 	nodename string
+	sniff    bool
 
 	filter *filter.Filter
 
@@ -649,7 +649,7 @@
 
 	// LinkEndpoint chains:
 	// Put sniffer as close as the NIC.
-	if sniff {
+	if ns.sniff {
 		// A wrapper LinkEndpoint should encapsulate the underlying
 		// one, and manifest itself to 3rd party netstack.
 		linkID = sniffer.New(linkID)
@@ -669,7 +669,7 @@
 	ns.mu.ifStates[ifs.nicid] = ifs
 	ns.mu.countNIC++
 
-	logger.Infof("NIC %s added", name)
+	logger.Infof("NIC %s added [sniff = %t]", name, ns.sniff)
 
 	if err := ns.mu.stack.CreateNIC(ifs.nicid, linkID); err != nil {
 		return nil, fmt.Errorf("NIC %s: could not create NIC: %v", ifs.mu.nic.Name, err)