use clap::Parser; use lanparty_gateway::GatewayArgs; #[cfg(target_os = "linux")] use lanparty_gateway::{PacketSocket, connect_gateway}; #[tokio::main] async fn main() -> anyhow::Result<()> { let args = GatewayArgs::parse(); run(args).await } #[cfg(target_os = "linux")] async fn run(args: GatewayArgs) -> anyhow::Result<()> { let config = args.into_config()?; println!( "lanparty-gateway opening interface {} and connecting to relay {} room {}", config.interface(), config.relay_addr(), config.room() ); let socket = PacketSocket::open(config.interface())?; println!( "lanparty-gateway opened AF_PACKET socket on {} (ifindex {})", socket.interface(), socket.interface_index() ); let gateway = connect_gateway(config).await?; println!( "lanparty-gateway connected as peer {} in room id {} with TAP MTU {} over {}", gateway.welcome().peer_id(), gateway.welcome().room_id(), gateway.welcome().effective_tap_mtu(), gateway.welcome().mode() ); println!("lanparty-gateway bridging frames; press Ctrl-C to stop"); gateway.bridge_until_shutdown(socket).await?; Ok(()) } #[cfg(not(target_os = "linux"))] async fn run(_args: GatewayArgs) -> anyhow::Result<()> { anyhow::bail!("lanparty-gateway requires Linux AF_PACKET support"); }