Beispiel #1
0
func controler(pcapreader *pcap.Pcap, quit_chan chan bool) {
	timebegin := time.Now()

MAIN:
	for {
		select {

		case <-quit_chan:

			fmt.Print("\nEND\n")
			fmt.Printf("ETH routines: %d\n", len(data.ETHMAP.StatsChans))
			for _, chans := range data.ETHMAP.StatsChans {
				chans.Control <- "<kill>"
			}
			fmt.Printf("IP  routines: %d\n", len(data.IPv4MAP.StatsChans))
			for _, chans := range data.IPv4MAP.StatsChans {
				chans.Control <- "<kill>"
			}
			fmt.Printf("TCP routines: %d\n", len(data.TcpMAP.StatsChans))
			for _, chans := range data.TcpMAP.StatsChans {
				chans.Control <- "<kill>"
			}
			break MAIN

		case <-clock.Clock.DumpChan:

			dumpbegin := time.Now()
			pcapreader.Paused = true
			dump.WriteEthernet(CONFIG, data.ETHMAP)
			dump.WriteIpv4(CONFIG, data.IPv4MAP)
			dump.WriteTcp(CONFIG, data.TcpMAP)
			pcapreader.Paused = false

			if CONFIG["debug"] == "true" {
				fmt.Println("<< END DUMPS ", time.Now().Sub(dumpbegin),
					clock.Clock.Get(), "\n")
			}
		}
	}
	fmt.Println("controler ends, total time:", time.Now().Sub(timebegin))
}