func startPCAP()

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()
}