regulate naming to posix

This commit is contained in:
2024-10-17 06:28:53 +00:00
parent b9f27f44e4
commit ddad6b11a1
21 changed files with 108 additions and 107 deletions

View File

@ -60,7 +60,7 @@ pub trait Socket: Sync + Send + Debug + Any {
/// 对应于 Posix `getsockopt` 获取socket选项 /// 对应于 Posix `getsockopt` 获取socket选项
fn get_option( fn get_option(
&self, &self,
level: OptionLevel, level: PSOL,
name: usize, name: usize,
value: &mut [u8], value: &mut [u8],
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
@ -76,40 +76,40 @@ pub trait Socket: Sync + Send + Debug + Any {
// pselect // pselect
/// # `read` /// # `read`
fn read(&self, buffer: &mut [u8]) -> Result<usize, SystemError> { fn read(&self, buffer: &mut [u8]) -> Result<usize, SystemError> {
self.recv(buffer, MessageFlag::empty()) self.recv(buffer, PMSG::empty())
} }
/// # `recv` /// # `recv`
/// 接收数据,`read` = `recv` with flags = 0 /// 接收数据,`read` = `recv` with flags = 0
fn recv(&self, buffer: &mut [u8], flags: MessageFlag) -> Result<usize, SystemError> { fn recv(&self, buffer: &mut [u8], flags: PMSG) -> Result<usize, SystemError> {
Err(ENOSYS) Err(ENOSYS)
} }
/// # `recv_from` /// # `recv_from`
fn recv_from( fn recv_from(
&self, &self,
buffer: &mut [u8], buffer: &mut [u8],
flags: MessageFlag, flags: PMSG,
address: Option<Endpoint>, address: Option<Endpoint>,
) -> Result<(usize, Endpoint), SystemError> { ) -> Result<(usize, Endpoint), SystemError> {
Err(ENOSYS) Err(ENOSYS)
} }
/// # `recv_msg` /// # `recv_msg`
fn recv_msg(&self, msg: &mut MsgHdr, flags: MessageFlag) -> Result<usize, SystemError> { fn recv_msg(&self, msg: &mut MsgHdr, flags: PMSG) -> Result<usize, SystemError> {
Err(ENOSYS) Err(ENOSYS)
} }
// select // select
/// # `send` /// # `send`
fn send(&self, buffer: &[u8], flags: MessageFlag) -> Result<usize, SystemError> { fn send(&self, buffer: &[u8], flags: PMSG) -> Result<usize, SystemError> {
Err(ENOSYS) Err(ENOSYS)
} }
/// # `send_msg` /// # `send_msg`
fn send_msg(&self, msg: &MsgHdr, flags: MessageFlag) -> Result<usize, SystemError> { fn send_msg(&self, msg: &MsgHdr, flags: PMSG) -> Result<usize, SystemError> {
Err(ENOSYS) Err(ENOSYS)
} }
/// # `send_to` /// # `send_to`
fn send_to( fn send_to(
&self, &self,
buffer: &[u8], buffer: &[u8],
flags: MessageFlag, flags: PMSG,
address: Endpoint, address: Endpoint,
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
Err(ENOSYS) Err(ENOSYS)
@ -122,7 +122,7 @@ pub trait Socket: Sync + Send + Debug + Any {
/// - value 选项的值 /// - value 选项的值
/// ## Reference /// ## Reference
/// https://code.dragonos.org.cn/s?refs=sk_setsockopt&project=linux-6.6.21 /// https://code.dragonos.org.cn/s?refs=sk_setsockopt&project=linux-6.6.21
fn set_option(&self, level: OptionLevel, name: usize, val: &[u8]) -> Result<(), SystemError> { fn set_option(&self, level: PSOL, name: usize, val: &[u8]) -> Result<(), SystemError> {
log::warn!("setsockopt is not implemented"); log::warn!("setsockopt is not implemented");
Ok(()) Ok(())
} }
@ -135,7 +135,7 @@ pub trait Socket: Sync + Send + Debug + Any {
// socketpair // socketpair
/// # `write` /// # `write`
fn write(&self, buffer: &[u8]) -> Result<usize, SystemError> { fn write(&self, buffer: &[u8]) -> Result<usize, SystemError> {
self.send(buffer, MessageFlag::empty()) self.send(buffer, PMSG::empty())
} }
// fn write_buffer(&self, _buf: &[u8]) -> Result<usize, SystemError> { // fn write_buffer(&self, _buf: &[u8]) -> Result<usize, SystemError> {
// todo!() // todo!()

View File

@ -1,10 +0,0 @@
// socket definitions
mod msg_flag;
mod option;
mod option_level;
mod types;
pub use msg_flag::MessageFlag; // Socket message flags MSG_*
pub use option::Options; // Socket options SO_*
pub use option_level::OptionLevel; // Socket options level SOL_*
pub use types::Type; // Socket types SOCK_*

View File

@ -117,5 +117,5 @@ use crate::net::socket;
use alloc::sync::Arc; use alloc::sync::Arc;
pub trait Family { pub trait Family {
fn socket(stype: socket::Type, protocol: u32) -> Result<Arc<socket::Inode>, SystemError>; fn socket(stype: socket::PSOCK, protocol: u32) -> Result<Arc<socket::Inode>, SystemError>;
} }

View File

@ -207,8 +207,8 @@ impl Socket for UdpSocket {
return Err(EAFNOSUPPORT); return Err(EAFNOSUPPORT);
} }
fn send(&self, buffer: &[u8], flags: MessageFlag) -> Result<usize, SystemError> { fn send(&self, buffer: &[u8], flags: PMSG) -> Result<usize, SystemError> {
if flags.contains(MessageFlag::DONTWAIT) { if flags.contains(PMSG::DONTWAIT) {
log::warn!("Nonblock send is not implemented yet"); log::warn!("Nonblock send is not implemented yet");
} }
@ -218,10 +218,10 @@ impl Socket for UdpSocket {
fn send_to( fn send_to(
&self, &self,
buffer: &[u8], buffer: &[u8],
flags: MessageFlag, flags: PMSG,
address: Endpoint, address: Endpoint,
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
if flags.contains(MessageFlag::DONTWAIT) { if flags.contains(PMSG::DONTWAIT) {
log::warn!("Nonblock send is not implemented yet"); log::warn!("Nonblock send is not implemented yet");
} }
@ -232,10 +232,10 @@ impl Socket for UdpSocket {
return Err(EINVAL); return Err(EINVAL);
} }
fn recv(&self, buffer: &mut [u8], flags: MessageFlag) -> Result<usize, SystemError> { fn recv(&self, buffer: &mut [u8], flags: PMSG) -> Result<usize, SystemError> {
use crate::sched::SchedMode; use crate::sched::SchedMode;
return if self.is_nonblock() || flags.contains(MessageFlag::DONTWAIT) { return if self.is_nonblock() || flags.contains(PMSG::DONTWAIT) {
self.try_recv(buffer) self.try_recv(buffer)
} else { } else {
loop { loop {
@ -253,7 +253,7 @@ impl Socket for UdpSocket {
fn recv_from( fn recv_from(
&self, &self,
buffer: &mut [u8], buffer: &mut [u8],
flags: MessageFlag, flags: PMSG,
address: Option<Endpoint>, address: Option<Endpoint>,
) -> Result<(usize, Endpoint), SystemError> { ) -> Result<(usize, Endpoint), SystemError> {
use crate::sched::SchedMode; use crate::sched::SchedMode;
@ -262,7 +262,7 @@ impl Socket for UdpSocket {
self.connect(endpoint)?; self.connect(endpoint)?;
} }
return if self.is_nonblock() || flags.contains(MessageFlag::DONTWAIT) { return if self.is_nonblock() || flags.contains(PMSG::DONTWAIT) {
self.try_recv(buffer) self.try_recv(buffer)
} else { } else {
loop { loop {

View File

@ -278,11 +278,11 @@ impl Socket for TcpSocket {
.map(|(inner, endpoint)| (Inode::new(inner), Endpoint::Ip(endpoint))) .map(|(inner, endpoint)| (Inode::new(inner), Endpoint::Ip(endpoint)))
} }
fn recv(&self, buffer: &mut [u8], _flags: MessageFlag) -> Result<usize, SystemError> { fn recv(&self, buffer: &mut [u8], _flags: PMSG) -> Result<usize, SystemError> {
self.try_recv(buffer) self.try_recv(buffer)
} }
fn send(&self, buffer: &[u8], _flags: MessageFlag) -> Result<usize, SystemError> { fn send(&self, buffer: &[u8], _flags: PMSG) -> Result<usize, SystemError> {
self.try_send(buffer) self.try_send(buffer)
} }

View File

@ -8,14 +8,13 @@ use inet::{TcpSocket, UdpSocket};
use crate::net::socket::*; use crate::net::socket::*;
fn create_inet_socket( fn create_inet_socket(
socket_type: Type, socket_type: PSOCK,
protocol: smoltcp::wire::IpProtocol, protocol: smoltcp::wire::IpProtocol,
) -> Result<Arc<dyn Socket>, SystemError> { ) -> Result<Arc<dyn Socket>, SystemError> {
// log::debug!("type: {:?}, protocol: {:?}", socket_type, protocol); // log::debug!("type: {:?}, protocol: {:?}", socket_type, protocol);
use smoltcp::wire::IpProtocol::*; use smoltcp::wire::IpProtocol::*;
use Type::*;
match socket_type { match socket_type {
Datagram => { PSOCK::Datagram => {
match protocol { match protocol {
HopByHop | Udp => { HopByHop | Udp => {
return Ok(UdpSocket::new(false)); return Ok(UdpSocket::new(false));
@ -29,7 +28,7 @@ fn create_inet_socket(
// } // }
// return Ok(UdpSocket::new(false)); // return Ok(UdpSocket::new(false));
} }
Stream => match protocol { PSOCK::Stream => match protocol {
HopByHop | Tcp => { HopByHop | Tcp => {
return Ok(TcpSocket::new(false)); return Ok(TcpSocket::new(false));
} }
@ -37,7 +36,7 @@ fn create_inet_socket(
return Err(EPROTONOSUPPORT); return Err(EPROTONOSUPPORT);
} }
}, },
Raw => { PSOCK::Raw => {
todo!("raw") todo!("raw")
} }
_ => { _ => {
@ -48,7 +47,7 @@ fn create_inet_socket(
pub struct Inet; pub struct Inet;
impl family::Family for Inet { impl family::Family for Inet {
fn socket(stype: Type, protocol: u32) -> Result<Arc<Inode>, SystemError> { fn socket(stype: PSOCK, protocol: u32) -> Result<Arc<Inode>, SystemError> {
let socket = create_inet_socket(stype, smoltcp::wire::IpProtocol::from(protocol as u8))?; let socket = create_inet_socket(stype, smoltcp::wire::IpProtocol::from(protocol as u8))?;
Ok(Inode::new(socket)) Ok(Inode::new(socket))
} }

View File

@ -101,7 +101,7 @@ impl Inode {
pub fn set_option( pub fn set_option(
&self, &self,
level: OptionLevel, level: PSOL,
name: usize, name: usize,
value: &[u8], value: &[u8],
) -> Result<(), SystemError> { ) -> Result<(), SystemError> {
@ -110,7 +110,7 @@ impl Inode {
pub fn get_option( pub fn get_option(
&self, &self,
level: OptionLevel, level: PSOL,
name: usize, name: usize,
value: &mut [u8], value: &mut [u8],
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
@ -125,16 +125,16 @@ impl Inode {
&self, &self,
buffer: &[u8], buffer: &[u8],
address: Endpoint, address: Endpoint,
flags: MessageFlag, flags: PMSG,
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
self.inner.send_to(buffer, flags, address) self.inner.send_to(buffer, flags, address)
} }
pub fn send(&self, buffer: &[u8], flags: MessageFlag) -> Result<usize, SystemError> { pub fn send(&self, buffer: &[u8], flags: PMSG) -> Result<usize, SystemError> {
self.inner.send(buffer, flags) self.inner.send(buffer, flags)
} }
pub fn recv(&self, buffer: &mut [u8], flags: MessageFlag) -> Result<usize, SystemError> { pub fn recv(&self, buffer: &mut [u8], flags: PMSG) -> Result<usize, SystemError> {
self.inner.recv(buffer, flags) self.inner.recv(buffer, flags)
} }
@ -142,7 +142,7 @@ impl Inode {
pub fn recv_from( pub fn recv_from(
&self, &self,
buffer: &mut [u8], buffer: &mut [u8],
flags: MessageFlag, flags: PMSG,
address: Option<Endpoint>, address: Option<Endpoint>,
) -> Result<(usize, Endpoint), SystemError> { ) -> Result<(usize, Endpoint), SystemError> {
self.inner.recv_from(buffer, flags, address) self.inner.recv_from(buffer, flags, address)

View File

@ -1,7 +1,7 @@
mod base; mod base;
mod buffer; mod buffer;
mod common; mod common;
mod definition; mod posix;
mod endpoint; mod endpoint;
mod family; mod family;
pub mod inet; pub mod inet;
@ -17,7 +17,7 @@ pub use common::{
// poll_unit::{EPollItems, WaitQueue}, // poll_unit::{EPollItems, WaitQueue},
EPollItems, EPollItems,
}; };
pub use definition::*; pub use posix::*;
pub use endpoint::*; pub use endpoint::*;
pub use family::{AddressFamily, Family}; pub use family::{AddressFamily, Family};
pub use inode::Inode; pub use inode::Inode;

View File

@ -0,0 +1,12 @@
// posix socket and arguments definitions
// now all posix definitions are with P front like MSG -> PMSG,
// for better understanding and avoiding conflicts with other definitions
mod msg_flag;
mod option;
mod option_level;
mod types;
pub use msg_flag::MessageFlag as PMSG; // Socket message flags MSG_*
pub use option::Options as PSO; // Socket options SO_*
pub use option_level::OptionLevel as PSOL; // Socket options level SOL_*
pub use types::Type as PSOCK; // Socket types SOCK_*

View File

@ -9,10 +9,10 @@ pub enum Type {
Packet = 10, Packet = 10,
} }
use crate::net::syscall_util::SysArgSocketType; use crate::net::syscall_util::PosixArgsSocketType;
impl TryFrom<SysArgSocketType> for Type { impl TryFrom<PosixArgsSocketType> for Type {
type Error = system_error::SystemError; type Error = system_error::SystemError;
fn try_from(x: SysArgSocketType) -> Result<Self, Self::Error> { fn try_from(x: PosixArgsSocketType) -> Result<Self, Self::Error> {
use num_traits::FromPrimitive; use num_traits::FromPrimitive;
return <Self as FromPrimitive>::from_u32(x.types().bits()) return <Self as FromPrimitive>::from_u32(x.types().bits())
.ok_or(system_error::SystemError::EINVAL); .ok_or(system_error::SystemError::EINVAL);

View File

@ -10,27 +10,27 @@ lazy_static! {
pub static ref INODE_MAP: RwLock<HashMap<InodeId, Endpoint>> = RwLock::new(HashMap::new()); pub static ref INODE_MAP: RwLock<HashMap<InodeId, Endpoint>> = RwLock::new(HashMap::new());
} }
fn create_unix_socket(sock_type: Type) -> Result<Arc<Inode>, SystemError> { fn create_unix_socket(sock_type: PSOCK) -> Result<Arc<Inode>, SystemError> {
match sock_type { match sock_type {
Type::Stream | Type::Datagram => stream::StreamSocket::new_inode(), PSOCK::Stream | PSOCK::Datagram => stream::StreamSocket::new_inode(),
Type::SeqPacket => seqpacket::SeqpacketSocket::new_inode(false), PSOCK::SeqPacket => seqpacket::SeqpacketSocket::new_inode(false),
_ => Err(EPROTONOSUPPORT), _ => Err(EPROTONOSUPPORT),
} }
} }
impl family::Family for Unix { impl family::Family for Unix {
fn socket(stype: Type, _protocol: u32) -> Result<Arc<Inode>, SystemError> { fn socket(stype: PSOCK, _protocol: u32) -> Result<Arc<Inode>, SystemError> {
let socket = create_unix_socket(stype)?; let socket = create_unix_socket(stype)?;
Ok(socket) Ok(socket)
} }
} }
impl Unix { impl Unix {
pub fn new_pairs(socket_type: Type) -> Result<(Arc<Inode>, Arc<Inode>), SystemError> { pub fn new_pairs(socket_type: PSOCK) -> Result<(Arc<Inode>, Arc<Inode>), SystemError> {
// log::debug!("socket_type {:?}", socket_type); // log::debug!("socket_type {:?}", socket_type);
match socket_type { match socket_type {
Type::SeqPacket => seqpacket::SeqpacketSocket::new_pairs(), PSOCK::SeqPacket => seqpacket::SeqpacketSocket::new_pairs(),
Type::Stream | Type::Datagram => stream::StreamSocket::new_pairs(), PSOCK::Stream | PSOCK::Datagram => stream::StreamSocket::new_pairs(),
_ => todo!(), _ => todo!(),
} }
} }

View File

@ -244,7 +244,7 @@ impl Socket for SeqpacketSocket {
fn set_option( fn set_option(
&self, &self,
_level: crate::net::socket::OptionLevel, _level: crate::net::socket::PSOL,
_optname: usize, _optname: usize,
_optval: &[u8], _optval: &[u8],
) -> Result<(), SystemError> { ) -> Result<(), SystemError> {
@ -294,7 +294,7 @@ impl Socket for SeqpacketSocket {
fn get_option( fn get_option(
&self, &self,
_level: crate::net::socket::OptionLevel, _level: crate::net::socket::PSOL,
_name: usize, _name: usize,
_value: &mut [u8], _value: &mut [u8],
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
@ -303,18 +303,18 @@ impl Socket for SeqpacketSocket {
} }
fn read(&self, buffer: &mut [u8]) -> Result<usize, SystemError> { fn read(&self, buffer: &mut [u8]) -> Result<usize, SystemError> {
self.recv(buffer, crate::net::socket::MessageFlag::empty()) self.recv(buffer, crate::net::socket::PMSG::empty())
} }
fn recv( fn recv(
&self, &self,
buffer: &mut [u8], buffer: &mut [u8],
flags: crate::net::socket::MessageFlag, flags: crate::net::socket::PMSG,
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
if flags.contains(MessageFlag::OOB) { if flags.contains(PMSG::OOB) {
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP); return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
} }
if !flags.contains(MessageFlag::DONTWAIT) { if !flags.contains(PMSG::DONTWAIT) {
loop { loop {
wq_wait_event_interruptible!( wq_wait_event_interruptible!(
self.wait_queue, self.wait_queue,
@ -344,7 +344,7 @@ impl Socket for SeqpacketSocket {
fn recv_msg( fn recv_msg(
&self, &self,
_msg: &mut crate::net::syscall::MsgHdr, _msg: &mut crate::net::syscall::MsgHdr,
_flags: crate::net::socket::MessageFlag, _flags: crate::net::socket::PMSG,
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
Err(SystemError::ENOSYS) Err(SystemError::ENOSYS)
} }
@ -352,15 +352,15 @@ impl Socket for SeqpacketSocket {
fn send( fn send(
&self, &self,
buffer: &[u8], buffer: &[u8],
flags: crate::net::socket::MessageFlag, flags: crate::net::socket::PMSG,
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
if flags.contains(MessageFlag::OOB) { if flags.contains(PMSG::OOB) {
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP); return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
} }
if self.is_peer_shutdown()? { if self.is_peer_shutdown()? {
return Err(SystemError::EPIPE); return Err(SystemError::EPIPE);
} }
if !flags.contains(MessageFlag::DONTWAIT) { if !flags.contains(PMSG::DONTWAIT) {
loop { loop {
match &*self.inner.write() { match &*self.inner.write() {
Inner::Connected(connected) => match connected.try_write(buffer) { Inner::Connected(connected) => match connected.try_write(buffer) {
@ -384,26 +384,26 @@ impl Socket for SeqpacketSocket {
fn send_msg( fn send_msg(
&self, &self,
_msg: &crate::net::syscall::MsgHdr, _msg: &crate::net::syscall::MsgHdr,
_flags: crate::net::socket::MessageFlag, _flags: crate::net::socket::PMSG,
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
Err(SystemError::ENOSYS) Err(SystemError::ENOSYS)
} }
fn write(&self, buffer: &[u8]) -> Result<usize, SystemError> { fn write(&self, buffer: &[u8]) -> Result<usize, SystemError> {
self.send(buffer, crate::net::socket::MessageFlag::empty()) self.send(buffer, crate::net::socket::PMSG::empty())
} }
fn recv_from( fn recv_from(
&self, &self,
buffer: &mut [u8], buffer: &mut [u8],
flags: MessageFlag, flags: PMSG,
_address: Option<Endpoint>, _address: Option<Endpoint>,
) -> Result<(usize, Endpoint), SystemError> { ) -> Result<(usize, Endpoint), SystemError> {
// log::debug!("recvfrom flags {:?}", flags); // log::debug!("recvfrom flags {:?}", flags);
if flags.contains(MessageFlag::OOB) { if flags.contains(PMSG::OOB) {
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP); return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
} }
if !flags.contains(MessageFlag::DONTWAIT) { if !flags.contains(PMSG::DONTWAIT) {
loop { loop {
wq_wait_event_interruptible!( wq_wait_event_interruptible!(
self.wait_queue, self.wait_queue,

View File

@ -243,7 +243,7 @@ impl Socket for StreamSocket {
fn set_option( fn set_option(
&self, &self,
_level: OptionLevel, _level: PSOL,
_optname: usize, _optname: usize,
_optval: &[u8], _optval: &[u8],
) -> Result<(), SystemError> { ) -> Result<(), SystemError> {
@ -329,7 +329,7 @@ impl Socket for StreamSocket {
fn get_option( fn get_option(
&self, &self,
_level: OptionLevel, _level: PSOL,
_name: usize, _name: usize,
_value: &mut [u8], _value: &mut [u8],
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
@ -338,11 +338,11 @@ impl Socket for StreamSocket {
} }
fn read(&self, buffer: &mut [u8]) -> Result<usize, SystemError> { fn read(&self, buffer: &mut [u8]) -> Result<usize, SystemError> {
self.recv(buffer, socket::MessageFlag::empty()) self.recv(buffer, socket::PMSG::empty())
} }
fn recv(&self, buffer: &mut [u8], flags: socket::MessageFlag) -> Result<usize, SystemError> { fn recv(&self, buffer: &mut [u8], flags: socket::PMSG) -> Result<usize, SystemError> {
if !flags.contains(MessageFlag::DONTWAIT) { if !flags.contains(PMSG::DONTWAIT) {
loop { loop {
log::debug!("socket try recv"); log::debug!("socket try recv");
wq_wait_event_interruptible!( wq_wait_event_interruptible!(
@ -373,13 +373,13 @@ impl Socket for StreamSocket {
fn recv_from( fn recv_from(
&self, &self,
buffer: &mut [u8], buffer: &mut [u8],
flags: socket::MessageFlag, flags: socket::PMSG,
_address: Option<Endpoint>, _address: Option<Endpoint>,
) -> Result<(usize, Endpoint), SystemError> { ) -> Result<(usize, Endpoint), SystemError> {
if flags.contains(MessageFlag::OOB) { if flags.contains(PMSG::OOB) {
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP); return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
} }
if !flags.contains(MessageFlag::DONTWAIT) { if !flags.contains(PMSG::DONTWAIT) {
loop { loop {
log::debug!("socket try recv from"); log::debug!("socket try recv from");
@ -413,16 +413,16 @@ impl Socket for StreamSocket {
fn recv_msg( fn recv_msg(
&self, &self,
_msg: &mut crate::net::syscall::MsgHdr, _msg: &mut crate::net::syscall::MsgHdr,
_flags: socket::MessageFlag, _flags: socket::PMSG,
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
Err(SystemError::ENOSYS) Err(SystemError::ENOSYS)
} }
fn send(&self, buffer: &[u8], flags: socket::MessageFlag) -> Result<usize, SystemError> { fn send(&self, buffer: &[u8], flags: socket::PMSG) -> Result<usize, SystemError> {
if self.is_peer_shutdown()? { if self.is_peer_shutdown()? {
return Err(SystemError::EPIPE); return Err(SystemError::EPIPE);
} }
if !flags.contains(MessageFlag::DONTWAIT) { if !flags.contains(PMSG::DONTWAIT) {
loop { loop {
match &*self.inner.write() { match &*self.inner.write() {
Inner::Connected(connected) => match connected.try_send(buffer) { Inner::Connected(connected) => match connected.try_send(buffer) {
@ -446,7 +446,7 @@ impl Socket for StreamSocket {
fn send_msg( fn send_msg(
&self, &self,
_msg: &crate::net::syscall::MsgHdr, _msg: &crate::net::syscall::MsgHdr,
_flags: socket::MessageFlag, _flags: socket::PMSG,
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
todo!() todo!()
} }
@ -454,14 +454,14 @@ impl Socket for StreamSocket {
fn send_to( fn send_to(
&self, &self,
_buffer: &[u8], _buffer: &[u8],
_flags: socket::MessageFlag, _flags: socket::PMSG,
_address: Endpoint, _address: Endpoint,
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
Err(SystemError::ENOSYS) Err(SystemError::ENOSYS)
} }
fn write(&self, buffer: &[u8]) -> Result<usize, SystemError> { fn write(&self, buffer: &[u8]) -> Result<usize, SystemError> {
self.send(buffer, socket::MessageFlag::empty()) self.send(buffer, socket::PMSG::empty())
} }
fn send_buffer_size(&self) -> usize { fn send_buffer_size(&self) -> usize {

View File

@ -5,7 +5,7 @@ use system_error::SystemError;
pub fn create_socket( pub fn create_socket(
family: socket::AddressFamily, family: socket::AddressFamily,
socket_type: socket::Type, socket_type: socket::PSOCK,
protocol: u32, protocol: u32,
is_nonblock: bool, is_nonblock: bool,
is_close_on_exec: bool, is_close_on_exec: bool,

View File

@ -35,10 +35,10 @@ impl Syscall {
// protocol // protocol
// ); // );
let address_family = socket::AddressFamily::try_from(address_family as u16)?; let address_family = socket::AddressFamily::try_from(address_family as u16)?;
let type_arg = SysArgSocketType::from_bits_truncate(socket_type as u32); let type_arg = PosixArgsSocketType::from_bits_truncate(socket_type as u32);
let is_nonblock = type_arg.is_nonblock(); let is_nonblock = type_arg.is_nonblock();
let is_close_on_exec = type_arg.is_cloexec(); let is_close_on_exec = type_arg.is_cloexec();
let stype = socket::Type::try_from(type_arg)?; let stype = socket::PSOCK::try_from(type_arg)?;
// log::debug!("type_arg {:?} stype {:?}", type_arg, stype); // log::debug!("type_arg {:?} stype {:?}", type_arg, stype);
let inode = socket::create_socket( let inode = socket::create_socket(
@ -73,8 +73,8 @@ impl Syscall {
fds: &mut [i32], fds: &mut [i32],
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
let address_family = AF::try_from(address_family as u16)?; let address_family = AF::try_from(address_family as u16)?;
let socket_type = SysArgSocketType::from_bits_truncate(socket_type as u32); let socket_type = PosixArgsSocketType::from_bits_truncate(socket_type as u32);
let stype = socket::Type::try_from(socket_type)?; let stype = socket::PSOCK::try_from(socket_type)?;
let binding = ProcessManager::current_pcb().fd_table(); let binding = ProcessManager::current_pcb().fd_table();
let mut fd_table_guard = binding.write(); let mut fd_table_guard = binding.write();
@ -112,7 +112,7 @@ impl Syscall {
optname: usize, optname: usize,
optval: &[u8], optval: &[u8],
) -> Result<usize, SystemError> { ) -> Result<usize, SystemError> {
let sol = socket::OptionLevel::try_from(level as u32)?; let sol = socket::PSOL::try_from(level as u32)?;
let socket: Arc<socket::Inode> = ProcessManager::current_pcb() let socket: Arc<socket::Inode> = ProcessManager::current_pcb()
.get_socket(fd as i32) .get_socket(fd as i32)
.ok_or(SystemError::EBADF)?; .ok_or(SystemError::EBADF)?;
@ -142,14 +142,14 @@ impl Syscall {
.get_socket(fd as i32) .get_socket(fd as i32)
.ok_or(EBADF)?; .ok_or(EBADF)?;
let level = socket::OptionLevel::try_from(level as u32)?; use socket::{PSOL, PSO};
use socket::OptionLevel as SOL; let level = PSOL::try_from(level as u32)?;
use socket::Options as SO;
if matches!(level, SOL::SOCKET) { if matches!(level, PSOL::SOCKET) {
let optname = SO::try_from(optname as u32).map_err(|_| ENOPROTOOPT)?; let optname = PSO::try_from(optname as u32).map_err(|_| ENOPROTOOPT)?;
match optname { match optname {
SO::SNDBUF => { PSO::SNDBUF => {
// 返回发送缓冲区大小 // 返回发送缓冲区大小
unsafe { unsafe {
*optval = socket.send_buffer_size() as u32; *optval = socket.send_buffer_size() as u32;
@ -157,7 +157,7 @@ impl Syscall {
} }
return Ok(0); return Ok(0);
} }
SO::RCVBUF => { PSO::RCVBUF => {
// 返回默认的接收缓冲区大小 // 返回默认的接收缓冲区大小
unsafe { unsafe {
*optval = socket.recv_buffer_size() as u32; *optval = socket.recv_buffer_size() as u32;
@ -178,7 +178,7 @@ impl Syscall {
// to be interpreted by the TCP protocol, level should be set to the // to be interpreted by the TCP protocol, level should be set to the
// protocol number of TCP. // protocol number of TCP.
if matches!(level, SOL::TCP) { if matches!(level, PSOL::TCP) {
use socket::inet::stream::TcpOption; use socket::inet::stream::TcpOption;
let optname = TcpOption::try_from(optname as i32).map_err(|_| ENOPROTOOPT)?; let optname = TcpOption::try_from(optname as i32).map_err(|_| ENOPROTOOPT)?;
match optname { match optname {
@ -253,7 +253,7 @@ impl Syscall {
Some(SockAddr::to_endpoint(addr, addrlen)?) Some(SockAddr::to_endpoint(addr, addrlen)?)
}; };
let flags = socket::MessageFlag::from_bits_truncate(flags); let flags = socket::PMSG::from_bits_truncate(flags);
let socket: Arc<socket::Inode> = ProcessManager::current_pcb() let socket: Arc<socket::Inode> = ProcessManager::current_pcb()
.get_socket(fd as i32) .get_socket(fd as i32)
@ -285,7 +285,7 @@ impl Syscall {
let socket: Arc<socket::Inode> = ProcessManager::current_pcb() let socket: Arc<socket::Inode> = ProcessManager::current_pcb()
.get_socket(fd as i32) .get_socket(fd as i32)
.ok_or(SystemError::EBADF)?; .ok_or(SystemError::EBADF)?;
let flags = socket::MessageFlag::from_bits_truncate(flags); let flags = socket::PMSG::from_bits_truncate(flags);
if addr.is_null() { if addr.is_null() {
let (n, _) = socket.recv_from(buf, flags, None)?; let (n, _) = socket.recv_from(buf, flags, None)?;
@ -327,7 +327,7 @@ impl Syscall {
// .get_socket(fd as i32) // .get_socket(fd as i32)
// .ok_or(SystemError::EBADF)?; // .ok_or(SystemError::EBADF)?;
// let flags = socket::MessageFlag::from_bits_truncate(flags as u32); // let flags = socket::PMSG::from_bits_truncate(flags as u32);
// let mut buf = iovs.new_buf(true); // let mut buf = iovs.new_buf(true);
// // 从socket中读取数据 // // 从socket中读取数据

View File

@ -1,6 +1,6 @@
bitflags::bitflags! { bitflags::bitflags! {
// #[derive(PartialEq, Eq, Debug, Clone, Copy)] // #[derive(PartialEq, Eq, Debug, Clone, Copy)]
pub struct SysArgSocketType: u32 { pub struct PosixArgsSocketType: u32 {
const DGRAM = 1; // 0b0000_0001 const DGRAM = 1; // 0b0000_0001
const STREAM = 2; // 0b0000_0010 const STREAM = 2; // 0b0000_0010
const RAW = 3; // 0b0000_0011 const RAW = 3; // 0b0000_0011
@ -14,20 +14,20 @@ bitflags::bitflags! {
} }
} }
impl SysArgSocketType { impl PosixArgsSocketType {
#[inline(always)] #[inline(always)]
pub fn types(&self) -> SysArgSocketType { pub fn types(&self) -> PosixArgsSocketType {
SysArgSocketType::from_bits(self.bits() & 0b_1111).unwrap() PosixArgsSocketType::from_bits(self.bits() & 0b_1111).unwrap()
} }
#[inline(always)] #[inline(always)]
pub fn is_nonblock(&self) -> bool { pub fn is_nonblock(&self) -> bool {
self.contains(SysArgSocketType::NONBLOCK) self.contains(PosixArgsSocketType::NONBLOCK)
} }
#[inline(always)] #[inline(always)]
pub fn is_cloexec(&self) -> bool { pub fn is_cloexec(&self) -> bool {
self.contains(SysArgSocketType::CLOEXEC) self.contains(PosixArgsSocketType::CLOEXEC)
} }
} }