feat(proto): add tunnel frame primitives
Build the shared protocol contract that the client, gateway, and relay will use for Ethernet datagrams. The MVP needs these pieces agreed on before socket or TAP work can be reasoned about safely. This adds strict MAC parsing and client identity validation, Ethernet header inspection, fixed overlay datagram encoding and decoding, and MTU helpers for the no-fragmentation QUIC datagram design. The protocol crate stays transport-agnostic so platform and network code can depend on it without pulling in OS-specific behavior. Remaining work is to put these primitives behind the control-plane handshake, relay forwarding loop, Windows TAP client, and Linux AF_PACKET gateway. Test Plan: - cargo fmt --check - cargo test --workspace - cargo clippy --workspace --all-targets -- -D warnings Refs: PLAN.md Phase 1: prove the illusion
This commit is contained in:
@@ -1,14 +1,24 @@
|
||||
pub fn add(left: u64, right: u64) -> u64 {
|
||||
left + right
|
||||
}
|
||||
//! Shared protocol primitives for the LAN party L2 tunnel.
|
||||
//!
|
||||
//! This crate intentionally contains no socket, TAP, QUIC, or OS-specific
|
||||
//! behavior. It is the small contract that the Windows client, Linux gateway,
|
||||
//! and relay must all agree on.
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
mod ethernet;
|
||||
mod mac;
|
||||
mod mtu;
|
||||
mod overlay;
|
||||
|
||||
#[test]
|
||||
fn it_works() {
|
||||
let result = add(2, 2);
|
||||
assert_eq!(result, 4);
|
||||
}
|
||||
}
|
||||
pub use ethernet::{
|
||||
ETHERNET_HEADER_LEN, EthernetFrame, MAX_STANDARD_ETHERNET_FRAME_LEN,
|
||||
MAX_STANDARD_ETHERNET_PAYLOAD_LEN, MIN_ETHERNET_FRAME_LEN,
|
||||
};
|
||||
pub use mac::{MacAddr, MacParseError};
|
||||
pub use mtu::{
|
||||
DEFAULT_DATAGRAM_SAFETY_MARGIN, DEFAULT_TAP_MTU, MIN_USEFUL_TAP_MTU, MtuError,
|
||||
max_tap_mtu_for_datagram, recommended_tap_mtu,
|
||||
};
|
||||
pub use overlay::{
|
||||
FrameType, OVERLAY_HEADER_LEN, OVERLAY_MAGIC, OVERLAY_VERSION, OverlayHeader, OverlayPacket,
|
||||
ProtoError, decode_datagram, encode_datagram,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user