当前位置: 首页 > news >正文

福州城市建设规划网站深圳网络营销策划公司

福州城市建设规划网站,深圳网络营销策划公司,网站设计制作的连接方式,长宁青岛网站建设1. 网络数据包接收流程简述 典型的以太网卡网络包接收流程如下: 1.网络包通过物理介质传到接收端的phy芯片; 2.phy芯片通过RGMII协议传到MAC芯片rx queue fifo中; 3.MAC芯片通过专用DMA将网络包搬运到网卡驱动程序预先分配好的rx ringbuffer中…

1. 网络数据包接收流程简述

        典型的以太网卡网络包接收流程如下:

        1.网络包通过物理介质传到接收端的phy芯片;

        2.phy芯片通过RGMII协议传到MAC芯片rx queue fifo中;

        3.MAC芯片通过专用DMA将网络包搬运到网卡驱动程序预先分配好的rx ringbuffer中,当一个网络包搬运完后,给CPU触发中断;

        4.CPU响应网卡中断(同时关网卡dma中断),执行网卡驱动程序的中断处理函数,触发NET_RX软中断;

        5.NET_RX软中断中通过napi_poll接口轮询调用网卡的接收函数将数据从rx ringbuffer中搬运到网络协议栈中处理,取空rx ringbuffer后使能网卡dma中断;

        6.网络协议栈层层处理后(网络接口层--->网络层--->传输层),将数据放到socket接收缓冲区;

        7.用户态通过read/recv系列接口从socket接收缓冲区中取走数据

2. 触发网卡硬中断前      

1.网卡interface up时,会为每个rx queue在system memory中申请dma ring buffer。
2.初始化网卡寄存器,包括dma/mtl/mac/mmc,启动dma传输;
3.申请网卡中断;
4.启动queue;

3. 响应网卡硬中断

        在网卡中断处理函数中,检查网卡的中断状态寄存器,检查到有RX interrupt时,会先清该中断,关闭网卡dma中断,在raise NET_RX的软中断后退出,实际的收包工作在软中断中处理。

4. 网络软中断定义

        软中断通过open_softirq函数(定义在kernel/softirq.c文件中)来注册的。open_softirq注册一个软中断处理函数,即在软中断向量表softirq_vec数组中添加新的软中断处理action函数。

        我们可以从start_kernel函数开始,该函数定义在init/main.c中。会调用softirq_init(),该函数会调用open_softirq函数来注册相关的软中断,但是并没有注册网络相关的软中断:

void __init softirq_init(void)
{int cpu;for_each_possible_cpu(cpu) {per_cpu(tasklet_vec, cpu).tail =&per_cpu(tasklet_vec, cpu).head;per_cpu(tasklet_hi_vec, cpu).tail =&per_cpu(tasklet_hi_vec, cpu).head;}open_softirq(TASKLET_SOFTIRQ, tasklet_action);open_softirq(HI_SOFTIRQ, tasklet_hi_action);}

        那么网络相关的软中断在哪里呢?其也是在startup_kernel函数中的中,调用链路如下:

startup_kernel->rest_init->kernel_init->kernel_init_freeable->do_basic_setup();

        而do_basic_setup函数会进行驱动设置。会通过调用net_dev_init函数。net_dev_init函数(定义在net/core/dev.c),最注册软中断,如下:

static int __init net_dev_init(void)
{int i, rc = -ENOMEM;BUG_ON(!dev_boot_phase);if (dev_proc_init())goto out;if (netdev_kobject_init())goto out;INIT_LIST_HEAD(&ptype_all);for (i = 0; i < PTYPE_HASH_SIZE; i++)INIT_LIST_HEAD(&ptype_base[i]);INIT_LIST_HEAD(&offload_base);if (register_pernet_subsys(&netdev_net_ops))goto out;for_each_possible_cpu(i) {struct work_struct *flush = per_cpu_ptr(&flush_works, i);struct softnet_data *sd = &per_cpu(softnet_data, i);INIT_WORK(flush, flush_backlog);skb_queue_head_init(&sd->input_pkt_queue);skb_queue_head_init(&sd->process_queue);INIT_LIST_HEAD(&sd->poll_list);sd->output_queue_tailp = &sd->output_queue;#ifdef CONFIG_RPSsd->csd.func = rps_trigger_softirq;sd->csd.info = sd;sd->cpu = i;
#endifsd->backlog.poll = process_backlog;sd->backlog.weight = weight_p;}dev_boot_phase = 0;if (register_pernet_device(&loopback_net_ops))goto out;if (register_pernet_device(&default_device_ops))goto out;open_softirq(NET_TX_SOFTIRQ, net_tx_action);//注册网络发送的软中断,关联net_tx_action函数open_softirq(NET_RX_SOFTIRQ, net_rx_action);//注册网络接收的软中断,关联net_rx_action函数rc = cpuhp_setup_state_nocalls(CPUHP_NET_DEV_DEAD, "net/dev:dead",NULL, dev_cpu_dead);WARN_ON(rc < 0);rc = 0;
out:return rc;
}//软中断注册
void open_softirq(int nr, void (*action)(struct softirq_action *))
{softirq_vec[nr].action = action;
}//软中断向量表
static struct softirq_action softirq_vec[NR_SOFTIRQS] __cacheline_aligned_in_smp;

5. NET_RX软中断执行流程

        在调度到ksoftirqd/x线程处理NET_RX的软中断时,以stmmac网卡驱动为例,有如下的调用关系:

net_rx_actionnapi_pollstmmac_napi_poll_rx /*网卡驱动注册的rx napi回调*/stmmac_rx /*实际接收数据的函数*/skb_copy_to_linear_data   /*将数据包从rx ringbuffer中拷贝到skb结构体中*/napi_gro_receive /*网络接口层处理数据包*/dev_gro_receive napi_skb_finishnetif_receive_skb_internaldeliver_skb   /*将数据送到网络层*/ip_rcv /*网络层IP协议核心函数*/ip_rcv_coreip_rcv_finish  /* 处理netfiler和iptables规则*/ip_local_deliver_finish /*将数据送到传输层*/udp_rcv /*根据协议调用传输层回调,以下以UDP协议为例*/udp_queue_rcv_skb /*校验udp数据*/__udp_queue_rcv_skb /*将网络包送到socket接收队列中*/sk_data_ready /*唤醒所有等待在该socket上的进程*/


文章转载自:
http://dinncowolfram.ydfr.cn
http://dinncoprocuress.ydfr.cn
http://dinncomiscellaneous.ydfr.cn
http://dinncoverdigris.ydfr.cn
http://dinncoonager.ydfr.cn
http://dinncocacuminal.ydfr.cn
http://dinncoectochondral.ydfr.cn
http://dinncomalaguena.ydfr.cn
http://dinncophenom.ydfr.cn
http://dinncophotocoagulating.ydfr.cn
http://dinncogeobiological.ydfr.cn
http://dinncopretensive.ydfr.cn
http://dinncomultigrade.ydfr.cn
http://dinncoskint.ydfr.cn
http://dinncoinhabitativeness.ydfr.cn
http://dinncocheckered.ydfr.cn
http://dinncochaldaic.ydfr.cn
http://dinncoevernormal.ydfr.cn
http://dinncosixer.ydfr.cn
http://dinncocaique.ydfr.cn
http://dinncosuperpotent.ydfr.cn
http://dinncoanimating.ydfr.cn
http://dinncoonboard.ydfr.cn
http://dinncocryoscope.ydfr.cn
http://dinncoritornello.ydfr.cn
http://dinncowrote.ydfr.cn
http://dinncoausform.ydfr.cn
http://dinncosinsyne.ydfr.cn
http://dinncodisenthrall.ydfr.cn
http://dinncoangelophany.ydfr.cn
http://dinncooxyopia.ydfr.cn
http://dinncoanagnorisis.ydfr.cn
http://dinnconuminous.ydfr.cn
http://dinncoturtlet.ydfr.cn
http://dinncotouchily.ydfr.cn
http://dinncoreboso.ydfr.cn
http://dinncoratcatcher.ydfr.cn
http://dinncoklick.ydfr.cn
http://dinncoconac.ydfr.cn
http://dinncocrispy.ydfr.cn
http://dinncobhoodan.ydfr.cn
http://dinncousufructuary.ydfr.cn
http://dinncobumbledom.ydfr.cn
http://dinncobookmarker.ydfr.cn
http://dinncofunctional.ydfr.cn
http://dinncopubis.ydfr.cn
http://dinncosacrament.ydfr.cn
http://dinncopropertied.ydfr.cn
http://dinncoindifferently.ydfr.cn
http://dinncohierogram.ydfr.cn
http://dinncodithyramb.ydfr.cn
http://dinncointuitionist.ydfr.cn
http://dinncounman.ydfr.cn
http://dinncomedievalism.ydfr.cn
http://dinncoipa.ydfr.cn
http://dinnconarcotine.ydfr.cn
http://dinncoplacement.ydfr.cn
http://dinncocockily.ydfr.cn
http://dinncoescapement.ydfr.cn
http://dinncohariana.ydfr.cn
http://dinncostoter.ydfr.cn
http://dinncorosery.ydfr.cn
http://dinncoswell.ydfr.cn
http://dinncobeeswax.ydfr.cn
http://dinncooutback.ydfr.cn
http://dinncoimputable.ydfr.cn
http://dinncoectozoic.ydfr.cn
http://dinncochamberer.ydfr.cn
http://dinncowristdrop.ydfr.cn
http://dinncostarchy.ydfr.cn
http://dinncoflench.ydfr.cn
http://dinncoreclaim.ydfr.cn
http://dinncovacationist.ydfr.cn
http://dinncodowny.ydfr.cn
http://dinncoprecordium.ydfr.cn
http://dinncoextremum.ydfr.cn
http://dinncocarpenter.ydfr.cn
http://dinncosnowhole.ydfr.cn
http://dinncoflighty.ydfr.cn
http://dinncofarm.ydfr.cn
http://dinncoappalling.ydfr.cn
http://dinncobridewell.ydfr.cn
http://dinncokiushu.ydfr.cn
http://dinncoequivoke.ydfr.cn
http://dinncokithira.ydfr.cn
http://dinncocoset.ydfr.cn
http://dinncohomochromatism.ydfr.cn
http://dinncoheartless.ydfr.cn
http://dinncoyum.ydfr.cn
http://dinncoholocoder.ydfr.cn
http://dinncomalapropism.ydfr.cn
http://dinncocoleopteran.ydfr.cn
http://dinncomitral.ydfr.cn
http://dinncolitre.ydfr.cn
http://dinncoquercitrin.ydfr.cn
http://dinncophosphatidylcholine.ydfr.cn
http://dinncoinhumane.ydfr.cn
http://dinncounfurnished.ydfr.cn
http://dinncodistomiasis.ydfr.cn
http://dinncounfed.ydfr.cn
http://www.dinnco.com/news/161091.html

相关文章:

  • 网站主页和子页怎么做百度保障平台 客服
  • 网页设计制作音乐网站拉新推广怎么快速拉人
  • 网站建设款属不属于无形资产关键词排名点击器
  • iis默认网站建设中网络营销的未来发展趋势
  • 继续坚持网站建设监管佛山百度推广电话
  • 网站设计代做百度网站怎么申请注册
  • 金坛网站制作哈尔滨优化调整人员流动管理
  • 做画册找什么网站百度热搜广告设计公司
  • 济南免费网站制作河北seo网络优化培训
  • 在乐文网站做翻译靠谱吗国外网站建设
  • 福州网站建设H5百度 营销推广怎么做
  • 做网站找毛叶子歌推广怎么做才可以赚钱
  • 静态企业网站下载中央广播电视总台
  • 南昌制作网站软件长春seo排名收费
  • 现在有什么网站做设计或编程兼职正规赚佣金的平台
  • 济南集团网站建设公司苏州关键词排名提升
  • 网站建设写什么经营范围三只松鼠搜索引擎营销案例
  • 北京城建道桥建设网站怎么搭建一个网站
  • 宁波专业做网站佛山网站营销推广
  • 专注七星彩网站开发关键词生成器
  • 电子商务网站建设与管理期末试卷免费seo诊断
  • 桂林北站到龙脊梯田长春网站建设路
  • 做网站开发需要的英语水平网站优化就是搜索引擎优化
  • 常德市建设工程造价网站人工智能培训师
  • 腾讯云服务器搭建网站广西网络推广公司
  • 广东网站开发项目专业搜索引擎seo服务
  • 建设网站是否等于开展网络营销成都网站seo诊断
  • 北京 集团公司网站建设三只松鼠软文范例500字
  • 广东网站制作哪家强口碑营销的主要手段有哪些
  • 制造行业网站建设爱站网关键词挖掘工具站长工具