内核pppoe接收发送数据包流程
来源:互联网 发布:mac网络连接鉴定失败 编辑:程序博客网 时间:2024/04/19 07:26
http://blog.chinaunix.net/uid-22590270-id-3240990.html
内核pppoe接收发送数据包流程
数据结构
--------
--------
struct asyncppp;
struct ppp;
struct channel;
ppp流程
-------
-------
接收流程
(从伪终端从设备读出数据传到TCP/IP到应用层)
(从伪终端从设备读出数据传到TCP/IP到应用层)
ppp_async.c注册tty设备,ppp_asynctty_receive为设备ops。
ppp_asynctty_receive() --> ppp_async.c
ppp_async_input()
process_input_packet() --> 插入队列,
ppp_async_process() --> 由软中断触发
ppp_input() --> ppp_generic.c
ppp_do_recv()
ppp_receive_frame()
ppp_receive_nonmp_frame()
netif_rx() --> 传递到了dev.c手中,传到TCP/IP。
发送流程
(从应用层发送到伪终端)
之前的就不述说了
ip_finish_output2()
dev_queue_xmit()
dev_hard_start_xmit()
ppp_start_xmit() --> ppp_generic.c,由ops的ndo_start_xmit传递。
skb_queue_tail()
ppp_xmit_process()
ppp_send_frame()
ppp_push()
pch->chan->ops->start_xmit() -->ppp_asynctty_open()时调用ppp_register_channel()来赋值
ppp_async_send()
ppp_async_push()
tty->ops->write()
至此到为终端设备,而之后pppoe应用层程序会从伪终端主设备读取数据通过socket发送给pppoe,接下来看pppoe流程。
pppoe流程
---------
(基于PF_PPPOX协议)
接收流程
netif_receive_skb()
__netif_receive_skb() --> 检索pppoe中dev_add_pack()添加的包
deliver_skb()
pt_prev->func() --> 执行pppoes_ptype中的func()
pppoe_rcv() --> session流程,发现阶段略
sk_receive_skb()
sk_backlog_rcv()
sk->sk_backlog_rcv() --> 在pppoe_create()中赋值,创建PF_PPPOX相关socket时调用(见socket流程)
(有些应用层pppoe直接用PF_PACKET来做,获取所有内核收到的的数据包的一份拷贝,也就是说直接略过了这个流程)
(有些应用层pppoe直接用PF_PACKET来做,获取所有内核收到的的数据包的一份拷贝,也就是说直接略过了这个流程)
pppoe_rcv_core()
sock_queue_rcv_skb() --> 加入到socket队列中,之后见socket流程。
发送流程
pppoe_sendmsg()
dev_queue_xmit()
这里就没什么好说的了
---------------------
关于PTY设备与pppoe的关系有机会我会找个应用层的pppoe来分析。
另外我之后会分析PF_PACKET的流程,让大家明白基于该机制的原理。
0 0
- 内核pppoe接收发送数据包流程
- Linux内核二层数据包接收流程
- Linux内核二层数据包接收流程
- Linux内核数据包处理流程-数据包接收
- Linux内核数据包处理流程-数据包接收(1)
- Linux内核数据包处理流程-数据包接收(2)
- Linux内核数据包处理流程-数据包接收(3)
- Linux内核数据包处理流程-数据包接收
- Linux内核数据包处理流程-数据包接收
- Linux内核数据包处理流程-数据包接收
- Linux内核数据包处理流程-数据包接收(1)
- Linux内核数据包处理流程-数据包接收(2)
- Linux内核数据包处理流程-数据包接收(3)
- contiki 中数据包的接收与发送流程
- contiki 中数据包的接收与发送流程
- jrtplib接收数据包流程
- 接收H248数据包流程
- (others)pppoe接受数据包流程112
- 典型环节的传递函数及其电路图-20151103
- robotium 中获取相同类型的自控觉得获取方法(使用Android的ViewGroup控件的getChildAt(index)获取)
- mysql 学习记录(二十五)--mysql日志
- 粒子群算法求解优化问题(c实现)
- httpwebrequest详解【转】
- 内核pppoe接收发送数据包流程
- 进程间的通信机制
- 看不懂
- [刷题丶数据结构]1.栈和队列
- XMPP框架 微信项目开发之登录的实现——登录的步骤示例
- oracle备份
- Android TouchEvent事件传递机制
- leetcode-Remove Duplicates from Sorted List
- 在eclipse上配置copy来的web项目