1 macro_rules! unimpl { 2 () => { 3 return Err(io::const_io_error!( 4 io::ErrorKind::Unsupported, 5 "No networking available on L4Re.", 6 )); 7 }; 8 } 9 10 pub mod net { 11 #![allow(warnings)] 12 use crate::fmt; 13 use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut}; 14 use crate::net::{Ipv4Addr, Ipv6Addr, Shutdown, SocketAddr}; 15 use crate::os::unix::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, RawFd}; 16 use crate::sys::fd::FileDesc; 17 use crate::sys_common::{AsInner, FromInner, IntoInner}; 18 use crate::time::Duration; 19 20 #[allow(unused_extern_crates)] 21 pub extern crate libc as netc; 22 23 pub struct Socket(FileDesc); 24 impl Socket { new(_: &SocketAddr, _: libc::c_int) -> io::Result<Socket>25 pub fn new(_: &SocketAddr, _: libc::c_int) -> io::Result<Socket> { 26 unimpl!(); 27 } 28 new_raw(_: libc::c_int, _: libc::c_int) -> io::Result<Socket>29 pub fn new_raw(_: libc::c_int, _: libc::c_int) -> io::Result<Socket> { 30 unimpl!(); 31 } 32 new_pair(_: libc::c_int, _: libc::c_int) -> io::Result<(Socket, Socket)>33 pub fn new_pair(_: libc::c_int, _: libc::c_int) -> io::Result<(Socket, Socket)> { 34 unimpl!(); 35 } 36 connect_timeout(&self, _: &SocketAddr, _: Duration) -> io::Result<()>37 pub fn connect_timeout(&self, _: &SocketAddr, _: Duration) -> io::Result<()> { 38 unimpl!(); 39 } 40 accept( &self, _: *mut libc::sockaddr, _: *mut libc::socklen_t, ) -> io::Result<Socket>41 pub fn accept( 42 &self, 43 _: *mut libc::sockaddr, 44 _: *mut libc::socklen_t, 45 ) -> io::Result<Socket> { 46 unimpl!(); 47 } 48 duplicate(&self) -> io::Result<Socket>49 pub fn duplicate(&self) -> io::Result<Socket> { 50 unimpl!(); 51 } 52 read(&self, _: &mut [u8]) -> io::Result<usize>53 pub fn read(&self, _: &mut [u8]) -> io::Result<usize> { 54 unimpl!(); 55 } 56 read_vectored(&self, _: &mut [IoSliceMut<'_>]) -> io::Result<usize>57 pub fn read_vectored(&self, _: &mut [IoSliceMut<'_>]) -> io::Result<usize> { 58 unimpl!(); 59 } 60 is_read_vectored(&self) -> bool61 pub fn is_read_vectored(&self) -> bool { 62 false 63 } 64 peek(&self, _: &mut [u8]) -> io::Result<usize>65 pub fn peek(&self, _: &mut [u8]) -> io::Result<usize> { 66 unimpl!(); 67 } 68 recv_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)>69 pub fn recv_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)> { 70 unimpl!(); 71 } 72 peek_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)>73 pub fn peek_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)> { 74 unimpl!(); 75 } 76 write(&self, _: &[u8]) -> io::Result<usize>77 pub fn write(&self, _: &[u8]) -> io::Result<usize> { 78 unimpl!(); 79 } 80 write_vectored(&self, _: &[IoSlice<'_>]) -> io::Result<usize>81 pub fn write_vectored(&self, _: &[IoSlice<'_>]) -> io::Result<usize> { 82 unimpl!(); 83 } 84 is_write_vectored(&self) -> bool85 pub fn is_write_vectored(&self) -> bool { 86 false 87 } 88 set_timeout(&self, _: Option<Duration>, _: libc::c_int) -> io::Result<()>89 pub fn set_timeout(&self, _: Option<Duration>, _: libc::c_int) -> io::Result<()> { 90 unimpl!(); 91 } 92 timeout(&self, _: libc::c_int) -> io::Result<Option<Duration>>93 pub fn timeout(&self, _: libc::c_int) -> io::Result<Option<Duration>> { 94 unimpl!(); 95 } 96 shutdown(&self, _: Shutdown) -> io::Result<()>97 pub fn shutdown(&self, _: Shutdown) -> io::Result<()> { 98 unimpl!(); 99 } 100 set_linger(&self, _: Option<Duration>) -> io::Result<()>101 pub fn set_linger(&self, _: Option<Duration>) -> io::Result<()> { 102 unimpl!(); 103 } 104 linger(&self) -> io::Result<Option<Duration>>105 pub fn linger(&self) -> io::Result<Option<Duration>> { 106 unimpl!(); 107 } 108 set_nodelay(&self, _: bool) -> io::Result<()>109 pub fn set_nodelay(&self, _: bool) -> io::Result<()> { 110 unimpl!(); 111 } 112 nodelay(&self) -> io::Result<bool>113 pub fn nodelay(&self) -> io::Result<bool> { 114 unimpl!(); 115 } 116 set_nonblocking(&self, _: bool) -> io::Result<()>117 pub fn set_nonblocking(&self, _: bool) -> io::Result<()> { 118 unimpl!(); 119 } 120 take_error(&self) -> io::Result<Option<io::Error>>121 pub fn take_error(&self) -> io::Result<Option<io::Error>> { 122 unimpl!(); 123 } 124 125 // This is used by sys_common code to abstract over Windows and Unix. as_raw(&self) -> RawFd126 pub fn as_raw(&self) -> RawFd { 127 self.as_raw_fd() 128 } 129 } 130 131 impl AsInner<FileDesc> for Socket { 132 #[inline] as_inner(&self) -> &FileDesc133 fn as_inner(&self) -> &FileDesc { 134 &self.0 135 } 136 } 137 138 impl FromInner<FileDesc> for Socket { from_inner(file_desc: FileDesc) -> Socket139 fn from_inner(file_desc: FileDesc) -> Socket { 140 Socket(file_desc) 141 } 142 } 143 144 impl IntoInner<FileDesc> for Socket { into_inner(self) -> FileDesc145 fn into_inner(self) -> FileDesc { 146 self.0 147 } 148 } 149 150 impl AsFd for Socket { as_fd(&self) -> BorrowedFd<'_>151 fn as_fd(&self) -> BorrowedFd<'_> { 152 self.0.as_fd() 153 } 154 } 155 156 impl AsRawFd for Socket { 157 #[inline] as_raw_fd(&self) -> RawFd158 fn as_raw_fd(&self) -> RawFd { 159 self.0.as_raw_fd() 160 } 161 } 162 163 impl IntoRawFd for Socket { into_raw_fd(self) -> RawFd164 fn into_raw_fd(self) -> RawFd { 165 self.0.into_raw_fd() 166 } 167 } 168 169 impl FromRawFd for Socket { from_raw_fd(raw_fd: RawFd) -> Self170 unsafe fn from_raw_fd(raw_fd: RawFd) -> Self { 171 Self(FromRawFd::from_raw_fd(raw_fd)) 172 } 173 } 174 175 pub struct TcpStream { 176 inner: Socket, 177 } 178 179 impl TcpStream { connect(_: io::Result<&SocketAddr>) -> io::Result<TcpStream>180 pub fn connect(_: io::Result<&SocketAddr>) -> io::Result<TcpStream> { 181 unimpl!(); 182 } 183 connect_timeout(_: &SocketAddr, _: Duration) -> io::Result<TcpStream>184 pub fn connect_timeout(_: &SocketAddr, _: Duration) -> io::Result<TcpStream> { 185 unimpl!(); 186 } 187 188 #[inline] socket(&self) -> &Socket189 pub fn socket(&self) -> &Socket { 190 &self.inner 191 } 192 into_socket(self) -> Socket193 pub fn into_socket(self) -> Socket { 194 self.inner 195 } 196 set_read_timeout(&self, _: Option<Duration>) -> io::Result<()>197 pub fn set_read_timeout(&self, _: Option<Duration>) -> io::Result<()> { 198 unimpl!(); 199 } 200 set_write_timeout(&self, _: Option<Duration>) -> io::Result<()>201 pub fn set_write_timeout(&self, _: Option<Duration>) -> io::Result<()> { 202 unimpl!(); 203 } 204 read_timeout(&self) -> io::Result<Option<Duration>>205 pub fn read_timeout(&self) -> io::Result<Option<Duration>> { 206 unimpl!(); 207 } 208 write_timeout(&self) -> io::Result<Option<Duration>>209 pub fn write_timeout(&self) -> io::Result<Option<Duration>> { 210 unimpl!(); 211 } 212 peek(&self, _: &mut [u8]) -> io::Result<usize>213 pub fn peek(&self, _: &mut [u8]) -> io::Result<usize> { 214 unimpl!(); 215 } 216 read(&self, _: &mut [u8]) -> io::Result<usize>217 pub fn read(&self, _: &mut [u8]) -> io::Result<usize> { 218 unimpl!(); 219 } 220 read_buf(&self, _: BorrowedCursor<'_>) -> io::Result<()>221 pub fn read_buf(&self, _: BorrowedCursor<'_>) -> io::Result<()> { 222 unimpl!(); 223 } 224 read_vectored(&self, _: &mut [IoSliceMut<'_>]) -> io::Result<usize>225 pub fn read_vectored(&self, _: &mut [IoSliceMut<'_>]) -> io::Result<usize> { 226 unimpl!(); 227 } 228 is_read_vectored(&self) -> bool229 pub fn is_read_vectored(&self) -> bool { 230 false 231 } 232 write(&self, _: &[u8]) -> io::Result<usize>233 pub fn write(&self, _: &[u8]) -> io::Result<usize> { 234 unimpl!(); 235 } 236 write_vectored(&self, _: &[IoSlice<'_>]) -> io::Result<usize>237 pub fn write_vectored(&self, _: &[IoSlice<'_>]) -> io::Result<usize> { 238 unimpl!(); 239 } 240 is_write_vectored(&self) -> bool241 pub fn is_write_vectored(&self) -> bool { 242 false 243 } 244 peer_addr(&self) -> io::Result<SocketAddr>245 pub fn peer_addr(&self) -> io::Result<SocketAddr> { 246 unimpl!(); 247 } 248 socket_addr(&self) -> io::Result<SocketAddr>249 pub fn socket_addr(&self) -> io::Result<SocketAddr> { 250 unimpl!(); 251 } 252 shutdown(&self, _: Shutdown) -> io::Result<()>253 pub fn shutdown(&self, _: Shutdown) -> io::Result<()> { 254 unimpl!(); 255 } 256 duplicate(&self) -> io::Result<TcpStream>257 pub fn duplicate(&self) -> io::Result<TcpStream> { 258 unimpl!(); 259 } 260 set_linger(&self, _: Option<Duration>) -> io::Result<()>261 pub fn set_linger(&self, _: Option<Duration>) -> io::Result<()> { 262 unimpl!(); 263 } 264 linger(&self) -> io::Result<Option<Duration>>265 pub fn linger(&self) -> io::Result<Option<Duration>> { 266 unimpl!(); 267 } 268 set_nodelay(&self, _: bool) -> io::Result<()>269 pub fn set_nodelay(&self, _: bool) -> io::Result<()> { 270 unimpl!(); 271 } 272 nodelay(&self) -> io::Result<bool>273 pub fn nodelay(&self) -> io::Result<bool> { 274 unimpl!(); 275 } 276 set_ttl(&self, _: u32) -> io::Result<()>277 pub fn set_ttl(&self, _: u32) -> io::Result<()> { 278 unimpl!(); 279 } 280 ttl(&self) -> io::Result<u32>281 pub fn ttl(&self) -> io::Result<u32> { 282 unimpl!(); 283 } 284 take_error(&self) -> io::Result<Option<io::Error>>285 pub fn take_error(&self) -> io::Result<Option<io::Error>> { 286 unimpl!(); 287 } 288 set_nonblocking(&self, _: bool) -> io::Result<()>289 pub fn set_nonblocking(&self, _: bool) -> io::Result<()> { 290 unimpl!(); 291 } 292 } 293 294 impl FromInner<Socket> for TcpStream { from_inner(socket: Socket) -> TcpStream295 fn from_inner(socket: Socket) -> TcpStream { 296 TcpStream { inner: socket } 297 } 298 } 299 300 impl fmt::Debug for TcpStream { fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result301 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 302 write!(f, "No networking support available on L4Re") 303 } 304 } 305 306 pub struct TcpListener { 307 inner: Socket, 308 } 309 310 impl TcpListener { bind(_: io::Result<&SocketAddr>) -> io::Result<TcpListener>311 pub fn bind(_: io::Result<&SocketAddr>) -> io::Result<TcpListener> { 312 unimpl!(); 313 } 314 315 #[inline] socket(&self) -> &Socket316 pub fn socket(&self) -> &Socket { 317 &self.inner 318 } 319 into_socket(self) -> Socket320 pub fn into_socket(self) -> Socket { 321 self.inner 322 } 323 socket_addr(&self) -> io::Result<SocketAddr>324 pub fn socket_addr(&self) -> io::Result<SocketAddr> { 325 unimpl!(); 326 } 327 accept(&self) -> io::Result<(TcpStream, SocketAddr)>328 pub fn accept(&self) -> io::Result<(TcpStream, SocketAddr)> { 329 unimpl!(); 330 } 331 duplicate(&self) -> io::Result<TcpListener>332 pub fn duplicate(&self) -> io::Result<TcpListener> { 333 unimpl!(); 334 } 335 set_ttl(&self, _: u32) -> io::Result<()>336 pub fn set_ttl(&self, _: u32) -> io::Result<()> { 337 unimpl!(); 338 } 339 ttl(&self) -> io::Result<u32>340 pub fn ttl(&self) -> io::Result<u32> { 341 unimpl!(); 342 } 343 set_only_v6(&self, _: bool) -> io::Result<()>344 pub fn set_only_v6(&self, _: bool) -> io::Result<()> { 345 unimpl!(); 346 } 347 only_v6(&self) -> io::Result<bool>348 pub fn only_v6(&self) -> io::Result<bool> { 349 unimpl!(); 350 } 351 take_error(&self) -> io::Result<Option<io::Error>>352 pub fn take_error(&self) -> io::Result<Option<io::Error>> { 353 unimpl!(); 354 } 355 set_nonblocking(&self, _: bool) -> io::Result<()>356 pub fn set_nonblocking(&self, _: bool) -> io::Result<()> { 357 unimpl!(); 358 } 359 } 360 361 impl FromInner<Socket> for TcpListener { from_inner(socket: Socket) -> TcpListener362 fn from_inner(socket: Socket) -> TcpListener { 363 TcpListener { inner: socket } 364 } 365 } 366 367 impl fmt::Debug for TcpListener { fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result368 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 369 write!(f, "No networking support available on L4Re.") 370 } 371 } 372 373 pub struct UdpSocket { 374 inner: Socket, 375 } 376 377 impl UdpSocket { bind(_: io::Result<&SocketAddr>) -> io::Result<UdpSocket>378 pub fn bind(_: io::Result<&SocketAddr>) -> io::Result<UdpSocket> { 379 unimpl!(); 380 } 381 382 #[inline] socket(&self) -> &Socket383 pub fn socket(&self) -> &Socket { 384 &self.inner 385 } 386 into_socket(self) -> Socket387 pub fn into_socket(self) -> Socket { 388 self.inner 389 } 390 peer_addr(&self) -> io::Result<SocketAddr>391 pub fn peer_addr(&self) -> io::Result<SocketAddr> { 392 unimpl!(); 393 } 394 socket_addr(&self) -> io::Result<SocketAddr>395 pub fn socket_addr(&self) -> io::Result<SocketAddr> { 396 unimpl!(); 397 } 398 recv_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)>399 pub fn recv_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)> { 400 unimpl!(); 401 } 402 peek_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)>403 pub fn peek_from(&self, _: &mut [u8]) -> io::Result<(usize, SocketAddr)> { 404 unimpl!(); 405 } 406 send_to(&self, _: &[u8], _: &SocketAddr) -> io::Result<usize>407 pub fn send_to(&self, _: &[u8], _: &SocketAddr) -> io::Result<usize> { 408 unimpl!(); 409 } 410 duplicate(&self) -> io::Result<UdpSocket>411 pub fn duplicate(&self) -> io::Result<UdpSocket> { 412 unimpl!(); 413 } 414 set_read_timeout(&self, _: Option<Duration>) -> io::Result<()>415 pub fn set_read_timeout(&self, _: Option<Duration>) -> io::Result<()> { 416 unimpl!(); 417 } 418 set_write_timeout(&self, _: Option<Duration>) -> io::Result<()>419 pub fn set_write_timeout(&self, _: Option<Duration>) -> io::Result<()> { 420 unimpl!(); 421 } 422 read_timeout(&self) -> io::Result<Option<Duration>>423 pub fn read_timeout(&self) -> io::Result<Option<Duration>> { 424 unimpl!(); 425 } 426 write_timeout(&self) -> io::Result<Option<Duration>>427 pub fn write_timeout(&self) -> io::Result<Option<Duration>> { 428 unimpl!(); 429 } 430 set_broadcast(&self, _: bool) -> io::Result<()>431 pub fn set_broadcast(&self, _: bool) -> io::Result<()> { 432 unimpl!(); 433 } 434 broadcast(&self) -> io::Result<bool>435 pub fn broadcast(&self) -> io::Result<bool> { 436 unimpl!(); 437 } 438 set_multicast_loop_v4(&self, _: bool) -> io::Result<()>439 pub fn set_multicast_loop_v4(&self, _: bool) -> io::Result<()> { 440 unimpl!(); 441 } 442 multicast_loop_v4(&self) -> io::Result<bool>443 pub fn multicast_loop_v4(&self) -> io::Result<bool> { 444 unimpl!(); 445 } 446 set_multicast_ttl_v4(&self, _: u32) -> io::Result<()>447 pub fn set_multicast_ttl_v4(&self, _: u32) -> io::Result<()> { 448 unimpl!(); 449 } 450 multicast_ttl_v4(&self) -> io::Result<u32>451 pub fn multicast_ttl_v4(&self) -> io::Result<u32> { 452 unimpl!(); 453 } 454 set_multicast_loop_v6(&self, _: bool) -> io::Result<()>455 pub fn set_multicast_loop_v6(&self, _: bool) -> io::Result<()> { 456 unimpl!(); 457 } 458 multicast_loop_v6(&self) -> io::Result<bool>459 pub fn multicast_loop_v6(&self) -> io::Result<bool> { 460 unimpl!(); 461 } 462 join_multicast_v4(&self, _: &Ipv4Addr, _: &Ipv4Addr) -> io::Result<()>463 pub fn join_multicast_v4(&self, _: &Ipv4Addr, _: &Ipv4Addr) -> io::Result<()> { 464 unimpl!(); 465 } 466 join_multicast_v6(&self, _: &Ipv6Addr, _: u32) -> io::Result<()>467 pub fn join_multicast_v6(&self, _: &Ipv6Addr, _: u32) -> io::Result<()> { 468 unimpl!(); 469 } 470 leave_multicast_v4(&self, _: &Ipv4Addr, _: &Ipv4Addr) -> io::Result<()>471 pub fn leave_multicast_v4(&self, _: &Ipv4Addr, _: &Ipv4Addr) -> io::Result<()> { 472 unimpl!(); 473 } 474 leave_multicast_v6(&self, _: &Ipv6Addr, _: u32) -> io::Result<()>475 pub fn leave_multicast_v6(&self, _: &Ipv6Addr, _: u32) -> io::Result<()> { 476 unimpl!(); 477 } 478 set_ttl(&self, _: u32) -> io::Result<()>479 pub fn set_ttl(&self, _: u32) -> io::Result<()> { 480 unimpl!(); 481 } 482 ttl(&self) -> io::Result<u32>483 pub fn ttl(&self) -> io::Result<u32> { 484 unimpl!(); 485 } 486 take_error(&self) -> io::Result<Option<io::Error>>487 pub fn take_error(&self) -> io::Result<Option<io::Error>> { 488 unimpl!(); 489 } 490 set_nonblocking(&self, _: bool) -> io::Result<()>491 pub fn set_nonblocking(&self, _: bool) -> io::Result<()> { 492 unimpl!(); 493 } 494 recv(&self, _: &mut [u8]) -> io::Result<usize>495 pub fn recv(&self, _: &mut [u8]) -> io::Result<usize> { 496 unimpl!(); 497 } 498 peek(&self, _: &mut [u8]) -> io::Result<usize>499 pub fn peek(&self, _: &mut [u8]) -> io::Result<usize> { 500 unimpl!(); 501 } 502 send(&self, _: &[u8]) -> io::Result<usize>503 pub fn send(&self, _: &[u8]) -> io::Result<usize> { 504 unimpl!(); 505 } 506 connect(&self, _: io::Result<&SocketAddr>) -> io::Result<()>507 pub fn connect(&self, _: io::Result<&SocketAddr>) -> io::Result<()> { 508 unimpl!(); 509 } 510 } 511 512 impl FromInner<Socket> for UdpSocket { from_inner(socket: Socket) -> UdpSocket513 fn from_inner(socket: Socket) -> UdpSocket { 514 UdpSocket { inner: socket } 515 } 516 } 517 518 impl fmt::Debug for UdpSocket { fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result519 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 520 write!(f, "No networking support on L4Re available.") 521 } 522 } 523 524 pub struct LookupHost { 525 original: *mut libc::addrinfo, 526 cur: *mut libc::addrinfo, 527 } 528 529 impl Iterator for LookupHost { 530 type Item = SocketAddr; next(&mut self) -> Option<SocketAddr>531 fn next(&mut self) -> Option<SocketAddr> { 532 None 533 } 534 } 535 536 impl LookupHost { port(&self) -> u16537 pub fn port(&self) -> u16 { 538 0 // unimplemented 539 } 540 } 541 542 unsafe impl Sync for LookupHost {} 543 unsafe impl Send for LookupHost {} 544 545 impl TryFrom<&str> for LookupHost { 546 type Error = io::Error; 547 try_from(_v: &str) -> io::Result<LookupHost>548 fn try_from(_v: &str) -> io::Result<LookupHost> { 549 unimpl!(); 550 } 551 } 552 553 impl<'a> TryFrom<(&'a str, u16)> for LookupHost { 554 type Error = io::Error; 555 try_from(_v: (&'a str, u16)) -> io::Result<LookupHost>556 fn try_from(_v: (&'a str, u16)) -> io::Result<LookupHost> { 557 unimpl!(); 558 } 559 } 560 } 561