aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-11-12 18:43:36 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-11-12 18:43:36 +0100
commit233f0342005cdf3de24ba52668fc593dabc2dc05 (patch)
treedb1d6cd7a929eb5313d829b3b686fcd1204a2a4d
parent7d9fdb2377754c080a3638e3baac263b03d24d25 (diff)
load server id and ia_pd from disk
-rw-r--r--src/main.rs35
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 {