use crate::macros::genl_family;
pub mod config;
pub mod connection;
pub mod events;
pub mod messages;
pub mod types;
pub use config::{
OvpnConfig, OvpnDiff, OvpnInterfaceConfig, OvpnInterfaceConfigBuilder, OvpnKeyConfig,
OvpnPeerConfig, OvpnPeerConfigBuilder,
};
pub use events::OvpnEvent;
pub use messages::{
OvpnKeyDelRequest, OvpnKeyGetRequest, OvpnKeyNewRequest, OvpnKeyReply, OvpnKeySwapRequest,
OvpnKeyconf, OvpnKeydir, OvpnPeer, OvpnPeerDelRequest, OvpnPeerGetRequest, OvpnPeerNewRequest,
OvpnPeerReply, OvpnPeerSetRequest,
};
pub use types::{
OvpnAttr, OvpnCipherAlg, OvpnCmd, OvpnDelPeerReason, OvpnKeyconfAttr, OvpnKeySlot,
OvpnKeydirAttr, OvpnPeerAttr, OVPN_MAX_CIPHER_KEY_LEN, OVPN_MAX_KEY_ID, OVPN_MAX_PEER_ID,
OVPN_NONCE_TAIL_SIZE,
};
#[genl_family(name = "ovpn", version = 1)]
pub struct Ovpn;
#[cfg(test)]
mod tests {
use super::*;
use crate::netlink::{
construction::AsyncConstructible, AsyncProtocolInit, Protocol, ProtocolState,
};
#[test]
fn family_marker_carries_expected_name_and_version() {
assert_eq!(Ovpn::NAME, "ovpn");
assert_eq!(Ovpn::VERSION, 1);
}
#[test]
fn default_marker_has_zero_family_id_before_resolution() {
let d = Ovpn::default();
assert_eq!(d.family_id(), 0);
}
#[test]
fn protocol_state_routes_to_generic() {
const _: () = {
assert!(matches!(Ovpn::PROTOCOL, Protocol::Generic));
};
}
fn assert_async_constructible<P: AsyncConstructible>() {}
fn assert_async_protocol_init<P: AsyncProtocolInit>() {}
#[test]
fn ovpn_satisfies_async_construction_bounds() {
assert_async_constructible::<Ovpn>();
assert_async_protocol_init::<Ovpn>();
}
}