feat(gateway): open AF_PACKET sockets
The gateway now has a small Linux PacketSocket wrapper for raw Ethernet frame I/O. It resolves the configured interface with if_nametoindex, opens an AF_PACKET/SOCK_RAW socket for ETH_P_ALL, binds it to the interface, and exposes thin send_frame and recv_frame helpers around the owned file descriptor. The gateway binary opens this socket after completing the relay control handshake. The frame bridge loop is still intentionally left for a later slice, but the process now proves the two required resources are available: relay admission and raw L2 access on the LAN interface. Tests cover interface-name validation and missing-interface lookup without requiring root or CAP_NET_RAW. Test Plan: - cargo fmt --check - cargo test --workspace - cargo clippy --workspace --all-targets -- -D warnings Refs: PLAN.md Linux AF_PACKET gateway socket
This commit is contained in:
@@ -4,6 +4,9 @@
|
||||
//! will add the AF_PACKET capture/injection loop that feeds Ethernet frames into
|
||||
//! this established QUIC session.
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
mod packet;
|
||||
|
||||
use std::{
|
||||
fs,
|
||||
net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr},
|
||||
@@ -20,6 +23,9 @@ use lanparty_ctrl::{
|
||||
use quinn::{ClientConfig, Endpoint, crypto::rustls::QuicClientConfig};
|
||||
use rustls::pki_types::CertificateDer;
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
pub use packet::PacketSocket;
|
||||
|
||||
const MAX_CONTROL_FRAME_LEN: usize = CONTROL_LENGTH_PREFIX_LEN + MAX_CONTROL_MESSAGE_LEN;
|
||||
|
||||
#[derive(Debug, Parser)]
|
||||
|
||||
Reference in New Issue
Block a user