diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-07-29 13:38:41 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-07-29 13:38:41 +0200 |
commit | da3b9d80e2b57c31b3a8db471ac7ccda11e05dfe (patch) | |
tree | 16eb43dee079c3c5d6c2900f24453f9e213c0788 /src | |
parent | 365ada5ebd012e8e3453190a6ab7c7b4a3fd1eff (diff) |
handle lcp configure-nak
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 49 |
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(()), } } |