linux net子系统-系统调用层
linux net子系统打算分下面这几个部分来理解,这些都是我初次理解net子系统,若有出错,还请不吝赐教:
1. linux net子系统-系统调用层
2. linux net子系统-套接口层
3. linux net子系统-协议层(传输层与网络层)
4. linux net子系统-路由子系统
5. linux net子系统-邻居子系统
6. linux net子系统-Qos子系统
7. linux net子系统-设备无关层
8. linux net子系统-设备驱动层
在linux-xxx/net/socket.c文件中定义并实现了net相关的系统调用:
SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
SYSCALL_DEFINE2(listen, int, fd, int, backlog)
SYSCALL_DEFINE3(accept, int, fd, struct sockaddr __user *, upeer_sockaddr, int __user *, upeer_addrlen)
SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, int, addrlen)
SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,unsigned int, flags, struct sockaddr __user *, addr,int, addr_len)
SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,unsigned int, flags, struct sockaddr __user *, addr,int __user *, addr_len)
这些SYSCALL_DEFINE对应的宏在include/linux/syscalls.h文件中
#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)#define SYSCALL_DEFINEx(x, sname, ...) \SYSCALL_METADATA(sname, x, __VA_ARGS__) \__SYSCALL_DEFINEx(x, sname, __VA_ARGS__)#define __PROTECT(...) asmlinkage_protect(__VA_ARGS__)
#define __SYSCALL_DEFINEx(x, name, ...) \asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \{ \long ret = SYSC##name(__MAP(x,__SC_CAST,__VA_ARGS__)); \__MAP(x,__SC_TEST,__VA_ARGS__); \__PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \return ret; \} \SYSCALL_ALIAS(sys##name, SyS##name); \static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__))
linux net子系统-系统调用层相关推荐
- linux工作在传输层,linux net子系统-协议层(传输层与网络层)
传输层 struct proto struct tcp_prot位于文件net/ipv4/tcp_ipv4.c struct proto tcp_prot = { .name = "TCP& ...
- linux input子系统分析--子系统核心.事件处理层.事件传递过程
linux input子系统分析--子系统核心.事件处理层.事件传递过程 一. 输入子系统核心分析. 1.输入子系统核心对应与/drivers/input/input.c文件,这个也是作为一个模块注 ...
- Linux时间子系统之Tick层
所谓Tick设备,也称作滴答设备,就是系统中的一个周期中断设备,其周期间隔由内核编译选项定义. Tick设备在Linux时间子系统中用tick_device结构体表示(代码位于kernel/time/ ...
- Linux网络子系统
今天分享一篇经典Linux协议栈文章,主要讲解Linux网络子系统,看完相信大家对协议栈又会加深不少,不光可以了解协议栈处理流程,方便定位问题,还可以学习一下怎么去设计一个可扩展的子系统,屏蔽不同层次 ...
- 一文搞定 | Linux 网络子系统
今天分享一篇经典Linux协议栈文章,主要讲解Linux网络子系统,看完相信大家对协议栈又会加深不少,不光可以了解协议栈处理流程,方便定位问题,还可以学习一下怎么去设计一个可扩展的子系统,屏蔽不同层次 ...
- Linux input子系统分析之一:软件层次
输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见.同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统进行深入分 ...
- Linux input子系统分析
输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见.同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统进行深入分 ...
- 利用 libvirt 和 Linux 审计子系统跟踪 KVM 客户机
在虚拟环境中审计和过滤客户机和主机事件 Marcelo H. Cerri, 软件工程师, IBM Marcelo Cerri 是位于巴西 IBM Linux Technology Center 的软件 ...
- Linux内核网络数据包发送(四)——Linux netdevice 子系统
Linux内核网络数据包发送(四)--Linux netdevice 子系统 1. 前言 2. `dev_queue_xmit` and `__dev_queue_xmit` 2.1 `netdev_ ...
最新文章
- 如何使用Python创建,读取,更新和搜索Excel文件
- 【用深度学习搜索相似服饰】《Using Deep Learning to Find Similar Dresses》by Luis Mey
- java 调用父级方法_java子类调用父类的方法中包含子类重写的实例方法
- python教学网站-自学python有什么网站
- Java向MySQL数据库插入时间类型Date数据时需要注意的问题
- 常用工具说明--搭建基于rietveld的CodeReview平台(未测试)
- sort对结构体排序
- 循环打印三角形 java 0913
- 机器人驾驶的神经网络愿景(上)
- Web开发之一:Web UI技术综述
- 音乐编辑 java_求助 关于java编辑音乐
- Quartz 2.x 任务调度使用(CronTrigger)
- 虚拟环境mkvirtualenv
- Eclipse或者MyEclipse—在Eclipse或MyEclipse中的操作(3)
- cvAddWeighted 进行图片融合
- RTE 2020第二批嘉宾公布 教育+社交+IoT行业大咖参会
- 女生考华为IE会容易一点吗?女生做网工一般是什么岗位呢?找工作容易吗?需要出差吗?以后怎么发展呢?
- python清明节作业
- docker-compose的nginx重启失败: Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address alread
- 淘宝、天猫API接口