// Copyright 2018 The GoPacket Authors. All rights reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree.

/*
Package pcapgo provides some native PCAP support, not requiring C libpcap to be installed.

# Overview

This package contains implementations for native PCAP support. Currently supported are

  - pcap-files read/write: Reader, Writer
  - pcapng-files read/write: NgReader, NgWriter
  - raw socket capture (linux only): EthernetHandle

# Basic Usage pcapng

Pcapng files can be read and written. Reading supports both big and little endian files, packet blocks,
simple packet blocks, enhanced packets blocks, interface blocks, and interface statistics blocks. All
the options also by Wireshark are supported. The default reader options match libpcap behaviour. Have
a look at NgReaderOptions for more advanced usage. Both ReadPacketData and ZeroCopyReadPacketData is
supported (which means PacketDataSource and ZeroCopyPacketDataSource is supported).

	f, err := os.Open("somefile.pcapng")
	if err != nil {
		...
	}
	defer f.Close()

	r, err := NewNgReader(f, DefaultNgReaderOptions)
	if err != nil {
		...
	}

	data, ci, err := r.ReadPacketData()
	...

Write supports only little endian, enhanced packets blocks, interface blocks, and interface statistics
blocks. The same options as with writing are supported. Interface timestamp resolution is fixed to
10^-9s to match time.Time. Any other values are ignored. Upon creating a writer, a section, and an
interface block is automatically written. Additional interfaces can be added at any time. Since
the writer uses a bufio.Writer internally, Flush must be called before closing the file! Have a look
at NewNgWriterInterface for more advanced usage.

	f, err := os.Create("somefile.pcapng")
	if err != nil {
		...
	}
	defer f.Close()

	r, err = NewNgWriter(f, layers.LinkTypeEthernet)
	if err != nil {
		...
	}
	defer r.Flush()

	err = r.WritePacket(ci, data)
	...
*/
package pcapgo
