- 博客(13)
- 资源 (13)
- 收藏
- 关注
原创 Linux内核协议栈(11)路由系统
/** 查询路由表** rp:路由表** dst:目的地址** src:源地址** tos:** oif:** protocol:协议*/static inline int ip_route_connect(struct rtable **rp, __be32 dst, __be32 src, u32 tos, int oif, u8 protocol,
2016-03-29 22:28:36 591
原创 Linux内核协议栈(7)listen函数分析
监听函数主要干了两件事:1.建立接受队列,并为接受队列分配空间2.将sock对象设置为监听状态,并放入监听哈希表/* * Perform a listen. Basically, we allow the protocol to do anything * necessary for a listen, and if that works, we mark the socket
2016-03-27 21:05:23 481
原创 Linux内核协议栈(附3)udp_lib_get_port函数
/** * udp_lib_get_port - UDP/-Lite port lookup for IPv4 and IPv6 * * @sk: socket struct in question * @snum: port number to look up * @saddr_comp: AF-dependent comparison o
2016-03-27 20:33:43 1436
原创 Linux内核协议栈(附2)内核如何通过file对象找到对应的socket对象?
socket建立后,其他socket 调用都是通过操作得到的文件描述符来操作socket的。基本上开始都会有这句sock = sockfd_lookup_light(fd, &err, &fput_needed);//通过fd找到file,进而找到sock通过文件描述符找到file对象容易理解。但file对象怎么跟socket对象联系起来的呢?我们进入该函数:static st
2016-03-27 14:45:11 1118
原创 IO端口和IO内存
IO端口:当寄存器或内存位于IO空间时,称为IO端口。IO内存:当寄存器或内存位于内存空间时,称为IO内存。对于某一既定的系统,它要么是独立编址、要么是统一编址,具体采用哪一种则取决于CPU的体系结构。 如,PowerPC、m68k等采用统一编址,而X86等则采用独立编址,存在IO空间的概念。目前,大多数嵌入式微控制器如ARM、PowerPC等并不提供I/O空间,仅有内存空间,可直
2016-03-24 16:17:47 531
原创 读Linux内核(4.9.9)之bind系统调用
在调用socket成功返回后,我们得到与socket关联的文件描述符。然后我们以该描述符和sockaddr地址结构对象为参数调用bind,就实现了socket对象地址的绑定。那这个绑定到底是个什么意思?这个绑定操作是必须吗?绑定操作之后,socket对象又发生了什么?也许还有更多的疑问,我们在协议栈的源码寻找答案。先贴上bind系统调用的源码:/* * Bind a name to a sock...
2016-03-23 22:05:00 2105
原创 读Linux内核(4.9.9)之socket调用分析
我们知道要读写一个文件可以使用open调用,得到文件描述符,然后就可以用read读文件,使用write写文件。而socket就相当于open(事实上linux为了实践万物皆文件实现了一个虚拟文件系统sockfs,socket系统调用之后就是在sockfs文件系统上建立了一个文件,只是这个文件是特殊的socket文件,我们先不去探究sockfs文件系统,我现在只需知道socket之后建立一个特殊的s...
2016-03-23 16:59:59 2634
原创 Linux内核协议栈(2) 由简单的socket编程例子开始
经过这段时间,我的感悟是:数据结构,数据结构,数据结构——重要的事情要强调三次。协议栈就是帮我们发送和接收数据的,而TCP/IP协议是分层的结构,在内核有用户空间和内核空间的区分,协议栈在实现时在不同的层次使用的不同的数据结构。另外一个感悟是:阅读内核代码要有面向对象的思维。Linux虽然是C写的,而C不是面向对象的语言,但是内核却是用C和面向对象的思想写出来的——感觉矛盾?没关系,先有个印象
2016-03-20 19:39:58 496
原创 Linux内核协议栈(1) 前言
很早之前想深入的研究内核协议栈的源码,但是由于各种原因,一直都没有进行。各种原因有时间原因,毅力原因,也许更重要的是知识储备和方法论的问题——所谓的内功吧,毕竟对于菜鸟,能读懂协议栈源码真是件不容易的事。最近再次把这件事做起来,也终于感觉有点眉目了,所以做一次记录。
2016-03-20 19:20:18 432
原创 Linux内核协议栈(附1)inet_create函数注释
* * Create an inet socket.------->建立一个inet类型的套接字 */sockstatic int inet_create(struct net *net, struct socket *sock, int protocol){ struct sock *sk; //INET地址族为上层提供的一个抽象 struct inet_protosw *a
2016-03-19 22:18:52 1341
原创 系统调用sendto
SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,unsigned, flags, struct sockaddr __user *, addr,int, addr_len){struct socket *sock;struct sockaddr_storage address;int err
2016-03-19 11:54:39 967
奥比中光3D摄像头驱动(包含Linux和Windows)
2023-03-16
bcprov加密库
2018-11-06
fer2013.tar.gz
2018-08-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人