Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
6103871
fix(receiver/pnet): clean shutdown on capture-thread error instead of…
asmie May 16, 2026
87f9c7e
refactor(snmp): document AgentX panic audit and add supervisor log
asmie May 17, 2026
1610d11
test(snmp): malformed-PDU and OID-boundary coverage from B1 audit
asmie May 17, 2026
114d32b
feat(observability): graceful SNMP degradation; fail-fast metrics bind
asmie May 17, 2026
fc7e9cb
test(receiver): pin --strict-packets contract; convert eprintln to log
asmie May 17, 2026
57ce1ac
docs(architecture): refresh TLV table and add operational characteris…
asmie May 17, 2026
b1807d8
test(tlv): conformance audit for U/M/I/C flag semantics
asmie May 17, 2026
00972a3
test(ber): on-wire regression for sender padding and reflector counting
asmie May 17, 2026
5942976
feat(tlv/headers): align Type 247 length-mismatch with draft-ext-hdr-…
asmie May 17, 2026
35fd000
test(time): PTP timestamp end-to-end loopback coverage
asmie May 17, 2026
ead5e64
feat(tlv/reflected-control): align Type 12 with draft-14 §3
asmie May 17, 2026
da46d00
build: run CI for branches
asmie May 17, 2026
84f2a1f
test(receiver): malformed-input suite covering RFC 8762 boundary cond…
asmie May 17, 2026
05fa511
test(stats): RFC 3550 jitter and percentile edge cases
asmie May 17, 2026
f6caca9
test(loopback): TLV-by-TLV IPv6 parity coverage
asmie May 17, 2026
cc71be7
test(receiver/pnet): cfg-gated loopback coverage on lo interface
asmie May 17, 2026
f9fb5a5
test(fuzz): proptest round-trip and libfuzzer harnesses for TLV + Age…
asmie May 17, 2026
9c105a9
feat(reflector): per-client token-bucket rate limiting
asmie May 17, 2026
77664ab
feat(crypto): per-SSID HMAC key directory for multi-tenant reflectors
asmie May 17, 2026
c8fa3cd
ci: update building on Windows
asmie May 17, 2026
5db1130
revert: use again pcap SDK as zip file instead of installing exe
asmie May 17, 2026
d12106c
feat(logging): structured JSON output via tracing-subscriber
asmie May 17, 2026
7778f2d
feat(config): --print-config-schema exposes JSON Schema for validation
asmie May 18, 2026
1e156fb
ci: lint STAMP-SUITE-MIB with smilint
asmie May 18, 2026
bd6683e
bench(loopback): criterion suite for sender↔reflector throughput
asmie May 18, 2026
9f21288
feat(time): defensive --hwtstamp scaffold with capability probe
asmie May 18, 2026
258a252
ci: pin to windows-2022 because of npcap dep
asmie May 18, 2026
d6fcd4c
build: nix hash update
asmie May 18, 2026
8b326b1
chore: prepare 0.8.0 to release
asmie May 18, 2026
8676659
ci: omit Windows test job
asmie May 19, 2026
cb30223
fix: address PR #5 review findings
asmie May 19, 2026
08591c9
ci: grant security-audit job checks:write; bump yanked metrics
asmie May 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions .github/workflows/fuzz.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Fuzz

# Fuzz targets are excluded from the default cargo workspace and require
# nightly + cargo-fuzz. Run on demand or on a slow schedule, not on every
# PR.
on:
workflow_dispatch:
inputs:
duration_secs:
description: "Per-target fuzz duration (seconds)"
required: false
default: "60"
schedule:
# Sunday 03:30 UTC — once a week is enough for the parser surface
# we're covering; bump if/when we add more targets.
- cron: "30 3 * * 0"

# Default to a read-only token. The job uploads artifacts on failure,
# which is satisfied by `contents: read` plus `actions/upload-artifact`'s
# own scoping; no write access to repo contents is needed.
permissions:
contents: read

jobs:
fuzz:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target:
- tlv_list_parse
- tlv_list_parse_lenient
- raw_tlv_parse
- packet_unauth_parse
- packet_auth_parse
- agentx_decode_header
- agentx_decode_oid
steps:
- uses: actions/checkout@v4
- name: Install nightly toolchain
uses: dtolnay/rust-toolchain@nightly
- name: Install cargo-fuzz
run: cargo install cargo-fuzz --locked
- name: Run fuzz target
env:
# Use env-var indirection per GitHub security guidance: matrix
# values are author-controlled, but pulling them through env
# protects against future template changes that might let
# untrusted input slip in.
FUZZ_TARGET: ${{ matrix.target }}
DURATION: ${{ github.event.inputs.duration_secs || '60' }}
run: |
cd fuzz
cargo +nightly fuzz run "$FUZZ_TARGET" -- -max_total_time="$DURATION"
- name: Upload crashes (if any)
if: failure()
uses: actions/upload-artifact@v4
env:
FUZZ_TARGET: ${{ matrix.target }}
with:
name: fuzz-crashes-${{ matrix.target }}
path: |
fuzz/artifacts/${{ matrix.target }}/
fuzz/corpus/${{ matrix.target }}/
if-no-files-found: ignore
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
57 changes: 44 additions & 13 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,20 @@ name: CI

on:
push:
branches: [master]
branches: ['**']
pull_request:
branches: [master]

env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1

# Default to a read-only token. Jobs that need to upload artifacts or
# create check-runs should opt in explicitly with their own `permissions:`
# block; today nothing on this workflow writes back to the repo.
permissions:
contents: read

jobs:
fmt:
name: Rustfmt
Expand Down Expand Up @@ -67,9 +73,14 @@ jobs:
- os: macos-latest
rust: stable
features: ""
- os: windows-latest
rust: stable
features: ""
# No Windows test job: the lib test binary statically links
# pnet's Packet.dll / wpcap.dll, which neither windows-latest
# nor windows-2022 ship any more (windows-2025 rollover
# dropped it; the Npcap installer hangs on /S silent mode in
# CI). Build coverage for Windows is preserved by the
# `build-release` matrix below. The long-term fix is gating
# pnet behind a Cargo feature on Windows so the default
# binary doesn't link it at all — tracked for 0.8.1.
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
Expand All @@ -78,13 +89,6 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
key: test-${{ matrix.os }}-${{ matrix.rust }}
- name: Install Npcap SDK (Windows)
if: matrix.os == 'windows-latest'
shell: pwsh
run: |
Invoke-WebRequest -Uri "https://npcap.com/dist/npcap-sdk-1.13.zip" -OutFile "$env:TEMP/npcap-sdk.zip"
Expand-Archive -Path "$env:TEMP/npcap-sdk.zip" -DestinationPath "C:/npcap-sdk"
echo "LIB=C:/npcap-sdk/Lib/x64" >> $env:GITHUB_ENV
- name: Run tests
run: cargo test --verbose ${{ matrix.features }}

Expand Down Expand Up @@ -125,7 +129,8 @@ jobs:
target: x86_64-unknown-linux-gnu
- os: macos-latest
target: x86_64-apple-darwin
- os: windows-latest
# See pin rationale on the test job above.
- os: windows-2022
target: x86_64-pc-windows-msvc
steps:
- uses: actions/checkout@v4
Expand All @@ -136,7 +141,7 @@ jobs:
with:
key: release-${{ matrix.target }}
- name: Install Npcap SDK (Windows)
if: matrix.os == 'windows-latest'
if: matrix.os == 'windows-2022'
shell: pwsh
run: |
Invoke-WebRequest -Uri "https://npcap.com/dist/npcap-sdk-1.13.zip" -OutFile "$env:TEMP/npcap-sdk.zip"
Expand Down Expand Up @@ -241,8 +246,34 @@ jobs:
security-audit:
name: Security Audit
runs-on: ubuntu-latest
# Override the workflow-default contents-read token so the
# rustsec/audit-check action can post its findings as a check-run
# (it needs checks:write) and open issues for new advisories
# (issues:write — optional but harmless).
permissions:
contents: read
checks: write
issues: write
steps:
- uses: actions/checkout@v4
- uses: rustsec/audit-check@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}

mib-lint:
name: MIB Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install libsmi tools
# The package supplying `smilint` is named `smitools` on Ubuntu
# 24.04+ and `libsmi2-bin` on older Debian/Ubuntu. Try the new
# name first; fall back so the job survives a base-image bump.
run: |
sudo apt-get update
sudo apt-get install -y smitools || sudo apt-get install -y libsmi2-bin
- name: Lint STAMP-SUITE-MIB
# Lint level 4 = errors and major warnings (style nits like missing
# DESCRIPTION clauses are ignored). Raise to -l 6 once the MIB is
# clean at level 5.
run: smilint -l 4 mibs/STAMP-SUITE-MIB.mib
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
Loading
Loading