白水煮鸡蛋

路漫漫其修远兮~~~~~~~~~~

[网络编程]epoll流程浅析

花了半天,把epoll的实现大体看了下,这里稍总结下: epoll相关的三个用户态API接口: 1、epoll_create函数 函数声明:int epoll_create(int size) 该函数生成一个epoll专用的文件描述符。它其实是在内核申请一空间,用来存放你想关注的soc...

2013-04-21 16:08:14

阅读数:1718

评论数:0

[网络编程]select流程分析

函数原型: int select(int maxfdp1,fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout) 主要代码路径与文件 linux/fs/select.c    ...

2013-04-21 00:05:39

阅读数:1376

评论数:0

[网络编程]socket创建流程

今天分析下socket的创建流程 关于用户态socket如何通过系统调用进入内核态到sys_socke,这里就不再分析,直接看内核态socket入口 SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) {    ...

2013-04-20 18:25:06

阅读数:1305

评论数:0

一个fork的面试题

转: 前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下。这个题是这样的: 题目:请问下面的程序一共输出多少个“-”? #include #include #include i...

2013-04-19 18:25:13

阅读数:635

评论数:0

敏捷地写博客

为什么写博客 写技术博客对于程序员的提升是不可估量的。只要你坚持一段时间,你就会发现它给你带来的各种积极的变化。思考问题更加深入了,更容易关注细节了,表达能力也增强了…… 不断的总结自己。程序员面对的世界是非常复杂的,未知领域也很多,在解决问题时第一次的方式并不一定是最完美的,只有通过不断...

2013-04-19 13:50:57

阅读数:630

评论数:0

linux网络协议栈分析笔记14-路由4-FIB3

看完fib的查找,弄清了一些数据结构的组织,我们再来看看路由表是如何创建的 从ip_fib_init注册的两个通知链来看,在IP地址发送变动时会触发通知链的处理函数,都会调用fib_add_ifaddr()来添加地址到路由中 这个里面由调用了fib_magic来进行路由地址的操作。 stat...

2013-04-16 21:32:22

阅读数:1294

评论数:0

linux网络协议栈分析笔记13-路由3-FIB2

当然,我们选择路由1那章的遗留的接口进入分析 fib_lookup()       我们前面提到过fib初始化时,CONFIG_IP_MULTIPLE_TABLES  宏导致了两种方式的fib表初始化, 因此存在了有多路由表存在和无多路由表存在的情况,我们先看无多路由表的情况 stati...

2013-04-14 19:48:10

阅读数:1675

评论数:0

linux网络协议栈分析笔记12-路由2-FIB1

上一章我们看到了通过fib_lookup去查找了路由信息,这一章我们就看看fib到底是什么 FIB(Forward Information Base) 转发信息库 inet_init()->ip_init()->ip_rt_init()-> ipv4_dst_o...

2013-04-14 19:46:30

阅读数:1563

评论数:0

linux网络协议栈分析笔记11-路由1-路由缓存

来吧,路由 路由是网络的核心,是linux网络协议栈的核心,我们找个入口进去看看 还记得在笔记5-IP层的处理1中ip_rcv_finish走到过一个岔口 ->ip_rcv_finish()      ->ip_route_input()  查找路由信息      -...

2013-04-13 20:20:53

阅读数:2502

评论数:0

linux网络协议栈分析笔记10-arp邻居子系统3

还是回到neigh_resolve_output() int neigh_resolve_output(struct sk_buff *skb) {      struct dst_entry *dst = skb_dst(skb);      struct neighbour *neig...

2013-04-12 19:41:49

阅读数:1306

评论数:0

linux网络协议栈分析笔记9-arp邻居子系统2

上回说到流量输出会走到neigh_resolve_output  我们来看看邻居这玩意能玩点什么花样,传说的arp学习在哪里 int neigh_resolve_output(struct sk_buff *skb) {      struct dst_entry *dst = skb_ds...

2013-04-12 19:40:37

阅读数:1413

评论数:0

linux网络协议栈分析笔记8-arp邻居子系统1

我们进入arp协议,我们看看linux中号称邻居子系统是啥样的 static struct packet_type arp_packet_type __read_mostly = {      .type =     cpu_to_be16(ETH_P_ARP),         .func...

2013-04-11 21:54:02

阅读数:1255

评论数:0

linux网络协议栈分析笔记7-VLAN的处理

这次先看看VLAN怎么处理的        主要代码目录linux/net/8021q dev_add_pack(&vlan_packet_type);         vlan-802.1q static struct packet_type vlan_packet_type _...

2013-04-10 20:10:32

阅读数:1583

评论数:0

linux网络协议栈分析笔记6-IP层的处理2

上章说到ip_rcv_finish最后会有两个选择: 1)ip_local_deliver 2)ip_forward 现在我们看下ip_forward() ->ip_forward()      ->struct ip_options * opt     = &(...

2013-04-09 21:07:01

阅读数:1520

评论数:0

linux网络协议栈分析笔记5-IP层的处理1

前几章稍分析了网桥,接着我们继续1中的收包流程,说到 对该数据包转达到其他L3协议的处理函数: type = skb->protocol; list_for_each_entry_rcu(ptype,                &ptype_base[ntohs(ty...

2013-04-08 22:43:42

阅读数:1225

评论数:0

linux网络协议栈分析笔记4-网桥3

网桥的创建: ->br_add_bridge()    创建网桥的核心工作,创建一个与网桥同名的网络设备。可以通过该设备分配的IP地址来管理该网桥。 同时该设备  是虚                                     拟的设备,它的接收包和发送包处理函数与一般的真...

2013-04-07 08:50:25

阅读数:997

评论数:0

linux网络协议栈分析笔记3-网桥2

转发数据库模块,即二层MAC-端口转发表处理模块 初始化: ->br_fdb_init()   创建net_bridge_fdb_entry结构的高速缓存      br_fdb_cache = kmem_cache_create("bridge_fdb_cache&qu...

2013-04-07 08:48:19

阅读数:881

评论数:0

linux网络协议栈分析笔记2-网桥1

这一章主要看网桥的处理。 网桥是一种2层网络互连设备,而不是一种网络协议。它在协议结构上并没有占有一席之地,因此不能通过向协议栈注册协议的方式来申请网桥数据包的处理。 skb = handle_bridge(skb, &pt_prev, &ret, orig...

2013-04-05 23:02:52

阅读数:1589

评论数:0

linux网络协议栈分析笔记1-接入部分

初始化部分: ->net_dev_init()       网络设备初始化      queue->backlog.poll = process_backlog;   注册非NAPI方式的POLL函数      open_softirq(NET_TX_SOFTIRQ, net_t...

2013-04-05 17:58:21

阅读数:1154

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭