# 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 [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 基线 - 使用该 RIR `timings/base-replay.json` 与 `timings/delta-replay.json` 的 `startedAt` 作为 replay `--validation-time` - 在 `target/live/multi_rir_replay_runs//` 下生成: - snapshot replay 产物 - delta replay 产物 - per-RIR 合并 case report(含 correctness + timing compare) 默认 bundle 根目录为: - `../../rpki/target/live/20260316-112341-multi-final3` 也可以通过 `BUNDLE_ROOT` 覆盖。 ## `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/_report.json \ --out target/live/payload_replay_runs/_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/_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 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` 最终输出: - `//_case_report.md` - `/multi_rir_summary.md` - `/multi_rir_summary.json` ## `write_multi_rir_summary.py` 汇总 5 个 RIR 的 per-RIR case report,生成 correctness + timing 总表与几何平均比值。