diff --git a/CHANGELOG.md b/CHANGELOG.md index c441649..0ed2a0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,64 +7,75 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -### Added +## [0.1.0] - 2026-03-12 -- Ethernet transport with beacon discovery and auto-connect -- TCP transport with configurable bind address and static peer support -- Docker sidecar deployment for containerized services -- Comprehensive node and transport statistics via control socket -- fipstop TUI monitoring tool with smoothed metrics and quality indices -- fipstop peers display: transport type, direction, and tree roles -- Estimated mesh size from bloom filter cardinality -- ECN congestion signaling and transport congestion detection -- Persistent identity with key file management (`fipsctl keygen`) -- Periodic Noise rekey with fresh DH for forward secrecy (FMP + FSP) -- Host-to-npub static mapping: resolve `hostname.fips` via host map +### Added (Initial Release) + +#### Session Layer (FSP) + +- End-to-end encrypted datagram service between mesh nodes addressed by Nostr npub +- Noise XK sessions with mutual authentication, replay protection, and forward secrecy +- Automatic session rekeying with configurable time/message thresholds and drain window for in-flight packets +- Port multiplexing for multiple services over a single session +- Session-layer metrics: sender/receiver reports with RTT, jitter, delivery ratio, and burst loss tracking +- Passive RTT measurement via spin bit + +#### IPv6 Adapter + +- IPv6 adapter interface allowing tunneling TCP/IPv6 through FIPS mesh + for traditional IP applications (TUN interface) +- DNS resolver allowing IP applications to reach nodes by npub.fips name +- Host-to-npub static mappings: resolve `hostname.fips` via host map populated from peer config aliases and `/etc/fips/hosts` file -- DNS responder auto-reloads hosts file on modification (no restart needed) + +#### Mesh Layer (FMP) + +- Self-organized core mesh routing protocol with adaptive least cost forwarding +- Noise IK hop-by-hop link encryption with mutual authentication and replay protection between peer nodes +- Distributed spanning tree construction with cost-based parent selection and adaptive reconfiguration +- Destination route discovery via bloom filter-based directed search protocol +- Path MTU discovery with per-link MTU tracking and MtuExceeded error signaling +- Link-layer MMP: SRTT, jitter, one-way delay trends, packet loss, and ETX metrics +- Link-layer heartbeat with configurable liveness timeout for dead peer detection +- Epoch-based peer restart detection +- Automatic link rekeying with K-bit epoch coordination and drain window +- Static peer auto-reconnect with exponential backoff +- Multi-address peers with transport priority-based failover +- Msg1 rate limiting for handshake DoS protection + +#### Mesh Peer Transports + +- UDP overlay transport with inbound and static outbound peer configuration +- TCP overlay transport with listening port and static outbound peer support +- Ethernet/WiFi transport (MAC address based, no IP stack) with optional automatic peer discovery and auto-connect + +#### Operator Tooling + +- Ephemeral or persistent node identity with key file management +- Unix domain control socket for runtime observability +- `fipsctl` CLI tool for control socket interaction and node management +- Comprehensive node and transport statistics via control socket +- `fipstop` TUI monitoring tool with real-time session, peer, and transport configuration and metrics display + +#### Packaging and Deployment + - Debian/Ubuntu `.deb` packaging via cargo-deb - Systemd service packaging with tarball installer +- OpenWRT package with opkg feed and init script +- Docker sidecar deployment for containerized services - Build version metadata: git commit hash, dirty flag, and target triple embedded in all binaries via `--version` -- Local CI runner script (`testing/ci-local.sh`) -- TCP transport node-level integration tests -- CI: expanded integration matrix, nextest JUnit reporting, workflow_dispatch -- CHANGELOG.md following Keep a Changelog format -### Fixed +#### Testing and CI -- Spanning tree coordinate loop: reject parents whose ancestry contains us -- PMTUD per-destination path MTU check and ICMPv6 MTU field width -- Ethernet AEAD decryption failures caused by minimum-frame padding -- Link-dead detection skipping peers that never send data -- FMP version check added to TCP stream reader -- Control socket path mismatch between daemon and clients -- fips-dns.service pulling in systemd-resolved and hanging on missing fips0 - -### Changed - -- GitHub repository moved from `jmcorgan/fips` to `fips-network/fips` - -## [0.1.0-alpha] - 2026-02-24 - -### Added - -- Core mesh routing protocol with greedy coordinate-based forwarding -- Noise IK handshake at FMP (link layer) and Noise XK at FSP (session layer) -- UDP transport with configurable bind address and static peers -- TUN-based virtual network interface (fips0) with ICMPv6 Packet Too Big -- DNS resolver for .fips domain names (port 5354) -- Spanning tree construction with cost-based parent selection and - flap dampening -- Bloom filter-based identity discovery protocol with reverse-path routing -- MMP (Mesh Management Protocol) for link and session layer measurement -- Hybrid coordinate warmup (CoordsWarmup message and proactive fallback) -- Handshake retry with exponential backoff (link and session layer) -- Link-layer heartbeat and liveness timeout for dead peer detection -- Epoch-based peer restart detection -- Per-link MTU support and reactive MtuExceeded error signal -- Session idle timeout and identity cache expiry -- Unix domain control socket for runtime observability (fipsctl) +- Comprehensive unit and integration tests covering all protocol layers and transports - Docker test harness with static and stochastic topologies -- CI with GitHub Actions (x86_64 and aarch64, unit and integration tests) +- Chaos testing with simulated severe network conditions: latency, packet loss, reordering, and peer churn +- CI with GitHub Actions: x86_64 and aarch64, integration test matrix, nextest JUnit reporting +- Local CI runner script (`testing/ci-local.sh`) + +#### Project + - Design documentation suite covering all protocol layers +- CHANGELOG.md following Keep a Changelog format +- Repository mirrored to [ngit](https://gitworkshop.dev/npub1y0gja7r4re0wyelmvdqa03qmjs62rwvcd8szzt4nf4t2hd43969qj000ly/relay.ngit.dev/fips) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 325bfd1..e311d6a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,7 @@ Clone the repo and verify your setup: ``` -git clone https://github.com/fips-network/fips.git +git clone https://github.com/jmcorgan/fips.git cd fips cargo build cargo test diff --git a/Cargo.toml b/Cargo.toml index dd88800..b64e322 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" description = "A distributed, decentralized network routing protocol for mesh nodes connecting over arbitrary transports" license = "MIT" authors = ["Johnathan Corgan "] -repository = "https://github.com/fips-network/fips" +repository = "https://github.com/jmcorgan/fips" readme = "README.md" [features] diff --git a/README.md b/README.md index 5e4d115..df07162 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ endpoints. ## Building ```bash -git clone https://github.com/fips-network/fips.git +git clone https://github.com/jmcorgan/fips.git cd fips cargo build --release ``` @@ -264,13 +264,13 @@ UDP, TCP, and Ethernet but has not been tested beyond small meshes. - Additional transports (Bluetooth, Tor) - Improved routing resilience under churn - Security audit of cryptographic protocols -- CI pipeline and published crate ### Longer-term - Mobile platform support - Bandwidth-aware routing and QoS - Protocol stability and versioned wire format +- Published crate ## License diff --git a/packaging/debian/copyright b/packaging/debian/copyright index 408c102..3642e06 100644 --- a/packaging/debian/copyright +++ b/packaging/debian/copyright @@ -1,7 +1,7 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: fips Upstream-Contact: Johnathan Corgan -Source: https://github.com/fips-network/fips +Source: https://github.com/jmcorgan/fips Files: * Copyright: 2026 Johnathan Corgan diff --git a/packaging/openwrt/Makefile b/packaging/openwrt/Makefile index cb468c6..2eadd4d 100644 --- a/packaging/openwrt/Makefile +++ b/packaging/openwrt/Makefile @@ -7,7 +7,7 @@ PKG_RELEASE:=1 # Pin to a specific commit for reproducible builds. # Update PKG_SOURCE_VERSION and PKG_MIRROR_HASH when upgrading. PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/fips-network/fips.git +PKG_SOURCE_URL:=https://github.com/jmcorgan/fips.git PKG_SOURCE_VERSION:=master PKG_MIRROR_HASH:=skip @@ -48,7 +48,7 @@ define Package/fips SECTION:=net CATEGORY:=Network TITLE:=FIPS Mesh Network Daemon - URL:=https://github.com/fips-network/fips + URL:=https://github.com/jmcorgan/fips DEPENDS:=+kmod-tun +kmod-br-netfilter endef diff --git a/packaging/openwrt/README.md b/packaging/openwrt/README.md index 905c545..67bda8e 100644 --- a/packaging/openwrt/README.md +++ b/packaging/openwrt/README.md @@ -76,7 +76,7 @@ ln -s /path/to/fips/packaging/openwrt package/fips Or add the FIPS repository as a feed in `feeds.conf`: ``` -src-git-full fips https://github.com/fips-network/fips.git +src-git-full fips https://github.com/jmcorgan/fips.git ``` Then update and install feeds: