aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-07-30 09:34:27 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-07-30 09:34:27 +0200
commite24b1889d5e2fd03bb013d80db1d203fe49beb87 (patch)
treeb47fae14cafdcc144412d55338b9d3f69f130328
parent8b0ee47e2c771f88df1707241a940deff4e34a98 (diff)
query ipcp dns information
-rw-r--r--Cargo.lock2
-rw-r--r--src/main.rs58
2 files changed, 49 insertions, 11 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 46b81de..b8663ff 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -625,7 +625,7 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "ppproperly"
version = "0.1.0"
-source = "git+https://github.com/rsdsl/ppproperly.git#e0b75cab5d6835946b790d9188e1d94fc0653f69"
+source = "git+https://github.com/rsdsl/ppproperly.git#4f44f33a1ac61eae5f9c61852a97251e60372721"
dependencies = [
"bitfield",
"ppproperly_macros",
diff --git a/src/main.rs b/src/main.rs
index f84a9b6..150c5d3 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1069,7 +1069,11 @@ fn ipcp(
PppPkt::new_ipcp(IpcpPkt::new_configure_request(
identifier,
- vec![IpcpOpt::IpAddr(config.addr.into()).into()],
+ vec![
+ IpcpOpt::IpAddr(config.addr.into()).into(),
+ IpcpOpt::PrimaryDns(config.dns1.into()).into(),
+ IpcpOpt::SecondaryDns(config.dns2.into()).into(),
+ ],
))
.serialize(&mut ctl_w)?;
ctl_w.flush()?;
@@ -1078,8 +1082,8 @@ fn ipcp(
Ncp::Configure(identifier, attempt + 1);
println!(
- " -> ipcp configure-request {}/{}, address: {}",
- attempt, MAX_ATTEMPTS, config.addr
+ " -> ipcp configure-request {}/{}, address: {}, dns1: {}, dns2: {}",
+ attempt, MAX_ATTEMPTS, config.addr, config.dns1, config.dns2
);
}
Ncp::ConfAck(identifier, attempt) => {
@@ -1090,7 +1094,11 @@ fn ipcp(
PppPkt::new_ipcp(IpcpPkt::new_configure_request(
identifier,
- vec![IpcpOpt::IpAddr(config.addr.into()).into()],
+ vec![
+ IpcpOpt::IpAddr(config.addr.into()).into(),
+ IpcpOpt::PrimaryDns(config.dns1.into()).into(),
+ IpcpOpt::SecondaryDns(config.dns2.into()).into(),
+ ],
))
.serialize(&mut ctl_w)?;
ctl_w.flush()?;
@@ -1099,8 +1107,8 @@ fn ipcp(
Ncp::ConfAck(identifier, attempt + 1);
println!(
- " -> ipcp configure-request {}/{}, address: {}",
- attempt, MAX_ATTEMPTS, config.addr
+ " -> ipcp configure-request {}/{}, address: {}, dns1: {}, dns2: {}",
+ attempt, MAX_ATTEMPTS, config.addr, config.dns1, config.dns2
);
}
Ncp::ConfAcked(attempt) => {
@@ -1306,6 +1314,8 @@ fn handle_ipcp(
Ok(())
}
IpcpData::ConfigureNak(configure_nak) => {
+ let mut config = config.lock().expect("ipv4 config mutex is poisoned");
+
let addr = configure_nak
.options
.iter()
@@ -1317,6 +1327,28 @@ fn handle_ipcp(
}
})
.expect("receive ipcp configure-nak without ipv4 address");
+ let dns1 = configure_nak
+ .options
+ .iter()
+ .find_map(|opt| {
+ if let IpcpOpt::PrimaryDns(dns1) = &opt.value {
+ Some(dns1.0)
+ } else {
+ None
+ }
+ })
+ .unwrap_or(config.dns1);
+ let dns2 = configure_nak
+ .options
+ .iter()
+ .find_map(|opt| {
+ if let IpcpOpt::SecondaryDns(dns2) = &opt.value {
+ Some(dns2.0)
+ } else {
+ None
+ }
+ })
+ .unwrap_or(config.dns2);
match ncp_states.lock().expect("ncp state mutex is poisoned")[&Network::Ipv4] {
Ncp::Configure(identifier, ..) if ipcp.identifier == identifier => {}
@@ -1327,19 +1359,25 @@ fn handle_ipcp(
}
}
- config.lock().expect("ipv4 config mutex is poisoned").addr = addr;
+ config.addr = addr;
+ config.dns1 = dns1;
+ config.dns2 = dns2;
PppPkt::new_ipcp(IpcpPkt::new_configure_request(
ipcp.identifier,
- vec![IpcpOpt::IpAddr(addr.into()).into()],
+ vec![
+ IpcpOpt::IpAddr(addr.into()).into(),
+ IpcpOpt::PrimaryDns(dns1.into()).into(),
+ IpcpOpt::SecondaryDns(dns2.into()).into(),
+ ],
))
.serialize(ppp_w)?;
ppp_w.flush()?;
println!(" <- ipcp configure-nak {}", ipcp.identifier);
println!(
- " -> ipcp configure-request {}, address: {}",
- ipcp.identifier, addr
+ " -> ipcp configure-request {}, address: {}, dns1: {}, dns2: {}",
+ ipcp.identifier, addr, dns1, dns2
);
Ok(())