Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

CLI リファレンス

wpg バイナリはサーバ (wpg serve) とヘッドレスのツールを兼ねるため、CI や ssh 先での実行にも向いています。例えば wpg send tpl.wpg.yaml -i eth0 --rate 1Mpps でテンプレートを送出します。このページはコマンド定義から自動生成しており、各コードブロックは現行ビルドの --help 出力そのものです。実行時のメッセージは LANG / LC_ALL に従いますが、--help の文面は英語です。

コマンド

wpg

Web Packet Generator

Usage: wpg [OPTIONS] <COMMAND>

Commands:
  serve      Start the web UI / API server
  send       Send a template headlessly
  render     Render a template to a pcapng file without transmitting
  import     Convert a pcap/pcapng capture into a template
  template   Template tools (lint, list, migrate, export, import)
  ifaces     List network interfaces usable for transmission
  doctor     Diagnose privileges, drivers, hugepages and Npcap
  bench      Measure transmit performance
  capture    Receive: counters, the first frames, pcapng output, signature verification
  config     Configuration file tools (init, show, validate) and API tokens
  remote     Drive a running server with an API token (jobs, templates)
  protocols  Protocol tools (list, show, check user-defined protocol files)
  help       Print this message or the help of the given subcommand(s)

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg serve

Start the web UI / API server

Usage: wpg serve [OPTIONS]

Options:
      --bind <BIND>
          Address to listen on (default from the config: 127.0.0.1:8080). Without a password only loopback addresses are accepted (see --allow-insecure)

          [env: WPG_BIND]

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --password <PASSWORD>
          Admin password (plain text or argon2 hash). Visible in the process list: prefer --password-file, `WPG_PASSWORD` or `wpg config set-password`

      --password-file <FILE>
          File holding the admin password (plain text or argon2 hash)

      --tls
          Serve HTTPS; without `[server.tls]` a self-signed certificate is generated into `<data_dir>/tls/`

      --allow-insecure
          Listen on a non-loopback address even though no password is configured (anyone reaching the server can then set it on the setup screen)

      --dev
          Development mode: allow CORS from the Trunk dev server (:8081)

      --library-path <DIR>
          Template library directory (repeatable; replaces `templates.library_paths`)

      --data-dir <DIR>
          Data directory (user templates, history)

  -h, --help
          Print help

  -V, --version
          Print version

wpg send

テンプレートを送出します。--plan は、全フレームを先に展開する (prerender) か、送出しながら組み立てる (onthefly) かを選びます。--json は最終レポートを標準出力に JSON で出します。

Send a template headlessly

Usage: wpg send [OPTIONS] <TEMPLATE>

Arguments:
  <TEMPLATE>
          Template file (`.wpg.yaml`)

Options:
  -i, --iface <IFACE>
          Interface to transmit on

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --backend <BACKEND>
          Transmit backend (null, pcapfile, pcap, afpacket, afxdp, dpdk)

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --count <COUNT>
          Number of packets

      --duration <DURATION>
          Duration limit, e.g. `10s`, `2m`

      --rate <RATE>
          Rate, e.g. `1Mpps`, `10Gbps`, `50%`, `ifg=10us`, `unlimited`

      --burst <BURST>
          Frames sent back to back per rate-control grant

      --wait <MODE>
          How the rate control waits: hybrid (sleep, then spin), sleep, spin or busy-poll (spin and service the backend)

      --clock <CLOCK>
          Rate-control clock: auto (TSC when invariant), tsc or monotonic

          [default: auto]

      --ramp-up <DURATION>
          Ramp the rate up linearly from 0 over this time, e.g. `5s`

      --start-at <TIME>
          Start at this time: RFC 3339 (`2026-09-29T12:00:00Z`) or a delay (`+10s`)

      --plan <PLAN>
          Expansion strategy: auto, prerender or onthefly

          [default: auto]

      --prerender-max-bytes <BYTES>
          `auto` pre-renders only streams up to this many bytes (default: `tx.prerender_max_bytes`, 256 MiB)

      --prerender-max-packets <N>
          `auto` pre-renders only streams up to this many packets (default: `tx.prerender_max_packets`, 100M)

      --json
          Print the final report as JSON on stdout

      --var <NAME=VALUE>
          Template variable override (`name=value`), repeatable; wins over --vars-file

      --vars-file <FILE>
          YAML or JSON map of template variable values

      --set <LAYER.FIELD=VALUE>
          Set a field to a fixed value, repeatable. LAYER is a protocol id, `proto[n]` or a layer index, e.g. `ipv4.ttl=1`

      --gen <LAYER.FIELD=GEN>
          Vary a field with a generator, repeatable, e.g. `udp.src_port=range:1000..1999`, `ipv4.dst=list:10.0.0.1,10.0.0.2`, `ipv4.id=random`

      --signature
          Stamp every frame with a receive-verification signature (magic, stream id, sequence number, TX time over the last 24 payload octets; see `wpg capture --verify`)

      --stream-id <ID>
          Signature stream id (with `--signature`)

          [default: 0]

      --batch <N>
          Frames per `send_batch` call

      --ring-depth <N>
          TX ring depth in frames (`afpacket`)

      --ring-bytes <BYTES>
          Memory of one TX ring / UMEM per worker in bytes (`afpacket`, `afxdp`; default: `tx.ring_bytes`, 16 MiB)

      --pin-core <CORE>
          Pin the TX thread to this CPU core (Linux; the first worker)

      --pin-cores <CORES>
          Pin worker i to the i-th core of this list, e.g. `1,2` (Linux)

      --workers <N>
          TX worker threads, each with its own backend instance (afpacket: socket and ring) and share of the stream and rate

          [default: 1]

      --qdisc-bypass
          Bypass the qdisc layer (`afpacket`, `PACKET_QDISC_BYPASS`)

      --no-tx-ring
          Use `sendmmsg` instead of the TPACKET_V3 TX ring (`afpacket`)

      --auto-pin
          Pin the workers to cores on the NIC's NUMA node, core 0 last (Linux; ignored when --pin-cores is given)

      --queue <N>
          First hardware queue (`afxdp`, `dpdk`; worker i uses queue N+i)

      --xdp-mode <MODE>
          AF_XDP bind mode: auto (zero-copy, else copy), copy or zerocopy

          [default: auto]

      --busy-poll
          Busy polling: `afxdp` sockets busy-poll the driver (kernel 5.11+) and `wpg send` paces with `--wait busy-poll` unless --wait says otherwise

      --eal-args <ARGS>
          DPDK EAL arguments (`dpdk`), e.g. "-a 0000:00:04.0 --file-prefix wpg" (split on whitespace; wpg adds `-l <first CPU>` and `--in-memory` unless given)

  -h, --help
          Print help

  -V, --version
          Print version

wpg render

送出せずに、テンプレートのフレームを pcapng ファイルへ書き出します。

Render a template to a pcapng file without transmitting

Usage: wpg render [OPTIONS] --output <OUTPUT> <TEMPLATE>

Arguments:
  <TEMPLATE>
          Template file

Options:
  -o, --output <OUTPUT>
          Output pcapng file (`-` writes it to standard output)

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --count <COUNT>
          Number of packets

      --var <NAME=VALUE>
          Template variable override (`name=value`), repeatable; wins over --vars-file

      --vars-file <FILE>
          YAML or JSON map of template variable values

      --set <LAYER.FIELD=VALUE>
          Set a field to a fixed value, repeatable. LAYER is a protocol id, `proto[n]` or a layer index, e.g. `ipv4.ttl=1`

      --gen <LAYER.FIELD=GEN>
          Vary a field with a generator, repeatable, e.g. `udp.src_port=range:1000..1999`, `ipv4.dst=list:10.0.0.1,10.0.0.2`, `ipv4.id=random`

      --json
          Print the result (packets, bytes, path) as JSON on stdout

  -h, --help
          Print help

  -V, --version
          Print version

wpg import

キャプチャ (または貼り付けた 16 進) をテンプレートに変換します。pcap からテンプレートへのチュートリアルも参照してください。

Convert a pcap/pcapng capture into a template

Usage: wpg import [OPTIONS] <INPUT>

Arguments:
  <INPUT>
          Input: a `.pcap` / `.pcapng` capture, a hex dump (`.hex`, see `--hex`) or `-` for standard input

Options:
  -o, --output <OUTPUT>
          Output template (`-` prints YAML on standard output)

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --per-packet <DIR>
          Write one template per packet into this directory instead of one merged template

      --first-protocol <PROTOCOL>
          Protocol the frames start with

          [default: ethernet2]

      --max-packets <N>
          Read at most this many packets

      --no-detect-generators
          Do not infer generators (range / list / random) from the packets

      --hex
          Treat the input as pasted hex (Wireshark hex stream, spaced bytes, hexdump)

  -h, --help
          Print help

  -V, --version
          Print version

wpg template

テンプレートのツール。lint はエラー時に終了ステータス 1 を返します。export と import はテンプレートを .wpgbundle アーカイブにまとめ、展開します。

Template tools (lint, list, migrate, export, import)

Usage: wpg template [OPTIONS] <COMMAND>

Commands:
  lint     Check templates for errors and warnings (exit status 3 on errors)
  list     List the templates of a directory (default: `templates/`)
  show     Print the built packet (hex dump and layout tree) of a template
  schema   Print the JSON Schema of the template format
  export   Pack templates (files or ids) into a `.wpgbundle` archive
  migrate  Upgrade templates to the current schema version
  import   Extract the templates of a `.wpgbundle` archive into a directory
  help     Print this message or the help of the given subcommand(s)

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg template lint

Check templates for errors and warnings (exit status 3 on errors)

Usage: wpg template lint [OPTIONS] <FILES>...

Arguments:
  <FILES>...
          Template files

Options:
      --json
          Print the issues as JSON on stdout

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg template list

List the templates of a directory (default: `templates/`)

Usage: wpg template list [OPTIONS] [DIR]

Arguments:
  [DIR]
          Directory to scan recursively

Options:
      --json
          Print the list as JSON on stdout

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg template show

Print the built packet (hex dump and layout tree) of a template

Usage: wpg template show [OPTIONS] <FILE>

Arguments:
  <FILE>
          Template file

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --var <NAME=VALUE>
          Template variable override (`name=value`), repeatable; wins over --vars-file

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --vars-file <FILE>
          YAML or JSON map of template variable values

      --set <LAYER.FIELD=VALUE>
          Set a field to a fixed value, repeatable. LAYER is a protocol id, `proto[n]` or a layer index, e.g. `ipv4.ttl=1`

      --gen <LAYER.FIELD=GEN>
          Vary a field with a generator, repeatable, e.g. `udp.src_port=range:1000..1999`, `ipv4.dst=list:10.0.0.1,10.0.0.2`, `ipv4.id=random`

      --json
          Print the packet (hex, layers, fields) as JSON on stdout

  -h, --help
          Print help

  -V, --version
          Print version

wpg template schema

Print the JSON Schema of the template format

Usage: wpg template schema [OPTIONS]

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg template export

Pack templates (files or ids) into a `.wpgbundle` archive

Usage: wpg template export [OPTIONS] --output <OUTPUT> <TEMPLATES>...

Arguments:
  <TEMPLATES>...
          Template files, or ids (file stem / name slug) looked up in `--dir`

Options:
  -o, --output <OUTPUT>
          Output bundle

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --attach <FILE>
          Attach a capture (pcap / pcapng) or other file, repeatable

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --dir <DIR>
          Template library used to resolve ids (default: `templates/`)

  -h, --help
          Print help

  -V, --version
          Print version

wpg template migrate

Upgrade templates to the current schema version.

Directories are scanned recursively. The original of a rewritten file is kept as `<file>.bak`; the new file loses its comments. Files already at the current version are not touched.

Usage: wpg template migrate [OPTIONS] <PATHS>...

Arguments:
  <PATHS>...
          Template files or directories

Options:
      --check
          Only report outdated templates (exit status 1 if any needs migrating)

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --no-backup
          Do not keep a `.bak` copy of migrated files

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

wpg template import

Extract the templates of a `.wpgbundle` archive into a directory

Usage: wpg template import [OPTIONS] --output <OUTPUT> <BUNDLE>

Arguments:
  <BUNDLE>
          The bundle

Options:
  -o, --output <OUTPUT>
          Output directory

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --force
          Overwrite existing files

  -h, --help
          Print help

  -V, --version
          Print version

wpg ifaces

MAC、アドレス、MTU、リンク状態、ドライバ付きでインタフェースを一覧します。

List network interfaces usable for transmission

Usage: wpg ifaces [OPTIONS]

Options:
      --json
          Output JSON

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg doctor

権限設定にある環境チェックを実行します。チェックが fail のとき終了ステータスは 0 以外です。

Diagnose privileges, drivers, hugepages and Npcap

Usage: wpg doctor [OPTIONS]

Options:
      --json
          Output JSON

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg bench

合成フレーム (EtherType 0x88b5)、または --template で指定したテンプレートをレート無制限で送出します。ベースラインは docs/perf.md を参照。--json の項目: backend、detail、iface、frame_size、batch_size、packets、dropped、pps、bps (L2)、l1_bps、elapsed。

Measure transmit performance

Usage: wpg bench [OPTIONS]

Options:
      --backend <BACKEND>
          Backend to benchmark

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -i, --iface <IFACE>
          Interface (for real backends)

      --duration <DURATION>
          Duration in seconds

          [default: 5]

      --frame-size <FRAME_SIZE>
          Frame size in bytes (without FCS)

          [default: 64]

      --template <FILE>
          Benchmark on-the-fly generation of this template instead of a fixed frame

      --var <NAME=VALUE>
          Template variable override (`name=value`), repeatable; wins over --vars-file

      --vars-file <FILE>
          YAML or JSON map of template variable values

      --set <LAYER.FIELD=VALUE>
          Set a field to a fixed value, repeatable. LAYER is a protocol id, `proto[n]` or a layer index, e.g. `ipv4.ttl=1`

      --gen <LAYER.FIELD=GEN>
          Vary a field with a generator, repeatable, e.g. `udp.src_port=range:1000..1999`, `ipv4.dst=list:10.0.0.1,10.0.0.2`, `ipv4.id=random`

      --json
          Output JSON

      --batch <N>
          Frames per `send_batch` call

      --ring-depth <N>
          TX ring depth in frames (`afpacket`)

      --ring-bytes <BYTES>
          Memory of one TX ring / UMEM per worker in bytes (`afpacket`, `afxdp`; default: `tx.ring_bytes`, 16 MiB)

      --pin-core <CORE>
          Pin the TX thread to this CPU core (Linux; the first worker)

      --pin-cores <CORES>
          Pin worker i to the i-th core of this list, e.g. `1,2` (Linux)

      --workers <N>
          TX worker threads, each with its own backend instance (afpacket: socket and ring) and share of the stream and rate

          [default: 1]

      --qdisc-bypass
          Bypass the qdisc layer (`afpacket`, `PACKET_QDISC_BYPASS`)

      --no-tx-ring
          Use `sendmmsg` instead of the TPACKET_V3 TX ring (`afpacket`)

      --auto-pin
          Pin the workers to cores on the NIC's NUMA node, core 0 last (Linux; ignored when --pin-cores is given)

      --queue <N>
          First hardware queue (`afxdp`, `dpdk`; worker i uses queue N+i)

      --xdp-mode <MODE>
          AF_XDP bind mode: auto (zero-copy, else copy), copy or zerocopy

          [default: auto]

      --busy-poll
          Busy polling: `afxdp` sockets busy-poll the driver (kernel 5.11+) and `wpg send` paces with `--wait busy-poll` unless --wait says otherwise

      --eal-args <ARGS>
          DPDK EAL arguments (`dpdk`), e.g. "-a 0000:00:04.0 --file-prefix wpg" (split on whitespace; wpg adds `-l <first CPU>` and `--in-memory` unless given)

  -h, --help
          Print help

  -V, --version
          Print version

wpg capture

Receive: counters, the first frames, pcapng output, signature verification

Usage: wpg capture [OPTIONS]

Options:
  -i, --iface <IFACE>
          Interface to receive on (`any` = every interface with `afpacket`); for the `pcapfile` backend the capture file to replay

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --backend <BACKEND>
          Receive backend: afpacket (Linux), pcap (feature `pcap`), pcapfile, null

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -f, --filter <EXPR>
          tcpdump-style filter, e.g. `udp port 5001 and wpg` (default: every frame)

  -c, --count <COUNT>
          Stop after this many matching frames

      --duration <DURATION>
          Stop after this long, e.g. `10s`

      --show <N>
          Print the first N matching frames

          [default: 5]

      --hex
          Also print a hex dump of the shown frames

  -w, --write <FILE>
          Write the matching frames to this pcapng file

      --verify
          Check the signatures stamped by `wpg send --signature` (loss / order / latency)

      --promisc
          Promiscuous mode

      --include-outgoing
          Also count frames this host transmits

      --json
          Machine-readable output

  -h, --help
          Print help

  -V, --version
          Print version

wpg config

wpg.toml のツール。設定リファレンスを参照してください。

Configuration file tools (init, show, validate) and API tokens

Usage: wpg config [OPTIONS] <COMMAND>

Commands:
  init          Write a fully commented example `wpg.toml`
  show          Print the effective configuration (file + environment) as TOML, secrets redacted
  validate      Check the configuration; exit status 1 on errors
  set-password  Prompt for the admin password and store its argon2id hash as `auth.password_hash` (the file is created from the example if missing)
  token         API tokens for scripts and `wpg remote` (create, list, revoke), stored in the server's database
  help          Print this message or the help of the given subcommand(s)

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg config init

Write a fully commented example `wpg.toml`

Usage: wpg config init [OPTIONS]

Options:
      --path <FILE>
          Output file

          [default: wpg.toml]

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --force
          Overwrite an existing file

  -h, --help
          Print help

  -V, --version
          Print version

wpg config show

Print the effective configuration (file + environment) as TOML, secrets redacted

Usage: wpg config show [OPTIONS]

Options:
      --config <FILE>
          Configuration file (default: `wpg.toml` if present)

          [env: WPG_CONFIG]

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

  -h, --help
          Print help

  -V, --version
          Print version

wpg config validate

Check the configuration; exit status 1 on errors

Usage: wpg config validate [OPTIONS]

Options:
      --config <FILE>
          Configuration file (default: `wpg.toml` if present)

          [env: WPG_CONFIG]

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

  -h, --help
          Print help

  -V, --version
          Print version

wpg config set-password

Prompt for the admin password and store its argon2id hash as `auth.password_hash` (the file is created from the example if missing)

Usage: wpg config set-password [OPTIONS]

Options:
      --config <FILE>
          Configuration file to update

          [env: WPG_CONFIG]
          [default: wpg.toml]

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --stdin
          Read the password from the first line of standard input (no prompt)

  -h, --help
          Print help

  -V, --version
          Print version

wpg config token

サーバのデータベース (<data_dir>/wpg.sqlite) の API トークンを直接管理します。サーバの稼働中でも使えます。create は標準出力にトークンだけを出力します。

API tokens for scripts and `wpg remote` (create, list, revoke), stored in the server's database

Usage: wpg config token [OPTIONS] <COMMAND>

Commands:
  create  Create a token and print its secret (shown only once)
  list    List the tokens (never their secrets)
  revoke  Revoke (delete) a token by id
  help    Print this message or the help of the given subcommand(s)

Options:
      --data-dir <DIR>
          Data directory holding `wpg.sqlite` (default: `data_dir` of the configuration)

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg config token create

Create a token and print its secret (shown only once)

Usage: wpg config token create [OPTIONS] <NAME>

Arguments:
  <NAME>
          Name, to recognise the token later

Options:
      --data-dir <DIR>
          Data directory holding `wpg.sqlite` (default: `data_dir` of the configuration)

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --user <USER>
          User the token acts as (with that user's role)

          [default: admin]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --expires-days <DAYS>
          Expire after this many days (default: never)

      --json
          Print the token and its secret as JSON

  -h, --help
          Print help

  -V, --version
          Print version

wpg config token list

List the tokens (never their secrets)

Usage: wpg config token list [OPTIONS]

Options:
      --data-dir <DIR>
          Data directory holding `wpg.sqlite` (default: `data_dir` of the configuration)

      --json
          Print JSON

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg config token revoke

Revoke (delete) a token by id

Usage: wpg config token revoke [OPTIONS] <ID>

Arguments:
  <ID>
          Token id (see `wpg config token list`)

Options:
      --data-dir <DIR>
          Data directory holding `wpg.sqlite` (default: `data_dir` of the configuration)

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg remote

API トークンを使い、稼働中のサーバを API 経由で操作します。認証と TLS を参照してください。終了ステータス: 0 成功、1 ジョブが失敗 (jobs wait、jobs start --wait)、2 その他のエラー。

Drive a running server with an API token (jobs, templates)

Usage: wpg remote [OPTIONS] <COMMAND>

Commands:
  jobs       Transmit jobs: list, start, stop, wait
  templates  The server's template library: list, push
  help       Print this message or the help of the given subcommand(s)

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --server <URL>
          Server URL

          [env: WPG_SERVER]
          [default: http://127.0.0.1:8080]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --token <TOKEN>
          API token (`wpg_...`). Visible in the process list: prefer `WPG_TOKEN`

          [env: WPG_TOKEN]

      --insecure
          Accept any TLS certificate (for servers with a self-signed certificate)

      --json
          Print the server's JSON responses

  -h, --help
          Print help

  -V, --version
          Print version

wpg remote jobs

Transmit jobs: list, start, stop, wait

Usage: wpg remote jobs [OPTIONS] <COMMAND>

Commands:
  list   List the server's jobs (running and recently finished)
  start  Start a job from a library template id or a local template file; prints the job id
  stop   Stop a job
  wait   Wait until a job ends; exit status 1 if it failed
  help   Print this message or the help of the given subcommand(s)

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --server <URL>
          Server URL

          [env: WPG_SERVER]
          [default: http://127.0.0.1:8080]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --token <TOKEN>
          API token (`wpg_...`). Visible in the process list: prefer `WPG_TOKEN`

          [env: WPG_TOKEN]

      --insecure
          Accept any TLS certificate (for servers with a self-signed certificate)

      --json
          Print the server's JSON responses

  -h, --help
          Print help

  -V, --version
          Print version

wpg remote jobs list

List the server's jobs (running and recently finished)

Usage: wpg remote jobs list [OPTIONS]

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --server <URL>
          Server URL

          [env: WPG_SERVER]
          [default: http://127.0.0.1:8080]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --token <TOKEN>
          API token (`wpg_...`). Visible in the process list: prefer `WPG_TOKEN`

          [env: WPG_TOKEN]

      --insecure
          Accept any TLS certificate (for servers with a self-signed certificate)

      --json
          Print the server's JSON responses

  -h, --help
          Print help

  -V, --version
          Print version

wpg remote jobs start

Start a job from a library template id or a local template file; prints the job id

Usage: wpg remote jobs start [OPTIONS] <TEMPLATE>

Arguments:
  <TEMPLATE>
          Template id on the server, or a local `.wpg.yaml` file sent with the job

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --server <URL>
          Server URL

          [env: WPG_SERVER]
          [default: http://127.0.0.1:8080]

      --var <NAME=VALUE>
          Template variable value (repeatable)

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --rate <RATE>
          Rate, e.g. `1000pps`, `1Mpps`, `10Gbps`, `unlimited`

      --token <TOKEN>
          API token (`wpg_...`). Visible in the process list: prefer `WPG_TOKEN`

          [env: WPG_TOKEN]

      --count <COUNT>
          Number of packets

      --insecure
          Accept any TLS certificate (for servers with a self-signed certificate)

      --duration <DURATION>
          Duration limit, e.g. `10s`, `2m`

      --json
          Print the server's JSON responses

  -i, --iface <IFACE>
          Interface on the server

      --backend <BACKEND>
          Transmit backend (default: the server's)

      --name <NAME>
          Job name

      --wait
          Wait until the job ends (like `wpg remote jobs wait`)

  -h, --help
          Print help

  -V, --version
          Print version

wpg remote jobs stop

Stop a job

Usage: wpg remote jobs stop [OPTIONS] <ID>

Arguments:
  <ID>
          Job id

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --server <URL>
          Server URL

          [env: WPG_SERVER]
          [default: http://127.0.0.1:8080]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --token <TOKEN>
          API token (`wpg_...`). Visible in the process list: prefer `WPG_TOKEN`

          [env: WPG_TOKEN]

      --insecure
          Accept any TLS certificate (for servers with a self-signed certificate)

      --json
          Print the server's JSON responses

  -h, --help
          Print help

  -V, --version
          Print version

wpg remote jobs wait

Wait until a job ends; exit status 1 if it failed

Usage: wpg remote jobs wait [OPTIONS] <ID>

Arguments:
  <ID>
          Job id

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --server <URL>
          Server URL

          [env: WPG_SERVER]
          [default: http://127.0.0.1:8080]

      --timeout <SECS>
          Give up after this many seconds (exit status 2)

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --token <TOKEN>
          API token (`wpg_...`). Visible in the process list: prefer `WPG_TOKEN`

          [env: WPG_TOKEN]

      --insecure
          Accept any TLS certificate (for servers with a self-signed certificate)

      --json
          Print the server's JSON responses

  -h, --help
          Print help

  -V, --version
          Print version

wpg remote templates

The server's template library: list, push

Usage: wpg remote templates [OPTIONS] <COMMAND>

Commands:
  list  List the templates on the server
  push  Upload a template file to the server's user templates; prints its id
  help  Print this message or the help of the given subcommand(s)

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --server <URL>
          Server URL

          [env: WPG_SERVER]
          [default: http://127.0.0.1:8080]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --token <TOKEN>
          API token (`wpg_...`). Visible in the process list: prefer `WPG_TOKEN`

          [env: WPG_TOKEN]

      --insecure
          Accept any TLS certificate (for servers with a self-signed certificate)

      --json
          Print the server's JSON responses

  -h, --help
          Print help

  -V, --version
          Print version

wpg remote templates list

List the templates on the server

Usage: wpg remote templates list [OPTIONS]

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --server <URL>
          Server URL

          [env: WPG_SERVER]
          [default: http://127.0.0.1:8080]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --token <TOKEN>
          API token (`wpg_...`). Visible in the process list: prefer `WPG_TOKEN`

          [env: WPG_TOKEN]

      --insecure
          Accept any TLS certificate (for servers with a self-signed certificate)

      --json
          Print the server's JSON responses

  -h, --help
          Print help

  -V, --version
          Print version

wpg remote templates push

Upload a template file to the server's user templates; prints its id

Usage: wpg remote templates push [OPTIONS] <FILE>

Arguments:
  <FILE>
          Template file (`.wpg.yaml`)

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --server <URL>
          Server URL

          [env: WPG_SERVER]
          [default: http://127.0.0.1:8080]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

      --token <TOKEN>
          API token (`wpg_...`). Visible in the process list: prefer `WPG_TOKEN`

          [env: WPG_TOKEN]

      --insecure
          Accept any TLS certificate (for servers with a self-signed certificate)

      --json
          Print the server's JSON responses

  -h, --help
          Print help

  -V, --version
          Print version

wpg protocols

Protocol tools (list, show, check user-defined protocol files)

Usage: wpg protocols [OPTIONS] <COMMAND>

Commands:
  list   List the protocols: built-in ones and those of `--protocols-dir`
  show   Print a protocol definition, as an extension file to start a new protocol from (change its `id` first)
  check  Check user-defined protocol files (exit status 1 on errors)
  help   Print this message or the help of the given subcommand(s)

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg protocols list

List the protocols: built-in ones and those of `--protocols-dir`

Usage: wpg protocols list [OPTIONS]

Options:
      --json
          Output JSON

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg protocols show

Print a protocol definition, as an extension file to start a new protocol from (change its `id` first)

Usage: wpg protocols show [OPTIONS] <ID>

Arguments:
  <ID>
          Protocol id (`udp`, `ipv4`, ...)

Options:
      --json
          Output the definition as JSON instead of YAML

      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help

  -V, --version
          Print version

wpg protocols check

Check user-defined protocol files (exit status 1 on errors).

The files are checked together, with the built-in protocols and the other files of `--protocols-dir`.

Usage: wpg protocols check [OPTIONS] <PATHS>...

Arguments:
  <PATHS>...
          Extension files (`*.yaml`) or directories holding them

Options:
      --protocols-dir <DIR>
          Directory of user-defined protocol files (`*.yaml`, repeatable; added to `[protocols] dirs` of the configuration)

          [env: WPG_PROTOCOLS_DIR]

      --config <FILE>
          Configuration file (default: `wpg.toml` in the working directory, if any). `wpg send` also takes its default backend and rate limit from `[tx]`

          [env: WPG_CONFIG]

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version