From a5594c768d4f9c744147fb2c046eff1f63d1579b Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Thu, 15 Oct 2026 04:46:48 +0200 Subject: [PATCH] feat: Make bind ip configurable through cli --- src/cli.rs | 6 +++++- src/main.rs | 4 ++-- src/tftp/server.rs | 9 +++++---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 6490d79..902a5b6 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1,3 +1,4 @@ +use std::net::IpAddr; use std::path::PathBuf; use clap::{Args, Parser, Subcommand}; @@ -50,5 +51,8 @@ pub enum Commands { /// Generate completions for your current shell ShellCompletions, /// Serve config files over tftp - Serve, + Serve { + #[arg(long, default_value = "0.0.0.0")] + ip: IpAddr, + }, } diff --git a/src/main.rs b/src/main.rs index 75e8523..7bfdcbe 100644 --- a/src/main.rs +++ b/src/main.rs @@ -107,11 +107,11 @@ async fn main() -> Result<(), Error> { "crete", &mut std::io::stdout(), ), - Commands::Serve => { + Commands::Serve { ip } => { let re = Regex::new(r"talos/(?.+)/(?.+)\.ya?ml") .expect("regex should be valid"); - tftp::serve(move |filename, _| { + tftp::serve(ip, move |filename, _| { let filename = filename.to_owned(); let re = re.clone(); diff --git a/src/tftp/server.rs b/src/tftp/server.rs index b6cd246..caff956 100644 --- a/src/tftp/server.rs +++ b/src/tftp/server.rs @@ -1,5 +1,5 @@ use std::io; -use std::net::{IpAddr, Ipv4Addr, SocketAddr, SocketAddrV4}; +use std::net::{IpAddr, SocketAddr}; use std::time::Duration; use socket_pktinfo::{PktInfo, PktInfoUdpSocket}; @@ -150,7 +150,7 @@ where Ok(()) } -pub async fn serve(callback: F) -> Result +pub async fn serve(ip: IpAddr, callback: F) -> Result where F: Fn(&str, IpAddr) -> Fut + Clone + Send + 'static, Fut: Future>> + Send + 'static, @@ -158,12 +158,13 @@ where let socket = PktInfoUdpSocket::new(Domain::IPV4)?; socket.set_nonblocking(true)?; - socket.bind(&SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, 69).into())?; + let addr: SocketAddr = (ip, 69).into(); + socket.bind(&addr.into())?; let async_fd = AsyncFd::new(socket)?; let mut buf = [0u8; PACKET_SIZE]; - println!("Server started"); + println!("Tftp server started on {addr}"); loop { let mut guard = async_fd.readable().await?;