mirror of
https://github.com/safing/portmaster
synced 2025-04-22 11:59:09 +00:00
59 lines
1.7 KiB
Rust
59 lines
1.7 KiB
Rust
#![allow(dead_code)]
|
|
|
|
use core::fmt::Display;
|
|
|
|
use num_derive::{FromPrimitive, ToPrimitive};
|
|
|
|
pub const ICMPV4_CODE_DESTINATION_UNREACHABLE: u32 = 3;
|
|
pub const ICMPV4_CODE_DU_PORT_UNREACHABLE: u32 = 3; // Destination Unreachable (Port unreachable) ;
|
|
pub const ICMPV4_CODE_DU_ADMINISTRATIVELY_PROHIBITED: u32 = 13; // Destination Unreachable (Communication Administratively Prohibited) ;
|
|
|
|
pub const ICMPV6_CODE_DESTINATION_UNREACHABLE: u32 = 1;
|
|
pub const ICMPV6_CODE_DU_PORT_UNREACHABLE: u32 = 4; // Destination Unreachable (Port unreachable) ;
|
|
|
|
enum Direction {
|
|
Outbound = 0,
|
|
Inbound = 1,
|
|
}
|
|
|
|
const SIOCTL_TYPE: u32 = 40000;
|
|
macro_rules! ctl_code {
|
|
($device_type:expr, $function:expr, $method:expr, $access:expr) => {
|
|
($device_type << 16) | ($access << 14) | ($function << 2) | $method
|
|
};
|
|
}
|
|
|
|
pub const METHOD_BUFFERED: u32 = 0;
|
|
pub const METHOD_IN_DIRECT: u32 = 1;
|
|
pub const METHOD_OUT_DIRECT: u32 = 2;
|
|
pub const METHOD_NEITHER: u32 = 3;
|
|
|
|
pub const FILE_READ_DATA: u32 = 0x0001; // file & pipe
|
|
pub const FILE_WRITE_DATA: u32 = 0x0002; // file & pipe
|
|
|
|
#[repr(u32)]
|
|
#[derive(FromPrimitive, ToPrimitive)]
|
|
pub enum ControlCode {
|
|
Version = ctl_code!(
|
|
SIOCTL_TYPE,
|
|
0x800,
|
|
METHOD_BUFFERED,
|
|
FILE_READ_DATA | FILE_WRITE_DATA
|
|
),
|
|
ShutdownRequest = ctl_code!(
|
|
SIOCTL_TYPE,
|
|
0x801,
|
|
METHOD_BUFFERED,
|
|
FILE_READ_DATA | FILE_WRITE_DATA
|
|
),
|
|
}
|
|
|
|
impl Display for ControlCode {
|
|
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
|
|
match self {
|
|
ControlCode::Version => _ = write!(f, "Version"),
|
|
ControlCode::ShutdownRequest => _ = write!(f, "Shutdown"),
|
|
};
|
|
return Ok(());
|
|
}
|
|
}
|