一种交换机管理网口报文收发实现方法技术

技术编号:32344374 阅读:20 留言:0更新日期:2022-02-20 01:57
本发明专利技术公开了一种交换机管理网口报文收发实现方法,包括:本方案在网卡驱动及自有协议栈之间共享一数据队列,该队列为无锁循环队列,在用户态应用程序和内核态报文处理任务中共享,管理口数据处理和自有协议栈是原有已实现模块,本发明专利技术利用自有协议栈,不再使用kernel协议栈,发送报文时,数据经自有协议栈发送到队列,网卡驱动从队列读取报文通过网卡发送出去,接收报文时,网卡驱动将报文收到报文存到数据队列中,用户态程序从队列中获取报文送到协议栈中处理。文送到协议栈中处理。文送到协议栈中处理。

【技术实现步骤摘要】
一种交换机管理网口报文收发实现方法


[0001]本专利技术涉及通信设备
,尤其涉及一种交换机管理网口报文收发实现方法。

技术介绍

[0002]交换机一般会在业务口之外提供一管理口,该网口与业务口数据隔离,管理员可通过该网口登录交换机进行相关配置。
[0003]目前交换机产品主要是运行在linux环境下,大多数实现方法是在收取报文时通过网卡驱动将网卡上收到的报文送到kernel tcp/ip协议栈,应用态通过socket系统调用获取该报文;发送报文时处理流程相反,应用态通过socket系统发送报文到kernel协议栈,协议栈将报文通过网卡驱动发送出去。
[0004]目前的实现方法比较单一,在用户态通过标准的socket获取数据,协议的处理部分完全交给内核协议栈。而kernel协议栈是基于通用目的实现,对部分协议支持不是很好,且在不同版本的kernel中有些协议实现有细微差别,使得大多数厂商实际使用自身维护的协议栈,业务数据走的就是该协议栈,里面有很多自有功能及管理控制模块。
[0005]管理口数据是走kernel协议栈,有些功能(如限流,报文优先级控制等)需在kernel中实现,导致如果产品升级kernel需要对kernel做修改或打补丁;另外kernel中报文到用户态进行了多次报文拷贝,数据收发的线速也受影响。

技术实现思路

[0006]本专利技术设计开发了一种交换机管理网口报文收发实现方法,本专利技术的专利技术目的是让管理口报文直接收发到自有协议栈中处理,报文可以统一控制和监控;并可以减少收发报文时的报文拷贝,提高传输效率。
[0007]本专利技术提供的技术方案为:
[0008]一种交换机管理网口报文收发实现方法,包括如下步骤:
[0009]步骤1、确定管理口待处理数据;
[0010]步骤2、发送报文,使数据经自有协议栈发送到数据队列,网卡驱动从队列读取报文通过网卡发送出去;
[0011]步骤3、接收报文,使网卡驱动将报文收到报文存到数据队列中,用户态程序从队列中获取报文送到协议栈中处理。
[0012]优选的是,在发送报文时包括如下步骤:
[0013]步骤2.1、发送数据队列存放需通过管理网口向外发送的数据报文,在用户态发送任务和内核态轮询任务间共享;
[0014]步骤2.2、上层应用模块按各自协议标准封装报文,调用协议栈发送接口,按指定ip发送;
[0015]步骤2.3、协议栈模块收到报文,根据目的ip判断,如果从管理口发送,将数据写入
共享发送数据队列,如果不从管理口发送,将数据写入原有业务数据处理模块,封装各层帧头;
[0016]步骤2.4、内核中的发送任务是新增任务,常驻内核态,该任务实时轮询发送数据队列,查询队列是否有数据,如果队列中有数据报文,将数据帧取出,调用网卡驱动发送接口将数据帧发送出。
[0017]优选的是,在接收报文时包括如下步骤:
[0018]步骤3.1、接收数据队列存放需通过管理网口接收的数据报文,在用户态接收任务和内核态接收报文任务间共享;
[0019]步骤3.2、内核中管理口网卡驱动接收报文,驱动模块接收到管理口进来的报文,将报文写入接收数据队列;
[0020]步骤3.3、用户态的接收任务为新增任务,运行在用户态,实时轮询接收数据队列,如果队列中有数据,将数据帧取出,调用自有协议栈报文处理接口,送到协议栈处理;
[0021]步骤3.4、协议栈解析报文,逐层剥离2/3层报文头,根据解析出的报文类型将报文发送到对应业务模块处理。
[0022]优选的是,在所述步骤2.2中,所述上层应用模块为ftp/tftp。
[0023]本专利技术与现有技术相比较所具有的有益效果:
[0024]1、本专利技术方案实施中,无需报文在kernel协议栈中处理,只需修改网卡驱动即可,流量监控及管理部分在自有协议栈中实现;而网卡驱动可作为单独模块编译和加载,使得软件可移植性强,后续升级kernel,无需在kernel中做修改,可平滑升级;
[0025]2、原有socket传输数据方式在内核和用户态,以及网卡驱动到内核协议栈之间都会有报文拷贝,当管理口数据量较大时,导致cpu占用过高,影响系统业务;本方案在内核和用户态之间使用共享队列做数据缓存,减少了报文拷贝,提高了数据处理性能;
[0026]3、本专利技术数据报文不再经内核协议栈到用户态,报文由自有协议栈处理,在用户态和内核态之间共享数据队列(接收和发送队列),用户态和内核态通过该队列交互数据,不再通过socket系统调用。
附图说明
[0027]图1为本专利技术所述的交换机管理网口报文收发实现方法的示意图。
[0028]图2为本专利技术所述的发送报文处理流程图。
[0029]图3为本专利技术所述的接收报文处理流程图。
具体实施方式
[0030]下面结合附图对本专利技术做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
[0031]如图1所示,本专利技术提供一种交换机管理网口报文收发实现方法,具体包括:
[0032]本方案在网卡驱动及自有协议栈之间共享一数据队列,该队列为无锁循环队列,在用户态应用程序和内核态报文处理任务中共享,管理口数据处理和自有协议栈是原有已实现模块,本专利技术利用自有协议栈,不再使用kernel协议栈,发送报文时,数据经自有协议栈发送到队列,网卡驱动从队列读取报文通过网卡发送出去,接收报文时,网卡驱动将报文
收到报文存到数据队列中,用户态程序从队列中获取报文送到协议栈中处理。
[0033]如图2所示,发送报文处理流程包括:
[0034]发送数据队列存放需通过管理网口向外发送的数据报文,在用户态发送任务和内核态轮询任务间共享;
[0035]上层应用模块如ftp/tftp等按各自协议标准封装报文,调用协议栈发送接口,按指定ip发送;
[0036]协议栈模块收到报文,根据目的ip判断是否报文从管理口发送,并封装各层帧头;如果从管理口发送,将数据发写入共享发送数据队列,否则走原有业务数据处理模块;
[0037]内核中的发送任务是新增任务,常驻内核态,该任务实时轮询发送数据队列,查询队列是否有数据,如果队列中有数据报文,将数据帧取出,调用网卡驱动发送接口将数据帧发送出。
[0038]如图3所示,接收报文处理流程包括:
[0039]接收数据队列存放需通过管理网口接收的数据报文,在用户态接收任务和内核态接收报文任务间共享;
[0040]内核中管理口网卡驱动负责接收报文,驱动模块接收到管理口进来的报文,将报文写入接收数据队列;
[0041]用户态的接收任务为新增任务,运行在用户态,实时轮询接收数据队列,如果队列中有数据,将数据帧取出,调用自有协议栈报文处理接口,送到协议栈处理;
[0042]协议栈解析报文,逐层剥离2/3层报文头;再根据解析出的报文类型将报文发送到对应业本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种交换机管理网口报文收发实现方法,其特征在于,包括如下步骤:步骤1、确定管理口待处理数据;步骤2、发送报文,使数据经自有协议栈发送到数据队列,网卡驱动从队列读取报文通过网卡发送出去;步骤3、接收报文,使网卡驱动将报文收到报文存到数据队列中,用户态程序从队列中获取报文送到协议栈中处理。2.如权利要求1所述的交换机管理网口报文收发实现方法,其特征在于,在发送报文时包括如下步骤:步骤2.1、发送数据队列存放需通过管理网口向外发送的数据报文,在用户态发送任务和内核态轮询任务间共享;步骤2.2、上层应用模块按各自协议标准封装报文,调用协议栈发送接口,按指定ip发送;步骤2.3、协议栈模块收到报文,根据目的ip判断,如果从管理口发送,将数据写入共享发送数据队列,如果不从管理口发送,将数据写入原有业务数据处理模块,封装各层帧头;步骤2.4、内核中的发送任务是新增任务,常驻内核态,该任务实时...

【专利技术属性】
技术研发人员:张汇陈超
申请(专利权)人:武汉神州数码云科网络技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1