Navdeep Parhar caf20efcde Add support for packet-sniffing tracers to cxgbe(4). This works with
all T4 and T5 based cards and is useful for analyzing TSO, LRO, TOE, and
for general purpose monitoring without tapping any cxgbe or cxl ifnet
directly.

Tracers on the T4/T5 chips provide access to Ethernet frames exactly as
they were received from or transmitted on the wire.  On transmit, a
tracer will capture a frame after TSO segmentation, hw VLAN tag
insertion, hw L3 & L4 checksum insertion, etc.  It will also capture
frames generated by the TCP offload engine (TOE traffic is normally
invisible to the kernel).  On receive, a tracer will capture a frame
before hw VLAN extraction, runt filtering, other badness filtering,
before the steering/drop/L2-rewrite filters or the TOE have had a go at
it, and of course before sw LRO in the driver.

There are 4 tracers on a chip.  A tracer can trace only in one direction
(tx or rx).  For now cxgbetool will set up tracers to capture the first
128B of every transmitted or received frame on a given port.  This is a
small subset of what the hardware can do.  A pseudo ifnet with the same
name as the nexus driver (t4nex0 or t5nex0) will be created for tracing.
The data delivered to this ifnet is an additional copy made inside the
chip.  Normal delivery to cxgbe<n> or cxl<n> will be made as usual.

/* watch cxl0, which is the first port hanging off t5nex0. */
# cxgbetool t5nex0 tracer 0 tx0  (watch what cxl0 is transmitting)
# cxgbetool t5nex0 tracer 1 rx0  (watch what cxl0 is receiving)
# cxgbetool t5nex0 tracer list
# tcpdump -i t5nex0   <== all that cxl0 sees and puts on the wire

If you were doing TSO, a tcpdump on cxl0 may have shown you ~64K
"frames" with no L3/L4 checksum but this will show you the frames that
were actually transmitted.

/* all done */
# cxgbetool t5nex0 tracer 0 disable
# cxgbetool t5nex0 tracer 1 disable
# cxgbetool t5nex0 tracer list
# ifconfig t5nex0 destroy
2013-07-26 22:04:11 +00:00
..
2011-03-11 18:51:42 +00:00
2013-06-25 17:50:48 +00:00
2011-12-30 00:04:11 +00:00
2011-03-11 18:48:28 +00:00
2012-06-05 22:02:27 +00:00
2011-03-11 19:32:15 +00:00
2012-10-10 08:36:38 +00:00
2013-06-15 20:29:07 +00:00
2011-03-11 18:44:16 +00:00
2012-06-25 05:41:16 +00:00
2012-08-30 22:56:32 +00:00
2013-04-12 21:29:37 +00:00

# $FreeBSD$

This directory is for tools.

A tool is something which is sometimes useful, and doesn't fit any of
the other categories.

Please make a subdir per program, and add a brief description to this
file.

ansify		Convert K&R-style function definitions to ANSI style
ath		Tools specific to the Atheros 802.11 support
cfi		Common Flash Interface (CFI) tool
commitsdb	A tool for reconstructing commit history using md5
		checksums of the commit logs.
crypto		Test and exercise tools related to the crypto framework
cxgbetool	A tool for the cxgbe(4) driver.
cxgbtool	A tool for the cxgb(4) driver.
diffburst	OBSOLETE: equivalent functionality is available via split -p.
		For example: "split -p ^diff < patchfile". See split(1).
editing		Editor modes and the like to help editing FreeBSD code.
epfe 		Extract printing filter examples from printing.sgml.
ether_reflect	An Ethernet packet reflector for low level testing.
find-sb		Scan a disk for possible filesystem superblocks.
gdb_regofs	A simple tool that prints out a register offset table
		for mapping gdb(1) register numbers to struct reg and
		struct fpreg offsets. The tool is useful on selected
		platforms only.
genericize	Turn a kernel config into something that can more easily
		be diffed against the appropriate GENERIC.
hcomp		Compress header files by removing comments and whitespace.
html-mv         Rename HTML generated filenames to human readable filenames.
ifinfo		Uses the interface MIB to print out all the information
		an interface exports in an ugly form.
iso             Tool to compare the iso3166 and iso639 files in
		/usr/share/misc with the data from the master sites.
iwi		Tools specific to the Intel PRO/Wireless 2200BG/2225BG/2915ABG
		support.
kdrv		KernelDriver; add/list/remove third-party kernel driver
		source to/in/from a kernel source tree.
kernelcruft	Shellscript to find orphaned *.c files in /sys
kerninclude	Shellscript to find unused #includes in the kernel.
kernxref	Shellscript to cross reference symbols in the LINT kernel.
kttcp		An in-kernel version of the ttcp network performance tool
mctest		A multicast test program
mid	 	Create a Message-ID database for mailing lists.
mwl		Tools specific to the Marvell 88W8363 support
ncpus		Count the number of processors
netmap		Test applications for netmap(4)
notescheck	Check for missing devices and options in NOTES files.
npe		Tools specific to the Intel IXP4XXX NPE device
nxge		A diagnostic tool for the nxge(4) driver
pciid		Generate src/share/misc/pci_vendors.
pciroms		A tool for dumping PCI ROM images. WARNING: alpha quality.
pirtool		A tool for dumping the $PIR table on i386 machines at runtime.
portsinfo 	Generate list of new ports for last two weeks.
prstats		Generate statistics about the PR database.
recoverdisk	Copy as much data as possible from a defective disk.
scsi-defects	Get at the primary or grown defect list of a SCSI disk.
sysdoc		Build a manual page with available sysctls for a specific
		kernel configuration.
tinybsd		Script to build FreeBSD embedded systems.
track		Track the progress of a world / kernel build
vimage		An interim utility for managing the virtualized network
		stack infrastructure.
vop_table	Generates a HTML document that shows all the VOP's in
		the kernel.
vxge		A diagnostic tool for the vxge(4) driver
whereintheworld	Summarizes "make world" output.