一种用户态以太网协议实现无线上网的方法

文档序号:8475636阅读:410来源:国知局
一种用户态以太网协议实现无线上网的方法
【技术领域】
[0001]本发明涉及网络通信技术领域,尤其涉及一种用户态以太网协议实现无线上网的方法。
【背景技术】
[0002]现有Iinux用户态程序支持IEEE802.3协议,因此可以做到对802.3数据流量的处理以及功能的使用,但是用户态程序不支持IEEE802.11等无线协议,也就无法处理802.11无线数据流量,而且因为流程较复杂,移植难度大,用户态程序一般没有进行兼容。
[0003]随着移动终端用户的不断增加,移动互联网的不断发展,无线用户的比重逐年增加,用户态支持无线上网已经是必然考虑的趋势,不支持无线将会无法满足广大用户的需求。
[0004]目前仅有极少部分用户态程序对无线数据流量处理进行了移植,但是由于整体无线流程太多,不同的无线网卡驱动对应不同的自有驱动流程,所以一般只针对特定的无线网卡做特定处理。而用户态移植了特定的无线网卡,虽满足了用户的需求,但是该功能与所支持的无线网卡形成了绑定关系,必然导致其兼容性,扩展性,可维护性不太好。

【发明内容】

[0005]为了解决Iinux用户态程序无法处理802.11数据流量的问题,本发明提出了一种用户态以太网协议实现无线上网的方法,具体方案如下:
一种用户态以太网协议实现无线上网的方法,其特征在于,所述方法包括:
Iinux内核接收到无线网卡发送的802.11协议数据报文后,由Iinux内核从802.11协议数据报文中截取802.3协议数据报文,并将截取到的802.3协议数据报文发送给Iinux用户态程序进行处理;
Iinux用户态程序将处理后的802.3协议数据报文发送给Iinux内核,由Iinux内核将802.3协议数据报文封装为802.11协议数据报文后发送给无线网卡进行转发。
[0006]优选的,所述Iinux内核接收到无线网卡发送的802.11协议数据报文后,由Iinux内核从802.11协议数据报文中截取802.3协议数据报文具体为:
利用ieee80211_deliver_rx函数截取802.3协议数据报文并进行接收。
[0007]优选的,所述并将截取到的802.3协议数据报文发送给Iinux用户态程序具体为:
利用虚拟网络设备tun/tap进行发送。
[0008]优选的,所述Iinux用户态程序将处理后的802.3协议数据报文发送给Iinux内核具体为:
利用虚拟网络设备tun/tap进行发送。
[0009]优选的,所述由Iinux内核将802.3协议数据报文封装为802.11协议数据报文后发送给无线网卡进行转发具体为: 利用ieee80211_subif_start_xmit函数截取802.3协议数据报文并进行发送。
[0010]本发明利用Iinux内核对无线网卡的支持,由内核提取无线数据流量中的相关数据,通过内核与用户态的通信交换相关数据等特性,在用户态实现对无线流程控制以及数据报文处理,实现了 Iinux操作系统中仅支持802.3用户态协议类型的用户态程序可以达到使用无线WIFI上网的目的。
【具体实施方式】
[0011]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他的实施例,都属于本发明保护的范围。
[0012]本发明提供的一种用户态以太网协议实现无线上网的方法,具体方法如下所述: Iinux内核接收到无线网卡发送的802.11协议数据报文后,由Iinux内核从802.11协议数据报文中截取802.3协议数据报文,并将截取到的802.3协议数据报文发送给Iinux用户态程序进行处理;
Iinux用户态程序将处理后的802.3协议数据报文发送给Iinux内核,由Iinux内核将802.3协议数据报文封装为802.11协议数据报文后发送给无线网卡进行转发。
[0013]其中,所述Iinux内核接收到无线网卡发送的802.11协议数据报文后,由Iinux内核从802.11协议数据报文中截取802.3协议数据报文具体为:利用ieee80211_deliver_rx函数截取802.3协议数据报文并进行接收。
[0014]在Iinux内核接收到来自无线网卡的IEEE802.11协议的数据报文后,由于Iinux用户态程序不支持处理IEEE802.11协议的数据报文,仅支持处理IEEE802.3协议的数据报文,因此需要由Iinux内核将IEEE802.11协议的数据报文转化为IEEE802.3协议的数据报文,这里通过利用net/mac80211/rx.c中的ieee80211_deliver_rx函数来截取并接收IEEE802.3协议的数据报文。
[0015]其中,所述并将截取到的802.3协议数据报文发送给Iinux用户态程序具体为:利用虚拟网络设备tun/tap进行发送。
[0016]在Iinux内核截取到的802.3协议的数据报文后,利用虚拟网络设备tun/tap与Iinux用户态进行通信,依靠tun_net_xmit函数即可将截取到的802.3协议的数据报文发送给Iinux用户态程序。
[0017]其中,所述Iinux用户态程序将处理后的802.3协议数据报文发送给Iinux内核具体为:利用虚拟网络设备tun/tap进行发送。
[0018]Iinux用户态程序对处理后的802.3协议数据报文进行发送给Iinux内核同样是利用虚拟网络设备tun/tap与Iinux用户态进行通信,Iinux内核通过tun_get_usr函数接收处理后的802.3协议的数据报文。
[0019]其中,所述由Iinux内核将802.3协议数据报文封装为802.11协议数据报文后发送给无线网卡进行转发具体为:利用ieee80211_subif_start_xmit函数截取802.3协议数据报文并进行发送。
[0020]在Iinux内核接收到来自Iinux用户态程序的IEEE802.3协议的数据报文后,也同样需要由Iinux内核将IEEE802.3协议的数据报文转化为IEEE802.11协议的数据报文,再由无线网卡转发出去,这里通过利用net/mac80211/tx.c中的ieee80211_subif_start_xmit函数来截取并发送IEEE802.3协议的数据报文。
[0021]具体实施例:
首先在硬件中添加无线网卡,在对应的Iinux内核(下述简称内核)配置中打开无线网卡驱动支持,如rtl8188无线网卡,在内核编译menuconfig时开启driver下wireless中对应的rt18188\rt18192项,然后可使内核上支持该无线网卡的无线功能。
[0022]无线网卡的内核驱动会注册网口,这里注册的网口为wlanO,由于无线网卡的报文需要发送到Iinux用户态程序(下述简称用户态)来完成相关业务,所以需要提供给用户态对应的操作网口,那么需要在内核网口注册后,在用户态对应注册同名网口,即wlanO,同时保证内核与用户态对应接口的索引、配置(ip、mac等)一致。
[0023]内核与用户态的报文拷贝通过虚拟网卡tun/tap实现,tun/tap在内核和用户态都有对应的报文的读出和写入,从而实现内核与用户态通信;在用户态注册wlanO对应的tap_wlan,使它们有对应关系,彼此可以互相找到,在tap_wlan0接口上无配置信息,只作为连接内核与用户态的通道。
[0024]配置完成后,wlanO对应的数据报文的接收和发送都会走net/mac80211/rx.c中的 ieee80211_deliver_rx 和 net/mac80211/tx.c 中的 ieee80211_subif_start_xmit,而且在这俩个函数里都可以截取到802.3协议数据报文,调用tun_net_Xmit可将数据报文发送到用户态进行处理。报文到用户态以后可以按照用户态已有的处理流程调试,添加必要的标志位或者处理函数,使其功能正常,这里报文的出接口需指定为wlanO,让其回内核发送或是其他处理。对于用户态处理后返回内核的报文,在tUn_get_Usr收到后,通过在用户态添加的标志,来判断使其直接调用wlanO->netdev_ops->ndo_start_xmit (该钩子挂着wlanO的发送,即ieee80211_subif_start_xmit)发送,或者是让其调用netif_rx_ni在内核协议栈做相应的处理。
[0025]通过内核对无线网卡的支持,使用tap/tun实现内核与用户态通信,在内核中进行无线报文收发和报文协议转换,在用户态实现对无线流程控制以及数据报文处理,从而实现使原本仅支持802.3协议的用户态程序实现802.11无线兼容。
[0026]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明权利要求所限定的范围。
【主权项】
1.一种用户态以太网协议实现无线上网的方法,其特征在于,所述方法包括: Iinux内核接收到无线网卡发送的802.11协议数据报文后,由Iinux内核从802.11协议数据报文中截取802.3协议数据报文,并将截取到的802.3协议数据报文发送给Iinux用户态程序进行处理; Iinux用户态程序将处理后的802.3协议数据报文发送给Iinux内核,由Iinux内核将802.3协议数据报文封装为802.11协议数据报文后发送给无线网卡进行转发。
2.根据权利要求1所述的方法,其特征在于,所述Iinux内核接收到无线网卡发送的802.11协议数据报文后,由Iinux内核从802.11协议数据报文中截取802.3协议数据报文具体为: 利用ieee80211_deliver_rx函数截取802.3协议数据报文并进行接收。
3.根据权利要求1所述的方法,其特征在于,所述并将截取到的802.3协议数据报文发送给Iinux用户态程序具体为: 利用虚拟网络设备tun/tap进行发送。
4.根据权利要求1所述的方法,其特征在于,所述Iinux用户态程序将处理后的802.3协议数据报文发送给Iinux内核具体为: 利用虚拟网络设备tun/tap进行发送。
5.根据权利要求1所述的方法,其特征在于,所述由Iinux内核将802.3协议数据报文封装为802.11协议数据报文后发送给无线网卡进行转发具体为: 利用ieee80211_subif_start_xmit函数截取802.3协议数据报文并进行发送。
【专利摘要】本发明提供一种用户态以太网协议实现无线上网的方法,所述方法包括:linux内核接收到无线网卡发送的802.11协议数据报文后,由linux内核从802.11协议数据报文中截取802.3协议数据报文,并将截取到的802.3协议数据报文发送给linux用户态程序进行处理;linux用户态程序将处理后的802.3协议数据报文发送给linux内核,由linux内核将802.3协议数据报文封装为802.11协议数据报文后发送给无线网卡进行转发。本发明通过内核对无线网卡的支持,使用tap/tun实现内核与用户态通信,在内核中进行无线报文收发和报文协议转换,在用户态实现对无线流程控制以及数据报文处理,从而实现使原本仅支持802.3协议的用户态程序实现802.11无线兼容。
【IPC分类】H04W28-06
【公开号】CN104796943
【申请号】CN201510123317
【发明人】高福亮, 李悦磊
【申请人】北京汉柏科技有限公司
【公开日】2015年7月22日
【申请日】2015年3月20日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1