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子系统-系统调用层相关推荐

  1. linux工作在传输层,linux net子系统-协议层(传输层与网络层)

    传输层 struct proto struct tcp_prot位于文件net/ipv4/tcp_ipv4.c struct proto tcp_prot = { .name = "TCP& ...

  2. linux input子系统分析--子系统核心.事件处理层.事件传递过程

    linux input子系统分析--子系统核心.事件处理层.事件传递过程 一.  输入子系统核心分析. 1.输入子系统核心对应与/drivers/input/input.c文件,这个也是作为一个模块注 ...

  3. Linux时间子系统之Tick层

    所谓Tick设备,也称作滴答设备,就是系统中的一个周期中断设备,其周期间隔由内核编译选项定义. Tick设备在Linux时间子系统中用tick_device结构体表示(代码位于kernel/time/ ...

  4. Linux网络子系统

    今天分享一篇经典Linux协议栈文章,主要讲解Linux网络子系统,看完相信大家对协议栈又会加深不少,不光可以了解协议栈处理流程,方便定位问题,还可以学习一下怎么去设计一个可扩展的子系统,屏蔽不同层次 ...

  5. 一文搞定 | Linux 网络子系统

    今天分享一篇经典Linux协议栈文章,主要讲解Linux网络子系统,看完相信大家对协议栈又会加深不少,不光可以了解协议栈处理流程,方便定位问题,还可以学习一下怎么去设计一个可扩展的子系统,屏蔽不同层次 ...

  6. Linux input子系统分析之一:软件层次

    输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见.同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统进行深入分 ...

  7. Linux input子系统分析

    输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见.同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统进行深入分 ...

  8. 利用 libvirt 和 Linux 审计子系统跟踪 KVM 客户机

    在虚拟环境中审计和过滤客户机和主机事件 Marcelo H. Cerri, 软件工程师, IBM Marcelo Cerri 是位于巴西 IBM Linux Technology Center 的软件 ...

  9. Linux内核网络数据包发送(四)——Linux netdevice 子系统

    Linux内核网络数据包发送(四)--Linux netdevice 子系统 1. 前言 2. `dev_queue_xmit` and `__dev_queue_xmit` 2.1 `netdev_ ...

最新文章

  1. 如何使用Python创建,读取,更新和搜索Excel文件
  2. 【用深度学习搜索相似服饰】《Using Deep Learning to Find Similar Dresses》by Luis Mey
  3. java 调用父级方法_java子类调用父类的方法中包含子类重写的实例方法
  4. python教学网站-自学python有什么网站
  5. Java向MySQL数据库插入时间类型Date数据时需要注意的问题
  6. 常用工具说明--搭建基于rietveld的CodeReview平台(未测试)
  7. sort对结构体排序
  8. 循环打印三角形 java 0913
  9. 机器人驾驶的神经网络愿景(上)
  10. Web开发之一:Web UI技术综述
  11. 音乐编辑 java_求助 关于java编辑音乐
  12. Quartz 2.x 任务调度使用(CronTrigger)
  13. 虚拟环境mkvirtualenv
  14. Eclipse或者MyEclipse—在Eclipse或MyEclipse中的操作(3)
  15. cvAddWeighted 进行图片融合
  16. RTE 2020第二批嘉宾公布 教育+社交+IoT行业大咖参会
  17. 女生考华为IE会容易一点吗?女生做网工一般是什么岗位呢?找工作容易吗?需要出差吗?以后怎么发展呢?
  18. python清明节作业
  19. docker-compose的nginx重启失败: Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address alread
  20. 淘宝、天猫API接口

热门文章

  1. 面向对象的封装,继承,多态。
  2. CSR867x — 说说蓝牙音频常用的编解码格式
  3. Windows上使用VLC插件的方式在IE浏览器上播放RTSP视频流
  4. 请注意:黑客开始用云隐藏IP地址
  5. 团队作业—beta冲刺
  6. IOS开发:如何修改 SwiftUI 模板项目的启动页面
  7. 17-面向对象之语法(2)
  8. TiDB+TiSpark部署--安装,扩缩容及升级操作
  9. SUMMARIZE函数解决之前的总计错误
  10. 自学Java如何正确入门?