无线控制器对capwap报文的处理方法和系统的制作方法

文档序号:10690936阅读:656来源:国知局
无线控制器对capwap报文的处理方法和系统的制作方法
【专利摘要】本发明涉及一种无线控制器对CAPWAP报文的处理方法和系统,其中,所述方法包括如下步骤:获取无线接入点通过CAPWAP隧道协议向无线控制器发送的CAPWAP报文;利用在网络过滤器接口的本地入口钩子点处注册的第一钩子函数对所述CAPWAP报文进行解封装,得到用户数据报文;调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。通过上述技术方案,本发明的无线控制器对CAPWAP报文的处理方法和系统,极大地降低了对CAPWAP报文的处理难度;同时,在一定程度上提高了CAPWAP报文的处理效率。
【专利说明】
无线控制器对CAPWAP报文的处理方法和系统
技术领域
[0001]本发明涉及无线通信WLAN技术领域,特别是涉及一种无线控制器对CAPWAP报文的处理方法和系统。
【背景技术】
[0002]在WLAN网络通信中,无线控制器(WirelessAccess Point Controller,AC)+无线接入点(The wireless access point,AP)是一种典型的组网方式,AC与AP之间通过CAPWAP(Control And Provis1ning of Wireless Access Points Protocol Specificat1n,无线接入点的控制和配置协议)隧道协议进行通信,具体是:AP将无线终端用户上行IEEE802.11的数据报文转换成IEEE 802.3的数据报文后进行CAPWAP隧道封装,封装完成之后发送给AC,AC对CAPWAP隧道报文解封装后再进行认证、转发等相应的处理;对于用户的下行数据报文,AC需要对该下行数据报文进行封装后通过CAPWAP隧道协议发送给AP,AP再将CAPWAP隧道解封装后,发送给无线终端用户。
[0003]目前对CAPWAP报文的处理方法主要是:在特定的网络处理器上独立开发出整套的协议栈,但是,独立开发出整套的协议栈,不仅开发难度大、开发周期长;而且,维护成本相对较高。再者,现有的Linux内核网络协议栈也不支持CAPWAP隧道协议,使得无法对用户数据进行加、解封装。
[0004]综上所述,现有的CAPWAP报文的处理方法的实施难度较大且成本较高。

【发明内容】

[0005]基于此,有必要针对现有的CAPWAP报文处理方法的实施难度较大的技术问题,提供一种无线控制器对CAPWAP报文的处理方法和系统。
[0006]—种无线控制器对CAPWAP报文的处理方法,包括如下步骤:
[0007]获取无线接入点通过CAPWAP隧道协议向无线控制器发送的CAPWAP报文;
[0008]利用在Linux内核网络过滤器接口的本地入口钩子点处注册的第一钩子函数对所述CAPWAP报文进行解封装,得到用户数据报文;
[0009]调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。
[0010]一种无线控制器对CAPWAP报文的处理系统,包括:
[0011 ]获取模块,用于获取无线接入点通过CAPWAP隧道协议向无线控制器发送的CAPWAP报文;
[0012]解封装模块,用于利用在Linux内核网络过滤器接口的本地入口钩子点处注册的第一钩子函数对所述CAPWAP报文进行解封装,得到用户数据报文;
[0013]处理模块,用于调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。
[0014]上述无线控制器对CAPWAP报文的处理方法和系统,通过利用在Linux内核网络过滤器接口的本地入口钩子点处注册的第一钩子函数对所述CAPWAP报文进行解封装,并调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。通过上述技术方案,实现了基于现有的Linux内核协议栈对用户数据报文进行处理,极大地降低了对CAPWAP数据报文的处理难度,进一步有效地提高了 CAPWAP数据报文的处理效率。
【附图说明】
[0015]图1为本发明的一个实施例的无线控制器对CAPWAP报文的处理方法流程图;
[0016]图2为本发明的另一个实施例的无线控制器对CAPWAP报文的处理方法流程图;
[0017]图3为本发明的另一个实施例的无线控制器对CAPWAP报文的处理方法流程图;
[0018]图4为本发明的另一个实施例的无线控制器对CAPWAP报文的处理方法流程图;
[0019]图5为本发明的另一个实施例的无线控制器对CAPWAP报文的处理方法流程图;
[0020]图6为本发明的一个实施例的无线控制器对CAPWAP报文的处理方法中通过置换网络驱动函数对DHCP回复报文进行处理的方法流程图;
[0021]图7为本发明的一个实施例的无线控制器对CAPWAP报文的处理方法中置换网络驱动函数的方法流程图;
[0022]图8为本发明的一个实施例的无线控制器对CAPWAP报文的处理方法中注册的第一、第二和第三钩子函数的框架图;
[0023]图9为本发明的另一个实施例的无线控制器对CAPWAP报文的处理方法中置换驱动函数的方法示意图;
[0024]图10为本发明的一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图;
[0025]图11为本发明的另一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图;
[0026]图12为本发明的另一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图;
[0027]图13为本发明的另一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图;
[0028]图14为本发明的另一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图;
[0029]图15为本发明的另一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图。
【具体实施方式】
[0030]为了更进一步阐述本发明所采取的技术手段及取得的效果,下面结合附图及较佳实施例,对本发明的技术方案,进行清楚和完整的描述。
[0031]如图1所示,图1为本发明的一个实施例的无线控制器对CAPWAP报文的处理方法流程图,包括如下步骤:
[0032]步骤SlOl:获取无线接入点通过CAPWAP隧道协议向无线控制器发送的CAPWAP报文;
[0033]步骤S102:利用在Linux内核网络过滤器接口的本地入口钩子点处注册的第一钩子函数对所述CAPWAP报文进行解封装,得到用户数据报文;
[0034]在本步骤中,在网络过滤器接口的本地入口钩子点L0CAL_IN处注册第一钩子函数,所述第一钩子函数用来对所述CAPWAP报文进行解封装,其中,第一钩子函数的注册优先级为最高。由于无线接入点将用户数据进行CAPWAP隧道封装后发往无线控制器,CAPWAP隧道外目的IP(Internet Protocol,网络协议)为无线控制器的IP,用户的所有上行报文都会经过L0CAL_IN节点,因此,在L0CAL_IN节点处拦截用户的CAPWAP数据报文并进行解封装。
[0035]步骤S103:调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。
[0036]在本步骤中,通过利用现有的Linux内核协议栈对所述用户数据报文进行处理,避免了现有技术的在特定的专用网络处理器上开发整套协议栈,极大地降低了对CAPWAP数据报文的处理难度。
[0037]上述无线控制器对CAPWAP报文的处理方法,通过利用在Linux内核网络过滤器接口的本地入口钩子点处注册的第一钩子函数对所述CAPWAP报文进行解封装,并调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。通过上述技术方案,实现了基于现有的Linux内核协议栈对用户数据报文进行处理,极大地降低了对CAPWAP报文的处理难度,进一步提高了CAPWAP报文的处理效率;同时,本发明具有开发周期短、成本低、对硬件条件依赖少等优点。
[0038]如图2所示,图2为本发明的另一个实施例的无线控制器对CAPWAP报文的处理方法流程图,在所述对所述CAPWAP报文进行解封装的步骤S102之前,还可以包括:
[0039]步骤S104:判断所述CAPWAP报文的目的端口是否为数据报文端口,若是,则执行步骤S102对所述CAPWAP报文进行解封装;若否,转入步骤S105;
[0040]步骤S105:所述CAPWAP报文进入内核协议栈进行处理。
[0041 ] 在本实施例中,如果所述CAPWAP报文的目的端口为数据报文端口,就对CAPWAP报文进行解封装。在实际应用中,CAPWAP通过UDP(User Datagram Protocol,用户数据报协议)端口5246(控制端口)、5247(数据端口)进行通信。如果CAPWAP报文的目的端口为CAPWAP5247端口,则对用户数据进行解析,即,剥离掉CAPWAP隧道头部,获取隧道内的用户数据报文;再调用内核网络设备接口层数据包接收函数将所述用户数据报文发送内核协议栈,利用无线控制器Linux内核协议栈对所述用户数据报文进行处理。在实际应用中,可以调用内核函数netif_rx将用户数据报文重新放入CPU队列,Linux内核协议栈对用户数据报文继续处理。
[0042]在其中一个实施例中,本发明的无线控制器对CAPWAP报文的处理方法,在所述得到用户数据报文的步骤S102之后,还可以包括:
[0043]步骤S106:判断所述用户数据报文是否为IP报文或者ARP(Address Resolut1nProtocol,地址解析协议)报文,若是,则执行步骤S103;若否,执行步骤S107 ;
[0044]步骤S107:对所述用户数据报文进行丢弃处理。
[0045]在其中一个实施例中,本发明的无线控制器对CAPWAP报文的处理方法,还可以包括:
[0046]若判断所述用户数据报文为IP报文或者ARP报文,则通过调用内核网络设备接口层数据包接收函数将所述用户数据报文重新发送至内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。
[0047]在上述实施例中,通过在网络过滤器接口的本地入口钩子点处注册第一钩子函数,当UDP报文的目的端口为5247时,则认定为用户的隧道报文,继续对该报文进行CAPWAP解析隧道处理;如果解析不成功,则越过此第一钩子函数,继续交给内核协议栈处理。如果解析成功,则继续判断是否是IP报文、ARP报文;如果不是该类报文,则直接丢包,否则将重新调用内核网络设备接口层数据包接收函数,将所述报文送入CPU队列,隧道内用户数据报文重入协议栈,继续对其进行处理。
[0048]如图3所示,图3为本发明的另一个实施例的无线控制器对CAPWAP报文的处理方法流程图,包括如下步骤:
[0049]步骤S201:获取无线控制器本地产生的网络数据报文;
[0050]步骤S202:判断所述网络数据报文的出口是否为CAPWAP用户接口,若是,执行步骤S203 ;若否,转入执行步骤S205 ;
[0051 ]步骤S203:判断所述网络数据报文是否为用户数据报文,若是,执行步骤S205;若否,转入执行步骤S205;
[0052]步骤S204:利用在网络过滤器本地出口钩子点处注册的第二钩子函数对所述用户数据报文进行CAPWAP隧道封装,得到CAPWAP报文。
[0053]步骤S205:利用无线控制器的Linux内核协议栈对所述CAPWAP报文进行处理。
[0054]在本实施例中,通过在网络过滤器本地出口钩子点处注册第二钩子函数,并利用所述第二钩子函数对所述数据报文进行CAPWAP隧道封装,得到CAPWAP报文,当报文的出口为CAPWAP用户接口,则进一步判断是否为用户数据;如果为用户数据报文,则进行CAPWAP封装,进入路由发送后再进入内核协议栈;如果不是用户数据报文,则不封装CAPWAP隧道,直接进入内核协议栈。
[0055]如图4所示,图4为本发明的另一个实施例的无线控制器对CAPWAP报文的处理方法流程图,包括如下步骤:
[0056]步骤S301:获取无线控制器的内核网络过滤器路由转发点的数据报文;
[0057]步骤S302:判断所述数据报文的出口是否为CAPWAP用户接口,若是,执行步骤S303;若否,执行步骤S305;
[0058]步骤S303:判断所述数据报文是否为用户数据报文,若是,执行步骤S304;若否,执行步骤S305;
[0059]步骤S304:利用在网络过滤器路由转发钩子点处注册的第三钩子函数对所述用户数据报文进行CAPWAP隧道封装,得到CAPWAP报文;
[0060]步骤S305:利用无线控制器的Linux内核协议栈对所述CAPWAP报文进行处理。
[0061]在本实施例中,通过利用在网络过滤器路由转发钩子点处注册的第三钩子函数对所述数据报文进行CAPWAP隧道封装,得到CAPWAP报文;再利用无线控制器的Linux内核协议栈对所述CAPWAP报文进行处理。第三钩子函数主要处理外网发送给用户的下行数据报文。当报文的出口为CAPWAP用户接口,则进一步判断是否为用户数据报文;如果为用户数据报文,则进行CAPWAP隧道封装,路由发送后进入内核协议栈。如果不是用户数据报文则不进行CAPWAP封装,直接进入内核协议栈。
[0062]如图5所示,图5为本发明的另一个实施例的无线控制器对CAPWAP报文的处理方法流程图,包括如下步骤:
[0063]步骤S401:获取无线控制器的内核网络过滤器ARP本地出口点的ARP报文;
[0064]步骤S402:判断所述ARP报文是否为发给用户的ARP报文,若是,则执行步骤S403,若否,则执行步骤S404;
[0065]步骤S403:利用在网络过滤器ARP出口钩子点处注册的第四钩子函数对所述ARP报文进行CAPWAP隧道封装,得到CAPWAP报文;
[0066]步骤S404:利用无线控制器的Linux内核协议桟对所述CAPWAP报文进行处理。
[0067]在本实施例中,通过利用在网络过滤器ARP出口钩子点处注册的第四钩子函数对所述ARP报文进行CAPWAP隧道封装,得到CAPWAP报文;再利用无线控制器的Linux内核协议栈对所述CAPWAP报文进行处理。在ARP出口钩子点处截获所有的ARP报文,并查找是否为发送给用户的ARP;查找方法为:ARP为请求报文时查找用户的IP表,当ARP为回复类型时查找用户的MAC表。通过判断确定为发送给用户的ARP报文后,进行CAPWAP封装;否则放行该ARP报文,由内核协议栈自行处理。
[0068]如图6所示,图6为本发明的一个实施例的无线控制器对CAPWAP报文的处理方法中通过置换网络驱动函数对DHCP(Dynamic Host Configurat1n Protocol,动态主机配置协议)回复报文进行处理的方法流程图,包括如下步骤:
[0069]步骤S501:获取用户通过CAPWAP隧道协议向无线控制器发送的DHCP请求报文;
[0070]步骤S502:利用在本地入口钩子点处注册的第一钩子函数对DHCP请求报文解CAPWAP隧道后,重新放入内核协议栈;利用无线控制器的Linux内核协议栈将DHCP请求报文交由DHCPD进程处理;
[0071]步骤S503:通过将原网络驱动函数置换为自定义的网络驱动函数对所述DHCP回复报文进行封装,得到CAPWAP报文;
[0072]步骤S504:利用无线控制器的Linux内核协议栈对所述CAPWAP数据报文进行处理。
[0073]如图7所示,图7为本发明的一个实施例的无线控制器对CAPWAP报文的处理方法中置换网络驱动函数的方法流程图,包括如下步骤:
[0074]步骤S5031:当系统接口配置为CAPWAP接口时,将自定义的网络驱动函数地址替换原网络驱动函数地址;
[0075]步骤S5032:判断接收所述DHCP回复报文的系统接口是否是CAPWAP接口,若是,执行步骤S5033;若否,执行步骤S5034 ;
[0076]步骤S5033:当接收用户数据报文的CAPWAP接口收到所述DHCP回复报文时,通过所述自定义的网络驱动函数对所述DHCP回复报文进行封装;
[0077]步骤S5034:将所述原网络驱动函数地址替换所述自定义的网络驱动函数地址。
[0078]在其中一个实施例中,本发明的无线控制器对CAPWAP报文的处理方法,在所述将自定义的网络驱动函数地址替换原网络驱动函数地址的步骤S5031之前,还包括:
[0079]步骤S5035:获取原网络驱动函数地址并进行保存;
[0080]在上述实施例中,用户的上行DHCP请求报文在本地入口钩子点处解CAPWAP隧道头部后,会重新进入内核协议栈,由内核协议栈将该DHCP请求报文交给DHCPD进程处理;下行数据由于DHCPD进程使用原始套接字直接将DHCP回复报文发送出去,所以采用替换网络驱动函数的方式对回复用户的DHCP报文进行CAPWAP封装。
[0081]如图8所示,图8为本发明的一个实施例的无线控制器对CAPWAP报文的处理方法中注册钩子函数的框架图,无线局域网络上的用户的上行业务数据要经过本地入口钩子点和路由转发钩子点,下行数据要经过路由转发钩子点或本地出口钩子点。那么,在相应的钩子节点注册函数,就可以完成对相应的CAPWAP数据的处理。
[0082]在本地入口钩子点处注册对CAPWAP隧道报文解封装的第一钩子函数,注册优先级为最高。由于无线接入点将用户数据进行CAPWAP隧道封装后发往无线控制器,隧道外目的IP为无线控制器的IP,用户的所有上行报文都会经过本地入口钩子点,在此拦截用户的CAPWAP报文并进行解封装。
[0083]在上述钩子函数中,对隧道报文的主要处理规则为,如果是CAPWAP 5247端口、则进行用户数据解析,剥离掉CAPWAP隧道头部,获取隧道内的用户数据报文,调用内核网络设备接口层数据包接收函数netif_rx将用户数据报文重新放入CPU队列,Linux内核协议桟对用户数据报文继续处理。
[0084]在本地出口钩子点处注册对用户数据封装CAPWAP隧道报文的第二钩子函数,那么,就可以在本地出口钩子点截获无线控制器发送给用户的数据报文,并对报文进行CAPWAP隧道封装。
[0085]在路由转发钩子点处注册对用户数据封装CAPWAP隧道报文的第三钩子函数,那么,就可以在路由转发钩子点处截获外网发送给用户的下行数据报文,并对报文进行CAPWAP隧道封装。
[0086]在ARP出口钩子点处注册对用户ARP数据封装CAPWAP隧道报文的第四钩子函数,那么,就可以在ARP出口钩子点截获无线控制器发送给用户的ARP报文,并对报文进行CAPWAP隧道封装。
[0087]Linux系统中DHCro进程使用原始套接字处理用户的DHCP请求,并使用原始套接字与用户进行通信,并不进入内核Netfilter框架,为解决截获用户DHCP报文、并封装CAPWAP隧道问题,在Linux内核中对接收CAPWAP报文的用户端口做全局标志位,并通过置换网络驱动函数来对用户的DHCP请求进行CAPWAP封装。
[0088]如图9所示,图9为本发明的另一个实施例的无线控制器对CAPWAP报文的处理方法中置换驱动函数的方法示意图,假设eth0.200端口为接收用户数据报文的CAPWAP端口,在内核中用全局变量做标注。假设原hard_start_xmit函数的地址为Oxaabbccddee,在配置端口过程中,首先将hard_start_xmit函数地址保留,以备将来还原此函数。之后将自定义的封装DHCP CAPWAP隧道的驱动函数my_ndo_start_xmit地址赋值给hard_start_xmit,这样当eth0.200端口收到DHCF1D进程发送给用户的DHCP报文时,则会进入my_ndo_start_xmit驱动函数,完成对此报文CAPWAP封装后,发送给AP。当配置eth0.200为非CAPWAP端口时,将原先保留的Oxaabbccddee驱动函数地址重新赋值给hard_start_xmit使该端口网络驱动函数回复原貌。
[0089 ]如图1O所示,图1O为本发明的一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图,包括:
[0090]获取模块101,用于获取无线接入点通过CAPWAP隧道协议向无线控制器发送的CAPWAP 报文;
[0091]解封装模块102,用于在Linux内核网络过滤器接口的本地入口钩子点处注册第一钩子函数,并利用所述第一钩子函数对所述CAPWAP报文进行解封装,得到用户数据报文;
[0092]解封装模块102在网络过滤器接口的本地入口钩子点L0CAL_IN处注册第一钩子函数,所述第一钩子函数用来对所述CAPWAP报文进行解封装,其中,第一钩子函数的注册优先级为最高。由于无线接入点将用户数据进行CAPWAP隧道封装后发往无线控制器,CAPWAP隧道外目的IP为无线控制器的IP,用户的所有上行报文都会经过L0CAL_IN节点,因此,在L0CAL_IN节点处拦截用户的CAPWAP报文并进行解封装。
[0093]处理模块103,用于调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。
[0094]处理模块103通过利用现有的Linux内核协议栈对所述用户数据报文进行处理,避免了现有技术的在特定的专用网络处理器上开发整套协议栈,极大地降低了对CAPWAP报文的处理难度,同时,在一定程度上对CAPWAP报文的处理成本。
[0095]上述无线控制器对CAPWAP报文的处理系统,通过利用解封装模块102在网络过滤器接口的本地入口钩子点处注册的第一钩子函数对所述CAPWAP报文进行解封装,并利用处理模块103调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。通过上述技术方案,实现了基于现有的Linux内核协议栈对用户数据报文进行处理,极大地降低了对CAPWAP报文的处理难度;同时,在一定程度上对CAPWAP报文的处理成本。
[0096]如图11所示,图11为本发明的另一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图,在所述解封装模块102之前,还可以包括:
[0097]第一判断模块104,用于判断所述CAPWAP报文的目的端口是否为数据报文端口,若是,则转入解封装模块102对所述CAPWAP报文进行解封装;
[0098]在所述第一判断模块104之后,还可以包括:
[0099]内核协议栈处理模块105,用于当所述CAPWAP报文的目的端口不是数据报文端口时,将所述CAPWAP报文转入内核协议栈进行处理;
[0100]在所述解封装模块102之后,还可以包括:
[0101]报文类型判断模块106,用于判断所述用户数据报文是否为IP报文或者ARP报文,若是,转入处理模块103通过调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理;若否,转入丢弃模块107。
[0102]丢弃模块107,用于当所述用户数据报文既不是IP报文,也不是ARP报文时,将所述用户数据报文进行丢弃处理。
[0103]在本实施例中,如果所述CAPWAP报文的目的端口为数据报文端口,就对CAPWAP报文进行解封装。在实际应用中,CAPWAP通过UDP端口 5246(控制端口)、5247(数据端口)进行通信。如果CAPWAP数据报文的目的端口为CAPWAP 5247端口,则对用户数据进行解析,即,剥离掉CAPWAP隧道头部,获取隧道内用户数据报文;再调用内核网络设备接口层数据包接收函数将所述用户数据报文重新发送至内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。在实际应用中,可以调用内核网络设备接口层数据包接收函数netif_rX,将用户数据报文重新放入CPU队列,Linux内核协议栈对用户数据报文继续处理。
[0104]在其中一个实施例中,本发明的无线控制器对CAPWAP报文的处理系统,其特征在于,所述处理模块103还可以用于:
[0105]若判断所述用户数据报文为IP报文或者ARP报文,则通过调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。
[0106]在上述实施例中,通过在网络过滤器接口的本地入口钩子点处注册第一钩子函数,当UDP(User Datagram Protocol,用户数据报协议)报文的目的端口为5247时,则认定为用户的隧道报文,继续对该报文进行CAPWAP解隧道处理;如果UDP报文的目的端口为非5247时,则越过此第一钩子函数,继续交给内核协议栈处理。如果解析成功,则继续判断是否是 IP (Internet Protocol,网络之间互连的协议)报文、ARP (Address Resolut1nProtocol,地址解析协议)报文;如果不是该类报文,则直接丢包,否则将重新调用内核网络设备接口层数据包接收函数,将所述报文送入CPU队列,隧道内用户数据报文重入协议栈,继续对其进行处理。
[0107]如图12所示,图12为本发明的另一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图,包括:
[0108]第二获取模块201,用于获取无线控制器本地产生的网络数据报文;
[0109]第二判断模块202,用于判断所述网络数据报文的出口是否为CAPWAP用户接口,若是,则判断所述网络数据报文是否为用户数据报文;
[0110]第二封装模块203,用于当所述网络数据报文为用户数据报文时,利用在网络过滤器本地出口钩子点处注册的第二钩子函数对所述用户数据报文进行CAPWAP隧道封装,得到CAPWAP 报文。
[0111]在本实施例中,通过在网络过滤器本地出口钩子点处注册第二钩子函数,并利用所述第二钩子函数对所述数据报文进行CAPWAP隧道封装,得到CAPWAP报文,当报文的出口为CAPWAP用户接口,则进一步判断是否为用户数据;如果为用户数据,则进行CAPWAP封装,进入路由发送后再进入内核协议栈由处理模块103对所述用户数据报文进行处理;如果不是用户数据报文,则不封装CAPWAP隧道,直接进入内核协议栈。
[0112]如图13所示,图13为本发明的另一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图,包括:
[0113]第三获取模块301,用于获取无线控制器的内核网络过滤器路由转发点的数据报文;
[0114]第三判断模块302,用于判断所述数据报文的出口是否为CAPWAP用户接口,若是,则判断所述数据报文是否为用户数据报文;
[0115]第三封装模块303,用于当所述数据报文为用户数据报文时,利用在网络过滤器路由转发钩子点处注册的第三钩子函数对所述用户数据报文进行CAPWAP隧道封装,得到CAPWAP 报文。
[0116]在本实施例中,通过利用在网络过滤器路由转发钩子点处注册的第三钩子函数对所述用户数据报文进行CAPWAP隧道封装,得到CAPWAP报文,并调用内核网络设备接口层数据包接收函数将所述CAPWAP报文发送至Linux内核协议桟;利用无线控制器的Linux内核协议栈对所述CAPWAP报文进行处理。第三钩子函数主要处理外网发送给用户的下行数据报文。当报文的出口为CAPWAP用户接口,则进一步判断是否为用户数据报文;如果为用户数据报文,则进行CAPWAP隧道封装,路由发送后进入内核协议栈由处理模块103对所述用户数据报文进行处理。如果不是用户数据报文则不进行CAPWAP封装,直接进入内核协议栈。
[0117]如图14所示,图14为本发明的另一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图,包括:
[0118]第四获取模块401,用于获取无线控制器的内核网络过滤器ARP本地出口点的ARP报文;
[0119]第四判断模块402,用于判断所述ARP报文是否为发给用户的ARP报文;
[0120]第四封装模块403,用于当所述ARP报文为发给用户的ARP报文时,利用在网络过滤器ARP出口钩子点处注册的第四钩子函数对所述ARP报文进行CAPWAP隧道封装,得到CAPWAP报文。
[0121]在本实施例中,通过利用在网络过滤器ARP出口钩子点处注册的第四钩子函数对所述ARP报文进行CAPWAP隧道封装,得到CAPWAP报文,并调用内核网络设备接口层数据包接收函数将所述CAPWAP报文发送至Linux内核协议栈由处理模块103对所述CAPWAP报文进行处理;利用无线控制器的Linux内核协议栈对所述CAPWAP报文进行处理。在ARP出口钩子点处截获所有的ARP报文,并查找是否为发送给用户的ARP;查找方法为:ARP为请求报文时查找用户的IP表,当ARP为回复类型时查找用户的MAC表。通过判断确定为发送给用户的ARP报文后,进行CAPWAP封装;否则放行该ARP报文,由内核协议栈自行处理。
[0122]如图15所示,图15为本发明的另一个实施例的无线控制器对CAPWAP报文的处理系统的结构示意图,包括:
[0123]第五获取模块501,用于获取用户通过CAPWAP隧道协议向无线控制器发送的DHCP请求报文;
[0124]发送模块502,用于利用在本地入口钩子点处注册的第一钩子函数对DHCP请求报文解CAPWAP隧道后,重新放入内核协议栈;利用无线控制器的Linux内核协议栈将DHCP请求报文交由DHCPD进程处理;
[0125]第五封装模块503,用于通过将原网络驱动函数置换为自定义的网络驱动函数的方式对无线控制器回复给用户的DHCP回复报文进行封装,得到CAPWAP报文。
[0126]在其中一个实施例中,本发明的无线控制器对CAPWAP报文的处理系统,所述第五封装模块503,还可以用于:
[0127]将自定义的网络驱动函数地址替换原网络驱动函数地址;
[0128]当接收用户数据报文的CAPWAP接口收到所述DHCP回复报文时,通过所述自定义的网络驱动函数对所述DHCP回复报文进行封装。
[0129]在其中一个实施例中,本发明的无线控制器对CAPWAP报文的处理系统,在所述第五封装模块503之后,还可以包括:还原模块504;
[0130]其中,所述还原模块504还可以用于:
[0131]在所述将自定义的网络驱动函数地址替换原网络驱动函数地址之前,获取原网络驱动函数地址并进行保存;
[0132]在所述将自定义的网络驱动函数地址替换原网络驱动函数地址之后,当接收所述DHCP回复报文的不是CAPWAP接口时,将所述原网络驱动函数地址替换所述自定义的网络驱动函数地址。
[0133]在上述实施例中,用户的上行DHCP请求报文在本地入口钩子点处解CAPWAP隧道头部后,会重入内核协议栈,由内核协议栈将该DHCP请求报文交给DHCPD进程处理;下行数据由于DHCPD进程使用原始套接字直接将DHCP回复报文发送出去,所以采用替换网络驱动函数的方式对回复用户的DHCP报文进行CAPWAP封装。
[0134]上述无线控制器对CAPWAP报文的处理方法和系统,通过在Linux内核网络过滤器接口的本地入口钩子点处注册第一钩子函数,在本地出口钩子点处注册第二钩子函数,在转发路由钩子点处注册第三钩子函数,在ARP出口钩子点处注册第四钩子函数,并利用所述钩子函数对相应的报文进行CAPWAP解封装或者封装成CAPWAP报文,并调用内核网络设备接口层数据包接收函数将所述用户数据报文发送至Linux内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。通过上述技术方案,实现了基于现有的Linux内核协议栈对用户数据报文进行处理,极大地降低了对CAPWAP报文的处理难度,同时,在一定程度上对CAPWAP报文的处理成本。
[0135]以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0136]以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
【主权项】
1.一种无线控制器对CAPWAP报文的处理方法,其特征在于,包括如下步骤: 获取无线接入点通过CAPWAP隧道协议向无线控制器发送的CAPWAP报文; 利用在Linux内核网络过滤器接口的本地入口钩子点处注册的第一钩子函数对所述CAPWAP报文进行解封装,得到用户数据报文; 调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。2.根据权利要求1所述的无线控制器对CAPWAP报文的处理方法,其特征在于,在所述对所述CAPWAP报文进行解封装的步骤之前,还包括: 判断所述CAPWAP报文的目的端口是否为数据报文端口,若是,则对所述CAPWAP报文进行解封装。3.根据权利要求1所述的无线控制器对CAPWAP报文的处理方法,其特征在于,在所述得到用户数据报文的步骤之后,还包括: 判断所述用户数据报文是否为IP报文或者ARP报文,若否,则将所述用户数据报文进行丢弃处理。4.根据权利要求3所述的无线控制器对CAPWAP报文的处理方法,其特征在于: 若判断所述用户数据报文为IP报文或者ARP报文,则通过调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。5.根据权利要求1所述的无线控制器对CAPWAP报文的处理方法,其特征在于,还包括如下步骤: 获取无线控制器本地产生的网络数据报文; 判断所述网络数据报文的出口是否为CAPWAP用户接口,若是,判断所述网络数据报文是否为用户数据报文; 若是,则利用在网络过滤器本地出口钩子点处注册的第二钩子函数对所述用户数据报文进行CAPWAP隧道封装,得到CAPWAP报文。6.根据权利要求1所述的无线控制器对CAPWAP报文的处理方法,其特征在于,还包括如下步骤: 获取无线控制器的内核网络过滤器路由转发点的数据报文; 判断所述数据报文的出口是否为CAPWAP用户接口,若是,则判断所述数据报文是否为用户数据报文; 若是,则利用在网络过滤器路由转发钩子点处注册的第三钩子函数对所述用户数据报文进行CAPWAP隧道封装,得到CAPWAP报文。7.根据权利要求1所述的无线控制器对CAPWAP报文的处理方法,其特征在于,还包括如下步骤: 获取无线控制器的内核网络过滤器ARP本地出口点的ARP报文; 判断所述ARP报文是否为发给用户的ARP报文,若是,则利用在网络过滤器ARP出口钩子点处注册的第四钩子函数对所述ARP报文进行CAPWAP隧道封装,得到CAPWAP报文。8.根据权利要求1所述的无线控制器对CAPWAP报文的处理方法,其特征在于,还包括如下步骤: 获取用户通过CAPWAP隧道协议向无线控制器发送的DHCP请求报文; 利用在本地入口钩子点处注册的第一钩子函数对DHCP请求报文解CAPWAP隧道后,重新放入内核协议栈;利用无线控制器的Linux内核协议栈将DHCP请求报文交由DHCPD进程处理; 通过将原网络驱动函数置换为自定义的网络驱动函数的方式对无线控制器回复给用户的DHCP回复报文进行封装,得到CAPWAP报文。9.根据权利要求8所述的无线控制器对CAPWAP报文的处理方法,其特征在于,所述通过将原网络驱动函数置换为自定义的网络驱动函数的方式对无线控制器回复给用户的DHCP回复报文进行封装的步骤包括: 当系统接口配置为CAPWAP接口时,将自定义的网络驱动函数地址替换原网络驱动函数地址; 当接收用户数据报文的CAPWAP接口收到所述DHCP回复报文时,通过所述自定义的网络驱动函数对所述DHCP回复报文进行封装。10.根据权利要求9所述的无线控制器对CAPWAP报文的处理方法,其特征在于,在所述将自定义的网络驱动函数地址替换原网络驱动函数地址的步骤之前,还包括: 获取原网络驱动函数地址并进行保存; 在所述将自定义的网络驱动函数地址替换原网络驱动函数地址的步骤之后,还包括: 当接口配置改为非CAPWAP接口时,将所述原网络驱动函数地址替换所述自定义的网络驱动函数地址。11.一种无线控制器对CAPWAP报文的处理系统,其特征在于,包括: 获取模块,用于获取无线接入点通过CAPWAP隧道协议向无线控制器发送的CAPWAP报文; 解封装模块,用于利用在Linux内核网络过滤器接口的本地入口钩子点处注册的第一钩子函数对所述CAPWAP报文进行解封装,得到用户数据报文; 处理模块,用于调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。12.根据权利要求11所述的无线控制器对CAPWAP报文的处理系统,其特征在于,在所述解封装模块之前,还包括: 第一判断模块,用于判断所述CAPWAP报文的目的端口是否为数据报文端口,若是,转入解封装模块对所述CAPWAP报文进行解封装; 在所述第一判断模块之后,还包括: 内核协议栈处理模块,用于当所述CAPWAP报文的目的端口不是数据报文端口时,将所述CAPWAP报文转入内核协议栈进行处理; 在所述解封装模块之后,还包括: 报文类型判断模块,用于判断所述用户数据报文是否为IP报文或者ARP报文。13.根据权利要求12所述的无线控制器对CAPWAP报文的处理系统,其特征在于,在所述报文类型判断模块之后,还包括: 丢弃模块,用于当所述用户数据报文既不是IP报文,也不是ARP报文时,将所述用户数据报文进行丢弃处理。14.根据权利要求12所述的无线控制器对CAPWAP报文的处理系统,其特征在于,所述处理模块,还用于: 若判断所述用户数据报文为IP报文或者ARP报文,则通过调用内核网络设备接口层数据包接收函数将所述用户数据报文重新放入内核协议栈,利用无线控制器的Linux内核协议栈对所述用户数据报文进行处理。15.根据权利要求11所述的无线控制器对CAPWAP报文的处理系统,其特征在于,还包括: 第二获取模块,用于获取无线控制器本地产生的网络数据报文; 第二判断模块,用于判断所述网络数据报文的出口是否为CAPWAP用户接口,若是,则判断所述网络数据报文是否为用户数据报文; 第二封装模块,用于当所述网络数据报文为用户数据报文时,利用在网络过滤器本地出口钩子点处注册的第二钩子函数对所述用户数据报文进行CAPWAP隧道封装,得到CAPWAP报文。16.根据权利要求11所述的无线控制器对CAPWAP报文的处理系统,其特征在于,还包括: 第三获取模块,用于获取无线控制器的内核网络过滤器路由转发点的数据报文; 第三判断模块,用于判断所述数据报文的出口是否为CAPWAP用户接口,若是,则判断所述数据报文是否为用户数据报文; 第三封装模块,用于当所述数据报文为用户数据报文时,利用在网络过滤器路由转发钩子点处注册的第三钩子函数对所述用户数据报文进行CAPWAP隧道封装,得到CAPWAP报文。17.根据权利要求11所述的无线控制器对CAPWAP报文的处理系统,其特征在于,还包括: 第四获取模块,用于获取无线控制器的内核网络过滤器ARP本地出口点的ARP报文; 第四判断模块,用于判断所述ARP报文是否为发给用户的ARP报文; 第四封装模块,用于当所述ARP报文为发给用户的ARP报文时,利用在网络过滤器ARP出口钩子点处注册的第四钩子函数对所述ARP报文进行CAPWAP隧道封装,得到CAPWAP报文。18.根据权利要求11所述的无线控制器对CAPWAP报文的处理系统,其特征在于,还包括: 第五获取模块,用于获取用户通过CAPWAP隧道协议向无线控制器发送的DHCP请求报文; 发送模块,用于利用在本地入口钩子点处注册的第一钩子函数对DHCP请求报文解CAPWAP隧道后,重新放入内核协议栈;利用无线控制器的Linux内核协议栈将DHCP请求报文交由DHCPD进程处理; 第五封装模块,用于通过将原网络驱动函数置换为自定义的网络驱动函数的方式对无线控制器回复给用户的DHCP回复报文进行封装,得到CAPWAP报文。19.根据权利要求18所述的无线控制器对CAPWAP报文的处理系统,其特征在于,所述第五封装模块,还用于: 当系统接口配置为CAPWAP接口时,将自定义的网络驱动函数地址替换原网络驱动函数地址; 当接收用户数据报文的CAPWAP接口收到所述DHCP回复报文时,通过所述自定义的网络驱动函数对所述DHCP回复报文进行封装。20.根据权利要求19所述的无线控制器对CAPWAP报文的处理系统,其特征在于,在所述第五封装模块之后,还包括:还原模块; 其中,所述还原模块用于: 在所述将自定义的网络驱动函数地址替换原网络驱动函数地址之前,获取原网络驱动函数地址并进行保存; 在所述将自定义的网络驱动函数地址替换原网络驱动函数地址之后,当接收所述DHCP回复报文的不是CAPWAP接口时,将所述原网络驱动函数地址替换所述自定义的网络驱动函数地址。
【文档编号】H04L12/947GK106059885SQ201610431373
【公开日】2016年10月26日
【申请日】2016年6月15日
【发明人】张海泉, 侯天成
【申请人】京信通信系统(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1