1use libc::{self, c_int};
4use crate::ffi;
5
6#[derive(Copy, Clone, Debug, Eq, PartialEq)]
7#[repr(transparent)]
8pub struct Level(c_int);
9
10impl Level {
11 pub const IPV4: Level = Level(ffi::IPPROTO_IP);
12 pub const IPV6: Level = Level(ffi::IPPROTO_IPV6);
13 pub const SOCKET: Level = Level(ffi::SOL_SOCKET);
14
15 pub const fn from(n: c_int) -> Self {
16 Self(n)
17 }
18}
19
20#[derive(Copy, Clone, Debug, Eq, PartialEq)]
21#[repr(transparent)]
22pub struct Name(c_int);
23
24impl Name {
25 pub const IPV4_HDRINCL: Name = Name(ffi::IP_HDRINCL);
26 pub const IPV6_CHECKSUM: Name = Name(ffi::IPV6_CHECKSUM);
27 pub const IPV6_RECVHOPLIMIT: Name = Name(ffi::IPV6_RECVHOPLIMIT);
28 pub const IPV6_RECVPATHMTU: Name = Name(ffi::IPV6_RECVPATHMTU);
29 pub const IPV6_RECVPKTINFO: Name = Name(ffi::IPV6_RECVPKTINFO);
30 pub const IPV6_DONTFRAG: Name = Name(ffi::IPV6_DONTFRAG);
31
32 pub const SO_TYPE: Name = Name(libc::SO_TYPE);
33 pub const SO_KEEPALIVE: Name = Name(libc::SO_KEEPALIVE);
34 pub const SO_SNDBUF: Name = Name(libc::SO_SNDBUF);
35 pub const SO_RCVBUF: Name = Name(libc::SO_RCVBUF);
36
37 pub const fn from(n: c_int) -> Self {
38 Self(n)
39 }
40}
41
42pub unsafe trait Opt: Copy + Default {}
43
44unsafe impl Opt for c_int {}