mctx_core/raw_ip/
capabilities.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3pub enum RawIpCapability {
4 Unsupported,
6 FullIpDatagram,
9 KernelRebuiltIpv6Header,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq)]
20pub struct RawIpCapabilities {
21 pub ipv4: RawIpCapability,
23 pub ipv6: RawIpCapability,
25}
26
27pub const fn raw_ip_capabilities() -> RawIpCapabilities {
29 #[cfg(any(target_os = "linux", target_os = "macos"))]
30 {
31 RawIpCapabilities {
32 ipv4: RawIpCapability::FullIpDatagram,
33 ipv6: RawIpCapability::KernelRebuiltIpv6Header,
34 }
35 }
36
37 #[cfg(windows)]
38 {
39 RawIpCapabilities {
40 ipv4: RawIpCapability::FullIpDatagram,
41 ipv6: RawIpCapability::Unsupported,
42 }
43 }
44
45 #[cfg(not(any(target_os = "linux", target_os = "macos", windows)))]
46 {
47 RawIpCapabilities {
48 ipv4: RawIpCapability::Unsupported,
49 ipv6: RawIpCapability::Unsupported,
50 }
51 }
52}
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn capability_report_matches_the_compiled_platform() {
60 let capabilities = raw_ip_capabilities();
61
62 #[cfg(any(target_os = "linux", target_os = "macos"))]
63 assert_eq!(capabilities.ipv4, RawIpCapability::FullIpDatagram);
64 #[cfg(any(target_os = "linux", target_os = "macos"))]
65 assert_eq!(capabilities.ipv6, RawIpCapability::KernelRebuiltIpv6Header);
66
67 #[cfg(windows)]
68 assert_eq!(capabilities.ipv4, RawIpCapability::FullIpDatagram);
69 #[cfg(windows)]
70 assert_eq!(capabilities.ipv6, RawIpCapability::Unsupported);
71 }
72}