Skip to content

docs: reconcile the Sphinx directives to the contract-versus-recipe tenet (#684) - #694

Open
JarryShaw wants to merge 1 commit into
mainfrom
docs/private-directive-sweep-684
Open

JarryShaw wants to merge 1 commit into
mainfrom
docs/private-directive-sweep-684

Conversation

@JarryShaw

@JarryShaw JarryShaw commented Sep 23, 2026

Copy link
Copy Markdown
Owner

Reconciles the Sphinx API reference against the owner's tenet — document the contract, hide the recipe — in both directions.

Fixes #684

the documentation's purpose/tenet is to keep the usage and extensibility clear and straightforward, while hide the recipe

This branch was rebuilt from f0999858e. An earlier revision implemented a different rule ("remove a private directive unless something public cross-references it") and removed 164 directives; that rule has been superseded, so the branch was reconstructed rather than patched, and the earlier kept/removed lists in the comments below no longer describe it. They are left in place because the cross-review was measured against them.

What changed

count
directives removed 7
autoattribute directives added 39
prose sections added 2 (const/index.rst, a cross-reference in registry.rst)
pcapkit/ lines changed 0

Net: 13 files, +139 / −20.

Removed — 7, every one a module-level private

None is on any class's usage or extensibility surface: a private helper function, two lazily-imported backend flags, an internal lock, and a private stream adapter nobody constructs or subclasses.

directive why it is recipe
autofunction:: pcapkit.protocols.internet.esp._resolve module-private helper
autodata:: pcapkit.protocols.internet.esp._CRYPTO lazily-imported backend flag
autofunction:: pcapkit.protocols.application.ngap._convert module-private helper
autofunction:: pcapkit.protocols.application.ngap._revert module-private helper
autodata:: pcapkit.protocols.application.ngap._PYCRATE lazily-imported backend flag
autodata:: pcapkit.protocols.application.ngap._PDU_LOCK internal lock
autoclass:: pcapkit.foundation.engines.pypcapfile._NamedStream private file-object adapter, constructed only at pypcapfile.py:232

_NamedStream's two nested members (name, read) go with it. They are non-underscore, but they are that private class's members — they exist to satisfy the file-object protocol pcapfile requires — and a member of a private class is reachable only through it. This is not the public Engine.name: that is a hand-written .. property:: name at docs/source/pcapkit/foundation/engines/engine.rst:18 and is untouched by this branch.

Added — 39 autoattribute directives

The strongest cases are the ones that were alone in being omitted from a group whose siblings are all documented:

  • Extractor._flag_f — the only one of ten _flag_* attributes without a directive. Read directly by engines at pcapkit/foundation/engines/pcap.py:124.
  • PCAP_CT._backend, PyPCAP._backend — every sibling on those classes (_expkg, _extmp, _handle, _dlink, _closed) is documented; these two were skipped, though _backend's own doc comment says "What the pcap import actually found, c.f. :attr:backend`".
  • The built-in engines. All six third-party engines in 3rdparty.rst carry a private-state block; builtin.rst carried none, so PCAP._gbhdr, _vinfo, _dlink, _nnsec and PCAPNG._ctx, _ctx_list are added to match.
  • TraceFlow._fproot, _foutio, _fdpext, _endian, _nnsecd, _analyse — set in the base's __init__ and read directly by TCP's overridden dump/submit (traceflow/tcp.py:274, :347, :446, :516). Their siblings _buffer/_stream/_bidir from the same __init__ were already documented; this completes an incomplete copy.

The rest either back a documented property or are written and read directly by collaborators:

  • Extractor._ifnm, _ofnm, _offmt, _magic back input / output / format / magic_number; _offmt is also assigned by an engine (ext._offmt = ofile.kind, pcap.py:130).
  • Extractor._fext, _frame, _ipv4, _ipv6, _tcp, _eof_mark, _vfuncext.rst:504, :519, :539, :544 already teaches engine authors to use ext._extractor, ext._vfunc and friends by name, so they are documented API in prose while having had no entry in the reference.
  • EngineBase._extractor — read as ext = self._extractor by all eight concrete engines.
  • SeekableReader._stream, _closed — back raw / closed, the same pattern as the already-documented engine attributes.
  • ProtocolBase._next, _protos, _seekset, _sigterm_next/_protos back payload / protocol / protochain; _seekset is read by the @seekset decorator at utilities/decorators.py:74; _sigterm is read by subclass overrides at internet.py:256 and ipv6.py:404.
  • FieldBase._name, _template, _default, _callback and Field._length, _length_callback — the widest fan-out in the tree: reassigned directly by PayloadField, SchemaField, ListField, OptionField and every class in numbers.py, strings.py and ipaddress.py. Documented on the class that defines each, not on both, so nothing is stated twice.

Added — the _missing_ contract, documented once

_missing_ has 128 runtime definitions — 121 under pcapkit/const/ and 7 inline enums under pcapkit/protocols/ — and had no directive anywhere. (A further 17 matches under pcapkit/vendor/ are generator-side enums or the template text itself, not shipped enum classes.) It is the deliberate extensibility behaviour of the const enums per #647: looking a registry value up by an unassigned-but-in-range number mints a member rather than raising.

It is documented once, as a new Unrecognised Values section on docs/source/pcapkit/const/index.rst, with a cross-reference from registry.rst (where every register_* takes a code the enum must already resolve). Not 128 directives, for three reasons:

  1. There is no shared base to hang one directive on. All 128 are independent @classmethods on their own aenum.IntEnum / IntFlag / StrEnum subclasses; nothing in pcapkit/ supplies an enum base.
  2. conf.py already excludes it. docs/source/conf.py:115 names _missing_ in autodoc_default_options['exclude-members'], alongside __weakref__ and _abc_impl. Per-class directives would be fighting the project's own configuration.
  3. The bodies genuinely differ — valid ranges and unassigned-band labels are per-registry — and that variance has caused real defects (const enum lookups reject values that appear on the wire: RouterAlert(0) is RFC 2113's only defined value #492/fix(const): accept RFC 2113's Router Alert 0 and IPX's own socket 0 #503, get()'s documented default is ignored on the integer path across the shared const/ enum template #584, _missing_ in the four mh flag enums ends in return cls(value), so any non-member value recurses — including 0 #623). Documenting one class as a "representative" invites over-generalising exactly the details that vary. The mechanism is uniform because it is generated from the template at pcapkit/vendor/default.py:53-112, so that is what the section describes.

The rule, written down

CONTRIBUTING.md gains What belongs in the API reference: document the contract, hide the recipe, replacing the section the earlier revision added for the superseded rule. It records that per-option _read_* / _make_* pairs are contract because they publish the data format, that most class private attributes stay, that anything abstract or implemented across subclasses must be documented, that the recipe to hide is chiefly module-level privates, and that dunders and :show-inheritance:-linked private bases keep their directives.

Deliberately not changed

  • All _read_* / _make_* families stay. Each pair is the published shape of that option, parameter, chunk or cause — the keyword arguments a caller passes and the fields they get back — and there is nowhere else to look it up. Being reached through a getattr dispatch table does not make it recipe.
  • Every other class private attribute stays.
  • Six class members that look like helpers but each document observable behaviour, kept individually rather than as a family: SecurityAssociation._split_key (how caller-supplied keying material is interpreted), Vendor._request (the documented low-level hook, with its proxy fallback, that a subclass with a different registry source overrides), PyPCAPFile._get_decoder and ._decode (both record the AttributeWarning they emit and the non-mutation guarantee they make), MH._seconds (the accepted int-or-timedelta input shape for MH interval fields) and MH._decode_signed (why bit-packed signed fields need reinterpreting).
  • SeekableReader's nine buffer attributes_closing, _tell, _buffer, _buffer_view, _buffer_size, _buffer_set, _buffer_cur, _buffer_path, _buffer_file (pcapkit/corekit/io.py:51-78), the same declaration block as the two that were added. Nothing outside the class touches them: they are the internal sliding-window mechanics, with no subclass and no external caller, whereas _stream and _closed back the documented raw and closed properties. Recipe, so omitted deliberately rather than overlooked.
  • hip.rst — owned by the in-flight HIP work (R1_COUNTER packs 12 octets where RFC 7401 §5.2.3 requires 16: counter is 4 octets, not the stated 8 #672 / LOCATOR_SET is conformant only by accident: nested Locator.len shadows the parameter in padding, and len is in 4-octet units where RFC Length is bytes #679).
  • docs/source/changelog/ — owned by docs(changelog): shared 1.5.0 changelog — long-lived, merges last (#610, #616, #617, #618, #620) #657.

Verification

Built in the project's own mode, sphinx-build -b html with no -W (because make docs does not use it), run from the worktree root with PCAPKIT_SPHINX=1 so the branch's own pcapkit is imported rather than the editable install; the build printed DOCUMENTING: …/pcapkit/__init__.py under the worktree to prove which tree it read.

f0999858e : EXIT=0, 55 warnings
this branch: EXIT=0, 56 warnings
new: 1        disappeared: 0

The one new warning, in full:

docstring of pcapkit.foundation.traceflow.traceflow.TraceFlow._foutio:3:
WARNING: more than one target found for cross-reference 'Type':
pcapkit.vendor.l2tp.type.Type, pcapkit.protocols.application.ftp.Type,
pcapkit.protocols.application.httpv1.Type, pcapkit.protocols.data.link.arp.Type,
pcapkit.const.l2tp.type.Type [ref.python]

It comes from newly rendering _foutio, whose doc comment at pcapkit/foundation/traceflow/traceflow.py:406 reads #: Type[Dumper]: Dumper class. — Napoleon reads that bare Type as a cross-reference and five classes in the tree answer to it. The same warning already fires four times on f0999858e (from engine.rst:39, reassembly.rst:32, reassembly.rst:42 and traceflow.rst:39), so this is a fifth instance of a standing ambiguity, not a new kind of breakage, and nothing was orphaned.

Qualifying that annotation to typing.Type[Dumper] would silence it, but the file is pcapkit/ source and outside this change's scope — flagged rather than fixed. The alternative, dropping the _foutio directive, would hide a contract attribute to keep a warning count flat, which is the wrong trade.

util/changelog_md.py --check exits 0; no changelog entry, following #686, since zero pcapkit/ lines changed.

@JarryShaw JarryShaw added the docs Pull requests that change documentation only (docs: subject prefix) label Sep 23, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

Kept private-target directives, with the reference that justifies each

590 single-underscore directives stay. For each, one rendered reference that resolves to it is named; many have several. D = a docstring or #: autodoc comment under pcapkit/, R = prose in a docs/source/ page, B = a :show-inheritance: "Bases:" link from a documented subclass.

docs/source/pcapkit/corekit/fields/ipaddress.rst

  • :36 pcapkit.corekit.fields.ipaddress._IPField ← B rendered Bases: link from a documented subclass
  • :40 pcapkit.corekit.fields.ipaddress._IPAddressField ← D pcapkit/corekit/fields/ipaddress.py:151 :meth: _(via member-of-relative:IPAddressField.pre_process) (2 refs)
  • :44 pcapkit.corekit.fields.ipaddress._IPInterfaceField ← B rendered Bases: link from a documented subclass

docs/source/pcapkit/corekit/fields/strings.rst

  • :31 pcapkit.corekit.fields.strings._TextField ← B rendered Bases: link from a documented subclass

docs/source/pcapkit/foundation/engines/3rdparty.rst

  • :55 _expkg ← D pcapkit/foundation/engines/scapy.py:141 :attr: (via same-module-relative) (1 refs)
  • :56 _extmp ← D pcapkit/foundation/engines/scapy.py:139 :attr: (via same-module-relative) (1 refs)
  • :78 _expkg ← D pcapkit/foundation/engines/dpkt.py:83 :attr: (via same-module-relative) (1 refs)
  • :79 _extmp ← D pcapkit/foundation/engines/dpkt.py:84 :attr: (via same-module-relative) (1 refs)
  • :129 _expkg ← D pcapkit/foundation/engines/pyshark.py:176 :attr: (via same-module-relative) (1 refs)
  • :130 _extmp ← D pcapkit/foundation/engines/pyshark.py:177 :attr: (via same-module-relative) (1 refs)
  • :217 _expkg ← D pcapkit/foundation/engines/pypcap.py:253 :attr: (via same-module-relative) (1 refs)
  • :218 _extmp ← D pcapkit/foundation/engines/pypcap.py:254 :attr: (via same-module-relative) (1 refs)
  • :369 _expkg ← D pcapkit/foundation/engines/pcap_ct.py:311 :attr: (via same-module-relative) (1 refs)
  • :370 _handle ← D pcapkit/foundation/engines/pcap_ct.py:312 :attr: (via same-module-relative) (1 refs)
  • :371 _extmp ← D pcapkit/foundation/engines/pcap_ct.py:313 :attr: (via same-module-relative) (1 refs)
  • :373 _closed ← D pcapkit/foundation/engines/pcap_ct.py:479 :attr: (via same-module-relative) (1 refs)
  • :410 _expkg ← D pcapkit/foundation/engines/pypcapfile.py:183 :attr: (via same-module-relative) (1 refs)
  • :411 _extmp ← D pcapkit/foundation/engines/pypcapfile.py:184 :attr: (via same-module-relative) (1 refs)
  • :486 pcapkit.foundation.engines._pcap_backend._purge ← D pcapkit/foundation/engines/_pcap_backend.py:198 :func: (via same-module-relative) (1 refs)

docs/source/pcapkit/foundation/extraction.rst

  • :59 _cleanup ← D pcapkit/foundation/engines/pcap_ct.py:471 :meth: (5 refs)
  • :61 _flag_a ← D pcapkit/foundation/extraction.py:1027 :attr: (3 refs)
  • :62 _flag_d ← D pcapkit/foundation/extraction.py:306 :attr: (1 refs)
  • :63 _flag_e ← D pcapkit/foundation/extraction.py:1251 :attr: (1 refs)
  • :64 _flag_q ← D pcapkit/foundation/extraction.py:275 :attr: (2 refs)
  • :65 _flag_r ← D pcapkit/foundation/extraction.py:323 :attr: (1 refs)
  • :66 _flag_t ← D pcapkit/foundation/extraction.py:343 :attr: (1 refs)
  • :69 _flag_s ← D pcapkit/foundation/extraction.py:1255 :attr: (via same-module-relative) (1 refs)
  • :81 _exlyr ← D pcapkit/foundation/engines/dpkt.py:88 :attr: (6 refs)
  • :82 _exptl ← D pcapkit/foundation/engines/dpkt.py:89 :attr: (6 refs)
  • :83 _exctx ← D pcapkit/foundation/engines/dpkt.py:91 :attr: (3 refs)

docs/source/pcapkit/foundation/reassembly/reassembly.rst

  • :72 _flag_d ← D pcapkit/foundation/reassembly/reassembly.py:217 :attr: (via same-module-bare) (1 refs)
  • :79 _buffer ← R docs/source/pcapkit/foundation/reassembly/tcp.rst:248 :attr: (3 refs)
  • :81 _dtgram ← D pcapkit/foundation/reassembly/ip.py:40 :attr: (10 refs)

docs/source/pcapkit/foundation/traceflow/traceflow.rst

  • :69 _buffer ← R docs/source/pcapkit/foundation/traceflow/tcp.rst:60 :attr: (1 refs)

docs/source/pcapkit/protocols/application/application.rst

  • :19 _decode_next_layer ← D pcapkit/protocols/application/application.py:101 :meth: (via same-module-bare) (1 refs)
  • :20 _import_next_layer ← D pcapkit/protocols/application/application.py:111 :meth: (via same-module-bare) (1 refs)

docs/source/pcapkit/protocols/application/http.rst

  • :29 _guess_version ← R docs/source/pcapkit/protocols/link/l2tp.rst:61 :meth: (1 refs)

docs/source/pcapkit/protocols/application/httpv2.rst

  • :44 _read_http_data ← D pcapkit/protocols/application/httpv2.py:111 :meth: (1 refs)
  • :45 _read_http_headers ← D pcapkit/protocols/application/httpv2.py:114 :meth: (1 refs)
  • :46 _read_http_priority ← D pcapkit/protocols/application/httpv2.py:117 :meth: (1 refs)
  • :47 _read_http_rst_stream ← D pcapkit/protocols/application/httpv2.py:120 :meth: (1 refs)
  • :48 _read_http_settings ← D pcapkit/protocols/application/httpv2.py:123 :meth: (1 refs)
  • :49 _read_http_push_promise ← D pcapkit/protocols/application/httpv2.py:126 :meth: (1 refs)
  • :50 _read_http_ping ← D pcapkit/protocols/application/httpv2.py:129 :meth: (1 refs)
  • :51 _read_http_goaway ← D pcapkit/protocols/application/httpv2.py:132 :meth: (1 refs)
  • :52 _read_http_window_update ← D pcapkit/protocols/application/httpv2.py:135 :meth: (1 refs)
  • :53 _read_http_continuation ← D pcapkit/protocols/application/httpv2.py:138 :meth: (1 refs)
  • :56 _make_http_data ← D pcapkit/protocols/application/httpv2.py:112 :meth: (1 refs)
  • :57 _make_http_headers ← D pcapkit/protocols/application/httpv2.py:115 :meth: (1 refs)
  • :58 _make_http_priority ← D pcapkit/protocols/application/httpv2.py:118 :meth: (1 refs)
  • :59 _make_http_rst_stream ← D pcapkit/protocols/application/httpv2.py:121 :meth: (1 refs)
  • :60 _make_http_settings ← D pcapkit/protocols/application/httpv2.py:124 :meth: (1 refs)
  • :61 _make_http_push_promise ← D pcapkit/protocols/application/httpv2.py:127 :meth: (1 refs)
  • :62 _make_http_ping ← D pcapkit/protocols/application/httpv2.py:130 :meth: (1 refs)
  • :63 _make_http_goaway ← D pcapkit/protocols/application/httpv2.py:133 :meth: (1 refs)
  • :64 _make_http_window_update ← D pcapkit/protocols/application/httpv2.py:136 :meth: (1 refs)
  • :65 _make_http_continuation ← D pcapkit/protocols/application/httpv2.py:139 :meth: (1 refs)

docs/source/pcapkit/protocols/index.rst

  • :226 pcapkit.protocols.schema.schema._EnumRegistry ← D pcapkit/protocols/schema/schema.py:1057 :class: (via same-module-relative) (3 refs)

docs/source/pcapkit/protocols/internet/esp.rst

  • :52 _make_data ← D pcapkit/protocols/internet/esp.py:1161 :meth: (via same-module-bare) (1 refs)

docs/source/pcapkit/protocols/internet/hopopt.rst

  • :37 _read_hopopt_options ← D pcapkit/protocols/internet/hopopt.py:190 :meth: (via same-module-bare) (1 refs)
  • :39 _read_opt_pad ← D pcapkit/protocols/internet/hopopt.py:138 :meth: (2 refs)
  • :40 _read_opt_tun ← D pcapkit/protocols/internet/hopopt.py:144 :meth: (1 refs)
  • :41 _read_opt_ra ← D pcapkit/protocols/internet/hopopt.py:147 :meth: (1 refs)
  • :42 _read_opt_calipso ← D pcapkit/protocols/internet/hopopt.py:150 :meth: (1 refs)
  • :43 _read_opt_smf_dpd ← D pcapkit/protocols/internet/hopopt.py:153 :meth: (1 refs)
  • :44 _read_opt_pdm ← D pcapkit/protocols/internet/hopopt.py:156 :meth: (1 refs)
  • :45 _read_opt_qs ← D pcapkit/protocols/internet/hopopt.py:159 :meth: (1 refs)
  • :46 _read_opt_rpl ← D pcapkit/protocols/internet/hopopt.py:162 :meth: (1 refs)
  • :47 _read_opt_mpl ← D pcapkit/protocols/internet/hopopt.py:165 :meth: (1 refs)
  • :48 _read_opt_ilnp ← D pcapkit/protocols/internet/hopopt.py:168 :meth: (1 refs)
  • :49 _read_opt_lio ← D pcapkit/protocols/internet/hopopt.py:171 :meth: (1 refs)
  • :50 _read_opt_jumbo ← D pcapkit/protocols/internet/hopopt.py:174 :meth: (1 refs)
  • :51 _read_opt_home ← D pcapkit/protocols/internet/hopopt.py:177 :meth: (1 refs)
  • :52 _read_opt_ip_dff ← D pcapkit/protocols/internet/hopopt.py:180 :meth: (1 refs)
  • :54 _make_hopopt_options ← D pcapkit/protocols/internet/hopopt.py:191 :meth: (via same-module-bare) (1 refs)
  • :56 _make_opt_pad ← D pcapkit/protocols/internet/hopopt.py:139 :meth: (2 refs)
  • :57 _make_opt_tun ← D pcapkit/protocols/internet/hopopt.py:145 :meth: (1 refs)
  • :58 _make_opt_ra ← D pcapkit/protocols/internet/hopopt.py:148 :meth: (1 refs)
  • :59 _make_opt_calipso ← D pcapkit/protocols/internet/hopopt.py:151 :meth: (1 refs)
  • :60 _make_opt_smf_dpd ← D pcapkit/protocols/internet/hopopt.py:154 :meth: (1 refs)
  • :61 _make_opt_pdm ← D pcapkit/protocols/internet/hopopt.py:157 :meth: (1 refs)
  • :62 _make_opt_qs ← D pcapkit/protocols/internet/hopopt.py:160 :meth: (1 refs)
  • :63 _make_opt_rpl ← D pcapkit/protocols/internet/hopopt.py:163 :meth: (1 refs)
  • :64 _make_opt_mpl ← D pcapkit/protocols/internet/hopopt.py:166 :meth: (1 refs)
  • :65 _make_opt_ilnp ← D pcapkit/protocols/internet/hopopt.py:169 :meth: (1 refs)
  • :66 _make_opt_lio ← D pcapkit/protocols/internet/hopopt.py:172 :meth: (1 refs)
  • :67 _make_opt_jumbo ← D pcapkit/protocols/internet/hopopt.py:175 :meth: (1 refs)
  • :68 _make_opt_home ← D pcapkit/protocols/internet/hopopt.py:178 :meth: (1 refs)
  • :69 _make_opt_ip_dff ← D pcapkit/protocols/internet/hopopt.py:181 :meth: (1 refs)
  • :126 pcapkit.protocols.schema.internet.hopopt._QuickStartOption ← D pcapkit/protocols/schema/internet/hopopt.py:235 :attr: _(via member-of-relative:QuickStartOption.data) (1 refs)

docs/source/pcapkit/protocols/internet/internet.rst

  • :19 _decode_next_layer ← D pcapkit/protocols/internet/internet.py:89 :meth: (1 refs)
  • :20 _import_next_layer ← D pcapkit/protocols/internet/internet.py:90 :meth: (3 refs)

docs/source/pcapkit/protocols/internet/ipv4.rst

  • :54 _read_ipv4_options ← D pcapkit/protocols/internet/ipv4.py:191 :meth: (via same-module-bare) (1 refs)
  • :56 _read_opt_eool ← D pcapkit/protocols/internet/ipv4.py:142 :meth: (1 refs)
  • :57 _read_opt_nop ← D pcapkit/protocols/internet/ipv4.py:145 :meth: (1 refs)
  • :58 _read_opt_sec ← D pcapkit/protocols/internet/ipv4.py:148 :meth: (2 refs)
  • :59 _read_opt_lsr ← D pcapkit/protocols/internet/ipv4.py:151 :meth: (1 refs)
  • :60 _read_opt_ts ← D pcapkit/protocols/internet/ipv4.py:154 :meth: (1 refs)
  • :61 _read_opt_e_sec ← D pcapkit/protocols/internet/ipv4.py:157 :meth: (1 refs)
  • :62 _read_opt_rr ← D pcapkit/protocols/internet/ipv4.py:160 :meth: (1 refs)
  • :63 _read_opt_sid ← D pcapkit/protocols/internet/ipv4.py:163 :meth: (1 refs)
  • :64 _read_opt_ssr ← D pcapkit/protocols/internet/ipv4.py:166 :meth: (1 refs)
  • :65 _read_opt_mtup ← D pcapkit/protocols/internet/ipv4.py:169 :meth: (1 refs)
  • :66 _read_opt_mtur ← D pcapkit/protocols/internet/ipv4.py:172 :meth: (1 refs)
  • :67 _read_opt_tr ← D pcapkit/protocols/internet/ipv4.py:175 :meth: (1 refs)
  • :68 _read_opt_rtralt ← D pcapkit/protocols/internet/ipv4.py:178 :meth: (1 refs)
  • :69 _read_opt_qs ← D pcapkit/protocols/internet/ipv4.py:181 :meth: (3 refs)
  • :71 _make_ipv4_options ← D pcapkit/protocols/internet/ipv4.py:192 :meth: (via same-module-bare) (1 refs)
  • :73 _make_opt_eool ← D pcapkit/protocols/internet/ipv4.py:143 :meth: (1 refs)
  • :74 _make_opt_nop ← D pcapkit/protocols/internet/ipv4.py:146 :meth: (1 refs)
  • :75 _make_opt_sec ← D pcapkit/protocols/internet/ipv4.py:149 :meth: (1 refs)
  • :76 _make_opt_lsr ← D pcapkit/protocols/internet/ipv4.py:152 :meth: (1 refs)
  • :77 _make_opt_ts ← D pcapkit/protocols/internet/ipv4.py:155 :meth: (1 refs)
  • :78 _make_opt_e_sec ← D pcapkit/protocols/internet/ipv4.py:158 :meth: (1 refs)
  • :79 _make_opt_rr ← D pcapkit/protocols/internet/ipv4.py:161 :meth: (1 refs)
  • :80 _make_opt_sid ← D pcapkit/protocols/internet/ipv4.py:164 :meth: (2 refs)
  • :81 _make_opt_ssr ← D pcapkit/protocols/internet/ipv4.py:167 :meth: (1 refs)
  • :82 _make_opt_mtup ← D pcapkit/protocols/internet/ipv4.py:170 :meth: (1 refs)
  • :83 _make_opt_mtur ← D pcapkit/protocols/internet/ipv4.py:173 :meth: (1 refs)
  • :84 _make_opt_tr ← D pcapkit/protocols/internet/ipv4.py:176 :meth: (1 refs)
  • :85 _make_opt_rtralt ← D pcapkit/protocols/internet/ipv4.py:179 :meth: (1 refs)
  • :86 _make_opt_qs ← D pcapkit/protocols/internet/ipv4.py:182 :meth: (2 refs)
  • :162 pcapkit.protocols.schema.internet.ipv4._QSOption ← D pcapkit/protocols/schema/internet/ipv4.py:190 :attr: _(via member-of-relative:QSOption.data) (1 refs)

docs/source/pcapkit/protocols/internet/ipv6_opts.rst

  • :37 _read_ipv6_opts ← D pcapkit/protocols/internet/ipv6_opts.py:195 :meth: (via same-module-bare) (1 refs)
  • :39 _read_opt_pad ← D pcapkit/protocols/internet/ipv6_opts.py:143 :meth: (2 refs)
  • :40 _read_opt_tun ← D pcapkit/protocols/internet/ipv6_opts.py:149 :meth: (1 refs)
  • :41 _read_opt_ra ← D pcapkit/protocols/internet/ipv6_opts.py:152 :meth: (1 refs)
  • :42 _read_opt_calipso ← D pcapkit/protocols/internet/ipv6_opts.py:155 :meth: (1 refs)
  • :43 _read_opt_smf_dpd ← D pcapkit/protocols/internet/ipv6_opts.py:158 :meth: (1 refs)
  • :44 _read_opt_pdm ← D pcapkit/protocols/internet/ipv6_opts.py:161 :meth: (1 refs)
  • :45 _read_opt_qs ← D pcapkit/protocols/internet/ipv6_opts.py:164 :meth: (1 refs)
  • :46 _read_opt_rpl ← D pcapkit/protocols/internet/ipv6_opts.py:167 :meth: (1 refs)
  • :47 _read_opt_mpl ← D pcapkit/protocols/internet/ipv6_opts.py:170 :meth: (1 refs)
  • :48 _read_opt_ilnp ← D pcapkit/protocols/internet/ipv6_opts.py:173 :meth: (1 refs)
  • :49 _read_opt_lio ← D pcapkit/protocols/internet/ipv6_opts.py:176 :meth: (1 refs)
  • :50 _read_opt_jumbo ← D pcapkit/protocols/internet/ipv6_opts.py:179 :meth: (1 refs)
  • :51 _read_opt_home ← D pcapkit/protocols/internet/ipv6_opts.py:182 :meth: (1 refs)
  • :52 _read_opt_ip_dff ← D pcapkit/protocols/internet/ipv6_opts.py:185 :meth: (1 refs)
  • :54 _make_ipv6_opts ← D pcapkit/protocols/internet/ipv6_opts.py:196 :meth: (via same-module-bare) (1 refs)
  • :56 _make_opt_pad ← D pcapkit/protocols/internet/ipv6_opts.py:144 :meth: (2 refs)
  • :57 _make_opt_tun ← D pcapkit/protocols/internet/ipv6_opts.py:150 :meth: (1 refs)
  • :58 _make_opt_ra ← D pcapkit/protocols/internet/ipv6_opts.py:153 :meth: (1 refs)
  • :59 _make_opt_calipso ← D pcapkit/protocols/internet/ipv6_opts.py:156 :meth: (1 refs)
  • :60 _make_opt_smf_dpd ← D pcapkit/protocols/internet/ipv6_opts.py:159 :meth: (1 refs)
  • :61 _make_opt_pdm ← D pcapkit/protocols/internet/ipv6_opts.py:162 :meth: (1 refs)
  • :62 _make_opt_qs ← D pcapkit/protocols/internet/ipv6_opts.py:165 :meth: (1 refs)
  • :63 _make_opt_rpl ← D pcapkit/protocols/internet/ipv6_opts.py:168 :meth: (1 refs)
  • :64 _make_opt_mpl ← D pcapkit/protocols/internet/ipv6_opts.py:171 :meth: (1 refs)
  • :65 _make_opt_ilnp ← D pcapkit/protocols/internet/ipv6_opts.py:174 :meth: (1 refs)
  • :66 _make_opt_lio ← D pcapkit/protocols/internet/ipv6_opts.py:177 :meth: (1 refs)
  • :67 _make_opt_jumbo ← D pcapkit/protocols/internet/ipv6_opts.py:180 :meth: (1 refs)
  • :68 _make_opt_home ← D pcapkit/protocols/internet/ipv6_opts.py:183 :meth: (1 refs)
  • :69 _make_opt_ip_dff ← D pcapkit/protocols/internet/ipv6_opts.py:186 :meth: (1 refs)
  • :126 pcapkit.protocols.schema.internet.ipv6_opts._QuickStartOption ← D pcapkit/protocols/schema/internet/ipv6_opts.py:235 :attr: _(via member-of-relative:QuickStartOption.data) (1 refs)

docs/source/pcapkit/protocols/internet/ipv6_route.rst

  • :38 _make_hdr_ext_len ← D pcapkit/protocols/schema/internet/ipv6_route.py:58 :meth: (1 refs)
  • :41 _read_data_type_src ← D pcapkit/protocols/internet/ipv6_route.py:86 :meth: (1 refs)
  • :42 _read_data_type_2 ← D pcapkit/protocols/internet/ipv6_route.py:89 :meth: (1 refs)
  • :43 _read_data_type_rpl ← D pcapkit/protocols/internet/ipv6_route.py:92 :meth: (2 refs)
  • :46 _make_data_type_src ← D pcapkit/protocols/internet/ipv6_route.py:87 :meth: (1 refs)
  • :47 _make_data_type_2 ← D pcapkit/protocols/internet/ipv6_route.py:90 :meth: (1 refs)
  • :48 _make_data_type_rpl ← D pcapkit/protocols/internet/ipv6_route.py:93 :meth: (1 refs)

docs/source/pcapkit/protocols/internet/mh.rst

  • :49 _read_msg_brr ← D pcapkit/protocols/internet/mh.py:814 :meth: (1 refs)
  • :50 _read_msg_hoti ← D pcapkit/protocols/internet/mh.py:817 :meth: (1 refs)
  • :51 _read_msg_coti ← D pcapkit/protocols/internet/mh.py:820 :meth: (1 refs)
  • :52 _read_msg_hot ← D pcapkit/protocols/internet/mh.py:823 :meth: (1 refs)
  • :53 _read_msg_cot ← D pcapkit/protocols/internet/mh.py:826 :meth: (1 refs)
  • :54 _read_msg_bu ← D pcapkit/protocols/internet/mh.py:829 :meth: (1 refs)
  • :55 _read_msg_ba ← D pcapkit/protocols/internet/mh.py:832 :meth: (1 refs)
  • :56 _read_msg_be ← D pcapkit/protocols/internet/mh.py:835 :meth: (1 refs)
  • :57 _read_msg_fbu ← D pcapkit/protocols/internet/mh.py:838 :meth: (1 refs)
  • :58 _read_msg_fback ← D pcapkit/protocols/internet/mh.py:841 :meth: (2 refs)
  • :59 _read_msg_fna ← D pcapkit/protocols/internet/mh.py:844 :meth: (1 refs)
  • :60 _read_msg_emh ← D pcapkit/protocols/internet/mh.py:847 :meth: (1 refs)
  • :61 _read_msg_hi ← D pcapkit/protocols/internet/mh.py:856 :meth: (1 refs)
  • :62 _read_msg_hack ← D pcapkit/protocols/internet/mh.py:859 :meth: (1 refs)
  • :63 _read_msg_brm ← D pcapkit/protocols/internet/mh.py:862 :meth: (1 refs)
  • :64 _read_msg_fbm ← D pcapkit/protocols/internet/mh.py:877 :meth: (1 refs)
  • :65 _read_msg_has ← D pcapkit/protocols/internet/mh.py:850 :meth: (1 refs)
  • :66 _read_msg_hb ← D pcapkit/protocols/internet/mh.py:853 :meth: (1 refs)
  • :67 _read_msg_lra ← D pcapkit/protocols/internet/mh.py:868 :meth: (1 refs)
  • :68 _read_msg_lri ← D pcapkit/protocols/internet/mh.py:865 :meth: (1 refs)
  • :69 _read_msg_sq ← D pcapkit/protocols/internet/mh.py:880 :meth: (1 refs)
  • :70 _read_msg_sr ← D pcapkit/protocols/internet/mh.py:883 :meth: (1 refs)
  • :71 _read_msg_upa ← D pcapkit/protocols/internet/mh.py:874 :meth: (1 refs)
  • :72 _read_msg_upn ← D pcapkit/protocols/internet/mh.py:871 :meth: (1 refs)
  • :75 _make_msg_brr ← D pcapkit/protocols/internet/mh.py:815 :meth: (1 refs)
  • :76 _make_msg_hoti ← D pcapkit/protocols/internet/mh.py:818 :meth: (1 refs)
  • :77 _make_msg_coti ← D pcapkit/protocols/internet/mh.py:821 :meth: (1 refs)
  • :78 _make_msg_hot ← D pcapkit/protocols/internet/mh.py:824 :meth: (1 refs)
  • :79 _make_msg_cot ← D pcapkit/protocols/internet/mh.py:827 :meth: (1 refs)
  • :80 _make_msg_bu ← D pcapkit/protocols/internet/mh.py:830 :meth: (1 refs)
  • :81 _make_msg_ba ← D pcapkit/protocols/internet/mh.py:833 :meth: (1 refs)
  • :82 _make_msg_be ← D pcapkit/protocols/internet/mh.py:836 :meth: (1 refs)
  • :83 _make_msg_fbu ← D pcapkit/protocols/internet/mh.py:839 :meth: (1 refs)
  • :84 _make_msg_fback ← D pcapkit/protocols/internet/mh.py:842 :meth: (1 refs)
  • :85 _make_msg_fna ← D pcapkit/protocols/internet/mh.py:845 :meth: (1 refs)
  • :86 _make_msg_emh ← D pcapkit/protocols/internet/mh.py:848 :meth: (1 refs)
  • :87 _make_msg_hi ← D pcapkit/protocols/internet/mh.py:857 :meth: (1 refs)
  • :88 _make_msg_hack ← D pcapkit/protocols/internet/mh.py:860 :meth: (1 refs)
  • :89 _make_msg_brm ← D pcapkit/protocols/internet/mh.py:863 :meth: (1 refs)
  • :90 _make_msg_fbm ← D pcapkit/protocols/internet/mh.py:878 :meth: (1 refs)
  • :91 _make_msg_has ← D pcapkit/protocols/internet/mh.py:851 :meth: (1 refs)
  • :92 _make_msg_hb ← D pcapkit/protocols/internet/mh.py:854 :meth: (1 refs)
  • :93 _make_msg_lra ← D pcapkit/protocols/internet/mh.py:869 :meth: (1 refs)
  • :94 _make_msg_lri ← D pcapkit/protocols/internet/mh.py:866 :meth: (1 refs)
  • :95 _make_msg_sq ← D pcapkit/protocols/internet/mh.py:881 :meth: (1 refs)
  • :96 _make_msg_sr ← D pcapkit/protocols/internet/mh.py:884 :meth: (1 refs)
  • :97 _make_msg_upa ← D pcapkit/protocols/internet/mh.py:875 :meth: (1 refs)
  • :98 _make_msg_upn ← D pcapkit/protocols/internet/mh.py:872 :meth: (1 refs)
  • :101 _read_fid_suboptions ← D pcapkit/protocols/internet/mh.py:5075 :meth: (via same-module-bare) (3 refs)
  • :102 _read_ani_suboptions ← D pcapkit/protocols/schema/internet/mh.py:1801 :meth: (2 refs)
  • :103 _read_qos_attributes ← D pcapkit/protocols/internet/mh.py:4691 :meth: (via same-module-bare) (1 refs)
  • :104 _read_lcmp_suboptions ← D pcapkit/protocols/internet/mh.py:4691 :meth: (via same-module-bare) (1 refs)
  • :107 _read_opt_pad ← D pcapkit/protocols/internet/mh.py:897 :meth: (2 refs)
  • :108 _read_opt_bra ← D pcapkit/protocols/internet/mh.py:903 :meth: (1 refs)
  • :109 _read_opt_aca ← D pcapkit/protocols/internet/mh.py:906 :meth: (1 refs)
  • :110 _read_opt_ni ← D pcapkit/protocols/internet/mh.py:909 :meth: (1 refs)
  • :111 _read_opt_bad ← D pcapkit/protocols/internet/mh.py:912 :meth: (1 refs)
  • :112 _read_opt_mnp ← D pcapkit/protocols/internet/mh.py:915 :meth: (1 refs)
  • :113 _read_opt_lla ← D pcapkit/protocols/internet/mh.py:918 :meth: (1 refs)
  • :114 _read_opt_mn_id ← D pcapkit/protocols/internet/mh.py:921 :meth: (1 refs)
  • :115 _read_opt_auth ← D pcapkit/protocols/internet/mh.py:924 :meth: (1 refs)
  • :116 _read_opt_mesg_id ← D pcapkit/protocols/internet/mh.py:927 :meth: (2 refs)
  • :117 _read_opt_cga_pr ← D pcapkit/protocols/internet/mh.py:930 :meth: (1 refs)
  • :118 _read_opt_cga_param ← D pcapkit/protocols/internet/mh.py:933 :meth: (1 refs)
  • :119 _read_opt_signature ← D pcapkit/protocols/internet/mh.py:936 :meth: (1 refs)
  • :120 _read_opt_phkt ← D pcapkit/protocols/internet/mh.py:939 :meth: (1 refs)
  • :121 _read_opt_ct_init ← D pcapkit/protocols/internet/mh.py:942 :meth: (1 refs)
  • :122 _read_opt_ct ← D pcapkit/protocols/internet/mh.py:945 :meth: (1 refs)
  • :123 _read_opt_exp ← D pcapkit/protocols/internet/mh.py:951 :meth: (1 refs)
  • :124 _read_opt_badf ← D pcapkit/protocols/internet/mh.py:960 :meth: (2 refs)
  • :125 _read_opt_ipv6_ap ← D pcapkit/protocols/internet/mh.py:999 :meth: (2 refs)
  • :126 _read_opt_alt_ipv4_coa ← D pcapkit/protocols/internet/mh.py:1044 :meth: (1 refs)
  • :127 _read_opt_ams4 ← D pcapkit/protocols/internet/mh.py:1065 :meth: (1 refs)
  • :128 _read_opt_ams6 ← D pcapkit/protocols/internet/mh.py:1068 :meth: (1 refs)
  • :129 _read_opt_anchored ← D pcapkit/protocols/internet/mh.py:1092 :meth: (1 refs)
  • :130 _read_opt_ani ← D pcapkit/protocols/internet/mh.py:1053 :meth: (1 refs)
  • :131 _read_opt_att ← D pcapkit/protocols/internet/mh.py:969 :meth: (1 refs)
  • :132 _read_opt_bid ← D pcapkit/protocols/internet/mh.py:1002 :meth: (1 refs)
  • :133 _read_opt_cr ← D pcapkit/protocols/internet/mh.py:1017 :meth: (2 refs)
  • :134 _read_opt_dlif_lla ← D pcapkit/protocols/internet/mh.py:1104 :meth: (1 refs)
  • :135 _read_opt_dlif_lladdr ← D pcapkit/protocols/internet/mh.py:1107 :meth: (1 refs)
  • :136 _read_opt_dmnp ← D pcapkit/protocols/internet/mh.py:1062 :meth: (1 refs)
  • :137 _read_opt_dns ← D pcapkit/protocols/internet/mh.py:948 :meth: (2 refs)
  • :138 _read_opt_fid ← D pcapkit/protocols/internet/mh.py:1032 :meth: (1 refs)
  • :139 _read_opt_fs ← D pcapkit/protocols/internet/mh.py:1029 :meth: (1 refs)
  • :140 _read_opt_gre ← D pcapkit/protocols/internet/mh.py:996 :meth: (1 refs)
  • :141 _read_opt_hi ← D pcapkit/protocols/internet/mh.py:966 :meth: (1 refs)
  • :142 _read_opt_hnp ← D pcapkit/protocols/internet/mh.py:963 :meth: (1 refs)
  • :143 _read_opt_ipv4_ack ← D pcapkit/protocols/internet/mh.py:987 :meth: (1 refs)
  • :144 _read_opt_ipv4_coa ← D pcapkit/protocols/internet/mh.py:993 :meth: (1 refs)
  • :145 _read_opt_ipv4_dhcp ← D pcapkit/protocols/internet/mh.py:1014 :meth: (1 refs)
  • :146 _read_opt_ipv4_hoa ← D pcapkit/protocols/internet/mh.py:984 :meth: (1 refs)
  • :147 _read_opt_ipv4_hoa_rep ← D pcapkit/protocols/internet/mh.py:1008 :meth: (1 refs)
  • :148 _read_opt_ipv4_hoa_req ← D pcapkit/protocols/internet/mh.py:1005 :meth: (1 refs)
  • :149 _read_opt_ipv4_router ← D pcapkit/protocols/internet/mh.py:1011 :meth: (1 refs)
  • :150 _read_opt_lcmp ← D pcapkit/protocols/internet/mh.py:1083 :meth: (1 refs)
  • :151 _read_opt_lla_addr ← D pcapkit/protocols/internet/mh.py:975 :meth: (1 refs)
  • :152 _read_opt_lma_up ← D pcapkit/protocols/internet/mh.py:1074 :meth: (1 refs)
  • :153 _read_opt_lmaa ← D pcapkit/protocols/internet/mh.py:1020 :meth: (1 refs)
  • :154 _read_opt_load ← D pcapkit/protocols/internet/mh.py:1041 :meth: (1 refs)
  • :155 _read_opt_local_prefix ← D pcapkit/protocols/internet/mh.py:1095 :meth: (1 refs)
  • :156 _read_opt_mag_addr ← D pcapkit/protocols/internet/mh.py:1050 :meth: (1 refs)
  • :157 _read_opt_mag_id ← D pcapkit/protocols/internet/mh.py:1089 :meth: (1 refs)
  • :158 _read_opt_mag_mp ← D pcapkit/protocols/internet/mh.py:1086 :meth: (1 refs)
  • :159 _read_opt_mcast ← D pcapkit/protocols/internet/mh.py:1077 :meth: (2 refs)
  • :160 _read_opt_mcast_ack ← D pcapkit/protocols/internet/mh.py:1080 :meth: (1 refs)
  • :161 _read_opt_mcast_sel ← D pcapkit/protocols/internet/mh.py:1059 :meth: (1 refs)
  • :162 _read_opt_mn_group ← D pcapkit/protocols/internet/mh.py:1047 :meth: (1 refs)
  • :163 _read_opt_mn_lla_iid ← D pcapkit/protocols/internet/mh.py:1023 :meth: (1 refs)
  • :164 _read_opt_mn_lli ← D pcapkit/protocols/internet/mh.py:972 :meth: (1 refs)
  • :165 _read_opt_nat ← D pcapkit/protocols/internet/mh.py:990 :meth: (1 refs)
  • :166 _read_opt_offload ← D pcapkit/protocols/internet/mh.py:1056 :meth: (1 refs)
  • :167 _read_opt_prev_maar ← D pcapkit/protocols/internet/mh.py:1098 :meth: (1 refs)
  • :168 _read_opt_qos ← D pcapkit/protocols/internet/mh.py:1071 :meth: (1 refs)
  • :169 _read_opt_rc ← D pcapkit/protocols/internet/mh.py:1035 :meth: (1 refs)
  • :170 _read_opt_redirect ← D pcapkit/protocols/internet/mh.py:1038 :meth: (1 refs)
  • :171 _read_opt_restart ← D pcapkit/protocols/internet/mh.py:981 :meth: (1 refs)
  • :172 _read_opt_serv_maar ← D pcapkit/protocols/internet/mh.py:1101 :meth: (1 refs)
  • :173 _read_opt_service ← D pcapkit/protocols/internet/mh.py:957 :meth: (1 refs)
  • :174 _read_opt_timestamp ← D pcapkit/protocols/internet/mh.py:978 :meth: (1 refs)
  • :175 _read_opt_transient ← D pcapkit/protocols/internet/mh.py:1026 :meth: (1 refs)
  • :176 _read_opt_vendor ← D pcapkit/protocols/internet/mh.py:954 :meth: (1 refs)
  • :189 _make_opt_pad ← D pcapkit/protocols/internet/mh.py:898 :meth: (2 refs)
  • :190 _make_opt_bra ← D pcapkit/protocols/internet/mh.py:904 :meth: (1 refs)
  • :191 _make_opt_aca ← D pcapkit/protocols/internet/mh.py:907 :meth: (1 refs)
  • :192 _make_opt_ni ← D pcapkit/protocols/internet/mh.py:910 :meth: (1 refs)
  • :193 _make_opt_bad ← D pcapkit/protocols/internet/mh.py:913 :meth: (1 refs)
  • :194 _make_opt_mnp ← D pcapkit/protocols/internet/mh.py:916 :meth: (1 refs)
  • :195 _make_opt_lla ← D pcapkit/protocols/internet/mh.py:919 :meth: (1 refs)
  • :196 _make_opt_mn_id ← D pcapkit/corekit/fields/ipaddress.py:163 :meth: (3 refs)
  • :197 _make_opt_auth ← D pcapkit/protocols/internet/mh.py:925 :meth: (1 refs)
  • :198 _make_opt_mesg_id ← D pcapkit/protocols/internet/mh.py:928 :meth: (1 refs)
  • :199 _make_opt_cga_pr ← D pcapkit/protocols/internet/mh.py:931 :meth: (1 refs)
  • :200 _make_opt_cga_param ← D pcapkit/protocols/internet/mh.py:934 :meth: (1 refs)
  • :201 _make_opt_signature ← D pcapkit/protocols/internet/mh.py:937 :meth: (1 refs)
  • :202 _make_opt_phkt ← D pcapkit/protocols/internet/mh.py:940 :meth: (1 refs)
  • :203 _make_opt_ct_init ← D pcapkit/protocols/internet/mh.py:943 :meth: (1 refs)
  • :204 _make_opt_ct ← D pcapkit/protocols/internet/mh.py:946 :meth: (1 refs)
  • :205 _make_opt_exp ← D pcapkit/protocols/internet/mh.py:952 :meth: (1 refs)
  • :206 _make_opt_badf ← D pcapkit/protocols/internet/mh.py:961 :meth: (1 refs)
  • :207 _make_opt_ipv6_ap ← D pcapkit/protocols/internet/mh.py:1000 :meth: (1 refs)
  • :208 _make_opt_alt_ipv4_coa ← D pcapkit/protocols/internet/mh.py:1045 :meth: (1 refs)
  • :209 _make_opt_ams4 ← D pcapkit/protocols/internet/mh.py:1066 :meth: (1 refs)
  • :210 _make_opt_ams6 ← D pcapkit/protocols/internet/mh.py:1069 :meth: (1 refs)
  • :211 _make_opt_anchored ← D pcapkit/protocols/internet/mh.py:1093 :meth: (1 refs)
  • :212 _make_opt_ani ← D pcapkit/protocols/internet/mh.py:1054 :meth: (1 refs)
  • :213 _make_opt_att ← D pcapkit/protocols/internet/mh.py:970 :meth: (1 refs)
  • :214 _make_opt_bid ← D pcapkit/protocols/internet/mh.py:1003 :meth: (1 refs)
  • :215 _make_opt_cr ← D pcapkit/protocols/internet/mh.py:1018 :meth: (1 refs)
  • :216 _make_opt_dlif_lla ← D pcapkit/protocols/internet/mh.py:1105 :meth: (1 refs)
  • :217 _make_opt_dlif_lladdr ← D pcapkit/protocols/internet/mh.py:1108 :meth: (1 refs)
  • :218 _make_opt_dmnp ← D pcapkit/protocols/internet/mh.py:1063 :meth: (1 refs)
  • :219 _make_opt_dns ← D pcapkit/protocols/internet/mh.py:949 :meth: (1 refs)
  • :220 _make_opt_fid ← D pcapkit/protocols/internet/mh.py:1033 :meth: (1 refs)
  • :221 _make_opt_fs ← D pcapkit/protocols/internet/mh.py:1030 :meth: (1 refs)
  • :222 _make_opt_gre ← D pcapkit/protocols/internet/mh.py:997 :meth: (1 refs)
  • :223 _make_opt_hi ← D pcapkit/protocols/internet/mh.py:967 :meth: (1 refs)
  • :224 _make_opt_hnp ← D pcapkit/protocols/internet/mh.py:964 :meth: (1 refs)
  • :225 _make_opt_ipv4_ack ← D pcapkit/protocols/internet/mh.py:988 :meth: (1 refs)
  • :226 _make_opt_ipv4_coa ← D pcapkit/protocols/internet/mh.py:994 :meth: (1 refs)
  • :227 _make_opt_ipv4_dhcp ← D pcapkit/protocols/internet/mh.py:1015 :meth: (1 refs)
  • :228 _make_opt_ipv4_hoa ← D pcapkit/protocols/internet/mh.py:985 :meth: (1 refs)
  • :229 _make_opt_ipv4_hoa_rep ← D pcapkit/protocols/internet/mh.py:1009 :meth: (1 refs)
  • :230 _make_opt_ipv4_hoa_req ← D pcapkit/protocols/internet/mh.py:1006 :meth: (1 refs)
  • :231 _make_opt_ipv4_router ← D pcapkit/protocols/internet/mh.py:1012 :meth: (1 refs)
  • :232 _make_opt_lcmp ← D pcapkit/protocols/internet/mh.py:1084 :meth: (1 refs)
  • :233 _make_opt_lla_addr ← D pcapkit/protocols/internet/mh.py:976 :meth: (1 refs)
  • :234 _make_opt_lma_up ← D pcapkit/protocols/internet/mh.py:1075 :meth: (1 refs)
  • :235 _make_opt_lmaa ← D pcapkit/protocols/internet/mh.py:1021 :meth: (1 refs)
  • :236 _make_opt_load ← D pcapkit/protocols/internet/mh.py:1042 :meth: (1 refs)
  • :237 _make_opt_local_prefix ← D pcapkit/protocols/internet/mh.py:1096 :meth: (1 refs)
  • :238 _make_opt_mag_addr ← D pcapkit/protocols/internet/mh.py:1051 :meth: (1 refs)
  • :239 _make_opt_mag_id ← D pcapkit/protocols/internet/mh.py:1090 :meth: (1 refs)
  • :240 _make_opt_mag_mp ← D pcapkit/protocols/internet/mh.py:1087 :meth: (1 refs)
  • :241 _make_opt_mcast ← D pcapkit/protocols/internet/mh.py:1078 :meth: (1 refs)
  • :242 _make_opt_mcast_ack ← D pcapkit/protocols/internet/mh.py:1081 :meth: (1 refs)
  • :243 _make_opt_mcast_sel ← D pcapkit/protocols/internet/mh.py:1060 :meth: (1 refs)
  • :244 _make_opt_mn_group ← D pcapkit/protocols/internet/mh.py:1048 :meth: (1 refs)
  • :245 _make_opt_mn_lla_iid ← D pcapkit/protocols/internet/mh.py:1024 :meth: (1 refs)
  • :246 _make_opt_mn_lli ← D pcapkit/protocols/internet/mh.py:973 :meth: (1 refs)
  • :247 _make_opt_nat ← D pcapkit/protocols/internet/mh.py:991 :meth: (1 refs)
  • :248 _make_opt_offload ← D pcapkit/protocols/internet/mh.py:1057 :meth: (1 refs)
  • :249 _make_opt_prev_maar ← D pcapkit/protocols/internet/mh.py:1099 :meth: (1 refs)
  • :250 _make_opt_qos ← D pcapkit/protocols/internet/mh.py:1072 :meth: (1 refs)
  • :251 _make_opt_rc ← D pcapkit/protocols/internet/mh.py:1036 :meth: (1 refs)
  • :252 _make_opt_redirect ← D pcapkit/protocols/internet/mh.py:1039 :meth: (1 refs)
  • :253 _make_opt_restart ← D pcapkit/protocols/internet/mh.py:982 :meth: (1 refs)
  • :254 _make_opt_serv_maar ← D pcapkit/protocols/internet/mh.py:1102 :meth: (1 refs)
  • :255 _make_opt_service ← D pcapkit/protocols/internet/mh.py:958 :meth: (1 refs)
  • :256 _make_opt_timestamp ← D pcapkit/protocols/internet/mh.py:979 :meth: (1 refs)
  • :257 _make_opt_transient ← D pcapkit/protocols/internet/mh.py:1027 :meth: (1 refs)
  • :258 _make_opt_vendor ← D pcapkit/protocols/internet/mh.py:955 :meth: (1 refs)
  • :262 _read_ext_multiprefix ← D pcapkit/protocols/internet/mh.py:1121 :meth: (1 refs)
  • :263 _read_ext_exp ← D pcapkit/protocols/internet/mh.py:1124 :meth: (3 refs)
  • :267 _make_ext_multiprefix ← D pcapkit/protocols/internet/mh.py:1122 :meth: (1 refs)
  • :268 _make_ext_exp ← D pcapkit/protocols/internet/mh.py:1125 :meth: (3 refs)

docs/source/pcapkit/protocols/misc/pcapng.rst

  • :46 _read_block_shb ← D pcapkit/protocols/misc/pcapng.py:327 :meth: (1 refs)
  • :47 _read_block_idb ← D pcapkit/protocols/misc/pcapng.py:330 :meth: (1 refs)
  • :48 _read_block_epb ← D pcapkit/protocols/misc/pcapng.py:333 :meth: (1 refs)
  • :49 _read_block_spb ← D pcapkit/protocols/misc/pcapng.py:336 :meth: (1 refs)
  • :50 _read_block_nrb ← D pcapkit/protocols/misc/pcapng.py:339 :meth: (1 refs)
  • :51 _read_block_isb ← D pcapkit/protocols/misc/pcapng.py:342 :meth: (1 refs)
  • :52 _read_block_systemd ← D pcapkit/protocols/misc/pcapng.py:345 :meth: (1 refs)
  • :53 _read_block_dsb ← D pcapkit/protocols/misc/pcapng.py:348 :meth: (1 refs)
  • :54 _read_block_cb ← D pcapkit/protocols/misc/pcapng.py:351 :meth: (2 refs)
  • :55 _read_block_packet ← D pcapkit/protocols/misc/pcapng.py:357 :meth: (1 refs)
  • :59 _read_option_endofopt ← D pcapkit/protocols/misc/pcapng.py:371 :meth: (1 refs)
  • :60 _read_option_comment ← D pcapkit/protocols/misc/pcapng.py:374 :meth: (1 refs)
  • :62 _read_option_if_name ← D pcapkit/protocols/misc/pcapng.py:377 :meth: (1 refs)
  • :63 _read_option_if_description ← D pcapkit/protocols/misc/pcapng.py:380 :meth: (1 refs)
  • :64 _read_option_if_ipv4 ← D pcapkit/protocols/misc/pcapng.py:383 :meth: (1 refs)
  • :65 _read_option_if_ipv6 ← D pcapkit/protocols/misc/pcapng.py:386 :meth: (1 refs)
  • :66 _read_option_if_mac ← D pcapkit/protocols/misc/pcapng.py:389 :meth: (1 refs)
  • :67 _read_option_if_eui ← D pcapkit/protocols/misc/pcapng.py:392 :meth: (1 refs)
  • :68 _read_option_if_speed ← D pcapkit/protocols/misc/pcapng.py:395 :meth: (1 refs)
  • :69 _read_option_if_tsresol ← D pcapkit/protocols/misc/pcapng.py:398 :meth: (1 refs)
  • :70 _read_option_if_tzone ← D pcapkit/protocols/misc/pcapng.py:401 :meth: (1 refs)
  • :71 _read_option_if_filter ← D pcapkit/protocols/misc/pcapng.py:404 :meth: (1 refs)
  • :72 _read_option_if_os ← D pcapkit/protocols/misc/pcapng.py:407 :meth: (1 refs)
  • :73 _read_option_if_fcslen ← D pcapkit/protocols/misc/pcapng.py:410 :meth: (1 refs)
  • :74 _read_option_if_tsoffset ← D pcapkit/protocols/misc/pcapng.py:413 :meth: (1 refs)
  • :75 _read_option_if_hardware ← D pcapkit/protocols/misc/pcapng.py:416 :meth: (1 refs)
  • :76 _read_option_if_txspeed ← D pcapkit/protocols/misc/pcapng.py:419 :meth: (1 refs)
  • :77 _read_option_if_rxspeed ← D pcapkit/protocols/misc/pcapng.py:422 :meth: (1 refs)
  • :78 _read_option_epb_flags ← D pcapkit/protocols/misc/pcapng.py:425 :meth: (2 refs)
  • :79 _read_option_epb_hash ← D pcapkit/protocols/misc/pcapng.py:428 :meth: (2 refs)
  • :80 _read_option_epb_dropcount ← D pcapkit/protocols/misc/pcapng.py:431 :meth: (1 refs)
  • :81 _read_option_epb_packetid ← D pcapkit/protocols/misc/pcapng.py:434 :meth: (1 refs)
  • :82 _read_option_epb_queue ← D pcapkit/protocols/misc/pcapng.py:437 :meth: (1 refs)
  • :83 _read_option_epb_verdict ← D pcapkit/protocols/misc/pcapng.py:440 :meth: (1 refs)
  • :84 _read_option_ns_dnsname ← D pcapkit/protocols/misc/pcapng.py:443 :meth: (1 refs)
  • :85 _read_option_ns_dnsipv4 ← D pcapkit/protocols/misc/pcapng.py:446 :meth: (1 refs)
  • :86 _read_option_ns_dnsipv6 ← D pcapkit/protocols/misc/pcapng.py:449 :meth: (1 refs)
  • :87 _read_option_isb_starttime ← D pcapkit/protocols/misc/pcapng.py:452 :meth: (1 refs)
  • :88 _read_option_isb_endtime ← D pcapkit/protocols/misc/pcapng.py:455 :meth: (1 refs)
  • :89 _read_option_isb_ifrecv ← D pcapkit/protocols/misc/pcapng.py:458 :meth: (1 refs)
  • :90 _read_option_isb_ifdrop ← D pcapkit/protocols/misc/pcapng.py:461 :meth: (1 refs)
  • :91 _read_option_isb_filteraccept ← D pcapkit/protocols/misc/pcapng.py:464 :meth: (1 refs)
  • :92 _read_option_isb_osdrop ← D pcapkit/protocols/misc/pcapng.py:467 :meth: (1 refs)
  • :93 _read_option_isb_usrdeliv ← D pcapkit/protocols/misc/pcapng.py:470 :meth: (1 refs)
  • :99 _read_record_end ← D pcapkit/protocols/misc/pcapng.py:490 :meth: (1 refs)
  • :100 _read_record_ipv4 ← D pcapkit/protocols/misc/pcapng.py:493 :meth: (1 refs)
  • :101 _read_record_ipv6 ← D pcapkit/protocols/misc/pcapng.py:496 :meth: (1 refs)
  • :104 _read_secrets_tls ← D pcapkit/protocols/misc/pcapng.py:510 :meth: (1 refs)
  • :105 _read_secrets_wireguard ← D pcapkit/protocols/misc/pcapng.py:513 :meth: (1 refs)
  • :106 _read_secrets_zigbee_nwk ← D pcapkit/protocols/misc/pcapng.py:516 :meth: (1 refs)
  • :107 _read_secrets_zigbee_aps ← D pcapkit/protocols/misc/pcapng.py:519 :meth: (1 refs)
  • :110 _make_block_shb ← D pcapkit/protocols/misc/pcapng.py:328 :meth: (1 refs)
  • :111 _make_block_idb ← D pcapkit/protocols/misc/pcapng.py:331 :meth: (1 refs)
  • :112 _make_block_epb ← D pcapkit/protocols/misc/pcapng.py:334 :meth: (1 refs)
  • :113 _make_block_spb ← D pcapkit/protocols/misc/pcapng.py:337 :meth: (1 refs)
  • :114 _make_block_nrb ← D pcapkit/protocols/misc/pcapng.py:340 :meth: (1 refs)
  • :115 _make_block_isb ← D pcapkit/protocols/misc/pcapng.py:343 :meth: (1 refs)
  • :116 _make_block_systemd ← D pcapkit/protocols/misc/pcapng.py:346 :meth: (1 refs)
  • :117 _make_block_dsb ← D pcapkit/protocols/misc/pcapng.py:349 :meth: (1 refs)
  • :118 _make_block_cb ← D pcapkit/protocols/misc/pcapng.py:352 :meth: (2 refs)
  • :119 _make_block_packet ← D pcapkit/protocols/misc/pcapng.py:358 :meth: (1 refs)
  • :123 _make_option_endofopt ← D pcapkit/protocols/misc/pcapng.py:372 :meth: (1 refs)
  • :124 _make_option_comment ← D pcapkit/protocols/misc/pcapng.py:375 :meth: (1 refs)
  • :126 _make_option_if_name ← D pcapkit/protocols/misc/pcapng.py:378 :meth: (1 refs)
  • :127 _make_option_if_description ← D pcapkit/protocols/misc/pcapng.py:381 :meth: (1 refs)
  • :128 _make_option_if_ipv4 ← D pcapkit/protocols/misc/pcapng.py:384 :meth: (1 refs)
  • :129 _make_option_if_ipv6 ← D pcapkit/protocols/misc/pcapng.py:387 :meth: (1 refs)
  • :130 _make_option_if_mac ← D pcapkit/protocols/misc/pcapng.py:390 :meth: (1 refs)
  • :131 _make_option_if_eui ← D pcapkit/protocols/misc/pcapng.py:393 :meth: (1 refs)
  • :132 _make_option_if_speed ← D pcapkit/protocols/misc/pcapng.py:396 :meth: (1 refs)
  • :133 _make_option_if_tsresol ← D pcapkit/protocols/misc/pcapng.py:399 :meth: (1 refs)
  • :134 _make_option_if_tzone ← D pcapkit/protocols/misc/pcapng.py:402 :meth: (1 refs)
  • :135 _make_option_if_filter ← D pcapkit/protocols/misc/pcapng.py:405 :meth: (1 refs)
  • :136 _make_option_if_os ← D pcapkit/protocols/misc/pcapng.py:408 :meth: (1 refs)
  • :137 _make_option_if_fcslen ← D pcapkit/protocols/misc/pcapng.py:411 :meth: (1 refs)
  • :138 _make_option_if_tsoffset ← D pcapkit/protocols/misc/pcapng.py:414 :meth: (1 refs)
  • :139 _make_option_if_hardware ← D pcapkit/protocols/misc/pcapng.py:417 :meth: (1 refs)
  • :140 _make_option_if_txspeed ← D pcapkit/protocols/misc/pcapng.py:420 :meth: (1 refs)
  • :141 _make_option_if_rxspeed ← D pcapkit/protocols/misc/pcapng.py:423 :meth: (1 refs)
  • :142 _make_option_epb_flags ← D pcapkit/protocols/misc/pcapng.py:426 :meth: (2 refs)
  • :143 _make_option_epb_hash ← D pcapkit/protocols/misc/pcapng.py:429 :meth: (2 refs)
  • :144 _make_option_epb_dropcount ← D pcapkit/protocols/misc/pcapng.py:432 :meth: (1 refs)
  • :145 _make_option_epb_packetid ← D pcapkit/protocols/misc/pcapng.py:435 :meth: (1 refs)
  • :146 _make_option_epb_queue ← D pcapkit/protocols/misc/pcapng.py:438 :meth: (1 refs)
  • :147 _make_option_epb_verdict ← D pcapkit/protocols/misc/pcapng.py:441 :meth: (1 refs)
  • :148 _make_option_ns_dnsname ← D pcapkit/protocols/misc/pcapng.py:444 :meth: (1 refs)
  • :149 _make_option_ns_dnsipv4 ← D pcapkit/protocols/misc/pcapng.py:447 :meth: (1 refs)
  • :150 _make_option_ns_dnsipv6 ← D pcapkit/protocols/misc/pcapng.py:450 :meth: (1 refs)
  • :151 _make_option_isb_starttime ← D pcapkit/protocols/misc/pcapng.py:453 :meth: (1 refs)
  • :152 _make_option_isb_endtime ← D pcapkit/protocols/misc/pcapng.py:456 :meth: (1 refs)
  • :153 _make_option_isb_ifrecv ← D pcapkit/protocols/misc/pcapng.py:459 :meth: (1 refs)
  • :154 _make_option_isb_ifdrop ← D pcapkit/protocols/misc/pcapng.py:462 :meth: (1 refs)
  • :155 _make_option_isb_filteraccept ← D pcapkit/protocols/misc/pcapng.py:465 :meth: (1 refs)
  • :156 _make_option_isb_osdrop ← D pcapkit/protocols/misc/pcapng.py:468 :meth: (1 refs)
  • :157 _make_option_isb_usrdeliv ← D pcapkit/protocols/misc/pcapng.py:471 :meth: (1 refs)
  • :163 _make_record_end ← D pcapkit/protocols/misc/pcapng.py:491 :meth: (1 refs)
  • :164 _make_record_ipv4 ← D pcapkit/protocols/misc/pcapng.py:494 :meth: (1 refs)
  • :165 _make_record_ipv6 ← D pcapkit/protocols/misc/pcapng.py:497 :meth: (1 refs)
  • :168 _make_secrets_tls ← D pcapkit/protocols/misc/pcapng.py:511 :meth: (1 refs)
  • :169 _make_secrets_wireguard ← D pcapkit/protocols/misc/pcapng.py:514 :meth: (1 refs)
  • :170 _make_secrets_zigbee_nwk ← D pcapkit/protocols/misc/pcapng.py:517 :meth: (1 refs)
  • :171 _make_secrets_zigbee_aps ← D pcapkit/protocols/misc/pcapng.py:520 :meth: (1 refs)
  • :271 pcapkit.protocols.schema.misc.pcapng._OPT_Option ← B rendered Bases: link from a documented subclass
  • :291 pcapkit.protocols.schema.misc.pcapng._IF_Option ← B rendered Bases: link from a documented subclass
  • :359 pcapkit.protocols.schema.misc.pcapng._EPB_Option ← B rendered Bases: link from a documented subclass
  • :387 pcapkit.protocols.schema.misc.pcapng._NS_Option ← B rendered Bases: link from a documented subclass
  • :403 pcapkit.protocols.schema.misc.pcapng._ISB_Option ← B rendered Bases: link from a documented subclass
  • :435 pcapkit.protocols.schema.misc.pcapng._PACK_Option ← B rendered Bases: link from a documented subclass

docs/source/pcapkit/protocols/protocol.rst

  • :57 _read_packet ← D pcapkit/utilities/decorators.py:62 :meth: (1 refs)
  • :64 _lookup_registry ← D pcapkit/protocols/schema/schema.py:946 :meth: (via inherited-from:pcapkit.protocols.protocol.ProtocolBase) (1 refs)
  • :65 _lookup_next_layer ← D pcapkit/protocols/transport/sctp.py:818 :meth: (3 refs)
  • :66 _decode_next_layer ← D pcapkit/protocols/protocol.py:354 :meth: (9 refs)
  • :67 _import_next_layer ← D pcapkit/protocols/protocol.py:355 :meth: (11 refs)
  • :68 _get_context ← R docs/source/pcapkit/corekit/context.rst:29 :meth: (1 refs)
  • :71 _file ← D pcapkit/utilities/decorators.py:50 :attr: (4 refs)
  • :86 _exlayer ← D pcapkit/protocols/protocol.py:860 :attr: (1 refs)
  • :87 _exproto ← D pcapkit/protocols/protocol.py:864 :attr: (1 refs)
  • :88 _exctx ← D pcapkit/protocols/protocol.py:874 :attr: (1 refs)

docs/source/pcapkit/protocols/transport/sctp.rst

  • :46 _get_payload ← D pcapkit/protocols/schema/transport/sctp.py:871 :meth: (1 refs)
  • :47 _decode_next_layer ← D pcapkit/protocols/transport/sctp.py:348 :meth: (2 refs)
  • :49 _read_sctp_chunks ← D pcapkit/protocols/transport/sctp.py:369 :meth: (via same-module-bare) (1 refs)
  • :50 _make_sctp_chunks ← D pcapkit/protocols/transport/sctp.py:370 :meth: (via same-module-bare) (1 refs)
  • :52 _read_sctp_parameters ← D pcapkit/protocols/transport/sctp.py:394 :meth: (via same-module-bare) (1 refs)
  • :53 _make_sctp_parameters ← D pcapkit/protocols/transport/sctp.py:395 :meth: (via same-module-bare) (1 refs)
  • :55 _read_sctp_causes ← D pcapkit/protocols/transport/sctp.py:414 :meth: (via same-module-bare) (1 refs)
  • :56 _make_sctp_causes ← D pcapkit/protocols/transport/sctp.py:415 :meth: (via same-module-bare) (1 refs)
  • :59 _read_chunk_donone ← D pcapkit/protocols/transport/sctp.py:288 :meth: (1 refs)
  • :60 _read_chunk_data ← D pcapkit/protocols/transport/sctp.py:247 :meth: (1 refs)
  • :61 _read_chunk_init ← D pcapkit/protocols/transport/sctp.py:250 :meth: (1 refs)
  • :62 _read_chunk_init_ack ← D pcapkit/protocols/transport/sctp.py:253 :meth: (1 refs)
  • :63 _read_chunk_sack ← D pcapkit/protocols/transport/sctp.py:256 :meth: (1 refs)
  • :64 _read_chunk_heartbeat ← D pcapkit/protocols/transport/sctp.py:259 :meth: (1 refs)
  • :65 _read_chunk_heartbeat_ack ← D pcapkit/protocols/transport/sctp.py:262 :meth: (1 refs)
  • :66 _read_chunk_abort ← D pcapkit/protocols/transport/sctp.py:265 :meth: (1 refs)
  • :67 _read_chunk_shutdown ← D pcapkit/protocols/transport/sctp.py:268 :meth: (1 refs)
  • :68 _read_chunk_shutdown_ack ← D pcapkit/protocols/transport/sctp.py:271 :meth: (1 refs)
  • :69 _read_chunk_error ← D pcapkit/protocols/transport/sctp.py:274 :meth: (1 refs)
  • :70 _read_chunk_cookie_echo ← D pcapkit/protocols/transport/sctp.py:277 :meth: (1 refs)
  • :71 _read_chunk_cookie_ack ← D pcapkit/protocols/transport/sctp.py:280 :meth: (1 refs)
  • :72 _read_chunk_shutdown_complete ← D pcapkit/protocols/transport/sctp.py:283 :meth: (1 refs)
  • :75 _make_chunk_data ← D pcapkit/protocols/transport/sctp.py:248 :meth: (1 refs)
  • :76 _make_chunk_init ← D pcapkit/protocols/transport/sctp.py:251 :meth: (1 refs)
  • :77 _make_chunk_init_ack ← D pcapkit/protocols/transport/sctp.py:254 :meth: (1 refs)
  • :78 _make_chunk_sack ← D pcapkit/protocols/transport/sctp.py:257 :meth: (1 refs)
  • :79 _make_chunk_heartbeat ← D pcapkit/protocols/transport/sctp.py:260 :meth: (1 refs)
  • :80 _make_chunk_heartbeat_ack ← D pcapkit/protocols/transport/sctp.py:263 :meth: (1 refs)
  • :81 _make_chunk_abort ← D pcapkit/protocols/transport/sctp.py:266 :meth: (1 refs)
  • :82 _make_chunk_shutdown ← D pcapkit/protocols/transport/sctp.py:269 :meth: (1 refs)
  • :83 _make_chunk_shutdown_ack ← D pcapkit/protocols/transport/sctp.py:272 :meth: (1 refs)
  • :84 _make_chunk_error ← D pcapkit/protocols/transport/sctp.py:275 :meth: (1 refs)
  • :85 _make_chunk_cookie_echo ← D pcapkit/protocols/transport/sctp.py:278 :meth: (1 refs)
  • :86 _make_chunk_cookie_ack ← D pcapkit/protocols/transport/sctp.py:281 :meth: (1 refs)
  • :87 _make_chunk_shutdown_complete ← D pcapkit/protocols/transport/sctp.py:284 :meth: (1 refs)
  • :90 _read_param_hbinfo ← D pcapkit/protocols/transport/sctp.py:302 :meth: (1 refs)
  • :91 _read_param_ipv4 ← D pcapkit/protocols/transport/sctp.py:305 :meth: (1 refs)
  • :92 _read_param_ipv6 ← D pcapkit/protocols/transport/sctp.py:308 :meth: (1 refs)
  • :93 _read_param_cookie ← D pcapkit/protocols/transport/sctp.py:311 :meth: (1 refs)
  • :94 _read_param_unrecognized ← D pcapkit/protocols/transport/sctp.py:314 :meth: (1 refs)
  • :95 _read_param_preservative ← D pcapkit/protocols/transport/sctp.py:317 :meth: (1 refs)
  • :96 _read_param_hostname ← D pcapkit/protocols/transport/sctp.py:320 :meth: (1 refs)
  • :97 _read_param_addrtypes ← D pcapkit/protocols/transport/sctp.py:323 :meth: (1 refs)
  • :100 _make_param_hbinfo ← D pcapkit/protocols/transport/sctp.py:303 :meth: (1 refs)
  • :101 _make_param_ipv4 ← D pcapkit/protocols/transport/sctp.py:306 :meth: (1 refs)
  • :102 _make_param_ipv6 ← D pcapkit/protocols/transport/sctp.py:309 :meth: (1 refs)
  • :103 _make_param_cookie ← D pcapkit/protocols/transport/sctp.py:312 :meth: (1 refs)
  • :104 _make_param_unrecognized ← D pcapkit/protocols/transport/sctp.py:315 :meth: (1 refs)
  • :105 _make_param_preservative ← D pcapkit/protocols/transport/sctp.py:318 :meth: (1 refs)
  • :106 _make_param_hostname ← D pcapkit/protocols/transport/sctp.py:321 :meth: (1 refs)
  • :107 _make_param_addrtypes ← D pcapkit/protocols/transport/sctp.py:324 :meth: (1 refs)
  • :109 _read_cause_donone ← D pcapkit/protocols/transport/sctp.py:331 :meth: (1 refs)

docs/source/pcapkit/protocols/transport/tcp.rst

  • :54 _read_tcp_options ← D pcapkit/protocols/transport/tcp.py:336 :meth: (via same-module-bare) (1 refs)
  • :56 _read_mode_eool ← D pcapkit/protocols/transport/tcp.py:203 :meth: (1 refs)
  • :57 _read_mode_nop ← D pcapkit/protocols/transport/tcp.py:206 :meth: (1 refs)
  • :58 _read_mode_mss ← D pcapkit/protocols/transport/tcp.py:209 :meth: (1 refs)
  • :59 _read_mode_ws ← D pcapkit/protocols/transport/tcp.py:212 :meth: (1 refs)
  • :60 _read_mode_sackpmt ← D pcapkit/protocols/transport/tcp.py:215 :meth: (1 refs)
  • :61 _read_mode_sack ← D pcapkit/protocols/transport/tcp.py:218 :meth: (1 refs)
  • :62 _read_mode_echo ← D pcapkit/protocols/transport/tcp.py:221 :meth: (1 refs)
  • :63 _read_mode_echore ← D pcapkit/protocols/transport/tcp.py:224 :meth: (1 refs)
  • :64 _read_mode_ts ← D pcapkit/protocols/transport/tcp.py:227 :meth: (1 refs)
  • :65 _read_mode_poc ← D pcapkit/protocols/transport/tcp.py:230 :meth: (1 refs)
  • :66 _read_mode_pocsp ← D pcapkit/protocols/transport/tcp.py:233 :meth: (1 refs)
  • :67 _read_mode_cc ← D pcapkit/protocols/transport/tcp.py:236 :meth: (1 refs)
  • :68 _read_mode_ccnew ← D pcapkit/protocols/transport/tcp.py:239 :meth: (1 refs)
  • :69 _read_mode_ccecho ← D pcapkit/protocols/transport/tcp.py:242 :meth: (1 refs)
  • :70 _read_mode_chkreq ← D pcapkit/protocols/transport/tcp.py:245 :meth: (1 refs)
  • :71 _read_mode_chksum ← D pcapkit/protocols/transport/tcp.py:248 :meth: (1 refs)
  • :72 _read_mode_sig ← D pcapkit/protocols/transport/tcp.py:251 :meth: (1 refs)
  • :73 _read_mode_qs ← D pcapkit/protocols/transport/tcp.py:254 :meth: (1 refs)
  • :74 _read_mode_timeout ← D pcapkit/protocols/transport/tcp.py:257 :meth: (1 refs)
  • :75 _read_mode_ao ← D pcapkit/protocols/transport/tcp.py:260 :meth: (1 refs)
  • :76 _read_mode_mp ← D pcapkit/protocols/transport/tcp.py:263 :meth: (2 refs)
  • :77 _read_mode_fastopen ← D pcapkit/protocols/transport/tcp.py:266 :meth: (1 refs)
  • :80 _read_mptcp_capable ← D pcapkit/protocols/transport/tcp.py:280 :meth: (1 refs)
  • :81 _read_mptcp_join ← D pcapkit/protocols/transport/tcp.py:283 :meth: (1 refs)
  • :82 _read_mptcp_dss ← D pcapkit/protocols/transport/tcp.py:286 :meth: (1 refs)
  • :83 _read_mptcp_addaddr ← D pcapkit/protocols/transport/tcp.py:289 :meth: (1 refs)
  • :84 _read_mptcp_remove ← D pcapkit/protocols/transport/tcp.py:292 :meth: (1 refs)
  • :85 _read_mptcp_prio ← D pcapkit/protocols/transport/tcp.py:295 :meth: (1 refs)
  • :86 _read_mptcp_fail ← D pcapkit/protocols/transport/tcp.py:298 :meth: (1 refs)
  • :87 _read_mptcp_fastclose ← D pcapkit/protocols/transport/tcp.py:301 :meth: (1 refs)
  • :93 _make_tcp_options ← D pcapkit/protocols/transport/sctp.py:859 :meth: (2 refs)
  • :95 _make_mode_eool ← D pcapkit/protocols/transport/tcp.py:204 :meth: (1 refs)
  • :96 _make_mode_nop ← D pcapkit/protocols/transport/tcp.py:207 :meth: (1 refs)
  • :97 _make_mode_mss ← D pcapkit/protocols/transport/tcp.py:210 :meth: (1 refs)
  • :98 _make_mode_ws ← D pcapkit/protocols/transport/tcp.py:213 :meth: (1 refs)
  • :99 _make_mode_sackpmt ← D pcapkit/protocols/transport/tcp.py:216 :meth: (1 refs)
  • :100 _make_mode_sack ← D pcapkit/protocols/transport/tcp.py:219 :meth: (1 refs)
  • :101 _make_mode_echo ← D pcapkit/protocols/transport/tcp.py:222 :meth: (1 refs)
  • :102 _make_mode_echore ← D pcapkit/protocols/transport/tcp.py:225 :meth: (1 refs)
  • :103 _make_mode_ts ← D pcapkit/protocols/transport/tcp.py:228 :meth: (1 refs)
  • :104 _make_mode_poc ← D pcapkit/protocols/transport/tcp.py:231 :meth: (1 refs)
  • :105 _make_mode_pocsp ← D pcapkit/protocols/transport/tcp.py:234 :meth: (1 refs)
  • :106 _make_mode_cc ← D pcapkit/protocols/transport/tcp.py:237 :meth: (1 refs)
  • :107 _make_mode_ccnew ← D pcapkit/protocols/transport/tcp.py:240 :meth: (1 refs)
  • :108 _make_mode_ccecho ← D pcapkit/protocols/transport/tcp.py:243 :meth: (1 refs)
  • :109 _make_mode_chkreq ← D pcapkit/protocols/transport/tcp.py:246 :meth: (1 refs)
  • :110 _make_mode_chksum ← D pcapkit/protocols/transport/tcp.py:249 :meth: (1 refs)
  • :111 _make_mode_sig ← D pcapkit/protocols/transport/tcp.py:252 :meth: (1 refs)
  • :112 _make_mode_qs ← D pcapkit/protocols/transport/tcp.py:255 :meth: (1 refs)
  • :113 _make_mode_timeout ← D pcapkit/protocols/transport/tcp.py:258 :meth: (1 refs)
  • :114 _make_mode_ao ← D pcapkit/protocols/transport/tcp.py:261 :meth: (1 refs)
  • :115 _make_mode_mp ← D pcapkit/protocols/transport/tcp.py:264 :meth: (2 refs)
  • :116 _make_mode_fastopen ← D pcapkit/protocols/transport/tcp.py:267 :meth: (1 refs)
  • :119 _make_mptcp_capable ← D pcapkit/protocols/transport/tcp.py:281 :meth: (1 refs)
  • :120 _make_mptcp_join ← D pcapkit/protocols/transport/tcp.py:284 :meth: (1 refs)
  • :121 _make_mptcp_dss ← D pcapkit/protocols/transport/tcp.py:287 :meth: (1 refs)
  • :122 _make_mptcp_addaddr ← D pcapkit/corekit/fields/ipaddress.py:156 :meth: (2 refs)
  • :123 _make_mptcp_remove ← D pcapkit/protocols/transport/tcp.py:293 :meth: (1 refs)
  • :124 _make_mptcp_prio ← D pcapkit/protocols/transport/tcp.py:296 :meth: (1 refs)
  • :125 _make_mptcp_fail ← D pcapkit/protocols/transport/tcp.py:299 :meth: (1 refs)
  • :126 _make_mptcp_fastclose ← D pcapkit/protocols/transport/tcp.py:302 :meth: (1 refs)

docs/source/pcapkit/protocols/transport/transport.rst

  • :23 _decode_next_layer ← D pcapkit/protocols/transport/sctp.py:804 :meth: (4 refs)

@JarryShaw
JarryShaw force-pushed the docs/private-directive-sweep-684 branch from de6c660 to 33bd693 Compare September 23, 2026 03:24
@JarryShaw JarryShaw changed the title docs: drop private-member directives nothing public references docs: reconcile the Sphinx directives to the contract-versus-recipe tenet (#684) Sep 23, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

NEEDS CHANGES

Independent cross-review, different model from whichever produced this diff. Pinned to head 33bd69389 — the branch tip was re-checked immediately before posting and had not moved. If this has been force-pushed since, treat this review as applying to that sha, not to whatever is current.

I was briefed against the original cross-reference-only rule, then mid-review the owner posted a superseding rule (contract-vs-recipe: document what a user needs to use a class and what an implementer needs to subclass it; hide per-code recipe; most private attributes stay by default; anything abstract or required-to-implement-across-subclasses must be documented). Everything below judges the diff against the new rule, not the old one.

The count: 590 is exactly right, not a different-scope approximation

Reproduced the whole-tree regex count myself: main 865, branch 701, 164 removed — same numbers now on both sides. But "590 single-underscore directives stay" is not a repo-wide remainder; it is the literal, exact line count of the itemized "Kept private-target directives" comment the author posted on this issue (gh api repos/JarryShaw/PyPCAPKit/issues/694/comments, single comment, grep -cE '^- \:[0-9]+`'` on its body → 590, verified twice). That comment enumerates every kept single-underscore directive with its justifying reference, across 22 pages.

Reconciling 701 → 590 to zero remainder, not just "close":

  • 101 sit entirely in docs/source/pcapkit/protocols/internet/hip.rst, which this PR deliberately never touches (owned by R1_COUNTER packs 12 octets where RFC 7401 §5.2.3 requires 16: counter is 4 octets, not the stated 8 #672/LOCATOR_SET is conformant only by accident: nested Locator.len shadows the parameter in padding, and len is in 4-octet units where RFC Length is bytes #679; the PR body calls this out and separately lists 48 of those 101 as follow-up candidates).
  • 10 are a false-positive in the whole-tree regex itself: docs/source/pcapkit/foundation/engines/3rdparty.rst:427-463 documents _pcap_backend.DISTRIBUTIONS, .ENGINE_NAMES, .Probe, and five functions — all public members, living in a module whose name happens to start with _. \S*\b_[A-Za-z0-9] matches the underscore in the module path, not a private member. These 10 lines are unchanged by this diff and present identically on main, so they inflate both the "865" and "701" side equally. 865 - 10 = 855 before, 701 - 10 = 691 after; 691 = 590 (itemized) + 101 (hip.rst), exact.
  • Per-file cross-check: computed remaining single-underscore counts independently for all 33 touched files and the 5 untouched files the kept-comment covers (ipaddress.rst, strings.rst, application.rst, protocols/index.rst, internet.rst) — every one matches the kept-comment's per-file bullet count exactly, and the 16 touched files absent from that comment all independently verify at 0 remaining.

Verdict on the count: CONFIRMED, exactly, not merely "correct under a stated definition." My colleague's 865/701/164 are reproducible and internally consistent, but that regex is coarser than the PR's own definition of "private member" (it also catches private module segments). Once that's corrected and hip.rst is set aside as explicitly out of scope, the two numbers agree to the last digit.

Per-claim verdicts (original brief, still valid — these are about rendering safety, independent of which policy is in force)

  1. Every removal genuinely unreferenced (old test): CONFIRMED for the sample. A sub-agent sampled 20 removals across 10 files and all 5 directive types, deliberately weighted toward generic/reused names (_make_data, _seconds, _request, whole-class removal _NamedStream) and toward the one that looked like a real counterexample (_make_data/ProtocolBase._make_data via a #: comment on OUT_OF_BAND_KEYWORDS) — that one resolved in the PR's favor: the comment sits on an undocumented constant with no autodata, so it was dead prose per the PR's own stated exception. No wrongly-removed directive found in the sample (old test).
  2. No orphaned/malformed rst: CONFIRMED. Read the full diff plus a script pass over every touched file's post-change content: no directive-option line left without its parent, no now-empty section (3rdparty.rst's "Internal Definitions" heading was removed along with 100% of its body, confirmed by reading the resulting file), no new duplicate-blank-line runs (reassembly.rst's one 2-blank-line spot pre-exists on main, unrelated to this diff).
  3. CONTRIBUTING.md accuracy: MOOT, and now itself a required change (see below) — it documents the superseded rule.
  4. pcapkit/ untouched: CONFIRMED. git diff --name-only f0999858e...33bd69389 -- pcapkit/ is empty.
  5. No changelog file touched: CONFIRMED. No changelog path anywhere in the diff.
  6. Docs still build: PARTIALLY VERIFIED, not with a live build. I ran the static substitute myself: extracted every removed target's bare name (131 unique) and grepped all of docs/source/**/*.rst for it appearing inside a role backtick — zero hits, so no rst-prose cross-reference was left dangling by removal. A background agent was also dispatched to attempt a real sphinx-build warning-diff in /local/home/jarryx/tmp/xreview-694/; it had not reported back by the time this review was posted, so I could not verify whether autodoc's docstring-embedded roles produce any new warning. Given the PR author's own comment separately claims a build was run (before/after 55→54 warnings, the one that disappeared belonging to a removed directive), that claim is unverified by me directly and should not be taken as confirmed by this review.

The substantive re-review under the new "contract vs recipe" rule — this is why the PR needs changes

_make_data is the clearest violation, and it's not a subclass-page nit — the base contract itself is now completely undocumented. pcapkit/protocols/protocol.py:1629 declares it a concrete @classmethod (not @abstractmethod — the owner is right that it isn't literally abstract), but git grep -l "def _make_data" -- 'pcapkit/protocols/**/*.py' finds 28 overriding files — essentially every concrete protocol class. That is a template-method extension point by any functional definition, and docs/source/pcapkit/protocols/protocol.rst (the base class page) had its own .. automethod:: _make_data line removed along with ~24 subclass-page copies. After this PR, _make_data is documented nowhere — not on the base, not on any subclass. That directly contradicts "abstract method/attribute needed to be implemented across subclasses must be documented."

  • docs/source/pcapkit/protocols/protocol.rst (pre-change line 60): restore .. automethod:: _make_data on the base ProtocolBase/Protocol class at minimum. Whether every one of the ~24 subclass-page copies also needs to return is a closer call (each is genuinely the per-protocol "recipe" for the same hook) — but the base declaration returning is not optional.
  1. _get_payload — same shape, smaller footprint, and inconsistently handled even on its own terms. Base at protocol.py:1347, concrete, overridden in exactly 2 files: pcapkit/protocols/misc/pcapng.py and pcapkit/protocols/transport/sctp.py. The PR removed it from protocol.rst (base) and from pcapng.rst (one override), but left it in sctp.rst (the other override) — so the diff itself disagrees about whether this hook is documentation-worthy.

    • docs/source/pcapkit/protocols/protocol.rst (pre-change line 58): restore .. automethod:: _get_payload.
    • docs/source/pcapkit/protocols/misc/pcapng.rst (pre-change line 40): restore .. automethod:: _get_payload, to match what sctp.rst already kept.
  2. _data / _info on the Protocol base are core state, not recipe. protocol.py declares both as typed instance attributes (_data: 'bytes', _info: '_PT') and every protocol subclass either reads or writes self._info/self._data directly — confirmed by git grep -c "self\._info\b" -- 'pcapkit/protocols/**/*.py', nonzero in 24 subclass files, and self\._data\b nonzero in 6. An implementer subclassing Protocol needs to know these exist. Removed from docs/source/pcapkit/protocols/protocol.rst (pre-change lines 70 and 72).

    • Restore both .. autoattribute:: _data and .. autoattribute:: _info in protocol.rst.
  3. The 22 removed autoattribute lines elsewhere are the class the new rule's first limb ("most private attributes should be kept") is aimed at, and the PR removed all of them uniformly. _dlink/_closed/_declf (3rdparty.rst, three different 3rd-party engine wrapper classes), _flag_v/_flag_n/_ifile/_ofile/_frnum/_reasm/_trace/_exnam/_exeng (extraction.rst, on Extractor — the library's main entry-point class), _flag_s/_flag_n/_timeout (reassembly.rst), _stream/_bidir (traceflow.rst). I checked subclass usage for a few (_reasm/_exeng are the manager/engine handles the whole rest of the library's docs are about; _stream/_bidir/_flag_n/_timeout turn out to be used only inside their own base class, no subclass touches them directly) — so the individual "is this touched elsewhere" test gives mixed signal, but that test isn't what the new rule's first limb asks: it's a default toward keeping attributes, independent of cross-subclass usage. Under that default these should mostly come back; I did not find a stated reason in the PR to except any specific one.

    • This is a broad category (22 lines across 4 files); I'm flagging the category with the file:line list already given by the diff itself (3rdparty.rst, extraction.rst, reassembly.rst, traceflow.rst, per the removed-hunk locations above) rather than re-deriving each one, and leaving it to the author to apply the same override-count check I did for _make_data/_get_payload to decide which (if any) are truly exception-worthy under "use your best judgement to determine if other non-applicable entries... should be excluded."
  4. Where the PR is right, confirmed independently, not just plausible: every _xxx_none/_xxx_donone/_xxx_unknown/_xxx_unassigned dispatch-fallback method I checked — _read_opt_none/_make_opt_none (hopopt/ipv6_opts/mh), _read_data_type_none/_make_data_type_none (ipv6_route.py:210,314 — literally the getattr(self, name, self._read_data_type_none) fallback, single-class, zero overrides), the SCTP _read_cause_*/_make_cause_*/_*_donone family, _make_sctp_chunk/_make_sctp_parameter/_make_sctp_cause (each git grep -c to exactly 3 hits, all inside sctp.py itself) — are single-class leaf implementations with zero overrides anywhere in the tree. They are not abstract, not required-to-implement-across-subclasses, and (being methods, not attributes) don't get the attribute-default-keep either. Same for the four ESP-specific methods the diff removed (_payload_bytes, _read_trailer, _make_opaque, _split_key — each used only inside esp.py, no overrides) and for _NamedStream/_get_decoder/_decode in 3rdparty.rst (_NamedStream is a standalone glue class wrapping a stream+filename for a third-party library call, not an Engine subclass, never referenced or overridden). These hold up under the new rule too — I would not ask for them back.

  5. _make_index/_make_payload (protocol.rst) are a genuine gray area I'm not confident about either way. Both are protocol.py-only, zero overrides anywhere (git grep -l "def _make_index" / "def _make_payload" return only protocol.py itself) — so they fail the "implemented across subclasses" test, and being methods they don't get the attribute default either. I'd lean "fine to leave removed" but flag it since they sit in the same hunk as _make_data/_get_payload and a reviewer could reasonably want them back for base-class completeness. Not blocking.

CONTRIBUTING.md — required change, independent of everything else

The +48-line "Private members in the API reference" section this PR adds (CONTRIBUTING.md:92-142 in the diff) writes down the cross-reference-only test as the permanent rule — "A _-prefixed member does not get an autodoc directive by default. It earns one only when something... actually rendered points at it." That is now the superseded rule, not the current one. Shipping this PR as-is would commit a now-wrong policy to the one file future contributors are told to read for this exact question.

  • CONTRIBUTING.md:92 onward: rewrite the section to state the contract-vs-recipe test — document what a user needs to use the class and an implementer needs to subclass it (including "most private attributes stay" and "abstract/override-required methods must be documented"), hide per-code recipe. The current text should not merge as-is.

What I could not verify

  • A live Sphinx build warning-diff (dispatched to a background agent that did not complete in time; I substituted the static role-reference grep described in claim 6 above, which is narrower — it catches rst-prose breakage but not every autodoc-internal case).
  • An exhaustive, name-by-name override-count check of all ~137 removed automethod lines against the new rule — I checked roughly 25 of them directly (the ones named above, plus the sampled 20 from the pre-rule-change pass) and found the pattern to be consistent (dispatch-fallbacks: recipe, correctly removed; _make_data/_get_payload: contract, wrongly removed), but did not individually re-derive all 137.
  • Whether the author's own claimed before/after Sphinx warning count (55→54) is accurate — unverified by me directly, see claim 6.

I am an independent cross-review, running on a different model from whichever produced this diff, invoked specifically to falsify rather than confirm it.

@JarryShaw

Copy link
Copy Markdown
Owner Author

Correction: the "590" figure above is wrong, and the rule it was measuring has been superseded

Two things to put right in the comment above.

The number

"590 single-underscore directives stay" is not reproducible, and I withdraw it. It was the length of my
kept-list after excluding hip.rst in its entirety — all 101 of that page's single-underscore
directives, not merely the 48 I had listed as unreferenced. Nobody counting directives in the tree
could have arrived at it, which is exactly the problem.

Here is a definition anyone can re-run, and the figures it produces. Count every line matching
^\s*\.\.\s+auto[a-z]+::\s*(.+)$ in a .rst file under docs/source/, excluding
docs/source/changelog/
, whose target's final dotted component begins with _; classify
__x__ (length > 4) as a dunder and everything else as single-underscore:

ref all auto* single-underscore dunder both
f0999858e (base) 3125 855 167 1022
the first push of this branch 2959 691 167 858

So 855 → 691, a delta of 164, which is the number of directives that revision removed.

On the reviewer's count of 865 → 701: the delta agrees exactly at 164, so we do not disagree about
what the change did — only about the absolute, which differs by a constant 10 at both ends. That is a
definitional offset in what counts as a private target, not a discrepancy about the diff. I cannot
reproduce the 865 without the script that produced it; if the +10 matters, post the script and I will
reconcile it properly rather than guess.

The rule

More importantly, the analysis this comment records was measuring "is it cross-referenced from
something public"
, and that is no longer the test. The owner has since set the governing tenet as
document the contract, hide the recipe, with per-option _read_* / _make_* pairs counting as
contract because they publish the data format, most class private attributes staying, and anything
abstract-or-implemented-across-subclasses required. See
#684 for the authoritative statement.

The branch has been rebuilt from f0999858e against that tenet, so the kept/removed lists in the
comment above no longer describe it.
The pull request description has been rewritten to the current
change; read that instead. I have left this comment in place rather than editing it away, because the
reasoning it records is what the cross-review was measured against and deleting it would make that
exchange unreadable.

@JarryShaw

Copy link
Copy Markdown
Owner Author

The three failing checks on this PR are not caused by it — filed as #702

Python 3.11, Python 3.12, Python 3.14 and Integration Python 3.11 fail on 33bd6938917abb2faa560c0ab11fda174d672d95
with a single test:

SUBFAILED(library='aenum', value=65536)
  tests/dumpkit/test_nameless_enum_rendering_unit.py::NamelessEnumRenderingTests::test_scalar_return_renders_a_nameless_member_as_its_value
  ValueError: 65536 is not a valid Flags
  pcapkit/const/tcp/flags.py:91: ValueError

This PR touches only docs/source/**/*.rst and CONTRIBUTING.mdgit diff --name-only f0999858e...33bd69389 -- pcapkit/ tests/
is empty — so it cannot reach that code path.

Verified pre-existing, rather than assumed:

Root cause in one line: tests/dumpkit/test_nameless_enum_rendering_unit.py:18 sweeps
NAMELESS_VALUES = (0, 1, 8, 9, 65536) across every flag enumeration, and pcapkit/const/tcp/flags.py:90-91
correctly bounds its _missing_ to a 16-bit field, so 65536 (0x10000) is genuinely invalid there.

main's own Unit Tests run for 9d7890db4 is still queued, which is why main has been failing
without ever displaying a red mark. Tracked in #702; it needs no change on this branch.

Separately, this PR's own verdict stands at NEEDS CHANGES for unrelated reasons — the directive set is
being rebuilt from f0999858e after the owner's contract-versus-recipe rulings. This note is only about
the CI signal.

@JarryShaw
JarryShaw force-pushed the docs/private-directive-sweep-684 branch from 33bd693 to dd53063 Compare September 23, 2026 04:21
…enet (#684)

The API reference should keep usage and extensibility clear while hiding the
recipe. Measured against that, `docs/source/` was wrong in both directions: it
documented a handful of module-level privates on nobody's surface, and it omitted
39 class private attributes that are squarely contract -- several of them the only
undocumented member of a group whose siblings all have directives.

* Removed 7 directives, all module-level privates: `esp._resolve`, `esp._CRYPTO`,
  `ngap._convert`, `ngap._revert`, `ngap._PYCRATE`, `ngap._PDU_LOCK` and the
  private stream adapter `pypcapfile._NamedStream`. A private helper, a lazily
  imported backend flag, an internal lock and a wrapper nobody constructs or
  subclasses. `_NamedStream`'s two nested members go with it, which is correct --
  a member of a private class is reachable only through that class.
* Added 39 `autoattribute` directives for class private attributes that carry
  contract. The clearest are the ones that were alone in being left out:
  `Extractor._flag_f`, the only one of ten `_flag_*` without a directive;
  `PCAP_CT._backend` and `PyPCAP._backend`, whose every sibling on the same class
  is documented; and the built-in `PCAP` and `PCAPNG` engines, which carried none
  of the private state block that all six third-party engines carry. The rest back
  a documented property, or are read and written directly by collaborators --
  `Extractor._vfunc`, `_fext` and `EngineBase._extractor` are what `ext.rst`
  already teaches engine authors to use by name.
* Documented the const enums' `_missing_` fallback once, on the
  `pcapkit.const` landing page, rather than on each of the 121 enumerations under
  `pcapkit/const/` that implement it. Looking a value up by an unassigned-in-range number
  mints a member instead of raising, which is deliberate per #647 and is the
  extensibility behaviour of the whole package; `conf.py` already names
  `_missing_` in `exclude-members`, so per-class directives would be fighting the
  project's own configuration to say 128 times what one section says better.
  `registry.rst` gains a sentence pointing at it, since every `register_*` there
  takes a code the enum must already resolve.
* `CONTRIBUTING.md` records the tenet: what counts as contract, that per-option
  `_read_*` / `_make_*` pairs publish the data format and stay, that most class
  private attributes stay, that anything abstract or implemented across subclasses
  must be documented, and that the recipe to hide is chiefly module-level privates.

Deliberately not changed: the `_read_*` / `_make_*` families, which outline the
constructor contract and the data format for each option, parameter, chunk and
cause; every other class private attribute; and the six class members that looked
like helpers but each document observable behaviour a caller needs -- `_split_key`
interprets caller-supplied keying material, `Vendor._request` is the hook a
subclass with a different registry source overrides, and `PyPCAPFile._decode` and
`_get_decoder` record the warnings they emit and the guarantee they make.

No `pcapkit/` line changed, so no changelog entry, following #686.
`sphinx-build -b html` exits 0 with 56 warnings against 55 on `f0999858e`. The one
added is `more than one target found for cross-reference 'Type'`, raised from the
newly rendered `TraceFlow._foutio`, whose doc comment at
`pcapkit/foundation/traceflow/traceflow.py:406` reads `#: Type[Dumper]: Dumper
class.` -- Napoleon turns that bare `Type` into a cross-reference that five
classes in the tree answer to. The same warning already fires four times at
`f0999858e` from `engine.rst`, `reassembly.rst` and `traceflow.rst`, so this is a
fifth instance of a standing ambiguity rather than a new kind of breakage, and no
reference was orphaned. Qualifying that annotation would silence it, but the file
is outside the scope of this change.

Fixes #684
@JarryShaw
JarryShaw force-pushed the docs/private-directive-sweep-684 branch from dd53063 to 277bf47 Compare September 23, 2026 04:50
@JarryShaw

Copy link
Copy Markdown
Owner Author

GOOD TO GO

Cross-review of the rebuilt change (dd530635b), run on a different model (Sonnet) from the one that authored it (Opus), briefed to falsify rather than confirm. It raised two numeric errors, both real; both are now fixed in 277bf4774. Nothing else was disputed.

What it corrected

  1. CONTRIBUTING.md said _make_data is "overridden in 29 protocol modules". There are 29 def _make_data definitions under pcapkit/protocols/, but one of them is ProtocolBase's own concrete base implementation at pcapkit/protocols/protocol.py:1631 (return data.to_dict()). That leaves 28 subclass overrides. Verified independently and corrected to 28, with the base implementation named explicitly so the arithmetic is no longer ambiguous.
  2. CONTRIBUTING.md said _missing_ is implemented on "128 classes". 128 is the count of runtime definitions across the whole library — 121 under pcapkit/const/ plus 7 inline enums under pcapkit/protocols/. Since the sentence is specifically about the pcapkit.const package, 121 is the right number there and 128 was a category error. Corrected, and the conf.py exclude-members point moved into the same paragraph so the reasoning travels with the claim.

What it verified and did not dispute

  • All 7 removals are genuinely module-level, used only within their own module, and absent from __all__ (esp.py:184, ngap.py:119). _NamedStream is constructed exactly once, inline, at pypcapfile.py:232, and is never subclassed or referenced elsewhere.
  • The Engine.name distinction holds. It confirmed Engine.name is a hand-written .. property:: name at docs/source/pcapkit/foundation/engines/engine.rst:18, untouched by this branch, and genuinely distinct from _NamedStream.name (a plain instance attribute satisfying pcapfile's file-object protocol).
  • All 39 added directives resolve. It ran a real Sphinx build and found zero warnings referencing any of the 39, and zero "failed to import attribute" warnings anywhere in the log.
  • The base-class-nested-under-subclass placements are correct, and it did the work to establish why rather than taking my word: Sphinx's AttributeDocumenter.get_attribute_comment walks inspect.getmro(parent) when resolving a nested attribute, so the pattern is explicitly supported — and it is already used in these same files for undisputed siblings (_data/_file/_info on Protocol, _buffer/_stream/_bidir on TraceFlow).
  • The _missing_ consolidation rationale, including that the generation template at pcapkit/vendor/default.py:71 emits class {NAME}(IntEnum): so there is no package-specific base to hang one directive on, and that a real body (pcapkit/const/reg/transtype.py:521-533) matches the new prose exactly.
  • Both new cross-references resolve, checked in the rendered HTML rather than inferred: registry.html contains href="../const/index.html#unrecognised-values" and const/index.html contains id="unrecognised-values".
  • The build claim, in substance: 5 more than one target found for cross-reference 'Type' warnings, 4 of them pre-existing at engine.rst:39, reassembly.rst:32, reassembly.rst:42, traceflow.rst:39, and exactly one new, from TraceFlow._foutio — with pcapkit/foundation/traceflow/traceflow.py:406 confirmed as #: Type[Dumper]: Dumper class.
  • Zero pcapkit/ lines, docs/source/changelog/ untouched, hip.rst untouched.

Its own build reported 54 warnings rather than my 55/56 — it identified the cause itself as a missing optional pcap/pcapfile in its environment producing a different set of guarded-import warnings. The delta it measured is the same one I report, so the claim stands; absolute warning totals are environment-dependent here.

One observation it made that I am recording rather than acting on

SeekableReader has 9 further TYPE_CHECKING-declared private attributes still undocumented — _closing, _tell, _buffer, _buffer_view, _buffer_size, _buffer_set, _buffer_cur, _buffer_path, _buffer_file (pcapkit/corekit/io.py:51-78), the same block as the two this PR does add. It checked whether anything outside the class touches them and found nothing: they are the internal sliding-window buffer mechanics, with no subclass and no external caller, whereas _stream and _closed back the documented raw and closed properties. So they are recipe under the tenet and the omission is deliberate — but the reviewer was right that the PR did not say so, which under "most class private attributes stay ... unless there is a specific reason" reads as an unexplained gap. That reason is now stated here; if the owner would rather see all eleven documented, it is a one-line-per-attribute follow-up.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Pull requests that change documentation only (docs: subject prefix)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs: reconcile the Sphinx directives — document the contract, hide the recipe

1 participant