swan-updown 0.2.3

swan-updown helps create ipsec interfaces
use crate::interface;
use crate::interface::GetResults;
use log::info;

pub async fn interface_updown(
    trigger: &str,
    netns: Option<String>,
    interface_name: String,
    conn_if_id: u32,
) -> Result<(), ()> {
    // process by PLUTO_VERB
    if trigger.starts_with("up-client") {
        match interface::get_in_netns(netns.clone(), interface_name.clone(), conn_if_id).await {
            Ok(()) => Ok(()),
            Err(GetResults::NotFound) => {
                interface::add_to_netns(netns, interface_name, conn_if_id).await
            }
            Err(_) => {
                interface::del_in_netns(netns.clone(), interface_name.clone()).await?;
                interface::add_to_netns(netns, interface_name, conn_if_id).await
            }
        }
    } else if trigger.starts_with("down-client") {
        match interface::get_in_netns(netns.clone(), interface_name.clone(), conn_if_id).await {
            Err(GetResults::NotFound) => Ok(()),
            _ => interface::del_in_netns(netns, interface_name).await,
        }
    } else {
        info!(
            "[interface_updown] No action is taken for PLUTO_VERB {}",
            trigger
        );
        Ok(())
    }
}