mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 08:06:32 +00:00
新增网络socket的系统调用接口 (#247)
1.修复spinlock忘记恢复rflags的问题 2.WaitQueue增加wakeup_all的功能 3.完善tcp,udp,raw socket 4.把PollStatus结构体改为使用bitflags 5.新增iovec结构体 6.完成网络的系统调用 7.在bootstrap里面添加dnsmasq bridge-utils iptables --------- Co-authored-by: guanjinquan <1666320330@qq.com>
This commit is contained in:
@ -22,6 +22,21 @@ extern uint64_t sys_sigaction(struct pt_regs *regs);
|
||||
extern uint64_t sys_rt_sigreturn(struct pt_regs *regs);
|
||||
extern uint64_t sys_getpid(struct pt_regs *regs);
|
||||
extern uint64_t sys_sched(struct pt_regs *regs);
|
||||
extern int sys_dup(int oldfd);
|
||||
extern int sys_dup2(int oldfd, int newfd);
|
||||
extern uint64_t sys_socket(struct pt_regs *regs);
|
||||
extern uint64_t sys_setsockopt(struct pt_regs *regs);
|
||||
extern uint64_t sys_getsockopt(struct pt_regs *regs);
|
||||
extern uint64_t sys_connect(struct pt_regs *regs);
|
||||
extern uint64_t sys_bind(struct pt_regs *regs);
|
||||
extern uint64_t sys_sendto(struct pt_regs *regs);
|
||||
extern uint64_t sys_recvfrom(struct pt_regs *regs);
|
||||
extern uint64_t sys_recvmsg(struct pt_regs *regs);
|
||||
extern uint64_t sys_listen(struct pt_regs *regs);
|
||||
extern uint64_t sys_shutdown(struct pt_regs *regs);
|
||||
extern uint64_t sys_accept(struct pt_regs *regs);
|
||||
extern uint64_t sys_getsockname(struct pt_regs *regs);
|
||||
extern uint64_t sys_getpeername(struct pt_regs *regs);
|
||||
|
||||
/**
|
||||
* @brief 关闭文件系统调用
|
||||
@ -179,9 +194,9 @@ uint64_t sys_brk(struct pt_regs *regs)
|
||||
// kdebug("sys_brk input= %#010lx , new_brk= %#010lx bytes current_pcb->mm->brk_start=%#018lx
|
||||
// current->end_brk=%#018lx", regs->r8, new_brk, current_pcb->mm->brk_start, current_pcb->mm->brk_end);
|
||||
struct mm_struct *mm = current_pcb->mm;
|
||||
if (new_brk < mm->brk_start || new_brk> new_brk >= current_pcb->addr_limit)
|
||||
if (new_brk < mm->brk_start || new_brk > new_brk >= current_pcb->addr_limit)
|
||||
return mm->brk_end;
|
||||
|
||||
|
||||
if (mm->brk_end == new_brk)
|
||||
return new_brk;
|
||||
|
||||
@ -392,9 +407,6 @@ uint64_t sys_pipe(struct pt_regs *regs)
|
||||
|
||||
extern uint64_t sys_mkdir(struct pt_regs *regs);
|
||||
|
||||
extern int sys_dup(int oldfd);
|
||||
extern int sys_dup2(int oldfd, int newfd);
|
||||
|
||||
system_call_t system_call_table[MAX_SYSTEM_CALL_NUM] = {
|
||||
[0] = system_call_not_exists,
|
||||
[1] = sys_put_string,
|
||||
@ -426,5 +438,18 @@ system_call_t system_call_table[MAX_SYSTEM_CALL_NUM] = {
|
||||
[27] = sys_sched,
|
||||
[28] = sys_dup,
|
||||
[29] = sys_dup2,
|
||||
[30 ... 255] = system_call_not_exists,
|
||||
[30] = sys_socket,
|
||||
[31] = sys_setsockopt,
|
||||
[32] = sys_getsockopt,
|
||||
[33] = sys_connect,
|
||||
[34] = sys_bind,
|
||||
[35] = sys_sendto,
|
||||
[36] = sys_recvfrom,
|
||||
[37] = sys_recvmsg,
|
||||
[38] = sys_listen,
|
||||
[39] = sys_shutdown,
|
||||
[40] = sys_accept,
|
||||
[41] = sys_getsockname,
|
||||
[42] = sys_getpeername,
|
||||
[43 ... 255] = system_call_not_exists,
|
||||
};
|
||||
|
@ -41,5 +41,19 @@
|
||||
#define SYS_SCHED 27 // 让系统立即运行调度器(该系统调用不能由运行在Ring3的程序发起)
|
||||
#define SYS_DUP 28
|
||||
#define SYS_DUP2 29
|
||||
#define SYS_SOCKET 30 // 创建一个socket
|
||||
|
||||
#define SYS_SETSOCKOPT 31 // 设置socket的选项
|
||||
#define SYS_GETSOCKOPT 32 // 获取socket的选项
|
||||
#define SYS_CONNECT 33 // 连接到一个socket
|
||||
#define SYS_BIND 34 // 绑定一个socket
|
||||
#define SYS_SENDTO 35 // 向一个socket发送数据
|
||||
#define SYS_RECVFROM 36 // 从一个socket接收数据
|
||||
#define SYS_RECVMSG 37 // 从一个socket接收消息
|
||||
#define SYS_LISTEN 38 // 监听一个socket
|
||||
#define SYS_SHUTDOWN 39 // 关闭socket
|
||||
#define SYS_ACCEPT 40 // 接受一个socket连接
|
||||
#define SYS_GETSOCKNAME 41 // 获取socket的名字
|
||||
#define SYS_GETPEERNAME 42 // 获取socket的对端名字
|
||||
|
||||
#define SYS_AHCI_END_REQ 255 // AHCI DMA请求结束end_request的系统调用
|
Reference in New Issue
Block a user