diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-12 18:43:36 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-12 18:43:36 +0100 |
commit | 233f0342005cdf3de24ba52668fc593dabc2dc05 (patch) | |
tree | db1d6cd7a929eb5313d829b3b686fcd1204a2a4d | |
parent | 7d9fdb2377754c080a3638e3baac263b03d24d25 (diff) |
load server id and ia_pd from disk
-rw-r--r-- | src/main.rs | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/src/main.rs b/src/main.rs index e29b5d2..898cdd8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -35,19 +35,34 @@ struct Dhcp6 { impl Dhcp6 { fn load_from_disk() -> Result<Self> { + let lease = load_lease_optional(); + Ok(Self { duid: load_or_generate_duid()?, - lease: load_lease_optional(), + lease, xid: [0; 3], - server_id: Vec::default(), + server_id: lease.map(|lease| lease.server_id).unwrap_or(Vec::default()), last_sent: Packet::Advertise, // Can never occur naturally, forces XID generation. - iapd: IAPD { - id: 1, - t1: 0, - t2: 0, - opts: Default::default(), - }, + iapd: lease + .map(|lease| IAPD { + id: 1, + t1: 0, + t2: 0, + opts: vec![DhcpOption::IAPrefix(IAPrefix { + preferred_lifetime: 0, + valid_lifetime: 0, + prefix_len: lease.len, + prefix_ip: lease.prefix, + opts: Default::default(), + })], + }) + .unwrap_or(IAPD { + id: 1, + t1: 0, + t2: 0, + opts: Default::default(), + }), }) } } @@ -77,6 +92,8 @@ async fn main() -> Result<()> { let mut dhcp6 = Dhcp6::load_from_disk()?; + println!("[dbg] {:?}", dhcp6); + let mut dhcp6c = Dhcp6c::new( dhcp6.lease.clone().and_then(|lease| { Some(Lease { @@ -105,7 +122,7 @@ async fn main() -> Result<()> { let sock: std::net::UdpSocket = sock.into(); let sock: UdpSocket = sock.try_into()?; - sock.bind_device(Some("ppp0".as_bytes()))?; + sock.bind_device(Some("virtlab0".as_bytes()))?; let mut buf = [0; 1500]; loop { |