func main()

in pcap-cli/cmd/pcap.go [80:130]


func main() {
	flag.Parse()

	config := &pcap.PcapConfig{
		Promisc:   *promisc,
		Snaplen:   *snaplen,
		TsType:    *tsType,
		Format:    *format,
		Filter:    *filter,
		Output:    *writeTo,
		Interval:  *interval,
		Extension: *extension,
		Ordered:   *ordered,
		ConnTrack: *conntrack,
	}

	exp, _ := regexp.Compile(fmt.Sprintf("^(?:ipvlan-)?%s.*", *iface))
	devs, _ := pcap.FindDevicesByRegex(exp)

	ctx := context.Background()
	var cancel context.CancelFunc

	id := fmt.Sprintf("cli/%s", uuid.New())
	ctx = context.WithValue(ctx, pcap.PcapContextID, id)
	ctx = context.WithValue(ctx, pcap.PcapContextLogName, `log/`+id)

	if *timeout > 0 {
		ctx, cancel = context.WithTimeout(ctx, time.Duration(*timeout)*time.Second)
	} else {
		ctx, cancel = context.WithCancel(ctx)
	}

	var wg sync.WaitGroup

	stopDeadlineChan := make(chan *time.Duration, 1)

	signals := make(chan os.Signal, 1)
	signal.Notify(signals, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
	go func() {
		<-signals
		cancel()
		deadline := 3 * time.Second
		stopDeadlineChan <- &deadline
	}()

	for _, dev := range devs {
		wg.Add(1)
		go startPCAP(ctx, &id, dev, config, &wg, stopDeadlineChan)
	}
	wg.Wait()
}