use arcbox_helper::HelperError;
use arcbox_helper::validate::{BridgeIface, Subnet};
use arcbox_route::Ipv4Net;
pub fn add(subnet: &Subnet, iface: &BridgeIface) -> Result<(), HelperError> {
let net = to_ipv4net(subnet)?;
match arcbox_route::add(net, iface.as_str()).map_err(HelperError::other)? {
arcbox_route::AddOutcome::Added => Ok(()),
arcbox_route::AddOutcome::Conflict => Err(HelperError::RouteConflict {
subnet: subnet.to_string(),
}),
}
}
pub fn remove(subnet: &Subnet) -> Result<(), HelperError> {
let net = to_ipv4net(subnet)?;
arcbox_route::remove(net).map_err(HelperError::other)
}
fn to_ipv4net(subnet: &Subnet) -> Result<Ipv4Net, HelperError> {
let inner = subnet.network();
Ipv4Net::new(inner.ip(), inner.prefix())
.map_err(|e| HelperError::other(format!("invalid subnet: {e}")))
}