aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-11-22 14:53:34 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-11-22 14:53:45 +0100
commit257741aa3addbb14fa4fa532ac03f1ca4438ad3e (patch)
tree6113cca58e91d57c5b7ba024977e2f2fcf24df35
parentb891dde568bf5bcddace16c7913708eb99c135b4 (diff)
return to requesting state if reply has no_binding status
-rw-r--r--src/client.rs25
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;
+ }
}
}
}