4b3ace6dd3b97a5b06046f003ac5b18737b9b038
[govpp.git] / vendor / github.com / google / gopacket / examples / pfdump / main.go
1 // Copyright 2012 Google, Inc. All rights reserved.
2 //
3 // Use of this source code is governed by a BSD-style license
4 // that can be found in the LICENSE file in the root of the source
5 // tree.
6
7 // The pfdump binary implements a tcpdump-like command line tool with gopacket
8 // using pfring as a backend data collection mechanism.
9 package main
10
11 import (
12         "flag"
13         "fmt"
14         "github.com/google/gopacket/dumpcommand"
15         "github.com/google/gopacket/examples/util"
16         "github.com/google/gopacket/pfring"
17         "log"
18         "os"
19         "strings"
20 )
21
22 var iface = flag.String("i", "eth0", "Interface to read packets from")
23 var snaplen = flag.Int("s", 65536, "Snap length (number of bytes max to read per packet")
24 var cluster = flag.Int("cluster", -1, "If >= 0, sets the pfring cluster to this value")
25 var clustertype = flag.Int("clustertype", int(pfring.ClusterPerFlow), "Cluster type")
26
27 func main() {
28         defer util.Run()()
29         var ring *pfring.Ring
30         var err error
31         if ring, err = pfring.NewRing(*iface, uint32(*snaplen), pfring.FlagPromisc); err != nil {
32                 log.Fatalln("pfring ring creation error:", err)
33         }
34         if len(flag.Args()) > 0 {
35                 bpffilter := strings.Join(flag.Args(), " ")
36                 fmt.Fprintf(os.Stderr, "Using BPF filter %q\n", bpffilter)
37                 if err = ring.SetBPFFilter(bpffilter); err != nil {
38                         log.Fatalln("BPF filter error:", err)
39                 }
40         }
41         if *cluster >= 0 {
42                 if err = ring.SetCluster(*cluster, pfring.ClusterType(*clustertype)); err != nil {
43                         log.Fatalln("pfring SetCluster error:", err)
44                 }
45         }
46         if err = ring.SetSocketMode(pfring.ReadOnly); err != nil {
47                 log.Fatalln("pfring SetSocketMode error:", err)
48         } else if err = ring.Enable(); err != nil {
49                 log.Fatalln("pfring Enable error:", err)
50         }
51         dumpcommand.Run(ring)
52 }