Mapping every active AS-path across the ASNs homed in Melanesia, Polynesia, and Micronesia — the APNIC-covered Oceania economies, excluding Australia and New Zealand, excluding Hawaii, including Guam.
The project triangulates public BGP route data (RIPEstat, PeeringDB) with
active measurement (RIPE Atlas traceroutes) to surface peering
relationships, IXP routing, and sub-optimal transpacific paths, on a
recurring update cycle. See GOALS.md for the full project
brief and task_plan.md for phase-by-phase build history,
methodology, and every finding as it was made.
Two ASN-to-ASN adjacencies are confirmed by both RIS and live Atlas
traceroutes (this project's bar for a real finding — see "Validation
Rules" in task_plan.md), and both show Pacific-to-Pacific traffic
detouring through Australia rather than staying in-region:
- Guam → Papua New Guinea (AS17828, PNG DataCo): traceroute hits the exact IP PeeringDB records for AS17828's Equinix Sydney port before reaching PNG DataCo's own network.
- New Caledonia → Fiji (AS4638, Telecom Fiji): traceroute transits MegaIX Sydney before reaching Telecom Fiji's international ASN.
A 30-exchange IXP registry (data/analysis/ixp_lan_registry.json, built
by pacific-peering-ixp-lan-registry) classifies every IXP this project
has seen as in- or out-of-fishbowl — every classification is an explicit
human confirmation, never auto-inferred (see task_plan.md's governance
rule). Current status: 10 in-fishbowl, 20 out-of-fishbowl, 0 unconfirmed.
src/pacific_peering/
├── discovery/ # ASN/economy discovery, APNIC + PeeringDB lookups
├── ris/ # RIPEstat ingestion: ASPATHs, IP-to-ASN resolution
├── atlas/ # RIPE Atlas traceroute measurements (in/outbound)
├── analysis/ # neighbor inference, IXP LAN registry, triangulation,
│ # feasibility checks, confirmed findings
├── viz/ # geographic + AS-graph visualizations
├── reports/ # ASCII / HTML report generation
└── pipeline.py # recurring orchestrator (discovery -> fishbowl -> IXP registry)
data/ # raw + derived data (gitignored, regenerated by the pipeline)
outputs/
├── runs/ # versioned pipeline-run manifests (tracked in git)
├── viz/ # generated charts (gitignored)
└── reports/ # generated ASCII/HTML reports (gitignored)
This project uses uv for Python packaging.
uv syncRIPEstat, PeeringDB, and APNIC's stats file are all public, unauthenticated
APIs — most of this project needs no credentials. RIPE Atlas measurements
need an API key in a gitignored secrets.yaml (ripe_atlas_key: <key>)
at the repo root.
Run the recurring, free-API pipeline (ASN discovery → fish bowl → IXP LAN registry) end to end:
uv run pacific-peering-pipelineThis deliberately does not fire RIPE Atlas measurements — those cost real account credits and need a human choosing which AS pairs matter, so they stay a separate, manual step:
uv run pacific-peering-atlas-smoketest # outbound traceroute
uv run pacific-peering-atlas-inbound-smoketest # inbound traceroute
uv run pacific-peering-atlas-coverage # per-economy probe coverage
uv run pacific-peering-triangulate # check a measurement against RIS
uv run pacific-peering-feasibility # latency/hop-count sanity checkGenerate the visualizations and reports from whatever data currently exists:
uv run pacific-peering-viz-detours # geographic map of confirmed detours
uv run pacific-peering-viz-as-graph # AS-level dependency graph
uv run pacific-peering-report-ascii # outputs/reports/report.txt
uv run pacific-peering-report-html # outputs/reports/report.htmlEvery command above is also a Python entry point defined in
pyproject.toml — see [project.scripts] there for the complete list.
CC BY-NC-SA 4.0 — see LICENSE. Commercial use requires a paid
license; contact the author to arrange one.
If this project is useful to you, consider supporting it: Buy Me a Coffee.