Provided by: stenographer_0.0~git20190917.0.3545c54-1ubuntu0.2_amd64 bug

NAME

       stenotype - dump raw packets to disk

SYNOPSIS

       stenotype [-qv?] [--aiops=NUM] [--blocks=NUM] [--count=NUM]
                 [--dir=STRING] [--fanout_id=NUM] [--fanout_type=NUM]
                 [--fileage_sec=NUM] [--filesize_mb=NUM] [--filter=STRING]
                 [--gid=NUM] [--iface=STRING] [--index_nicelevel=NUM] [--no_index]
                 [--no_watchdogs] [--preallocate_file_mb=NUM] [--seccomp=STRING]
                 [--threads=NUM] [--uid=NUM] [--help] [--usage]

DESCRIPTION

       Stenotype  is a mechanism for quickly dumping raw packets to disk. It aims to have a simple interface (no
       file rotation: that's left as an exercise for the reader) while being very powerful.

       stenotype uses a NIC->disk pipeline specifically designed to  provide  as  fast  an  output  to  disk  as
       possible while just using the kernel's built-in mechanisms.

       1.  NIC  ->  RAM:  stenotype  uses MMAP'd AF_PACKET with 1MB blocks and a high timeout to offload writing
           packets and deciding their layout to the kernel. The kernel packs all the packets it  can  into  1MB,
           then  lets the userspace process know there's a block available in the MMAP'd ring buffer. Nicely, it
           guarantees no overruns (packets crossing the 1MB boundary) and good alignment to memory pages.

       2.  RAM -> Disk: Since the kernel already gave us a single 1MB block of packets that's nicely aligned, we
           can  O_DIRECT  write  it straight to disk. This avoids any additional copying or kernel buffering. To
           keep sequential reads going strong, we do all disk  IO  asynchronously  via  io_submit  (which  works
           specifically  for O_DIRECT files... joy!). Since the data is being written to disk asynchronously, we
           use the time it's writing to disk to do our own in-memory processing and indexing.

       There are N (flag-specified) async IO operations available... once we've used up all N,  we  block  on  a
       used one finishing, then reuse it. The whole pipeline consists of:

              •  kernel gives userspace a 1MB block of packets

              •  userspace iterates over packets in block, updates any indexes

              •  userspace starts async IO operation to write block to disk

              •  after  N  async  IO operations are submitted, we synchronously wait for the least recent one to
                 finish.

              •  when an async IO operation finishes, we release the 1MB block back to the kernel to write  more
                 packets.

OPTIONS

       --aiops=NUM
              Max number of async IO operations

       --blocks=NUM
              Total number of blocks to use, each is 1MB

       --count=NUM
              Total number of packets to read, -1 to read forever

       --dir=STRING
              Directory to store packet files in

       --fanout_id=NUM
              If fanning out across processes, set this

       --fanout_type=NUM
              TPACKET_V3 fanout type to fanout packets

       --fileage_sec=NUM
              Files older than this many secs are rotated

       --filesize_mb=NUM
              Max file size in MB before file is rotated

       --filter=STRING
              BPF  compiled  filter used to filter which packets will be captured. This has to be a compiled BPF
              in hexadecimal, which can be obtained from a human readable filter expression using  the  provided
              compile_bpf.sh script.

       --gid=NUM
              Drop privileges to this group

       --iface=STRING
              Interface to read packets from

       --index_nicelevel=NUM
              Nice level of indexing threads

       --no_index
              Do not compute or write indexes

       --no_watchdogs
              Don't start any watchdogs

       --preallocate_file_mb=NUM
              When creating new files, preallocate to this many MB

       -q     Quiet logging.  Each -q counteracts one -v

       --seccomp=STRING
              Seccomp style, one of 'none', 'trace', 'kill'.

       --threads=NUM
              Number of parallel threads to read packets with

       --uid=NUM
              Drop privileges to this user

       -v     Verbose logging, may be given multiple times

       -?, --help
              Give this help list

       --usage
              Give a short usage message