use alloc::sync::Arc; use smoltcp; use system_error::SystemError::{self, *}; use inet::{TcpSocket, UdpSocket}; // use crate::net::syscall_util::SysArgSocketType; use crate::net::socket::*; fn create_inet_socket( socket_type: PSOCK, protocol: smoltcp::wire::IpProtocol, ) -> Result, SystemError> { // log::debug!("type: {:?}, protocol: {:?}", socket_type, protocol); use smoltcp::wire::IpProtocol::*; match socket_type { PSOCK::Datagram => match protocol { HopByHop | Udp => { return Ok(UdpSocket::new(false)); } _ => { return Err(EPROTONOSUPPORT); } }, PSOCK::Stream => match protocol { HopByHop | Tcp => { return Ok(TcpSocket::new(false)); } _ => { return Err(EPROTONOSUPPORT); } }, PSOCK::Raw => { todo!("raw") } _ => { return Err(EPROTONOSUPPORT); } } } pub struct Inet; impl family::Family for Inet { fn socket(stype: PSOCK, protocol: u32) -> Result, SystemError> { let socket = create_inet_socket(stype, smoltcp::wire::IpProtocol::from(protocol as u8))?; Ok(Inode::new(socket)) } }