Conversation
flamboh
added this pull request to stack #113
September 25, 2026 10:02
Port the upstream IPv6 MAAD estimator: 128-bit prefixes, the nearly-full test against 128 - pl, and upstream's default /23-/64 prefix range. The q grid and full threshold match IPv4. The pipeline now writes address_structure_stats rows for ip_version 6 scopes as well as 4. The product identity records both family configs and bumps the MAAD contract version, so existing databases must be rebuilt. netflow-db maad and validate_maad.py gain --ipv6, and IPv6 goldens are generated from the pinned oracle. The web structure and spectrum routes take a validated ipVersion parameter (default 4), and the dashboard spectrum card and file detail page get an IPv4/IPv6 selector.
…rsing compare allows candidate-only MAAD rows for an IP version the reference has no MAAD rows for, so a pre-IPv6 reference no longer fails. verify --require-maad-data requires IPv6 MAAD rows when IPv6 traffic exists in the window, and verify-web requests every MAAD route with ipVersion=6. The web accepts only the literal ipVersion strings 4 and 6. The conformance doc notes that IPv6 nearly-full pruning is inert at the default range and drops a stale reference to the new head; a redundant route test is removed.
flamboh
force-pushed
the
maad/04-ipv6
branch
from
September 27, 2026 05:17
45292cd to
ca9b027
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
🤖 Claude Opus 5.5 on behalf of Oliver
ELI5
Runs the MAAD address-structure analysis on IPv6 traffic too, not only IPv4, and adds an IPv4/IPv6 switch to the dashboard spectrum card and the file detail page.
Setup
This PR bumps the product contract: both family MAAD configs are part of the pipeline identity. The pipeline rejects an existing product database, so build a fresh one.
./vendor/scripts/compile-nfdump.sh).target/nfdump/libexec/nfdump -r <file> 'ipv6' -c 5and confirm it prints flows../scripts/netflow-db.sh maad --ipv6 tools/netflow-db/tests/fixtures/maad-conformance/ipv6-mixed/input.txt.Flows to exercise
address_structure_statshasip_version = 6rows alongside the v4 rows, with prefix lengths /23–/64.verify --require-maad-datapasses, and fails when v6 traffic exists but v6 MAAD rows are missing./datasets/<id>, pick IPv6 on the spectrum card:ipVersion=6and the card refetches.ipVersion=6, and its family switch shows IPv6.?ipVersion=5on MAAD API routes or the file page returns 400. On the dashboard, the search-param schema rejects it and falls back to IPv4.compareagainst an older reference with no IPv6 rows now fails withunexpected_candidate_only_rows. Compare IPv6-era products only with IPv6-era references.Decisions and edge cases
ipVersion,4or6, default4, left out of the URL when4). Every dashboard→file drilldown and the Next File link carry it.dataset,direction,ipVersion), because GET submission replaces the action's query string.comparehas no exemption for a missing IP family. An earlier revision accepted candidate-only rows whenever the reference lacked that family, which also let unrelated-source rows through. That was removed as greenfield (no compat code).128 − pl. IPv4 output is unchanged. The two families are separate series, not comparable points. On anonymized internal v6 sources the structure below ~/40 mostly reflects the anonymizer; that labeling question is out of scope.Verification
bun run format,bun run lint,bun run typecheck,bun run test:db(v6 goldens, compare rejection tests),bun run test:web,bun run test:e2e(newmaad-ip-version.spec.tscovers IPv6 selection → reload → drilldown → reload → next file).Made by Claude Opus 5.5 (with Opus 5.5 subagents) via Claude Code.