Add network syscalls

This commit is contained in:
Jianfeng Jiang
2023-05-31 10:48:43 +08:00
committed by Tate, Hongliang Tian
parent 8719234dc2
commit 2b59a406a6
12 changed files with 580 additions and 0 deletions

View File

@ -0,0 +1,21 @@
use crate::fs::file_table::FileDescripter;
use crate::log_syscall_entry;
use crate::prelude::*;
use crate::util::write_socket_addr_to_user;
use super::SyscallReturn;
use super::SYS_GETSOCKNAME;
pub fn sys_getsockname(sockfd: FileDescripter, addr: Vaddr, addrlen: u32) -> Result<SyscallReturn> {
log_syscall_entry!(SYS_GETSOCKNAME);
debug!("sockfd = {sockfd}, addr = 0x{addr:x}, addrlen = {addrlen}");
let socket_addr = {
let current = current!();
let file_table = current.file_table().lock();
let socket = file_table.get_socket(sockfd)?;
socket.addr()?
};
// FIXME: trunscate write len if addrlen is not big enough
write_socket_addr_to_user(&socket_addr, addr, addrlen as usize)?;
Ok(SyscallReturn::Return(0))
}