in pcap-cli/cmd/pcap.go [132:190]
func startPCAP(
ctx context.Context,
id *string,
dev *pcap.PcapDevice,
config *pcap.PcapConfig,
wg *sync.WaitGroup,
stopDeadlineChan chan *time.Duration,
) {
iface := dev.NetInterface.Name
logger.Printf("device: %+v\n", iface)
ifaceNameAndIndex := fmt.Sprintf("%d/%s", dev.NetInterface.Index, dev.Name)
config.Iface = iface
if *engine == "tcpdump" && *stdout {
*writeTo = "stdout"
}
var err error
var pcapEngine pcap.PcapEngine
pcapEngine, err = newPcapEngine(engine, config)
if err != nil {
log.Fatalf("%s", err)
return
}
if *writeTo == "stdout" {
*stdout = true
}
pcapWriters := []pcap.PcapWriter{}
var pcapWriter pcap.PcapWriter
if *engine == "google" && *stdout {
pcapWriter, err = pcap.NewStdoutPcapWriter(ctx, &ifaceNameAndIndex)
if err == nil {
pcapWriters = append(pcapWriters, pcapWriter)
}
}
if *engine == "google" && *writeTo != "stdout" {
pcapWriter, err = pcap.NewPcapWriter(ctx, &ifaceNameAndIndex, writeTo, extension, timezone, *interval)
if err == nil {
pcapWriters = append(pcapWriters, pcapWriter)
}
}
prefix := fmt.Sprintf("[iface:%s] execution '%s'", iface, *id)
logger.Printf("%s started", prefix)
// this is a blocking call
err = pcapEngine.Start(ctx, pcapWriters, stopDeadlineChan)
if err != nil {
handleError(&prefix, err)
}
wg.Done()
}