use netring::monitor::{BackendErrorPolicy, HandlerErrorPolicy, Monitor};
use netring::protocol::builtin::Tcp;
use netring::protocol::event_typed::FlowStarted;
#[tokio::main]
async fn main() -> Result<(), netring::Error> {
let iface = std::env::args().nth(1).unwrap_or_else(|| "lo".to_string());
let monitor = Monitor::builder()
.interface(&iface)
.protocol::<Tcp>()
.backend_error_policy(BackendErrorPolicy::Reopen)
.catch_handler_panics(true)
.handler_error_policy(HandlerErrorPolicy::Isolate)
.on::<FlowStarted<Tcp>>(|f: &FlowStarted<Tcp>| {
assert_ne!(f.key.b.port(), 9, "simulated handler bug on port 9");
Ok(())
})
.build()?;
println!("# resilient monitor on {iface} (Reopen + panic isolation); Ctrl-C to stop");
monitor.run_until_signal().await
}