Repository navigation
fix(protocols): compose IPv6_Ext.id() from its direct concrete members - #2464
Conversation
|
Cross-review (different model, adversarial) came back NEEDS CHANGES, and found a real flaw in #2462's own premise, not just a bug in this PR. Squarely fixable, no decision needed:
Needs a decision — My recommendation: drop the family-wide tuple entirely. Dispatching a fix now. |
97f42d5 to
afc9103
Compare
|
Fixed and verified directly (new head |
|
Coverage: 94.44% (unit tier, Python 3.15,
Per-file detail: the |
|
NEEDS CHANGES. Cross-review on Opus at head The core claim holds:
|
|
Fix worker dispatched for option (a), per the ruling on #2462. |
|
Verified ( |
|
NEEDS CHANGES (Sonnet,
|
0fae5ce to
8109020
Compare
|
Verified ( |
|
NEEDS CHANGES (Sonnet,
|
#2462) - IPv6_Ext.id() returns the names of its direct concrete subclasses, as IP.id() and IPsec.id() do, so the 'IPv6_Ext' selector matches every member. - HOPOPT, IPv6_Route, IPv6_Frag, IPv6_Opts, MH and HIP gain an id() narrowed to their own class name; AH and ESP already narrow theirs. - The "must define" Warning and REQUIRED_OVERRIDES list id(). - A fallback IPv6_Ext layer no longer equals 'IPv6_Ext' with ==, as IPv4 does not equal 'IP'; the id() docstring says so and a test pins it. - Tests cover each member and 'IPsec' on parsed packets, and a malformed HOPOPT parsed by IPv6_Ext, which matches every member name. Closes #2462
8109020 to
798a878
Compare
|
Pushed |
|
GOOD TO GO (Sonnet, |
- HTTP selector example replaced by VLAN: 'S_Tag' in a C-Tag frame. - ARP row: only RARP is bound to 0x8035; DRARP is its operation-5 alias. - Drop the unsourced inferences and the InARP construction claim. - State both canonical-name positions with their sources (#2444, #2446), as preference and proposal rather than settled rule. - Cite the _Family rule (#2446); define registry key. - Drop the stale IPv6_Ext claim about main, which #2464 changed.
- HTTP selector example replaced by VLAN: 'S_Tag' in a C-Tag frame. - ARP row: only RARP is bound to 0x8035; DRARP is its operation-5 alias. - Drop the unsourced inferences and the InARP construction claim. - State both canonical-name positions with their sources (#2444, #2446), as preference and proposal rather than settled rule. - Cite the _Family rule (#2446); define registry key. - Drop the stale IPv6_Ext claim about main, which #2464 changed.
- HTTP selector example replaced by VLAN: 'S_Tag' in a C-Tag frame. - ARP row: only RARP is bound to 0x8035; DRARP is its operation-5 alias. - Drop the unsourced inferences and the InARP construction claim. - State both canonical-name positions with their sources (#2444, #2446), as preference and proposal rather than settled rule. - Cite the _Family rule (#2446); define registry key. - Drop the stale IPv6_Ext claim about main, which #2464 changed.
* docs(conventions): add the protocol family grouping page (#2476) - New protocol-family-grouping.rst records the id() criterion (a family base lists only its direct concrete subclasses), abstract family names composing their members, grouping by name and history rather than wire format, the member shapes in use, RFC canonical names, what selectors match, and the ban on invented _Family suffixes. - Listed in the conventions index and toctree, and added to ANCHORS in test_conventions_doc_claims.py so its anchor and toctree slot are pinned. Sphinx: no new warnings; tests/project conventions tests pass. * docs(conventions): scope the family grouping page to the rulings (#2476) - id() criterion: members-only and own-name-first tuples; ARP alone. - Drop the Shim6 narration and the SSL/TLS/DTLS grouping. - Versioned class names "may"; add #2443's selector ruling. - ProtoChain also matches aliases; ARP row names RARP/DRARP on 0x8035. - Cite pull requests with :pr:; no count. * docs(conventions): measure the family grouping page against main - HTTP selector example replaced by VLAN: 'S_Tag' in a C-Tag frame. - ARP row: only RARP is bound to 0x8035; DRARP is its operation-5 alias. - Drop the unsourced inferences and the InARP construction claim. - State both canonical-name positions with their sources (#2444, #2446), as preference and proposal rather than settled rule. - Cite the _Family rule (#2446); define registry key. - Drop the stale IPv6_Ext claim about main, which #2464 changed.
make pylint,make mypy,make isort)make testpasses, and a test case covers the changedocs/source/changelog/and regeneratedCHANGELOG.md, if the change is user-visible — N/A, centralised in docs(changelog): shared 1.5.0 changelog — long-lived, merges last (#610, #616, #617, #618, #620) #657What is the purpose of your pull request?
fix— corrects a defectDescription of your pull request and other information
IPv6_Extis the abstract name for the IPv6 extension-header family, so itsid()now composes its direct concrete subclasses:HOPOPT,IPv6_Route,IPv6_Frag,ESP,AH,IPv6_Opts,MH,HIP. Selecting'IPv6_Ext'matches any extension header.Each member narrows
id()to its own class name, asAH/ESPdo underIPsec; members' output is unchanged frommain. A header parsed byIPv6_Extitself (Shim6, or a dedicated parser's fallback) matches every member name and'IPsec'; #2477 will make failed dedicated parsesRawinstead.Tests derive the member set from the class hierarchy, so a new subclass can't drift, and check
protochainselection on parsed packets.Closes #2462