diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-03-11 13:03:26 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-03-11 13:03:26 +0100 |
commit | dfeaefb5737c3e06c45a2a4e7537922d07bffdbd (patch) | |
tree | 38c856fc68da793ad98db4cdd3c7e8646435c3a8 | |
parent | c23982983bea3762a6818f13ba4aa0c661dc890c (diff) |
fix lcp configuration-ack construction, namely size calculation
-rw-r--r-- | Cargo.lock | 4 | ||||
-rw-r--r-- | src/client.rs | 15 |
2 files changed, 11 insertions, 8 deletions
@@ -230,7 +230,7 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pppoe" version = "0.1.0" -source = "git+https://github.com/rsdsl/pppoe-rs#ed1e3c720940bc0a4f592a75d9e1269a04e4f460" +source = "git+https://github.com/rsdsl/pppoe-rs#6be94b66f0825b32cd81be546af1a70feb6b65e7" dependencies = [ "byteorder", "libc", @@ -241,7 +241,7 @@ dependencies = [ [[package]] name = "pppoe-sys" version = "0.1.0" -source = "git+https://github.com/rsdsl/pppoe-rs#ed1e3c720940bc0a4f592a75d9e1269a04e4f460" +source = "git+https://github.com/rsdsl/pppoe-rs#6be94b66f0825b32cd81be546af1a70feb6b65e7" dependencies = [ "bindgen", "cc", diff --git a/src/client.rs b/src/client.rs index f1d5fda..47cec16 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,6 +1,5 @@ use crate::error::{Error, Result}; -use std::cmp::min; use std::num::NonZeroU16; use std::sync::{Arc, Mutex}; use std::thread; @@ -166,12 +165,16 @@ impl Client { println!("received configuration request, options: {:?}", opts); - let mut ack = [0; 1024]; - let limit = min(ack.len() - 26, lcp.payload().len()); + let limit = lcp.payload().len(); + + let mut ack = Vec::new(); + ack.resize(14 + 6 + 2 + 4 + 2 * limit, 0); + + let ack = ack.as_mut_slice(); ack[26..26 + limit].copy_from_slice(lcp.payload()); pppoe::lcp::HeaderBuilder::create_configure_ack( - &mut ack[22..], + &mut ack[22..26 + limit], lcp.identifier(), )?; @@ -185,8 +188,8 @@ impl Client { HeaderBuilder::create_ppp(&mut ack[14..], session)?; - self.new_session_packet(remote_mac, &mut ack)?; - self.send(&ack)?; + self.new_session_packet(remote_mac, ack)?; + self.send(ack)?; println!("ackknowledged configuration"); Ok(()) |