mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-09 07:06:47 +00:00
debug and add socket option level print
This commit is contained in:
parent
ff13f9f622
commit
2b180c4fa5
@ -104,8 +104,9 @@ pub extern "sysv64" fn syscall_handler(frame: &mut TrapFrame) {
|
|||||||
];
|
];
|
||||||
mfence();
|
mfence();
|
||||||
let pid = ProcessManager::current_pcb().pid();
|
let pid = ProcessManager::current_pcb().pid();
|
||||||
let mut show = (syscall_num != SYS_SCHED) && (pid.data() >= 7);
|
let mut show =
|
||||||
// let mut show = true;
|
(syscall_num != SYS_SCHED) && (pid.data() >= 7);
|
||||||
|
// false;
|
||||||
|
|
||||||
let to_print = SysCall::try_from(syscall_num);
|
let to_print = SysCall::try_from(syscall_num);
|
||||||
if let Ok(to_print) = to_print {
|
if let Ok(to_print) = to_print {
|
||||||
@ -115,21 +116,21 @@ pub extern "sysv64" fn syscall_handler(frame: &mut TrapFrame) {
|
|||||||
// show &= false;
|
// show &= false;
|
||||||
}
|
}
|
||||||
SYS_RECVFROM | SYS_SENDTO | SYS_SENDMSG | SYS_RECVMSG => {
|
SYS_RECVFROM | SYS_SENDTO | SYS_SENDMSG | SYS_RECVMSG => {
|
||||||
show &= false;
|
// show &= false;
|
||||||
}
|
}
|
||||||
SYS_SOCKET | SYS_GETSOCKNAME | SYS_GETPEERNAME | SYS_SOCKETPAIR | SYS_SETSOCKOPT
|
SYS_SOCKET | SYS_GETSOCKNAME | SYS_GETPEERNAME | SYS_SOCKETPAIR | SYS_SETSOCKOPT
|
||||||
| SYS_GETSOCKOPT => {
|
| SYS_GETSOCKOPT => {
|
||||||
show &= false;
|
// show &= false;
|
||||||
}
|
}
|
||||||
SYS_OPEN | SYS_OPENAT | SYS_CREAT | SYS_CLOSE => {
|
SYS_OPEN | SYS_OPENAT | SYS_CREAT | SYS_CLOSE => {
|
||||||
show &= false;
|
// show &= false;
|
||||||
}
|
}
|
||||||
SYS_READ | SYS_WRITE | SYS_READV | SYS_WRITEV | SYS_PREAD64 | SYS_PWRITE64
|
SYS_READ | SYS_WRITE | SYS_READV | SYS_WRITEV | SYS_PREAD64 | SYS_PWRITE64
|
||||||
| SYS_PREADV | SYS_PWRITEV | SYS_PREADV2 => {
|
| SYS_PREADV | SYS_PWRITEV | SYS_PREADV2 => {
|
||||||
show &= false;
|
show &= false;
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
show &= false;
|
// show &= false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if show {
|
if show {
|
||||||
|
@ -334,6 +334,86 @@ impl Socket for TcpSocket {
|
|||||||
})
|
})
|
||||||
.unwrap_or(Ok(()))
|
.unwrap_or(Ok(()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_option(&self, level: PSOL, name: usize, val: &[u8]) -> Result<(), SystemError> {
|
||||||
|
if level != PSOL::TCP {
|
||||||
|
// return Err(EINVAL);
|
||||||
|
log::debug!("TcpSocket::set_option: not TCP");
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
use option::Options::{self, *};
|
||||||
|
let option_name = Options::try_from(name as i32)?;
|
||||||
|
log::debug!("TCP Option: {:?}, value = {:?}", option_name, val);
|
||||||
|
match option_name {
|
||||||
|
NoDelay => {
|
||||||
|
let nagle_enabled = val[0] != 0;
|
||||||
|
let mut writer = self.inner.write();
|
||||||
|
let inner = writer.take().expect("Tcp Inner is None");
|
||||||
|
match inner {
|
||||||
|
Inner::Established(established) => {
|
||||||
|
established.with_mut(|socket| {
|
||||||
|
socket.set_nagle_enabled(nagle_enabled);
|
||||||
|
});
|
||||||
|
writer.replace(Inner::Established(established));
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
writer.replace(inner);
|
||||||
|
return Err(EINVAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
KeepIntvl => {
|
||||||
|
if val.len() == 4 {
|
||||||
|
let mut writer = self.inner.write();
|
||||||
|
let inner = writer.take().expect("Tcp Inner is None");
|
||||||
|
match inner {
|
||||||
|
Inner::Established(established) => {
|
||||||
|
let interval = u32::from_ne_bytes([val[0], val[1], val[2], val[3]]);
|
||||||
|
established.with_mut(|socket| {
|
||||||
|
socket.set_keep_alive(Some(smoltcp::time::Duration::from_secs(interval as u64)));
|
||||||
|
});
|
||||||
|
writer.replace(Inner::Established(established));
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
writer.replace(inner);
|
||||||
|
return Err(EINVAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return Err(EINVAL);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
KeepCnt => {
|
||||||
|
// if val.len() == 4 {
|
||||||
|
// let mut writer = self.inner.write();
|
||||||
|
// let inner = writer.take().expect("Tcp Inner is None");
|
||||||
|
// match inner {
|
||||||
|
// Inner::Established(established) => {
|
||||||
|
// let count = u32::from_ne_bytes([val[0], val[1], val[2], val[3]]);
|
||||||
|
// established.with_mut(|socket| {
|
||||||
|
// socket.set_keep_alive_count(count);
|
||||||
|
// });
|
||||||
|
// writer.replace(Inner::Established(established));
|
||||||
|
// }
|
||||||
|
// _ => {
|
||||||
|
// writer.replace(inner);
|
||||||
|
// return Err(EINVAL);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// return Err(EINVAL);
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
KeepIdle => {
|
||||||
|
|
||||||
|
},
|
||||||
|
_ => {
|
||||||
|
log::debug!("TcpSocket::set_option: not supported");
|
||||||
|
// return Err(ENOPROTOOPT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl InetSocket for TcpSocket {
|
impl InetSocket for TcpSocket {
|
||||||
|
@ -116,7 +116,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)?;
|
||||||
debug!("setsockopt: level={:?}", level);
|
debug!("setsockopt: level = {:?} ", sol);
|
||||||
return socket.set_option(sol, optname, optval).map(|_| 0);
|
return socket.set_option(sol, optname, optval).map(|_| 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user