269 lines
6.6 KiB
Markdown
269 lines
6.6 KiB
Markdown
# Payload Replay Scripts
|
||
|
||
本目录提供基于本地 payload archive 的手工 replay 入口。
|
||
|
||
## `multi_rir_case_info.py`
|
||
|
||
用于从 multi-RIR bundle 中解析指定 `rir` 的输入路径、对照 CSV、fixture、以及 Routinator replay timing 基线。
|
||
|
||
示例:
|
||
|
||
```bash
|
||
python3 scripts/payload_replay/multi_rir_case_info.py \
|
||
--bundle-root ../../rpki/target/live/20260316-112341-multi-final3 \
|
||
--rir afrinic
|
||
```
|
||
|
||
也支持输出 shell 环境变量:
|
||
|
||
```bash
|
||
python3 scripts/payload_replay/multi_rir_case_info.py \
|
||
--bundle-root ../../rpki/target/live/20260316-112341-multi-final3 \
|
||
--rir afrinic \
|
||
--format env
|
||
```
|
||
|
||
## `run_multi_rir_replay_case.sh`
|
||
|
||
统一的 multi-RIR 入口。给定 `rir` 和模式后,它会自动选择该 RIR 的:
|
||
|
||
- snapshot/base replay 输入
|
||
- delta replay 输入
|
||
- 对照 CSV
|
||
- TAL / TA fixture
|
||
- trust anchor 名称
|
||
|
||
用法:
|
||
|
||
```bash
|
||
./scripts/payload_replay/run_multi_rir_replay_case.sh <rir> [describe|snapshot|delta|both]
|
||
```
|
||
|
||
示例:
|
||
|
||
```bash
|
||
./scripts/payload_replay/run_multi_rir_replay_case.sh afrinic describe
|
||
./scripts/payload_replay/run_multi_rir_replay_case.sh lacnic snapshot
|
||
./scripts/payload_replay/run_multi_rir_replay_case.sh arin delta
|
||
./scripts/payload_replay/run_multi_rir_replay_case.sh ripe both
|
||
```
|
||
|
||
|
||
脚本会自动:
|
||
|
||
- 从 multi-RIR bundle 中选择指定 RIR 的 snapshot/base 与 delta 输入
|
||
- 读取该 RIR 的 Routinator `base-replay` / `delta-replay` timing 基线
|
||
- 优先使用 `base-locks.json.validationTime` 与 `locks-delta.json.validationTime` 作为 replay `--validation-time`;若缺失才回退到 `timings/base-replay.json` 与 `timings/delta-replay.json` 的 `startedAt`
|
||
- 在 `target/live/multi_rir_replay_runs/<rir>/` 下生成:
|
||
- snapshot replay 产物
|
||
- delta replay 产物
|
||
- per-RIR 合并 case report(含 correctness + timing compare)
|
||
|
||
默认 bundle 根目录为:
|
||
|
||
- `../../rpki/target/live/20260316-112341-multi-final3`
|
||
|
||
也可以通过 `BUNDLE_ROOT` 覆盖。
|
||
|
||
## `run_apnic_snapshot_replay_profile.sh`
|
||
|
||
基于 multi-RIR bundle 中的 APNIC snapshot 输入,使用当前 replay 主流程执行一次带 `--analyze` 和 `--profile-cpu` 的离线 profile。
|
||
|
||
```bash
|
||
./scripts/payload_replay/run_apnic_snapshot_replay_profile.sh
|
||
```
|
||
|
||
作用:
|
||
|
||
- 使用 `APNIC` 的 snapshot/base replay 输入
|
||
- 自动开启:
|
||
- `--analyze`
|
||
- `--profile-cpu`
|
||
- 自动记录:
|
||
- replay wall-clock 时长
|
||
- Routinator baseline (`base-replay`)
|
||
- analyze 目录路径
|
||
- 生成:
|
||
- `report.json`
|
||
- `run.log`
|
||
- `meta.json`
|
||
- `summary.md`
|
||
- 以及 `target/live/analyze/<timestamp>/` 下的:
|
||
- `timing.json`
|
||
- `flamegraph.svg`
|
||
- `pprof.pb.gz`
|
||
|
||
支持:
|
||
|
||
- `DRY_RUN=1`:只打印命令,不真正执行
|
||
- `MAX_DEPTH` / `MAX_INSTANCES`:用于限定 replay 范围
|
||
- `PROFILE_RUN_ROOT`:覆盖 wrapper 产物输出目录
|
||
|
||
## `run_apnic_replay.sh`
|
||
|
||
默认使用:
|
||
|
||
- `tests/fixtures/tal/apnic-rfc7730-https.tal`
|
||
- `tests/fixtures/ta/apnic-ta.cer`
|
||
- `target/live/payload_replay/payload-archive`
|
||
- `target/live/payload_replay/locks.json`
|
||
|
||
运行:
|
||
|
||
```bash
|
||
./scripts/payload_replay/run_apnic_replay.sh
|
||
```
|
||
|
||
产物默认输出到:
|
||
|
||
- `target/live/payload_replay_runs/`
|
||
|
||
包含:
|
||
|
||
- replay DB 目录
|
||
- `report.json`
|
||
- `run.log`
|
||
- `meta.json`
|
||
- `summary.md`
|
||
|
||
## 环境变量
|
||
|
||
可覆盖:
|
||
|
||
- `TAL_PATH`
|
||
- `TA_PATH`
|
||
- `PAYLOAD_REPLAY_ARCHIVE`
|
||
- `PAYLOAD_REPLAY_LOCKS`
|
||
- `VALIDATION_TIME`
|
||
- `MAX_DEPTH`
|
||
- `MAX_INSTANCES`
|
||
- `OUT_DIR`
|
||
- `RUN_NAME`
|
||
- `DB_DIR`
|
||
- `REPORT_JSON`
|
||
- `RUN_LOG`
|
||
- `META_JSON`
|
||
- `SUMMARY_MD`
|
||
|
||
## 说明
|
||
|
||
- 该脚本依赖 `rpki` CLI 已支持:
|
||
- `--payload-replay-archive`
|
||
- `--payload-replay-locks`
|
||
- replay 模式必须搭配离线 TAL/TA 输入,不会去访问真实 RRDP / rsync 网络源。
|
||
|
||
## `report_to_routinator_csv.py`
|
||
|
||
把 `rpki` 生成的 `report.json` 转成 Routinator 风格的 VRP CSV:
|
||
|
||
```bash
|
||
python3 scripts/payload_replay/report_to_routinator_csv.py \
|
||
--report target/live/payload_replay_runs/<run>_report.json \
|
||
--out target/live/payload_replay_runs/<run>_vrps.csv \
|
||
--trust-anchor apnic
|
||
```
|
||
|
||
输出列为:
|
||
|
||
- `ASN`
|
||
- `IP Prefix`
|
||
- `Max Length`
|
||
- `Trust Anchor`
|
||
|
||
## `compare_with_routinator_record.sh`
|
||
|
||
把 ours 生成的 VRP CSV 与 Routinator 的 `record.csv` 做对比:
|
||
|
||
```bash
|
||
./scripts/payload_replay/compare_with_routinator_record.sh \
|
||
target/live/payload_replay_runs/<run>_vrps.csv \
|
||
target/live/payload_replay/record.csv
|
||
```
|
||
|
||
会产出:
|
||
|
||
- compare summary Markdown
|
||
- `only_in_ours.csv`
|
||
- `only_in_record.csv`
|
||
|
||
## `run_apnic_replay.sh` 现有额外产物
|
||
|
||
脚本现在除了 `report/meta/summary`,还会额外生成:
|
||
|
||
- `vrps.csv`
|
||
- 若 `ROUTINATOR_RECORD_CSV` 存在,则生成:
|
||
- compare summary
|
||
- `only_in_ours.csv`
|
||
- `only_in_record.csv`
|
||
|
||
## `run_apnic_delta_replay.sh`
|
||
|
||
使用 APNIC delta demo 数据集运行 base + delta replay:
|
||
|
||
```bash
|
||
./scripts/payload_replay/run_apnic_delta_replay.sh
|
||
```
|
||
|
||
默认输入:
|
||
|
||
- `target/live/apnic_delta_demo/20260315-170223-autoplay/base-payload-archive`
|
||
- `target/live/apnic_delta_demo/20260315-170223-autoplay/base-locks.json`
|
||
- `target/live/apnic_delta_demo/20260315-170223-autoplay/payload-delta-archive`
|
||
- `target/live/apnic_delta_demo/20260315-170223-autoplay/locks-delta.json`
|
||
- `tests/fixtures/tal/apnic-rfc7730-https.tal`
|
||
- `tests/fixtures/ta/apnic-ta.cer`
|
||
|
||
输出目录默认:`target/live/payload_delta_replay_runs/`
|
||
|
||
## `run_apnic_delta_replay.sh` compare outputs
|
||
|
||
脚本现在在 delta replay 结束后还会额外生成:
|
||
|
||
- `vrps.csv`
|
||
- compare summary Markdown
|
||
- `only_in_ours.csv`
|
||
- `only_in_record.csv`
|
||
|
||
默认 compare 输入是:
|
||
|
||
- `target/live/apnic_delta_demo/20260315-170223-autoplay/record-delta.csv`
|
||
|
||
也可以通过环境变量覆盖:
|
||
|
||
- `TRUST_ANCHOR`
|
||
- `ROUTINATOR_RECORD_CSV`
|
||
- `VRPS_CSV`
|
||
- `COMPARE_SUMMARY_MD`
|
||
- `ONLY_IN_OURS_CSV`
|
||
- `ONLY_IN_RECORD_CSV`
|
||
|
||
## `write_multi_rir_case_report.py`
|
||
|
||
把某个 RIR 的 snapshot replay 与 delta replay 的 `meta.json`、compare summary 以及 Routinator timing 基线合并成一个 per-RIR Markdown/JSON 报告。
|
||
|
||
该脚本通常由 `run_multi_rir_replay_case.sh <rir> both` 自动调用。
|
||
|
||
## `run_multi_rir_replay_suite.sh`
|
||
|
||
顺序执行 5 个 RIR(或环境变量 `RIRS` 指定的子集)的 `both` 模式,并最终生成 multi-RIR 汇总报告。
|
||
|
||
```bash
|
||
./scripts/payload_replay/run_multi_rir_replay_suite.sh
|
||
```
|
||
|
||
可覆盖环境变量:
|
||
|
||
- `BUNDLE_ROOT`
|
||
- `SUITE_OUT_DIR`
|
||
- `RIRS`
|
||
|
||
最终输出:
|
||
|
||
- `<suite_out_dir>/<rir>/<rir>_case_report.md`
|
||
- `<suite_out_dir>/multi_rir_summary.md`
|
||
- `<suite_out_dir>/multi_rir_summary.json`
|
||
|
||
## `write_multi_rir_summary.py`
|
||
|
||
汇总 5 个 RIR 的 per-RIR case report,生成 correctness + timing 总表与几何平均比值。
|