aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/main.rs b/src/main.rs
index 68ec4cb..0f903d9 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,7 +1,7 @@
-use dhcp4d::lease::{LeaseDummyManager, LeaseManager};
+use dhcp4d::lease::{Lease, LeaseDummyManager, LeaseManager};
use std::io;
-use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4, UdpSocket};
+use std::net::{SocketAddr, SocketAddrV4, UdpSocket};
use anyhow::{anyhow, bail};
use dhcproto::v4::{DhcpOption, Flags, Message, MessageType, Opcode, OptionCode};
@@ -55,7 +55,7 @@ fn handle_request(sock: &UdpSocket, buf: &[u8], remote: SocketAddrV4) -> anyhow:
_ => bail!("expected ClientIdentifier"),
};
- let free_addr = choose_free_address(lease_mgr, client_id)
+ let lease = obtain_lease(lease_mgr, client_id)
.ok_or(anyhow!("no free addresses available"))?;
let mut resp = Message::default();
@@ -63,7 +63,7 @@ fn handle_request(sock: &UdpSocket, buf: &[u8], remote: SocketAddrV4) -> anyhow:
.set_flags(Flags::default().set_broadcast())
.set_opcode(Opcode::BootReply)
.set_xid(xid)
- .set_siaddr(free_addr)
+ .set_siaddr(lease.address)
.set_chaddr(chaddr)
.opts_mut();
@@ -83,7 +83,10 @@ fn handle_request(sock: &UdpSocket, buf: &[u8], remote: SocketAddrV4) -> anyhow:
.reduce(|acc, octet| acc + &octet)
.ok_or(anyhow!("zero-length client id"))?;
- println!("offering {} to client ID {}", free_addr, cid);
+ println!(
+ "offering {} to client ID {} for {:?}",
+ lease.address, cid, lease.lease_time
+ );
Ok(())
}
@@ -95,6 +98,6 @@ fn handle_request(sock: &UdpSocket, buf: &[u8], remote: SocketAddrV4) -> anyhow:
}
}
-fn choose_free_address<T: LeaseManager>(lease_mgr: T, client_id: &[u8]) -> Option<Ipv4Addr> {
+fn obtain_lease<T: LeaseManager>(lease_mgr: T, client_id: &[u8]) -> Option<Lease> {
lease_mgr.persistent_free_address(client_id)
}