aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-07-29 13:38:41 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-07-29 13:38:41 +0200
commitda3b9d80e2b57c31b3a8db471ac7ccda11e05dfe (patch)
tree16eb43dee079c3c5d6c2900f24453f9e213c0788
parent365ada5ebd012e8e3453190a6ab7c7b4a3fd1eff (diff)
handle lcp configure-nak
-rw-r--r--src/main.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
index 1884afc..25e5763 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -509,6 +509,55 @@ fn handle_lcp(lcp: LcpPkt, ctl_w: &mut BufWriter<File>, state: Arc<Mutex<Ppp>>)
println!(" <- lcp configure-ack {}", lcp.identifier);
Ok(())
}
+ LcpData::ConfigureNak(configure_nak) => {
+ let mut mru = configure_nak.options.iter().find_map(|opt| {
+ if let LcpOpt::Mru(mru) = opt.value {
+ Some(mru)
+ } else {
+ None
+ }
+ });
+ let magic_number = configure_nak.options.iter().find_map(|opt| {
+ if let LcpOpt::MagicNumber(magic_number) = opt.value {
+ Some(magic_number)
+ } else {
+ None
+ }
+ });
+
+ if let Some(inner) = mru {
+ if inner < 1492 {
+ mru = None;
+ }
+ }
+
+ let mut state = state.lock().expect("ppp state mutex is poisoned");
+ match *state {
+ Ppp::Synchronize(identifier, old_mru, old_magic_number, attempt) => {
+ *state = Ppp::Synchronize(
+ identifier,
+ mru.unwrap_or(old_mru),
+ magic_number.unwrap_or(old_magic_number),
+ attempt,
+ )
+ }
+ Ppp::SyncAck(identifier, old_mru, old_magic_number, attempt) => {
+ *state = Ppp::SyncAck(
+ identifier,
+ mru.unwrap_or(old_mru),
+ magic_number.unwrap_or(old_magic_number),
+ attempt,
+ )
+ }
+ _ => {
+ println!(" <- unexpected lcp configure-nak {}", lcp.identifier);
+ return Ok(());
+ }
+ }
+
+ println!(" <- lcp configure-nak {}", lcp.identifier);
+ Ok(())
+ }
_ => Ok(()),
}
}