use std::io;
#[cfg(feature = "net")]
fn main() -> io::Result<()> {
use dos::net::{NotificationType, get_ip_interface_entry, notify_ip_interface_change};
use std::thread;
use std::time::Duration;
println!("Starting network interface change monitor...");
let _handle = notify_ip_interface_change(
None, |notification_type| {
match notification_type {
NotificationType::InitialNotification => {
println!("[INIT] Interface change monitoring registered successfully");
}
NotificationType::AddInstance(interface) => {
let updated = get_ip_interface_entry(
interface.as_raw().InterfaceLuid,
interface.family(),
);
let interface = updated.as_ref().unwrap_or(interface);
println!(
"[ADD] Interface added - LUID: {:#x}, Family: {:?}, Metric: {}, MTU: {}",
*interface.interface_luid(),
interface.family(),
interface.metric(),
interface.mtu()
);
}
NotificationType::DeleteInstance(interface) => {
let updated = get_ip_interface_entry(
interface.as_raw().InterfaceLuid,
interface.family(),
);
let interface = updated.as_ref().unwrap_or(interface);
println!(
"[DELETE] Interface removed - LUID: {:#x}, Family: {:?}",
*interface.interface_luid(),
interface.family()
);
}
NotificationType::ParameterNotification(interface) => {
let updated = get_ip_interface_entry(
interface.as_raw().InterfaceLuid,
interface.family(),
);
let interface = updated.as_ref().unwrap_or(interface);
println!(
"[CHANGE] Interface parameter changed - LUID: {:#x}, Family: {:?}, Metric: {}, MTU: {}, Auto Metric: {}",
*interface.interface_luid(),
interface.family(),
interface.metric(),
interface.mtu(),
interface.automatic_metric()
);
}
}
},
true, )?;
println!("Monitor registered. Try the following to see notifications:");
println!("1. Disable/enable a network adapter");
println!("2. Change network adapter properties (metric, MTU, etc.)");
println!("3. Connect/disconnect network cables");
println!("4. Connect/disconnect to Wi-Fi networks");
println!();
loop {
thread::sleep(Duration::from_millis(100));
}
}
#[cfg(not(feature = "net"))]
fn main() -> io::Result<()> {
Ok(())
}