linux报文处理流程.pdf,报文处理流程.pdf

报文处理流程

Linux

Linux

LLiinnuuxx 报文处理流程。

newmaker@163.com

1

1

11 目的

了解linux 报文转发流程好比理解Linux网络的骨架。有个宏观的概念,对于网络开发,

提高性能,bug解决起到至关重要的作用。

2

2

22 处理一级流程图

驱动(收报文)

软中断(NET_RX_SOFTIRQ)

协议栈

软 中 断

NET_RX_SOFTIRQ

驱动(发报文)

3

3

33 软中断处理与驱动

3.1软中断

软中断中取报文,是通过 NAPI 结构的poll 函数取的,每个CPU 拥有一个NAPI 列

表。、

NAPI 是驱动注册的取报文的结构。 使用NAPI 主要是采用poll 方式取报文,而不是依

1

赖硬中断处理,对于小包,报文数比较多的情况下,大大的提高的效率,毕竟硬中断太

影响性能。

struct napi_struct {

/*Thepoll_list must only bemanaged bythe entitywhich

*changes thestate ofthe NAPI_STATE_SCHED bit. Thismeans

*whoever atomically setsthat bit can add this napi_struct

*totheper-cpu poll_list, and whoever clears that bit

*can remove from thelist right before clearingthebit.

*/

struct list_head poll_list;

unsigned long state;

weight

weight

int wweeiigghhtt; //为poll 函数的第2个参数,表示每次期望取多少报文。如果取

的报文不足该数,则从cpu napi 队列去掉该napi。

poll

poll

int (*ppoollll)(struct napi_struct *,int); //处理函数。

#ifdef CONFIG_NETPOLL

spinlock_t poll_lock;

int poll_owner;

#endif

unsigned int gro_count;

struct net_device *dev;

struct list_head dev_list;

struct sk_buff *gro_list;

struct sk_buff *skb;

};

net_rx_action

net_rx_action

static void nneett__rrxx__aaccttiioonn(struct softirq_action *h)

{

struct list_head *list =&__get_cpu_var(softnet_data).poll_list;

unsigned longtime_limit =

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值