netprotocols 2.6.0__tar.gz → 2.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/ci.yml +8 -8
- netprotocols-2.8.0/.github/workflows/codeql.yml +100 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/fuzz.yml +4 -4
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/mutation.yml +2 -2
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/release.yml +3 -3
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/scorecard.yml +2 -2
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.gitignore +2 -1
- {netprotocols-2.6.0 → netprotocols-2.8.0}/ARCHITECTURE.md +333 -18
- {netprotocols-2.6.0 → netprotocols-2.8.0}/CHANGELOG.md +46 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/CONTRIBUTING.md +13 -2
- {netprotocols-2.6.0 → netprotocols-2.8.0}/PKG-INFO +50 -25
- {netprotocols-2.6.0 → netprotocols-2.8.0}/README.md +49 -24
- {netprotocols-2.6.0 → netprotocols-2.8.0}/SECURITY.md +7 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/docs/CLAIMS.md +745 -93
- {netprotocols-2.6.0 → netprotocols-2.8.0}/pyproject.toml +16 -4
- netprotocols-2.8.0/scripts/benchmark_encode.py +133 -0
- netprotocols-2.8.0/scripts/capture_fixtures_hsrp.sh +305 -0
- netprotocols-2.8.0/scripts/capture_fixtures_ntp.sh +346 -0
- netprotocols-2.8.0/scripts/capture_fixtures_radius.sh +338 -0
- netprotocols-2.8.0/scripts/capture_fixtures_stun.sh +530 -0
- netprotocols-2.8.0/scripts/capture_fixtures_tftp.sh +312 -0
- netprotocols-2.8.0/scripts/capture_fixtures_tls.sh +565 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/check_fixtures.py +684 -9
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/check_mutmut_survivors.py +1 -1
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/extract_http_streams.py +4 -1
- netprotocols-2.8.0/scripts/filter_codeql_sarif.py +348 -0
- netprotocols-2.8.0/scripts/survey_protocols.py +783 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/__init__.py +28 -1
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/_base.py +21 -5
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/_defaults.py +45 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/_tlv.py +20 -3
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/checksum.py +172 -24
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/flow.py +22 -6
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/ipv6_ext.py +132 -2
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer4/sctp.py +4 -3
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/__init__.py +27 -0
- netprotocols-2.8.0/src/netprotocols/layer7/hsrp.py +395 -0
- netprotocols-2.8.0/src/netprotocols/layer7/ntp.py +757 -0
- netprotocols-2.8.0/src/netprotocols/layer7/radius.py +559 -0
- netprotocols-2.8.0/src/netprotocols/layer7/stun.py +786 -0
- netprotocols-2.8.0/src/netprotocols/layer7/tftp.py +551 -0
- netprotocols-2.8.0/src/netprotocols/layer7/tls.py +1354 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/packet.py +89 -23
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/walk.py +34 -14
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/conftest.py +92 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/MANIFEST.md +337 -8
- netprotocols-2.8.0/tests/fixtures/codeql/python.sarif +1 -0
- netprotocols-2.8.0/tests/fixtures/hsrp.pcap +0 -0
- netprotocols-2.8.0/tests/fixtures/ntp.pcap +0 -0
- netprotocols-2.8.0/tests/fixtures/radius.pcap +0 -0
- netprotocols-2.8.0/tests/fixtures/stun/stun_rfc3489.pcap +0 -0
- netprotocols-2.8.0/tests/fixtures/stun.pcap +0 -0
- netprotocols-2.8.0/tests/fixtures/tftp.pcap +0 -0
- netprotocols-2.8.0/tests/fixtures/tls/tls_session.pcap +0 -0
- netprotocols-2.8.0/tests/fixtures/tls.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fuzz/fuzz_decode_frame.py +8 -4
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/strategies.py +201 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_bgp.py +28 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_checksum.py +1076 -4
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_contract.py +92 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_corpus.py +63 -1
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_dns.py +2 -2
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_docs.py +6 -0
- netprotocols-2.8.0/tests/test_filter_codeql_sarif.py +685 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_flow.py +2 -3
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_fuzz.py +873 -1
- netprotocols-2.8.0/tests/test_hsrp.py +1257 -0
- netprotocols-2.8.0/tests/test_ipv6_routing_final_dst.py +200 -0
- netprotocols-2.8.0/tests/test_ntp.py +897 -0
- netprotocols-2.8.0/tests/test_radius.py +853 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_sctp.py +38 -0
- netprotocols-2.8.0/tests/test_stun.py +1104 -0
- netprotocols-2.8.0/tests/test_tftp.py +732 -0
- netprotocols-2.8.0/tests/test_tls.py +2525 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_tlv.py +93 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_workflows.py +277 -6
- {netprotocols-2.6.0 → netprotocols-2.8.0}/uv.lock +103 -98
- netprotocols-2.6.0/.github/workflows/codeql.yml +0 -50
- netprotocols-2.6.0/scripts/benchmark_encode.py +0 -107
- netprotocols-2.6.0/tests/fixtures/staging/ah.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/arp_exchange.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/bgp/bgp_session.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/bgp.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/dhcp.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/dns_tcp.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/esp.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/gre.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/http.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/icmpv4_echo_lo.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/icmpv4_external.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/icmpv4_ttl_exceeded.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/icmpv6_echo_lo.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/igmp.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/ipip.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/ipv4_fragments.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/ipv6_fragments.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/ipv6_mld.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/ipv6_ndp_mld.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/llc.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/lldp.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/mpls/mpls_snaplen.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/mpls.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/ospf.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/pim.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/rip.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/staging/sctp.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/tcp_http.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/tcp_https.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/udp_dns.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/vlan_icmp.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/vrrp.pcap +0 -0
- netprotocols-2.6.0/tests/fixtures/vxlan.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.claude/skills/steward/SKILL.md +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.gitattributes +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/CODEOWNERS +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/ISSUE_TEMPLATE/protocol_request.yml +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/dependabot.yml +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/pull_request_template.md +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/docs-lint.yml +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/.github/workflows/pr-title-lint.yml +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/LICENSE +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/benchmarks/baseline.json +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/_pcap.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/benchmark.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/benchmark_import.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_bgp.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_dhcp.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_dns_tcp.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_gre.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_http.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_igmp.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_ipip.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_ipsec.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_llc.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_lldp.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_mpls.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_ospf.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_pim.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_rip.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_sctp.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_supplement.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_vlan.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_vrrp.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/capture_fixtures_vxlan.sh +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/ipsec_fixture_packets.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/llc_fixture_frames.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/mpls_fixture_packets.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/mutmut_survivors.txt +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/pyodide/check_in_pyodide.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/pyodide/package-lock.json +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/pyodide/package.json +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/scripts/pyodide/run_in_pyodide.mjs +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/_enums.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/__init__.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/arp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/cdp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/ethernet.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/llc.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/lldp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/mpls.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/stp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer2/vlan.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/__init__.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/ah.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/esp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/gre.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/icmp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/igmp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/ip.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/ospf.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/pim.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer3/vrrp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer4/__init__.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer4/_ports.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer4/tcp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer4/udp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/bgp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/dhcp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/dns.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/http.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/rip.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/layer7/vxlan.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/pcap.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/py.typed +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/registry.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/utils/__init__.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/utils/exceptions.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/utils/ipv4.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/src/netprotocols/utils/mac.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ah.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/arp_exchange.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/bgp/bgp_session.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/bgp.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/dhcp.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/dns_tcp.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/esp.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/gre.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/01.request +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/01.response +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/02.request +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/02.response +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/03.request +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/03.response +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/04.request +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/04.response +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/05.request +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/05.response +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/06.request +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/06.response +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/07.request +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/07.response +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/http/http.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/icmpv4_echo_lo.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/icmpv4_external.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/icmpv4_ttl_exceeded.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/icmpv6_echo_lo.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/igmp.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ipip.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ipv4_fragments.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ipv6_fragments.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ipv6_mld.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ipv6_ndp_mld.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/llc.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/lldp.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/mpls/mpls_snaplen.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/mpls.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/ospf.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/pim.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/rip.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fixtures/sctp.pcap +0 -0
- {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/tcp_http.pcap +0 -0
- {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/tcp_https.pcap +0 -0
- {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/udp_dns.pcap +0 -0
- {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/vlan_icmp.pcap +0 -0
- {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/vrrp.pcap +0 -0
- {netprotocols-2.6.0/tests/fixtures/staging → netprotocols-2.8.0/tests/fixtures}/vxlan.pcap +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/fuzz/fuzz_http_decode.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ah.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_arp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_cdp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_dhcp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_diagnostics.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_enums.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_esp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ethernet.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_exports.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_extract_http_streams.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_gre.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_http.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_icmp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_igmp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ip.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ipip.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ipv6_ext.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_llc.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_lldp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_mpls.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_mutmut_gate.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_ospf.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_packet.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_pattern_matching.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_pcap.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_pim.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_registry.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_rip.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_stp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_tcp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_udp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_utils.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_version.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_vlan.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_vrrp.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_vxlan.py +0 -0
- {netprotocols-2.6.0 → netprotocols-2.8.0}/tests/test_walk.py +0 -0
|
@@ -33,7 +33,7 @@ jobs:
|
|
|
33
33
|
runs-on: ubuntu-latest
|
|
34
34
|
steps:
|
|
35
35
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
36
|
-
- uses: astral-sh/setup-uv@
|
|
36
|
+
- uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
37
37
|
with:
|
|
38
38
|
python-version: "3.12"
|
|
39
39
|
- run: uv run ruff check
|
|
@@ -43,7 +43,7 @@ jobs:
|
|
|
43
43
|
runs-on: ubuntu-latest
|
|
44
44
|
steps:
|
|
45
45
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
46
|
-
- uses: astral-sh/setup-uv@
|
|
46
|
+
- uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
47
47
|
with:
|
|
48
48
|
python-version: "3.12"
|
|
49
49
|
- run: uv run mypy
|
|
@@ -55,7 +55,7 @@ jobs:
|
|
|
55
55
|
python-version: ["3.12", "3.13", "3.14"]
|
|
56
56
|
steps:
|
|
57
57
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
58
|
-
- uses: astral-sh/setup-uv@
|
|
58
|
+
- uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
59
59
|
with:
|
|
60
60
|
python-version: ${{ matrix.python-version }}
|
|
61
61
|
- run: uv run --frozen pytest --cov=netprotocols --cov-report=term
|
|
@@ -70,7 +70,7 @@ jobs:
|
|
|
70
70
|
runs-on: ubuntu-latest
|
|
71
71
|
steps:
|
|
72
72
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
73
|
-
- uses: astral-sh/setup-uv@
|
|
73
|
+
- uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
74
74
|
with:
|
|
75
75
|
python-version: "3.12"
|
|
76
76
|
- name: Export dev dependencies
|
|
@@ -86,7 +86,7 @@ jobs:
|
|
|
86
86
|
runs-on: ubuntu-latest
|
|
87
87
|
steps:
|
|
88
88
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
89
|
-
- uses: astral-sh/setup-uv@
|
|
89
|
+
- uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
90
90
|
- run: uv build
|
|
91
91
|
- run: uv run --isolated --no-project --with dist/*.whl python -c "import netprotocols; print(netprotocols.__version__)"
|
|
92
92
|
# Builds are supposed to be a pure function of the source tree, so
|
|
@@ -119,11 +119,11 @@ jobs:
|
|
|
119
119
|
runs-on: ubuntu-latest
|
|
120
120
|
steps:
|
|
121
121
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
122
|
-
- uses: astral-sh/setup-uv@
|
|
122
|
+
- uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
123
123
|
with:
|
|
124
124
|
python-version: "3.12"
|
|
125
125
|
- run: uv build
|
|
126
|
-
- uses: actions/setup-node@
|
|
126
|
+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
127
127
|
with:
|
|
128
128
|
node-version: "22"
|
|
129
129
|
- run: npm ci
|
|
@@ -151,7 +151,7 @@ jobs:
|
|
|
151
151
|
runs-on: ubuntu-latest
|
|
152
152
|
steps:
|
|
153
153
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
154
|
-
- uses: astral-sh/setup-uv@
|
|
154
|
+
- uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
155
155
|
with:
|
|
156
156
|
python-version: "3.12"
|
|
157
157
|
- name: Corpus decode throughput
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
name: CodeQL
|
|
2
|
+
|
|
3
|
+
# Advanced-setup workflow (a checked-in file) rather than GitHub's
|
|
4
|
+
# built-in "default setup", so this analysis lives in version control
|
|
5
|
+
# alongside the rest of this repository's CI (ci.yml, fuzz.yml,
|
|
6
|
+
# release.yml, mutation.yml, scorecard.yml) and its action pins are
|
|
7
|
+
# reviewable the same way theirs are. Default setup is configured
|
|
8
|
+
# through repository settings instead of a file, so it isn't available
|
|
9
|
+
# to author from here.
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
branches: [master]
|
|
13
|
+
pull_request:
|
|
14
|
+
branches: [master]
|
|
15
|
+
schedule:
|
|
16
|
+
# Arbitrary; weekly on Sundays, clear of fuzz.yml's and mutation.yml's
|
|
17
|
+
# daily 03:00/04:00 UTC slots and scorecard.yml's own Sunday 05:00
|
|
18
|
+
# UTC slot.
|
|
19
|
+
- cron: "0 6 * * 0"
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
|
|
24
|
+
concurrency:
|
|
25
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
26
|
+
cancel-in-progress: true
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
analyze:
|
|
30
|
+
name: Analyze (python)
|
|
31
|
+
runs-on: ubuntu-latest
|
|
32
|
+
permissions:
|
|
33
|
+
actions: read
|
|
34
|
+
contents: read
|
|
35
|
+
security-events: write
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
38
|
+
|
|
39
|
+
# Python is interpreted, so there is nothing for autobuild (or a
|
|
40
|
+
# manual build step) to do: build-mode: none has CodeQL extract
|
|
41
|
+
# the database straight from source instead. This is the build
|
|
42
|
+
# mode the CodeQL Action's own docs recommend for interpreted
|
|
43
|
+
# languages, and it sidesteps the question of an autobuild step
|
|
44
|
+
# fitting this project's uv-based build at all.
|
|
45
|
+
- uses: github/codeql-action/init@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
|
|
46
|
+
with:
|
|
47
|
+
languages: python
|
|
48
|
+
build-mode: none
|
|
49
|
+
|
|
50
|
+
# analyze writes the SARIF without uploading it, the filter step
|
|
51
|
+
# drops one query's results on two paths, and upload-sarif uploads
|
|
52
|
+
# what is left. py/weak-sensitive-data-hashing flags the MD5 that
|
|
53
|
+
# RADIUS (#265) and STUN (#267) mandate, which their tests and
|
|
54
|
+
# scripts/check_fixtures.py compute over published test secrets
|
|
55
|
+
# with usedforsecurity=False to verify captured traffic.
|
|
56
|
+
# The CodeQL config can't scope a query to paths: query-filters
|
|
57
|
+
# drops it everywhere, src/ included, and paths-ignore drops the
|
|
58
|
+
# paths from every query. So the filter removes only that query's
|
|
59
|
+
# results whose primary location is under tests/ or scripts/; the
|
|
60
|
+
# query still runs on src/, every other query on all three.
|
|
61
|
+
#
|
|
62
|
+
# upload: failure-only is the action's documented mode for a
|
|
63
|
+
# workflow that post-processes the SARIF: analyze uploads nothing
|
|
64
|
+
# when it succeeds. It still marks the analysis as completed, so
|
|
65
|
+
# init's post step does not upload a failed-run SARIF for a later
|
|
66
|
+
# step's failure either: if the filter or upload-sarif fails, the
|
|
67
|
+
# job goes red and no new analysis replaces the previous one
|
|
68
|
+
# (upload-sarif can fail after uploading, while it waits for
|
|
69
|
+
# processing). That fails closed; unfiltered SARIF is never
|
|
70
|
+
# uploaded. (Any value the action does not recognize means
|
|
71
|
+
# `always`, which would upload before the filter runs.)
|
|
72
|
+
#
|
|
73
|
+
# Neither analyze nor upload-sarif sets `category`, and that is
|
|
74
|
+
# what keeps the analysis the same one: with no category the CLI
|
|
75
|
+
# writes no runs[].automationDetails, and both actions then fill
|
|
76
|
+
# it in from the workflow path, job id and matrix,
|
|
77
|
+
# ".github/workflows/codeql.yml:analyze/", the same in both
|
|
78
|
+
# steps of this job. Existing alerts keep tracking (fixed ones
|
|
79
|
+
# close, the rest stay) rather than reappearing under a new
|
|
80
|
+
# category. Setting one on either step alone would start a second
|
|
81
|
+
# analysis next to the first.
|
|
82
|
+
- id: analyze
|
|
83
|
+
uses: github/codeql-action/analyze@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
|
|
84
|
+
with:
|
|
85
|
+
upload: failure-only
|
|
86
|
+
|
|
87
|
+
# Rewrites each *.sarif under analyze's output directory, at any
|
|
88
|
+
# depth and skipping symlinks (as upload-sarif finds them), in
|
|
89
|
+
# place and logs one line per file, by its path under the
|
|
90
|
+
# directory, naming every result it dropped; malformed SARIF fails
|
|
91
|
+
# the job instead of uploading unfiltered results.
|
|
92
|
+
# Stdlib only, so the runner's own python3 runs it.
|
|
93
|
+
- name: Drop weak-hashing results on tests/ and scripts/
|
|
94
|
+
env:
|
|
95
|
+
SARIF_DIR: ${{ steps.analyze.outputs.sarif-output }}
|
|
96
|
+
run: python3 scripts/filter_codeql_sarif.py "$SARIF_DIR"
|
|
97
|
+
|
|
98
|
+
- uses: github/codeql-action/upload-sarif@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
|
|
99
|
+
with:
|
|
100
|
+
sarif_file: ${{ steps.analyze.outputs.sarif-output }}
|
|
@@ -38,7 +38,7 @@ jobs:
|
|
|
38
38
|
runs-on: ubuntu-latest
|
|
39
39
|
steps:
|
|
40
40
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
41
|
-
- uses: astral-sh/setup-uv@
|
|
41
|
+
- uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
42
42
|
with:
|
|
43
43
|
python-version: "3.12"
|
|
44
44
|
# Keyed by run id with a prefix restore-key: a fixed key would
|
|
@@ -65,7 +65,7 @@ jobs:
|
|
|
65
65
|
# repo write access to re-run the job locally.
|
|
66
66
|
- name: Upload the failing example database
|
|
67
67
|
if: failure()
|
|
68
|
-
uses: actions/upload-artifact@
|
|
68
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
69
69
|
with:
|
|
70
70
|
name: hypothesis-nightly-failure-${{ github.run_id }}
|
|
71
71
|
path: .hypothesis
|
|
@@ -85,7 +85,7 @@ jobs:
|
|
|
85
85
|
runs-on: ubuntu-latest
|
|
86
86
|
steps:
|
|
87
87
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
88
|
-
- uses: astral-sh/setup-uv@
|
|
88
|
+
- uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
89
89
|
with:
|
|
90
90
|
python-version: "3.12"
|
|
91
91
|
- name: Run Atheris against decode_frame
|
|
@@ -98,7 +98,7 @@ jobs:
|
|
|
98
98
|
python tests/fuzz/fuzz_http_decode.py -max_total_time=300
|
|
99
99
|
- name: Upload crash artifacts
|
|
100
100
|
if: failure()
|
|
101
|
-
uses: actions/upload-artifact@
|
|
101
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
102
102
|
with:
|
|
103
103
|
name: atheris-crash-${{ github.run_id }}
|
|
104
104
|
path: crash-*
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
runs-on: ubuntu-latest
|
|
31
31
|
steps:
|
|
32
32
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
33
|
-
- uses: astral-sh/setup-uv@
|
|
33
|
+
- uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
34
34
|
with:
|
|
35
35
|
python-version: "3.12"
|
|
36
36
|
# mutmut hashes each mutated file plus the tests that cover it and
|
|
@@ -104,7 +104,7 @@ jobs:
|
|
|
104
104
|
# doesn't exist is silently skipped.
|
|
105
105
|
- name: Upload mutmut results on failure
|
|
106
106
|
if: failure()
|
|
107
|
-
uses: actions/upload-artifact@
|
|
107
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
108
108
|
with:
|
|
109
109
|
name: mutmut-nightly-failure-${{ github.run_id }}
|
|
110
110
|
path: |
|
|
@@ -35,7 +35,7 @@ jobs:
|
|
|
35
35
|
contents: read
|
|
36
36
|
steps:
|
|
37
37
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
38
|
-
- uses: astral-sh/setup-uv@
|
|
38
|
+
- uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
39
39
|
- run: uv build
|
|
40
40
|
# The QA ladder cannot catch a mistagged release: every check
|
|
41
41
|
# passes because the code is fine and only the tag is wrong. Read
|
|
@@ -99,7 +99,7 @@ jobs:
|
|
|
99
99
|
--pyproject pyproject.toml --mc-type library \
|
|
100
100
|
-o "netprotocols-${GITHUB_REF_NAME#v}.cdx.json"
|
|
101
101
|
- name: Upload release assets
|
|
102
|
-
uses: actions/upload-artifact@
|
|
102
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
103
103
|
with:
|
|
104
104
|
name: release-assets
|
|
105
105
|
path: |
|
|
@@ -123,7 +123,7 @@ jobs:
|
|
|
123
123
|
steps:
|
|
124
124
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
125
125
|
- name: Download release assets
|
|
126
|
-
uses: actions/download-artifact@
|
|
126
|
+
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
127
127
|
with:
|
|
128
128
|
name: release-assets
|
|
129
129
|
# CHANGELOG.md is the single source of truth for release notes, so
|
|
@@ -48,7 +48,7 @@ jobs:
|
|
|
48
48
|
# Upload the SARIF results as a workflow artifact, per the action's
|
|
49
49
|
# standard setup.
|
|
50
50
|
- name: Upload artifact
|
|
51
|
-
uses: actions/upload-artifact@
|
|
51
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
52
52
|
with:
|
|
53
53
|
name: SARIF file
|
|
54
54
|
path: results.sarif
|
|
@@ -56,6 +56,6 @@ jobs:
|
|
|
56
56
|
|
|
57
57
|
# Upload the results to GitHub's code scanning dashboard.
|
|
58
58
|
- name: Upload to code-scanning
|
|
59
|
-
uses: github/codeql-action/upload-sarif@
|
|
59
|
+
uses: github/codeql-action/upload-sarif@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
|
|
60
60
|
with:
|
|
61
61
|
sarif_file: results.sarif
|