diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-22 14:53:34 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-22 14:53:45 +0100 |
commit | 257741aa3addbb14fa4fa532ac03f1ca4438ad3e (patch) | |
tree | 6113cca58e91d57c5b7ba024977e2f2fcf24df35 | |
parent | b891dde568bf5bcddace16c7913708eb99c135b4 (diff) |
return to requesting state if reply has no_binding status
-rw-r--r-- | src/client.rs | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/client.rs b/src/client.rs index e9e2792..e920c63 100644 --- a/src/client.rs +++ b/src/client.rs @@ -363,10 +363,6 @@ impl Dhcp6c { | Dhcp6cState::Renewing | Dhcp6cState::Rebinding | Dhcp6cState::Rerouting => { - self.upper_status_tx - .send(true) - .expect("upper status channel is closed"); - if lease.t1.as_secs() == 0 { lease.t1 = lease.valid_lifetime / 4; } @@ -375,11 +371,26 @@ impl Dhcp6c { lease.t2 = lease.valid_lifetime / 2; } - // TODO: req if status nobinding // TODO: lft = 0 - self.lease = Some(lease); - self.state = Dhcp6cState::Opened; + if no_binding { + self.restart_timer.reset(); + self.restart_counter = self.max_request; + + self.output_tx + .send(Packet::Request) + .expect("output channel is closed"); + self.restart_counter -= 1; + + self.state = Dhcp6cState::Requesting; + } else { + self.upper_status_tx + .send(true) + .expect("upper status channel is closed"); + + self.lease = Some(lease); + self.state = Dhcp6cState::Opened; + } } } } |