summaryrefslogtreecommitdiff
path: root/src/sys/socket
diff options
context:
space:
mode:
authorAl Hoang <3811822-hoanga@users.noreply.gitlab.com>2022-04-22 23:56:51 -0500
committerAl Hoang <3811822-hoanga@users.noreply.gitlab.com>2022-05-14 18:45:18 -0500
commitd02e27476cbf23b6818e57e017fd6148a98b7a92 (patch)
tree2e8bfe3a60c65393dd35224fe20bd3be51a77308 /src/sys/socket
parent69738c0fd03af19053c5701a984f923ecbbfada6 (diff)
downloadnix-d02e27476cbf23b6818e57e017fd6148a98b7a92.zip
add haiku support
* enabled as much functionality and defines that match updated libc definitions for haiku
Diffstat (limited to 'src/sys/socket')
-rw-r--r--src/sys/socket/addr.rs14
-rw-r--r--src/sys/socket/mod.rs6
-rw-r--r--src/sys/socket/sockopt.rs5
3 files changed, 19 insertions, 6 deletions
diff --git a/src/sys/socket/addr.rs b/src/sys/socket/addr.rs
index 5cd4678c..6d38f26c 100644
--- a/src/sys/socket/addr.rs
+++ b/src/sys/socket/addr.rs
@@ -26,6 +26,7 @@ use crate::sys::socket::addr::sys_control::SysControlAddr;
target_os = "illumos",
target_os = "netbsd",
target_os = "openbsd",
+ target_os = "haiku",
target_os = "fuchsia"))]
#[cfg(feature = "net")]
pub use self::datalink::LinkAddr;
@@ -120,6 +121,7 @@ pub enum AddressFamily {
#[cfg_attr(docsrs, doc(cfg(all())))]
Rose = libc::AF_ROSE,
/// DECet protocol sockets.
+ #[cfg(not(target_os = "haiku"))]
Decnet = libc::AF_DECnet,
/// Reserved for "802.2LLC project"; never used.
#[cfg(any(target_os = "android", target_os = "linux"))]
@@ -151,6 +153,7 @@ pub enum AddressFamily {
#[cfg_attr(docsrs, doc(cfg(all())))]
Rds = libc::AF_RDS,
/// IBM SNA
+ #[cfg(not(target_os = "haiku"))]
Sna = libc::AF_SNA,
/// Socket interface over IrDA
#[cfg(any(target_os = "android", target_os = "linux"))]
@@ -202,7 +205,7 @@ pub enum AddressFamily {
#[cfg_attr(docsrs, doc(cfg(all())))]
RxRpc = libc::AF_RXRPC,
/// New "modular ISDN" driver interface protocol
- #[cfg(not(any(target_os = "illumos", target_os = "solaris")))]
+ #[cfg(not(any(target_os = "illumos", target_os = "solaris", target_os = "haiku")))]
#[cfg_attr(docsrs, doc(cfg(all())))]
Isdn = libc::AF_ISDN,
/// Nokia cellular modem IPC/RPC interface
@@ -1158,6 +1161,7 @@ impl SockaddrIn {
target_os = "ios",
target_os = "macos",
target_os = "netbsd",
+ target_os = "haiku",
target_os = "openbsd"))]
sin_len: Self::size() as u8,
sin_family: AddressFamily::Inet as sa_family_t,
@@ -1442,6 +1446,7 @@ impl SockaddrLike for SockaddrStorage {
target_os = "macos",
target_os = "illumos",
target_os = "netbsd",
+ target_os = "haiku",
target_os = "openbsd"))]
#[cfg(feature = "net")]
libc::AF_LINK => LinkAddr::from_raw(addr, l)
@@ -2411,6 +2416,7 @@ mod datalink {
target_os = "macos",
target_os = "illumos",
target_os = "netbsd",
+ target_os = "haiku",
target_os = "openbsd"))]
#[cfg_attr(docsrs, doc(cfg(all())))]
mod datalink {
@@ -2425,11 +2431,13 @@ mod datalink {
impl LinkAddr {
/// interface index, if != 0, system given index for interface
+ #[cfg(not(target_os = "haiku"))]
pub fn ifindex(&self) -> usize {
self.0.sdl_index as usize
}
/// Datalink type
+ #[cfg(not(target_os = "haiku"))]
pub fn datalink_type(&self) -> u8 {
self.0.sdl_type
}
@@ -2445,6 +2453,7 @@ mod datalink {
}
/// link layer selector length
+ #[cfg(not(target_os = "haiku"))]
pub fn slen(&self) -> usize {
self.0.sdl_slen as usize
}
@@ -2737,7 +2746,8 @@ mod tests {
target_os = "macos",
target_os = "netbsd",
target_os = "illumos",
- target_os = "openbsd"))]
+ target_os = "openbsd",
+ target_os = "haiku"))]
let l = mem::size_of::<libc::sockaddr_dl>();
#[cfg(any(
target_os = "android",
diff --git a/src/sys/socket/mod.rs b/src/sys/socket/mod.rs
index c6613892..6386e62b 100644
--- a/src/sys/socket/mod.rs
+++ b/src/sys/socket/mod.rs
@@ -38,7 +38,7 @@ pub use self::addr::{
UnixAddr,
};
#[allow(deprecated)]
-#[cfg(not(any(target_os = "illumos", target_os = "solaris")))]
+#[cfg(not(any(target_os = "illumos", target_os = "solaris", target_os = "haiku")))]
#[cfg(feature = "net")]
pub use self::addr::{
InetAddr,
@@ -57,7 +57,7 @@ pub use self::addr::{
UnixAddr,
};
#[allow(deprecated)]
-#[cfg(any(target_os = "illumos", target_os = "solaris"))]
+#[cfg(any(target_os = "illumos", target_os = "solaris", target_os = "haiku"))]
#[cfg(feature = "net")]
pub use self::addr::{
InetAddr,
@@ -118,6 +118,7 @@ pub enum SockType {
Raw = libc::SOCK_RAW,
/// Provides a reliable datagram layer that does not
/// guarantee ordering.
+ #[cfg(not(any(target_os = "haiku")))]
Rdm = libc::SOCK_RDM,
}
@@ -845,6 +846,7 @@ impl ControlMessageOwned {
let cred: libc::cmsgcred = ptr::read_unaligned(p as *const _);
ControlMessageOwned::ScmCreds(cred.into())
}
+ #[cfg(not(target_os = "haiku"))]
(libc::SOL_SOCKET, libc::SCM_TIMESTAMP) => {
let tv: libc::timeval = ptr::read_unaligned(p as *const _);
ControlMessageOwned::ScmTimestamp(TimeVal::from(tv))
diff --git a/src/sys/socket/sockopt.rs b/src/sys/socket/sockopt.rs
index 14fea808..73d15406 100644
--- a/src/sys/socket/sockopt.rs
+++ b/src/sys/socket/sockopt.rs
@@ -399,7 +399,7 @@ cfg_if! {
TcpMaxSeg, GetOnly, libc::IPPROTO_TCP, libc::TCP_MAXSEG, u32);
}
}
-#[cfg(not(target_os = "openbsd"))]
+#[cfg(not(any(target_os = "openbsd", target_os = "haiku")))]
#[cfg(feature = "net")]
sockopt_impl!(
#[cfg_attr(docsrs, doc(cfg(feature = "net")))]
@@ -413,7 +413,7 @@ sockopt_impl!(
#[allow(missing_docs)]
// Not documented by Linux!
TcpRepair, Both, libc::IPPROTO_TCP, libc::TCP_REPAIR, u32);
-#[cfg(not(target_os = "openbsd"))]
+#[cfg(not(any(target_os = "openbsd", target_os = "haiku")))]
#[cfg(feature = "net")]
sockopt_impl!(
#[cfg_attr(docsrs, doc(cfg(feature = "net")))]
@@ -473,6 +473,7 @@ sockopt_impl!(
/// Specifies exact type of timestamping information collected by the kernel
/// [Further reading](https://www.kernel.org/doc/html/latest/networking/timestamping.html)
Timestamping, Both, libc::SOL_SOCKET, libc::SO_TIMESTAMPING, super::TimestampingFlag);
+#[cfg(not(target_os = "haiku"))]
sockopt_impl!(
/// Enable or disable the receiving of the `SO_TIMESTAMP` control message.
ReceiveTimestamp, Both, libc::SOL_SOCKET, libc::SO_TIMESTAMP, bool);