diff --git a/kernel/aster-nix/src/net/iface/mod.rs b/kernel/aster-nix/src/net/iface/mod.rs index 993758473..e947def0d 100644 --- a/kernel/aster-nix/src/net/iface/mod.rs +++ b/kernel/aster-nix/src/net/iface/mod.rs @@ -17,7 +17,7 @@ pub use any_socket::{ AnyBoundSocket, AnyUnboundSocket, RawTcpSocket, RawUdpSocket, RECV_BUF_LEN, SEND_BUF_LEN, }; pub use loopback::IfaceLoopback; -pub use smoltcp::wire::{EthernetAddress, IpAddress, IpEndpoint, IpListenEndpoint, Ipv4Address}; +pub use smoltcp::wire::{EthernetAddress, IpAddress, IpEndpoint, Ipv4Address}; pub use util::{spawn_background_poll_thread, BindPortConfig}; pub use virtio::IfaceVirtio; diff --git a/kernel/aster-nix/src/net/socket/ip/datagram/mod.rs b/kernel/aster-nix/src/net/socket/ip/datagram/mod.rs index c48535ee8..7db41acaf 100644 --- a/kernel/aster-nix/src/net/socket/ip/datagram/mod.rs +++ b/kernel/aster-nix/src/net/socket/ip/datagram/mod.rs @@ -115,7 +115,7 @@ impl DatagramSocket { }; let (recv_bytes, remote_endpoint) = bound_datagram.try_recvfrom(buf, flags)?; bound_datagram.update_io_events(&self.pollee); - Ok((recv_bytes, remote_endpoint.try_into()?)) + Ok((recv_bytes, remote_endpoint.into())) } fn try_sendto( @@ -240,7 +240,7 @@ impl Socket for DatagramSocket { let Inner::Bound(bound_datagram) = inner.as_ref() else { return_errno_with_message!(Errno::EINVAL, "the socket is not bound"); }; - bound_datagram.local_endpoint().try_into() + Ok(bound_datagram.local_endpoint().into()) } fn peer_addr(&self) -> Result { @@ -248,7 +248,7 @@ impl Socket for DatagramSocket { let Inner::Bound(bound_datagram) = inner.as_ref() else { return_errno_with_message!(Errno::EINVAL, "the socket is not bound"); }; - bound_datagram.remote_endpoint()?.try_into() + Ok(bound_datagram.remote_endpoint()?.into()) } // FIXME: respect RecvFromFlags diff --git a/kernel/aster-nix/src/net/socket/ip/stream/mod.rs b/kernel/aster-nix/src/net/socket/ip/stream/mod.rs index 8091fcd78..564bb7d08 100644 --- a/kernel/aster-nix/src/net/socket/ip/stream/mod.rs +++ b/kernel/aster-nix/src/net/socket/ip/stream/mod.rs @@ -177,7 +177,7 @@ impl StreamSocket { let remote_endpoint = connected_stream.remote_endpoint(); let accepted_socket = Self::new_connected(connected_stream); - Ok((accepted_socket, remote_endpoint.try_into()?)) + Ok((accepted_socket, remote_endpoint.into())) } fn try_recvfrom(&self, buf: &mut [u8], flags: SendRecvFlags) -> Result<(usize, SocketAddr)> { @@ -188,7 +188,7 @@ impl StreamSocket { }; let recv_bytes = connected_stream.try_recvfrom(buf, flags)?; connected_stream.update_io_events(&self.pollee); - Ok((recv_bytes, connected_stream.remote_endpoint().try_into()?)) + Ok((recv_bytes, connected_stream.remote_endpoint().into())) } fn try_sendto(&self, buf: &[u8], flags: SendRecvFlags) -> Result { @@ -390,7 +390,7 @@ impl Socket for StreamSocket { State::Listen(listen_stream) => listen_stream.local_endpoint(), State::Connected(connected_stream) => connected_stream.local_endpoint(), }; - local_endpoint.try_into() + Ok(local_endpoint.into()) } fn peer_addr(&self) -> Result { @@ -405,7 +405,7 @@ impl Socket for StreamSocket { } State::Connected(connected_stream) => connected_stream.remote_endpoint(), }; - remote_endpoint.try_into() + Ok(remote_endpoint.into()) } fn recvfrom(&self, buf: &mut [u8], flags: SendRecvFlags) -> Result<(usize, SocketAddr)> { diff --git a/kernel/aster-nix/src/net/socket/util/socket_addr.rs b/kernel/aster-nix/src/net/socket/util/socket_addr.rs index 7939db0ee..8373b45ba 100644 --- a/kernel/aster-nix/src/net/socket/util/socket_addr.rs +++ b/kernel/aster-nix/src/net/socket/util/socket_addr.rs @@ -2,7 +2,7 @@ use crate::{ net::{ - iface::{IpAddress, IpEndpoint, IpListenEndpoint, Ipv4Address}, + iface::{IpAddress, IpEndpoint, Ipv4Address}, socket::unix::UnixSocketAddr, }, prelude::*, @@ -24,34 +24,19 @@ impl TryFrom for IpEndpoint { match value { SocketAddr::IPv4(addr, port) => Ok(IpEndpoint::new(addr.into_address(), port)), _ => return_errno_with_message!( - Errno::EINVAL, - "sock addr cannot be converted as IpEndpoint" + Errno::EAFNOSUPPORT, + "the address is in an unsupported address family" ), } } } -impl TryFrom for SocketAddr { - type Error = Error; - - fn try_from(endpoint: IpEndpoint) -> Result { +impl From for SocketAddr { + fn from(endpoint: IpEndpoint) -> Self { let port = endpoint.port; - let socket_addr = match endpoint.addr { - IpAddress::Ipv4(addr) => SocketAddr::IPv4(addr, port), // TODO: support IPv6 - }; - Ok(socket_addr) - } -} - -impl TryFrom for SocketAddr { - type Error = Error; - - fn try_from(value: IpListenEndpoint) -> Result { - let port = value.port; - let socket_addr = match value.addr { - None => return_errno_with_message!(Errno::EINVAL, "address is unspecified"), - Some(IpAddress::Ipv4(address)) => SocketAddr::IPv4(address, port), - }; - Ok(socket_addr) + match endpoint.addr { + IpAddress::Ipv4(addr) => SocketAddr::IPv4(addr, port), + // TODO: support IPv6 + } } }