亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于多系統(tǒng)的WiFi設備復用方法及裝置的制造方法

文檔序號:10654302閱讀:614來源:國知局
一種基于多系統(tǒng)的WiFi設備復用方法及裝置的制造方法
【專利摘要】本發(fā)明提供了一種基于多系統(tǒng)的WiFi設備復用方法及裝置,依據狀態(tài)存儲模塊中所有系統(tǒng)當前狀態(tài),對來自當前系統(tǒng)代理客戶端的操作請求進行仲裁,決定是否執(zhí)行操作;對需要執(zhí)行的操作,執(zhí)行操作;對不需要執(zhí)行的操作,設置偽結果和/或偽消息;實現多個系統(tǒng)的WiFi設備復用。本發(fā)明在基于容器技術的多個系統(tǒng)上,通過事先對來自系統(tǒng)的操作請求進行仲裁,能夠實現多個系統(tǒng)之間的獨立運行,用戶可以在任意一個系統(tǒng)中使用WiFi功能。由于每個系統(tǒng)對應的WiFi配置過濾表相互獨立,使得每個系統(tǒng)對應的WiFi配置信息是相互獨立的,各系統(tǒng)之間做到完全隔離。
【專利說明】
一種基于多系統(tǒng)的WiFi設備復用方法及裝置
技術領域
[0001]本發(fā)明屬于通信設備技術領域,涉及一種嵌入式移動終端,具體涉及一種基于多系統(tǒng)的WiFi設備復用方法及系統(tǒng)?!颈尘凹夹g】
[0002]操作系統(tǒng)(Operat1n System,簡稱0S)是管理和控制計算機硬件(包括移動終端) 與軟件資源的計算機程序,是直接運行在“裸機”上的最基本的系統(tǒng),任何其它軟件都必須在系統(tǒng)的支持下才能運行。操作系統(tǒng)是用戶和計算機的接口,同時也是計算機硬件和其它軟件的接口。
[0003]隨著計算機技術的發(fā)展,為了滿足用戶的多種需求,越來越多的計算機硬件設備能夠同時安裝多個系統(tǒng)。以移動終端為例,隨著容器技術的發(fā)展,能夠實現在一臺移動終端設備上運行多個系統(tǒng)。
[0004]容器是一種輕量級的虛擬化技術,可以很方便地隔離進程和資源,而不需要提供指令解釋機制以及全虛擬化的其它復雜性。通過提供一種創(chuàng)建和進入容器的方式,讓容器內的系統(tǒng)或應用程序就像在獨立的機器上運行一樣,但又能共享很多底層的資源。
[0005]Linux Container(LXC)是當前研究最熱的容器技術之一。以Android系統(tǒng)為例,由于Android系統(tǒng)是一個基于Linux內核的開源移動終端設備系統(tǒng),這使Android系統(tǒng)可以很方便地部署在Linux容器上,比如哥倫比亞大學的Cel Is即是基于Linux容器的Android虛擬化產品。
[0006]對于Cells,通過容器技術在一臺移動終端設備上運行多個Android系統(tǒng)。雖然各個系統(tǒng)之間相互獨立,但是仍然需要共享底層的硬件資源。Cells采用代理的方式,在 An droid系統(tǒng)的HAL層引入虛擬化技術,將HAL層的接口函數進行封裝,作為代理客戶端。這樣當域內的Android系統(tǒng)調用HAL層的原函數調用接口時,首先會進入代理客戶端;然后代理客戶端將調用信息發(fā)給域外的代理服務端,代理服務端收到消息后,對其進行參數解析, 然后調用真實的函數接口;最后代理服務端將真實的執(zhí)行結果通過套接字反饋給域內的代理客戶端。同樣的,也可以通過上述代理方式,使域內的Android系統(tǒng)可以共享根域的唯一的WiFi設備。
[0007]然而,在對此方法的研究和實踐過程中,本發(fā)明的發(fā)明人發(fā)現,上述代理的方式過于簡單,存在至少以下技術缺陷:(1)底層的wpa_supplicant和Android系統(tǒng)上層都各自維護著一個狀態(tài)機,一個容器的操作很容易引起另一個容器的狀態(tài)機崩潰;(2)WiFi所有熱點的配置信息(比如名稱、密碼等)都是底層的wpa_supplicant保存的,Android系統(tǒng)在每次打開WiFi時,都會從wpa_supplicant中獲取所有的配置信息,因此多個Android系統(tǒng)之間的所有熱點連接信息是共享的,即多個Android系統(tǒng)之間無法做到完全隔離。
[0008]由于上述技術缺陷,目前同一移動終端設備上的多個Android系統(tǒng)還不能實現同時共享WiFi設備。
【發(fā)明內容】

[0009]本發(fā)明的目的旨在針對上述現有技術中存在的問題,提供一種基于多系統(tǒng)的WiFi 設備復用方法,通過該方法能夠使多個系統(tǒng)都能正常使用WiFi設備,并且能夠進一步實現多個系統(tǒng)之間WiFi信息相互獨立,做到完全隔離。
[0010]本發(fā)明的另一目的旨在提供一種基于多系統(tǒng)的WiFi設備復用裝置。
[0011]為了達到以上目的,本發(fā)明采用以下技術方案來實現。
[0012]本發(fā)明提供了一種基于多系統(tǒng)的WiFi設備復用方法,其特征在于,應用于基于 Linux容器技術構建的多個系統(tǒng),每個容器內的系統(tǒng)通過創(chuàng)建的虛擬網卡對與容器外部實現數據包在容器內外之間的傳輸;同時通過虛擬網卡與真實網卡之間的源地址轉換,實現數據包在系統(tǒng)與外部設備之間的傳輸;所述WiFi設備復用方法包括以下步驟:
[0013]接收來自當前系統(tǒng)代理客戶端的操作請求;[〇〇14]依據狀態(tài)存儲模塊中所有系統(tǒng)當前狀態(tài),對來自當前系統(tǒng)代理客戶端的操作請求進行仲裁,決定是否執(zhí)行操作;
[0015]對需要執(zhí)行的操作,執(zhí)行操作;
[0016]對不需要執(zhí)行的操作,構造偽結果和/或偽消息;
[0017]將執(zhí)行結果或偽結果發(fā)送給當前系統(tǒng)代理客戶端,將偽消息發(fā)送給當前系統(tǒng)的虛擬WPA客戶端;實現多個系統(tǒng)的WiFi設備復用。
[0018]上述基于多系統(tǒng)的WiFi設備復用方法,狀態(tài)保存模塊用于保存所有系統(tǒng)對應的多種狀態(tài),包括驅動加載標志、守護進程啟動標志、WiFi連接狀態(tài)以及WiFi當前連接信息。
[0019]依據WiFi使用周期,WiFi所處階段包括WiFi設備初始化階段,WiFi使用階段和 WiFi設備終止階段。
[0020]對WiFi設備初始化階段,主要是需要判斷WiFi設備是否已經初始化,如果已經被初始化,則當前系統(tǒng)進行偽初始化操作;如果沒有被初始化,則正常執(zhí)行初始化工作。本發(fā)明中操作請求依次為加載網卡硬件驅動、啟動WiFi守護進程、打開虛擬WPA客戶端、打開WPA 客戶端和啟動消息接收線程;采用的具體實現方式包括以下步驟:
[0021]步驟201,接收來自當前系統(tǒng)代理客戶端的WiFi設備初始化的操作請求;[〇〇22]步驟202,加載網卡硬件驅動;判斷網卡硬件驅動是否被后臺系統(tǒng)加載;如果沒有被加載,則直接加載網卡硬件驅動;如果已經被加載過,則構造加載成功的偽結果;然后將真實操作結果或者偽結果反饋給當前系統(tǒng)代理客戶端;[〇〇23]步驟203,啟動WiFi守護進程;判斷WiFi守護進程是否被后臺系統(tǒng)啟動;如果沒有被啟動,則直接啟動WiFi守護進程;如果已經被啟動,則構造啟動成功的偽結果;然后將真實操作結果或者偽結果反饋給當前系統(tǒng)代理客戶端;[〇〇24] 步驟204,在代理客戶端和代理服務端之間打開一個虛擬WPA客戶端,代替原WPA客戶端接收由代理服務端發(fā)送的消息。[〇〇25]步驟205,打開WPA客戶端;判斷WPA客戶端是否被后臺系統(tǒng)打開;如果沒有被打開, 則直接打開WPA客戶端;如果已經被打開,則構造打開成功的偽結果;然后將真實操作結果或者偽結果反饋給當前系統(tǒng)代理客戶端;WPA客戶端構造在根域,并以WiFi守護進程作為服務端,構造狀態(tài)事件消息通道;
[0026]步驟206,啟動消息接收線程;判斷是否在代理服務端已經啟動了一個消息接收線程,如果沒有,則啟動該線程;如果已經啟動,則構造啟動成功的偽結果;然后將真實操作結果或者偽結果反饋給當前系統(tǒng)代理客戶端。這個消息接收線程將從WPA客戶端中接收由 WiFi守護進程發(fā)送來的所有消息,并對這些消息進行解析處理以及狀態(tài)保存,最后將消息發(fā)送給相應的虛擬WPA客戶端。[〇〇27] WiFi設備初始化后,當前系統(tǒng)WiFi狀態(tài)為斷開狀態(tài)。[〇〇28]對WiFi設備初始化階段,操作請求進一步包括初始化WiFi配置表模塊,具體實現方式進一步包括:[〇〇29] 步驟207,初始化WiFi配置表模塊;WiFi配置表模塊包括WPA配置表和WiFi配置過濾表;WPA配置表為從WiFi守護進程獲取的包含所有WiFi熱點配置信息的配置表;WiFi配置過濾表為包含對應系統(tǒng)的所有WiFi熱點配置信息的配置表;
[0030]WPA配置表初始化,判斷WPA配置表是否被后臺系統(tǒng)初始化;如果沒有被初始化,則獲取WiFi守護進程中所有WiFi熱點配置信息,然后解析獲取的信息獲得WPA配置表,完成對 WPA配置表的初始化,然后初始化WiFi配置過濾表;如果已經被初始化,則直接初始化WiFi 配置過濾表;
[0031]WiFi配置過濾表初始化,打開當前系統(tǒng)在代理服務端對應的WiFi過濾表保存文件,讀取內容,然后根據讀取的內容在WPA配置表中獲取ID信息,完成WiFi配置過濾表初始化。
[0032]對WiFi設備使用階段,所述操作請求根據應用場景設定;此階段,[〇〇33]在執(zhí)行完操作后,與WiFi狀態(tài)相關的,需要更改并保存當前系統(tǒng)的WiFi狀態(tài);[〇〇34]在構造偽結果后,與WiFi狀態(tài)相關的,需要構造偽消息,同時更改并保存當前系統(tǒng)的WiFi狀態(tài)。[〇〇35] 應用場景包括開啟WiF1、連接WiF1、刪除WiF1、關閉WiF1、系統(tǒng)切換。[〇〇36]在WiFi使用階段,針對不同應用場景,WiFi設備復用方法具體為:[〇〇37](1)開啟WiFi,即當用戶打開設置界面的WiFi開啟按鈕時,首先當前系統(tǒng)會發(fā)送一條指令來獲取當前系統(tǒng)所有可用熱點的列表,當前系統(tǒng)再根據這個列表逐一從WiFi守護進程中獲取熱點的詳細信息。因此從WiFi守護進程返回的熱點列表必須在代理服務端經過 WiFi配置過濾表過濾后再返回,這樣可以使多個系統(tǒng)之間WiFi配置信息相互獨立;[〇〇38](2)連接WiFi熱點,接收來自當前系統(tǒng)的建立連接的指令,判斷待連接的WiFi熱點是否是新建立的連接,如果是,則首先需要更新WiFi配置表模塊(包括WPA配置表和WiFi配置過濾表),然后判斷當前準備連接的熱點和后臺系統(tǒng)連接的熱點是否是同一個,如果是, 則當前系統(tǒng)進行偽連接;如果不是,則執(zhí)行真實的連接操作,并斷開后臺系統(tǒng)的連接;最后保存相應的WiFi狀態(tài);[〇〇39](3)刪除WiFi熱點,接收來自當前系統(tǒng)的刪除WiFi熱點的指令,判斷待刪除的WiFi熱點是否是真實連接;如果當前系統(tǒng)刪除的是當前連接的熱點,而且后臺系統(tǒng)連接著同一個熱點,并且后臺是進行的偽連接,則此時不真實執(zhí)行刪除操作,直到后臺系統(tǒng)都斷開連接時,才執(zhí)行真實的刪除操作;否則直接執(zhí)行刪除操作;最后保存相應狀態(tài),并更新WiFi配置表模塊(包括WPA配置表和WiFi配置過濾表);
[0040](4)關閉WiFi熱點,接收來自當前系統(tǒng)的關閉WiFi熱點的指令,判斷待關閉的WiFi熱點是否是真實連接;如果當前系統(tǒng)處于連接狀態(tài),則首先需要判斷后臺系統(tǒng)是否連接著同一個熱點,如果是,則前臺系統(tǒng)進行偽斷開,以保持后臺系統(tǒng)的WiFi繼續(xù)使用,如果不是, 則直接執(zhí)行關閉操作即可;最后保存相應的狀態(tài);
[0041] (5)系統(tǒng)切換,接收來自當前系統(tǒng)的系統(tǒng)切換的指令,判斷待切換的當前系統(tǒng)是否與后臺系統(tǒng)連接了同一個WiFi熱點;如果不是,由于前臺系統(tǒng)連接了一個不同的熱點而導致連接斷開的后臺系統(tǒng)再次切換到前臺時,如果切換后沒有后臺系統(tǒng)處于連接狀態(tài),那么前臺系統(tǒng)自動連接上之前被斷開的熱點;如果切換后有后臺系統(tǒng)處于連接狀態(tài),則自動偽連接上相同的熱點(前提是該容器有相同熱點的配置信息);最后保存相應的狀態(tài);。[〇〇42]對WiFi設備終止階段,當用戶想對當前系統(tǒng)的WiFi進行終止操作時,例如打開飛行模式時,當前系統(tǒng)會做一系列常規(guī)操作來停止WiFi設備的使用,此時需要判斷是否還有其它后臺系統(tǒng)正在使用,如果有,則不真實執(zhí)行操作,進行偽終止操作;如果沒有,則真實執(zhí)行終止WiFi設備的操作,然后清除WiFi配置表(包括WPA配置表和WiFi配置過濾表)的內容, 并保存相應的狀態(tài)。本發(fā)明中操作請求依次為終止WiFi設備、關閉守護進程、關閉WPA客戶端、關閉當前系統(tǒng)對應的WPA虛擬客戶端,退出消息接收線程、卸載網卡硬件驅動、清除WPA 配置表和當前系統(tǒng)的WiFi配置過濾表中所有內容,針對與所有系統(tǒng)相關的操作請求,均需要結合所有系統(tǒng)當前狀態(tài)對操作請求進行仲裁,決定是否執(zhí)行操作。
[0043]本發(fā)明進一步提供了一種基于多系統(tǒng)的WiFi設備復用裝置,應用于基于Linux容器技術構建的多個系統(tǒng),每個容器內的系統(tǒng)通過創(chuàng)建的虛擬網卡對與容器外部實現數據包在容器內外之間的傳輸;同時通過虛擬網卡與真實網卡之間的源地址轉換,實現數據包在系統(tǒng)與外部設備之間的傳輸;該WiFi設備復用裝置包括:
[0044]接收模塊,接收來自當前系統(tǒng)代理客戶端的操作請求;
[0045]仲裁模塊,依據狀態(tài)存儲模塊中所有系統(tǒng)當前狀態(tài),對來自當前系統(tǒng)代理客戶端的操作請求進行仲裁,決定是否執(zhí)行操作;
[0046]執(zhí)行模塊,對需要執(zhí)行的操作,執(zhí)行操作;
[0047]構造模塊,對不需要執(zhí)行的操作,構造偽結果和/或偽消息;[〇〇48]發(fā)送模塊,將執(zhí)行結果或偽結果發(fā)送給當前系統(tǒng)代理客戶端,將偽消息發(fā)送給當前系統(tǒng)的虛擬WPA客戶端。
[0049]上述基于多系統(tǒng)的WiFi設備復用裝置,進一步包括:
[0050]狀態(tài)保存模塊,用于保存所有系統(tǒng)對應的多種狀態(tài),包括驅動加載標志、守護進程啟動標志、WiFi連接狀態(tài)以及WiFi當前連接信息。
[0051]上述基于多系統(tǒng)的WiFi設備復用裝置,進一步包括:[〇〇52] WiFi配置表模塊,用于對WiFi熱點信息進行過濾操作,包括WPA配置表和WiFi配置過濾表;WPA配置表為從WiFi守護進程獲取的包含所有WiFi熱點配置信息的配置表,即所有連接過熱點的信息;WiFi配置過濾表為包含對應系統(tǒng)的所有WiFi熱點配置信息的配置表。 [〇〇53]本發(fā)明提供的基于多系統(tǒng)的WiFi設備復用方法及裝置,具有以下至少一項有益效果:[〇〇54]1、在基于容器技術的多個系統(tǒng)上,通過事先對來自系統(tǒng)的操作請求進行仲裁,能夠實現多個系統(tǒng)之間的獨立運行,用戶可以在任意一個系統(tǒng)中使用WiFi功能;[〇〇55]2、由于每個系統(tǒng)對應的WiFi配置過濾表相互獨立,使得每個系統(tǒng)對應的WiFi配置信息是相互獨立的,各系統(tǒng)之間做到完全隔離;
[0056]3、在根域的代理服務端構造的狀態(tài)保存模塊,將上層系統(tǒng)狀態(tài)機與下層WiFi守護進程狀態(tài)機隔離開,狀態(tài)保存模塊中對應系統(tǒng)的WiFi狀態(tài)與上層系統(tǒng)狀態(tài)機保持一致;而下層WiFi守護進程狀態(tài)機僅與與之真實連接的系統(tǒng)的狀態(tài)一致;從而能夠保證一個容器內系統(tǒng)的操作不會引起另一個容器的狀態(tài)機崩潰;[〇〇57]4、通過構造偽結果和/或偽消息讓容器內的系統(tǒng)在連接WiFi時進行偽連接,可以使多個系統(tǒng)連接上同一個熱點,這樣多個系統(tǒng)就可以同時上網,因此可以實現在同一時刻, 多個系統(tǒng)同時訪問網絡數據?!靖綀D說明】
[0058]為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,以下將對實施例或現有技術描述中所需要使用的附圖作簡單的介紹,顯而易見地,以下描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員而言,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖所示實施例得到其它的實施例及其附圖。[〇〇59]圖1為本實施例的基于多Android系統(tǒng)的WiFi設備復用涉及的框架圖。[〇〇6〇]圖2為本實施例的WiFi配置表模塊原理圖;[0061 ]圖3為本實施例的狀態(tài)保存模塊中各WiFi狀態(tài)轉換關系圖;[〇〇62]圖4為本實施例的基于多Android系統(tǒng)的WiFi設備復用方法的流程圖;
[0063]圖5為本實施例的WiFi設備初始化流程圖;[〇〇64]圖6為本實施例的多Android系統(tǒng)的數據通道圖;[〇〇65]圖7為本實施例的WiFi使用階段操作流程圖;[〇〇66]圖8為本實施例的WiFi設備終止流程圖?!揪唧w實施方式】
[0067]以下將結合附圖對本發(fā)明各實施例的技術方案進行清楚、完整的描述,顯然,所描述實施例僅僅是本發(fā)明的一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動的前提下所得到的所有其它實施例,都屬于本發(fā)明所保護的范圍。[〇〇68]利用容器技術在同一設備上同時運行兩個或多個系統(tǒng),在目前技術中已經得到實現,例如基于Linux內核的容器技術,能夠在同一移動終端(如手機)上同時運行多個 Android系統(tǒng)。而在多個系統(tǒng)中能夠同時共享WiFi設備的技術,目前還沒有較大進展,主要是因為一個容器中系統(tǒng)的操作可能引起另外一個容器中系統(tǒng)的崩潰,另外多個系統(tǒng)之間的熱點配置信息未做到完全獨立。[〇〇69]本發(fā)明針對基于Linux容器技術的多系統(tǒng)進行了相關研究,提供了一種WiFi設備復用方法,解決上述技術問題。為了能夠更容易讓本領域技術人員理解,以下實施例中均采用Android系統(tǒng)(Android系統(tǒng))作為系統(tǒng)進行說明。但其并不構成對本發(fā)明的任何限制。本領域技術人員在本發(fā)明公開的技術內容啟示下,將其應用于基于Linux容器技術的其它系統(tǒng),例如Linux系統(tǒng)、WebOS等。
[0070]如圖1所示,本實施例利用Linux容器技術在同一個移動終端上同時運行兩個Android系統(tǒng)(Androidl和Android2),并采用通用的代理機制對WiFi設備進行復用。在HAL (Hardware Abstract1n Layer)層引入設備虛擬化技術,將HAL層的原函數調用接口封裝為代理客戶端,Android系統(tǒng)的Framework層(構架層)調用HAL層的接口,首先會進入代理客戶端,由代理客戶端將調用信息發(fā)送給根域的代理服務端,然后由代理服務端來執(zhí)行真實的HAL層的調用操作,從而與底層的WiFi守護進程(本實施例中為wpa_SUpplicant進程)進行通信。
[0071]為了便于理解,首先對本實施例涉及的兩個比較重要的模塊進行解釋:WiFi配置表模塊和狀態(tài)保存模塊。[〇〇72] WiFi配置表模塊包括WPA配置表和WiFi配置過濾表;WPA配置表為從WiFi守護進程獲取的包含所有WiFi熱點配置信息的配置表;WiFi配置過濾表為包含對應系統(tǒng)的所有WiFi 熱點配置信息的配置表。[〇〇73]以Android系統(tǒng)為例,WiFi配置表模塊,通過使用如圖2所示的WiFi配置表對WiFi熱點信息進行過濾操作,這樣就可以使多個Andro id系統(tǒng)之間可用熱點相互獨立,各自都有自己的熱點連接信息。WiFi配置表模塊包括WPA(Wi_Fi Protected Access)配置表和WiFi 配置過濾表。WPA配置表里面存儲著所有連接過的熱點的配置信息(與wpa_SUpplicant進程中保存的信息一致),每一條記錄包括熱點名稱(WiFi_name)、wpa_id□的最大下標(max_ num)、以及該熱點在WPA中的id(wpa_id[],這是一個數組,存儲了所有容器中對應該熱點的 id),其中maX_num加1即表示連接過該熱點的容器數(系統(tǒng)數目)。而WiFi配置過濾表里面只存儲對應Andro id系統(tǒng)的熱點的配置信息,每一條記錄包括熱點名稱(WiFi_name)、連接順序(add_num)、以及該熱點連接在wpa_supplicant中的id,連接順序表示了該Android系統(tǒng)對這個熱點建立連接的順序,即對應了 WPA配置表中wpa_i d []的下標。每個過濾表對應一個保存文件,文件里只存儲熱點名稱和連接順序,以供下次初始化WiFi配置過濾表時使用。通過這樣的過濾表在每次從wpa_suppl icant中獲取配置信息時對信息進行過濾,從而使各個容器中的系統(tǒng)都只能看到自己的連接信息。如圖2所示,Android 1和Andro id2過濾表中的信息不相同;WPA配置表中的信息是兩個過濾表信息之和;以wif i_name名稱為Ap_3為例,雖然兩個過濾表中也都有其相關信息,但是其在兩個過濾表中的wpa_id不同,對wpa_ supplicant來說這是兩條相互獨立的記錄;WPA配置表中max_num的數值是Ap_3連接過的系統(tǒng)數目減1。
[0074]狀態(tài)保存模塊用于保存所有系統(tǒng)對應的多種狀態(tài),包括驅動加載標志、守護進程啟動標志、WiFi連接狀態(tài)以及WiFi當前連接信息等。驅動加載標志用來記錄當前系統(tǒng)是否已經加載了驅動;守護進程啟動標志用來記錄當前系統(tǒng)是否已經啟動了WiFi守護進程; WiFi連接狀態(tài)用來記錄當前系統(tǒng)的WiFi狀態(tài),WiFi狀態(tài)包括連接狀態(tài)、斷開狀態(tài)、后臺不可用狀態(tài)、終止狀態(tài);WiFi當前連接信息記錄了當前系統(tǒng)正在使用的熱點的信息,包括名稱、 網卡地址等。[〇〇75]以基于容器技術的的多Android系統(tǒng)為例,狀態(tài)保護模塊位于根域代理服務端中, 進行Andro i d系統(tǒng)相應狀態(tài)保存,包括驅動加載標志(LOADED、UNLOADED )、守護進程啟動標志(START、STOP )、WiFi連接狀態(tài)以及WiFi當前連接信息(熱點名稱、網卡地址、熱點的wpa_ id、真實連接的熱點的wpa_id)。其中WiFi連接狀態(tài)主要用于協調wpa_supplicant狀態(tài)機和多個Andro id上層的狀態(tài)機之間的關系,使多個Andro id上層的狀態(tài)機之間能相互獨立工作。狀態(tài)保存模塊針對每個系統(tǒng)構造有相應的狀態(tài)保存子模塊。在代理服務端的狀態(tài)保存模塊中,WiFi連接狀態(tài)主要有如下六種:[〇〇76] CONNECTED:連接狀態(tài),表示該系統(tǒng)正連接著某個熱點;[〇〇77] DISCONNECTED:斷開狀態(tài),系統(tǒng)未連接網絡,或者系統(tǒng)的WiFi處于關閉狀態(tài);[〇〇78] BACK_D I SABLE:后臺不可用狀態(tài),其所有可用網絡被構造為d i sab 1 ed的狀態(tài)。[〇〇79] CONNECTING:這是一個中間狀態(tài),表示系統(tǒng)正在連接某個熱點的過程;[〇〇8〇] DISCONNECTING:這是一個中間狀態(tài),表示系統(tǒng)正在斷開某個熱點連接的過程;[〇〇811 TERMINATE:終止狀態(tài),表示系統(tǒng)關閉了守護進程,卸載了硬件驅動,此時該容器的 WiFi功能不可用。
[0082] 各WiFi狀態(tài)之間的轉換關系如圖3,其中DISCONNECTED可以與⑶NNECTED、BACK_ DISABLE、TERMINATE 狀態(tài)之間進行相互轉換;但⑶NNECTED、BACK_DISABLE、TERMINATE 狀態(tài)之間不能直接進行相互轉換,必須經轉換成DISCONNECTED狀態(tài),再進行其它狀態(tài)轉換。 CONNECT ING、DISC0NNECTING是DISC0NNECTED與 CONNECTED之間相互轉換的中間過程。[〇〇83]下面結合圖1及圖4,對本實施例提供的基于多Android系統(tǒng)的WiFi設備復用方法進行詳細解釋,該方法主要包括以下步驟:[〇〇84]步驟001,接收來自當前系統(tǒng)代理客戶端的操作請求。
[0085]本步驟中,針對WiFi處在不同的階段(初始化階段、使用階段和終止階段),其涉及的操作請求不同,其表現形式也可能有所不同。在基于Android的系統(tǒng)中,操作請求的具體形式主要為接口調用或者具體的指令。[〇〇86]以WiFi處于使用階段為例,其操作請求可以是連接熱點,而這一個操作的完成,則需要一組操作指令序列構成。[〇〇87]步驟002,依據狀態(tài)存儲模塊中所有系統(tǒng)當前狀態(tài),對來自當前系統(tǒng)代理客戶端的操作請求進行仲裁,決定是否執(zhí)行操作。
[0088]本步驟的目的是對操作請求進行仲裁,確定是否真實執(zhí)行。進行仲裁的判斷依據為存儲在代理服務端狀態(tài)保存模塊中所有系統(tǒng)的當前狀態(tài)。[〇〇89]仲裁對象包括接口調用和指令。接口調用指由代理客戶端發(fā)送給代理服務端的原 HAL層的接口調用。指令指由代理客戶端通過一個接口調用的參數向WiFi守護進程(wpa_ supplicant)發(fā)送的具體指令。通常Android系統(tǒng)完成一個操作(比如連接熱點)需要一組指令序列。這些接口調用和指令在代理服務端接收到時,都需要先根據其執(zhí)行場景進行仲裁判斷,然后根據仲裁結果來決定是否需要真實的執(zhí)行,如果不需要,則做相應的處理并返回偽結果,如果需要,則正常執(zhí)行。
[0090]步驟003,對需要執(zhí)行的操作,執(zhí)行操作。[〇〇91]本步驟的目的是,依據操作請求,執(zhí)行操作。根據具體的操作請求(例如加載網卡驅動、開啟WiF1、連接WiFi等),本領域技術人員可以選用本領域常規(guī)手段來實現。
[0092]步驟004,對不需要執(zhí)行的操作,構造偽結果和/或偽消息;
[0093]步驟005,將執(zhí)行結果或偽結果發(fā)送給當前系統(tǒng)代理客戶端,偽消息發(fā)送給當前系統(tǒng)的虛擬WPA客戶端;實現多個系統(tǒng)的WiFi設備復用。
[0094]步驟004和005的目的是,對于不需要執(zhí)行的操作請求,構造偽結果和/或偽消息, 然后反饋給當前系統(tǒng)代理客戶端;讓當前系統(tǒng)認為已經執(zhí)行操作;從而實現WiFi設備在多個系統(tǒng)的復用,也即多個系統(tǒng)獨立運行。
[0095] 要進一步實現多個Android系統(tǒng)共享WiFi,需要在多個Android系統(tǒng)與wpa_ supplicant進程之間建立傳輸數據包的通道。為了達到該目的,在每個容器內外構建成對的虛擬網卡,每個容器內的Android系統(tǒng)通過創(chuàng)建的虛擬網卡與容器外部實現數據包在容器內外之間的傳輸;同時通過虛擬網卡與真實網卡之間的源地址轉換,實現數據包在系統(tǒng)與外部設備之間的傳輸;進而實現多個Android系統(tǒng)同時共享WiFi設備。[〇〇96]下面結合在WiFi使用周期中WiFi所處不同階段(WiFi設備初始化階段、WiFi使用階段和WiFi設備終止階段)的具體情況,對本發(fā)明提供的WiFi設備復用方法進行詳細的解釋。[〇〇97]上面提到的幾個階段,是在容器已啟動,Android系統(tǒng)和代理服務端初始化,代理客戶端被加載的前提下進行的。由于上述技術可以采用本領域常規(guī)技術來實現,這里就不在詳細闡述。
[0098]此外,在用戶啟動容器階段,還需要建立數據通道(如圖6所示),具體實現方式包括以下步驟:
[0099]步驟101:在容器內外創(chuàng)建匹配的虛擬網卡。
[0100]在這里,在容器剛開始啟動時,使用虛擬網絡設備技術(Veth pair)為每個容器創(chuàng)建一對虛擬網卡〈wlanO, tapx>,這對虛擬網卡是一對假造網卡,從任意一端網卡收到的數據包能夠直接到達另一端網卡。利用這個特性,將虛擬網卡wlanO放置在容器內,tapx放置在容器外,然后為tapx事先分配好IP地址,容器內部的wlanO在連接WiFi熱點時會獲得一個與tapx在同一個網段的IP地址,這樣容器內部walnO的數據就能直接到達容器外部的tapx, 從而保證了數據包在容器內外之間的傳輸。[〇1〇1]步驟102:虛擬網卡與真實網卡之間的源地址轉換。
[0102]在這里,由于tapx和容器內部的wlanO都是使用的本地IP地址,是無法與因特網上的其它主機進行通信的,設備上的所有數據包只能從真實網卡wlanO發(fā)送到外部的其它設備上,因此可以通過NAT技術進行源地址轉換,使用一條SNAT語句將內網段地址綁定到真實網卡wlanO上(即虛擬網卡與真實網卡之間的源地址轉換),使數據包在發(fā)送時,源地址可以自動轉換為真實網卡wlanO的實際IP地址。[〇1〇3]以上方法目的是建立多個Android系統(tǒng)與因特網上的其它主機通信的數據通道。 上述具體實現方式僅是為了便于本領域技術人員便于理解,并不構成對本發(fā)明的任何限定。本領域技術人員可以在上述思想指導下,采用其它實現方式來實現,但其它實現方式也落入本發(fā)明的保護范圍。[〇1〇4] 一、WiFi設備初始化階段[〇1〇5]以Android系統(tǒng)4.3為例,容器內的Android系統(tǒng)啟動過程中,或者從飛行模式恢復到正常模式時,會進入WiFi設備的初始化階段;對于Android系統(tǒng)5.0,則每次打開WiFi時都需要首先對WiFi設備初始化。在Android系統(tǒng)技術進化過程中也可能存在其它情形,但不管怎樣,在初始化階段,WiFi狀態(tài)默認為TERMINATE,待初始化成功后,狀態(tài)轉換為 DISC0NNECTED,如圖3中的轉換關系2。[〇1〇6]下面結合圖5,對WiFi設備初始化階段的WiFi設備復用方案進行說明,包括以下步驟:
[0107]步驟201,接收來自當前系統(tǒng)代理客戶端的WiFi設備初始化的操作請求。
[0108]在這里,操作請求依次為加載網卡的硬件驅動、啟動守護進程、打開虛擬WPA客戶端、打開WPA客戶端和啟動消息接收線程。
[0109]步驟202,加載網卡硬件驅動;根據狀態(tài)保存模塊中的驅動加載標志判斷網卡硬件驅動是否被后臺系統(tǒng)加載;如果沒有被加載,則直接加載網卡硬件驅動;如果已經被加載過,則構造加載成功的偽結果;然后將真實操作結果或者偽結果反饋給當前系統(tǒng)代理客戶端,并置對應的驅動加載標志為LOADED。
[0110]在這里,首先會加載網卡的硬件驅動,此時,代理服務端需要先判斷是否有其它 Android系統(tǒng)(后臺Android系統(tǒng))已經加載過驅動;如果沒有,則直接加載驅動,加載成功后,將加載成功的操作結果發(fā)送給當前Android系統(tǒng)代理客戶端;而如果硬件驅動已經被其它Android系統(tǒng)成功加載,則此時代理服務端不需要真實執(zhí)行加載操作,只需構造加載成功的偽結果,并將其發(fā)送給當前Android系統(tǒng)代理客戶端。由于加載驅動,對本領域技術人員來講是個常規(guī)操作,這里就不再詳細描述。下面還會涉及類似的常規(guī)操作,比如啟動守護進程、打開一個域套接字、開啟WiFi的真實執(zhí)行操作、關閉WiFi的真實執(zhí)行操作等,均不再進行詳細描述。
[0111]步驟203,啟動WiFi守護進程;根據狀態(tài)保存模塊中的守護進程啟動標志判斷WiFi 守護進程是否被后臺系統(tǒng)啟動;如果沒有被啟動,則直接啟動WiFi守護進程;如果已經被啟動,則構造啟動成功的偽結果;然后將真實操作結果或者偽結果反饋給當前系統(tǒng)代理客戶端,并置對應的守護進程啟動標志為START。[〇112] 在這里,加載完硬件驅動后,下一步是啟動wpa_suppl icant守護進程,wpa_ supplicant守護進程有且只能有一個,因此,代理服務端同樣需要先判斷是否有其它 Android系統(tǒng)已經啟動了這個守護進程,如果沒有,則直接啟動該進程,將啟動成功的操作結果發(fā)送給當前Android系統(tǒng)代理客戶端;而如果該進程已經被其它Android系統(tǒng)成功啟動,則此時代理服務端不需要真實執(zhí)行啟動wpa_supplicant守護進程的操作,構造加載成功的偽結果,并將其發(fā)送給當前Android系統(tǒng)代理客戶端。
[0113] 步驟204,在代理客戶端和代理服務端之間打開一個虛擬WPA客戶端,代替原WPA客戶端接收由代理服務端發(fā)送的消息。[〇114]在這里,原Android系統(tǒng)在WiFi的使用周期中,會通過一個接口調用循環(huán)讀取原 WPA客戶端的消息,S卩wpa_supplicant發(fā)送給上層的消息。在本實施例的多Android系統(tǒng)中, 每個系統(tǒng)各自打開一個虛擬的WPA客戶端,其服務端都為WiFi代理服務端。
[0115]步驟205,打開WPA客戶端;判斷WPA客戶端是否被后臺系統(tǒng)打開;如果沒有被打開, 則直接打開WPA客戶端;如果已經被打開,則構造打開成功的偽結果;然后將真實操作結果或者偽結果反饋給當前系統(tǒng)代理客戶端;WPA客戶端構造在根域,并以WiFi守護進程作為服務端,構造狀態(tài)事件消息通道;[〇116] 在這里,成功啟動wpa_suppl icant進程后,當前Android系統(tǒng)會在根域打開一個域套接字作為WPA客戶端,其服務端為wpa_supplicant進程,wpa_supplicant就是通過這個套接字向上層發(fā)送狀態(tài)事件等消息。在本實施例的多An droid平臺上,這個wpa客戶端只能有一個,由代理服務端的消息接收線程來接收這個客戶端的所有消息,然后對接收到的全部消息進行分析,最后分發(fā)給對應的An dr 〇 i d系統(tǒng)的虛擬WPA客戶端。因此在打開wpa客戶端時,代理服務端同樣需要檢查WPA客戶端是否已經被其它Android系統(tǒng)打開,如果沒有,再執(zhí)行真實的打開操作,將打開成功的操作結果發(fā)送給當前Android系統(tǒng)代理客戶端;如果已經被打開,則直接構造打開成功的偽結果,并將其發(fā)送給當前Android系統(tǒng)代理客戶端。[〇117]步驟206,啟動消息接收線程;判斷是否在代理服務端已經啟動了一個消息接收線程,如果沒有,則啟動該線程;如果已經啟動,則構造啟動成功的偽結果;然后將真實操作結果或者偽結果反饋給當前系統(tǒng)代理客戶端。
[0118]在這里,成功打開WPA客戶端后,需要啟動一個消息接收線程,這個線程將從WPA客戶端中循環(huán)讀取消息,然后解析消息,保存相應的狀態(tài),最后將消息發(fā)送對應的虛擬WPA客戶端,Android系統(tǒng)則從自己的虛擬WPA客戶端中接收到這些消息。
[0119]至此,WiFi設備已經初始化完畢,但是根據WiFi配置表模塊可知,為了使多個 Android平臺之間WiFi配置信息相互獨立,最后還需要初始化WiFi配置表,即操作請求進一步包括初始化WiFi配置表模塊,因此此階段進一步包括:[〇12〇] 步驟207,初始化WiFi配置表模塊,包括初始化WPA配置表和WiFi配置過濾表;WPA 配置表初始化,判斷WPA配置表是否被后臺系統(tǒng)初始化;如果沒有被初始化,則獲取WiFi守護進程中所有WiFi熱點配置信息,然后解析獲取的信息獲得WPA配置表,完成對WPA配置表的初始化,然后初始化WiFi配置過濾表;如果已經被初始化,則直接初始化WiFi配置過濾表;WiFi配置過濾表初始化,打開當前系統(tǒng)在代理服務端對應的WiFi過濾表保存文件,讀取內容,然后根據讀取的內容在WPA配置表中獲取ID信息,完成WiFi配置過濾表初始化。[〇121]在這里,首先檢查WPA配置表是否已經初始化,如果已經初始化,則直接開始初始化當前Android系統(tǒng)的WiFi配置過濾表。如果沒有,則通過執(zhí)行一次“LIST_NETW0RKS”指令來獲取wpa_SUpplicant中的所有熱點配置信息,然后解析這些信息,對WPA配置表進行初始化;然后開始初始化WiFi配置過濾表;打開每個Android系統(tǒng)對應的WiFi過濾表保存文件, 逐行讀取里面的內容,然后根據讀取到的WiFi名稱(WiFi_name)和連接順序(add_num)從 wpa配置表中找到對應的wpa_id,并將該條記錄加入WiFi配置過濾表中,繼續(xù)讀取文件內容,完成整個配置表的初始化過程。
[0122]二、WiFi使用階段
[0123]當前Android系統(tǒng)啟動成功后,用戶便可以使用WiFi功能。在WiFi設備使用階段, 又分為不同的應用場景,例如開啟WiF1、連接WiF1、刪除WiF1、關閉WiF1、系統(tǒng)切換。雖然應用場景有多種,但WiFi設備復用過程存在很多相似之處,如圖7所示,概括講,本實施例中此階段WiFi設備復用方法包括以下步驟:
[0124]S1,接收來自當前系統(tǒng)代理客戶端的操作請求。
[0125]在這里操作請求可以根據應用場景設定。目前,操作請求主要包括來自開啟WiF1、 連接WiF1、刪除WiF1、關閉WiF1、系統(tǒng)切換等應用場景的具體指令操作。
[0126]S2,依據所有系統(tǒng)狀態(tài),對應用場景進行分析,根據分析結果決定是否需要執(zhí)行操作請求,若執(zhí)行,進入步驟S3;不執(zhí)行,進入步驟S5;
[0127]S3,真實執(zhí)行操作請求,然后進入步驟S4;
[0128]S4,依據操作結果,判斷當前系統(tǒng)對應的WiFi狀態(tài)是否需要更改,若需要,更改并保存WiFi狀態(tài),然后進入步驟S8;
[0129]本步驟中的操作結果一般分為操作成功和操作不成功兩類;若操作成功,還要看當前操作是否與WiFi狀態(tài)有關,若與WiFi狀態(tài)有關,則WiFi狀態(tài)需要更改。若操作不成功或者當前操作與WiFi無關,WiFi狀態(tài)不需要更改。
[0130]S5,依據操作請求,構造偽結果;
[0131]S6,依據構造的偽結果,判斷是否需要返回偽消息,若需要,構造WiFi設備偽消息;
[0132]本步驟主要是針與WiFi狀態(tài)有關的狀態(tài)事件。本步驟的解釋跟步驟S4的相類似, 偽結果一般分為操作成功和操作不成功兩類;若偽結果為操作成功,還要看當前構造的偽操作是否與WiFi狀態(tài)有關,若與WiFi狀態(tài)有關,需要構造相應的偽消息。
[0133]S7,依據構造的偽結果,判斷當前系統(tǒng)對應的WiFi狀態(tài)是否需要更改,若需要,更改并保存WiFi狀態(tài),然后進入步驟S8;
[0134]若與WiFi狀態(tài)有關,則WiFi狀態(tài)需要更改。若偽操作構造為操作不成功或者當前操作與WiFi無關,WiFi狀態(tài)不需要更改。
[0135]S8,將執(zhí)行結果或者偽結果發(fā)送給代理客戶端,將偽消息發(fā)送給虛擬的WPA客戶端。
[0136]不管是否真正執(zhí)行操作請求,涉及到WiFi狀態(tài)需要更改的,均需要將更改后的 WiFi狀態(tài)進行保存。
[0137] 然而,針對不同的應用場景,具體操作流程又不完全一致,下面以幾個典型的應用場景分別進行說明。
[0138]1、開啟 WiFi
[0139]當應用場景為開啟WiFi,用戶打開WiFi開啟按鈕時,在代理服務端執(zhí)行“LIST_ NETWORKS”指令成功后,需要對從wpa_suppli cant進程反饋的結果進行過濾,具體步驟包括:
[0140]步驟301,接收來自當前Android系統(tǒng)代理客戶端開啟WiFi的操作請求。
[0141]步驟302,執(zhí)行開啟WiFi的操作請求,從WiFi守護進程獲取所有WiFi熱點配置信息。
[0142]在這里即執(zhí)行“LI ST_NETW0RKS”指令。
[0143]步驟303,解析所獲取的信息,根據每個WiFi熱點的ID信息在與當前Android系統(tǒng)對應的WiFi配置過濾表中進行查找。
[0144]在這里,逐行解析“LIST_NETW0RKS”指令的返回結果,根據每個熱點的wpa_id在與 Android系統(tǒng)對應的WiFi配置過濾表中進行查找,如果找到,則說明該熱點屬于這個 Andro i d系統(tǒng),如果沒有找到,則說明這個熱點的連接是由其它Andro i d系統(tǒng)建立的,不屬于當前Android系統(tǒng)。
[0145]步驟304,解析完畢后,將所有屬于當前系統(tǒng)的熱點重新排列,組成一個新的WiFi 熱點列表,并將其發(fā)送給Android系統(tǒng)。
[0146]在這里,對指令執(zhí)行結果逐行解析完畢后,需要重組這個執(zhí)行結果,將所有屬于這個Andro i d系統(tǒng)的WiFi熱點重新排列,組成一個新的熱點列表,將這個新的列表發(fā)送給對應的Android系統(tǒng),然后Android系統(tǒng)就會根據這個重組的列表從wpa_supplicant中獲取熱點的詳細信息,從而完成了過濾功能,使每個容器看到的熱點信息相互獨立。
[0147]2、連接 WiFi
[0148]用戶在連接WiFi時,主要需要考慮到前后臺的連接狀況。在熱點的連接過程中,狀態(tài)經由CONNECTING最后轉為CONNECTED,如圖3中的轉換關系3,連接過程的具體步驟包括:
[0149]步驟401,接收來自當前系統(tǒng)代理客戶端的連接WiFi的操作請求;判斷是否是第一次連接該熱點,若是,則更新代理服務端中的WPA配置表和當前系統(tǒng)的WiFi過濾表,然后進入步驟402;若不是,則直接進入步驟403;[〇15〇]在這里,當前Android系統(tǒng)查詢周圍可用熱點。用戶在連接某個熱點時,首先置狀態(tài)為CONNECTING,然后判斷是否是第一次連接該熱點。這里所說的第一次連接,是針對當前 Android系統(tǒng)而言。如果是新建立的連接,則在代理服務端中首先要將這個新的熱點連接加入到WPA配置表和Android系統(tǒng)對應的過濾表中。WPA配置表的添加首先需要查找是否已有相同熱點,如果有,貝U直接在對應記錄的wpa_i d中保存這個熱點的i d,然后max_num加1;如果沒有,則在WPA配置表中新建一條記錄,保存這個熱點的信息;當前Android系統(tǒng)對應的過濾表的添加則直接新建一條記錄即可,里面保存這個熱點的信息,最后更新這個過濾表對應的保存文件,
[0151]步驟402,根據所有系統(tǒng)的WiFi狀態(tài),判斷代理服務端中后臺是否有系統(tǒng)處于連接狀態(tài),若是有進入步驟403;若是沒有,進入步驟405。[〇152] 在這里,在新建立的連接建立好或者Android從wpa_suppli cant中獲得了這個熱點的信息后,會通過執(zhí)行“SELECT_NETW0RK”指令或“RECONNECT”等指令來讓wpa_ supplicant真實連接這個熱點。此時需要判斷后臺Android系統(tǒng)的連接狀態(tài),如果后臺有 Android系統(tǒng)處于CONNECTED狀態(tài),則進入步驟403,如果沒有,則進入步驟405。[〇153]步驟40 3,判斷代理服務端中后臺系統(tǒng)連接的熱點與當前系統(tǒng)連接的熱點是否是同一個熱點,如果是,則進入步驟406;若不是同一個熱點,進入步驟404。
[0154]在這里,可以通過查詢后臺系統(tǒng)WiFi當前連接信息,比對WiFi名稱是否與當前系統(tǒng)待連接的WiFi熱點名稱相同;若相同,則是同一個熱點;若不同,則不是同一個熱點。
[0155]上述并不是用來判斷同一熱點的唯一方法,例如,也可以通過比對當前系統(tǒng)的 WiFi配置過濾表和后臺系統(tǒng)的WiFi配置過濾表的方法來判斷;或者是否WiFi狀態(tài)均為連接狀態(tài)等。本領域技術人員可以根據應用場景選擇最為合適的方式。
[0156]步驟404,斷開后臺系統(tǒng)與其它熱點的連接;然后進入步驟405。
[0157]該步驟進一步包括以下分步驟:
[0158]步驟4041,向所有處于連接狀態(tài)的后臺系統(tǒng)的虛擬WPA客戶端發(fā)送斷開連接的偽消息。[〇159]在這里,當前Android系統(tǒng)與后臺Android連接的不是同一個熱點的時候,為了方便用戶的使用,優(yōu)先保證前臺Android系統(tǒng)的連接,因此需要斷開所有后臺Android系統(tǒng)的連接。首先給所有處于CONNECTED狀態(tài)的后臺Andro id系統(tǒng)發(fā)送斷開連接的偽消息,接著將其狀態(tài)置為DISC0NNECTED。
[0160]此外,雖然處于DISC0NNECTED,不影響當前Android系統(tǒng)連接熱點,但由于后臺 Android系統(tǒng)WiFi狀態(tài)是偽斷開,很容易被重新連接,狀態(tài)很不穩(wěn)定。比較好的方式是關閉后臺Android系統(tǒng)的熱點,將后臺Android系統(tǒng)的狀態(tài)轉換為BACK_DISABLE。
[0161]因此,步驟404進一步包括分步驟:
[0162] 步驟4042,將后臺Android系統(tǒng)的可用熱點全部置為不可用,并將代理服務端中后臺系統(tǒng)WiFi狀態(tài)構造為處于后臺狀態(tài)。
[0163]在這里,通過“DISABLE_NETWORK”指令將所有后臺Android系統(tǒng)的可用熱點全部置為disabled狀態(tài),以防止其影響前臺容器的工作,最后置相應后臺Android系統(tǒng)的狀態(tài)為 BACK_DISABLE,狀態(tài)轉換如圖3中的轉換關系5。
[0164]步驟405,對當前系統(tǒng)真實執(zhí)行連接WiFi熱點操作,并獲取外部IP地址和本地IP地址。[〇165]在這里,當前Android系統(tǒng)真實執(zhí)行連接操作,代理服務端會接收到一條連接成功的事件消息,此時,首先啟動一個dhcp客戶端為根域的wlanO網卡獲取外部IP等信息,然后根據獲取到的信息中的DNS地址再啟動一個dhcp服務器,這個服務器用于給域內的虛擬網卡wlanO提供本地IP地址,啟動成功后進入步驟407。
[0166]步驟406,構造執(zhí)行成功的偽結果,同時構造連接成功的偽消息。
[0167]在這里,由于連接WiFi事件與WiFi狀態(tài)有關,需要根據相關信息構造偽消息;具體為,通過后臺系統(tǒng)的狀態(tài)保存模塊中的WiFi連接信息以及相同熱點在當前系統(tǒng)的WiFi配置過濾表中的id來構造連接成功的偽消息;并將熱點名稱以及網卡地址等保存到當前容器的狀態(tài)保存模塊中。其中wif i連接信息中記錄的當前連接的熱點id與記錄的真實連接熱點id 不同,當前連接的熱點i d為這個熱點在當前系統(tǒng)的wif i配置過濾表中的id,而真實連接熱點的id為此時后臺真實連接熱點的id,也就是說,如果在狀態(tài)保存模塊的wifi連接信息中這兩個id不同,則表明當前系統(tǒng)進行的是偽連接。
[0168]步驟407,保存當前系統(tǒng)WiFi狀態(tài),并將執(zhí)行結果或者偽結果發(fā)送給當前系統(tǒng)的代理客戶端,然后將偽消息發(fā)送給當前系統(tǒng)的虛擬WPA客戶端。
[0169]在這里,如果是真實連接,熱點連接成功后,在代理服務端會收到一條連接成功的狀態(tài)消息,這條消息中包括熱點名稱,熱點的網卡硬件地址,以及熱點的wpa_id,解析這條消息,在狀態(tài)保存模塊的WiFi連接信息中記錄這些信息,其中當前連接熱點的id與真實連接熱點的id相同。這些信息主要用于在后續(xù)的操作中進行仲裁判斷(例如是偽連接、偽斷開、真實連接、真實斷開等)或者發(fā)送偽消息,最后將當前Android系統(tǒng)的連接狀態(tài)置為 CONNECTED。
[0170]3、刪除 WiFi[〇171]用戶清除某個熱點時,在代理服務端需要處理的步驟包括:[〇172]步驟501,接收來自當前系統(tǒng)的刪除WiFi的操作請求。[〇173]步驟502,根據所有系統(tǒng)的WiFi狀態(tài),判斷待刪除的WiFi熱點是否是當前連接的熱點,若是,進入步驟503;若不是,則直接執(zhí)行刪除指令,然后進入步驟505。[〇174] 在這里,用戶在前臺Android系統(tǒng)點擊清除按鈕,將清除wpa_supplicant中這個熱點的所有配置信息,Android系統(tǒng)主要通過執(zhí)行“REM0VE_NETW0RK”指令來完成這個操作,當代理服務端接收到從代理客戶端發(fā)送的這個指令時,首先根據之前保存的WiFi狀態(tài)和WiFi 當前連接信息,判斷準備刪除的這個熱點是否是當前連接正在使用的熱點,如果是,進入步驟503,如果不是,則直接執(zhí)行刪除指令“REM0VE_NETW0RK”,然后進入步驟505。
[0175]步驟503,判斷待刪除的熱點是進行的偽連接還是真實連接,如果是偽連接,則構造刪除成功的偽結果和斷開連接的偽消息,然后進入步驟505;若不是偽連接進入步驟504。 [〇176]在這里,依據保存的WiFi連接信息中當前熱點的id和記錄的真實連接熱點id是否相同,判斷當前正在使用的熱點是進行的偽連接還是真實連接,如果不同,則為偽連接,則表示底層的wpa_supplicant實際上連接的是這個熱點的另一條記錄,是由后臺的某個 Andro i d系統(tǒng)建立的連接,此時可以直接執(zhí)行刪除指令。該刪除操作不會影響后臺的連接, 由于當前Android系統(tǒng)是偽連接,執(zhí)行刪除指令并不會產生斷開連接的事件消息,所以還需要向當前Andro i d系統(tǒng)的虛擬WPA客戶端發(fā)送斷開連接的偽消息,并將當前Andro i d系統(tǒng)的狀態(tài)置為“DISCONNECTED”,最后進入步驟505,而如果當前Android系統(tǒng)是真實連接,則進入步驟504;
[0177]步驟504,判斷是否還有后臺系統(tǒng)處于連接狀態(tài),若沒有,則直接執(zhí)行刪除命令,然后進入步驟505;若有,則構造刪除成功的偽結果和斷開連接的偽消息,然后進入步驟505。 [〇178]在這里,當前Android系統(tǒng)是真實連接,則需要查找后臺是否還有其它Android系統(tǒng)處于⑶NNECTED狀態(tài),即查找后臺是否有Android系統(tǒng)對這個熱點建立了偽連接,如果沒有,則直接執(zhí)行刪除指令“REM0VE_NETW0RK”,然后進入步驟505,而如果后臺有Android系統(tǒng)處于連接狀態(tài),則需要進一步考慮。因為“REM0VE_NETW0RK”指令會斷開wpa的真實連接,所以執(zhí)行這個指令會影響后臺的偽連接,導致后臺Android系統(tǒng)WiFi不可用,因此,在這種情況下,不能真實執(zhí)行這條指令,直接構造執(zhí)行成功的偽結果即可。由于未真實執(zhí)行刪除指令,相應地也不會產生斷開連接的事件消息,因此還需要構造斷開連接的偽消息。并將偽結果發(fā)送給當前Andro i d系統(tǒng)的代理客戶端,然后將偽消息發(fā)送給當前Andro i d的虛擬WPA客戶端。最后將當前Android系統(tǒng)的狀態(tài)置為DISCONNECTED,然后進入步驟505;
[0179]步驟505,更新WPA配置表和WiFi配置過濾表。
[0180]在這里不管指令“REM0VE_NETW0RK”是真實執(zhí)行還是偽執(zhí)行,待刪除的這個熱點對上層的Android系統(tǒng)來說已經成功刪除了,因此需要更新WPA配置表和過濾表。WPA配置表的刪除直接在該熱點對應記錄的wpa_i d中清除這個熱點的i d,然后max_num減1,如果這是該熱點的最后一條記錄,則刪除這個熱點的整條記錄;過濾表的更新比較復雜,主要包括當前 Andro i d系統(tǒng)的過濾表更新、后臺Andro i d系統(tǒng)的過濾表更新和未啟動Andro i d系統(tǒng)的過濾表保存文件更新:
[0181](1)當前Android系統(tǒng)對應的過濾表的刪除直接刪除這個熱點對應的記錄即可,然后更新這個過濾表對應的保存文件;[〇182](2)如果當前Android系統(tǒng)刪除的這個熱點的連接順序在后臺Android系統(tǒng)之前,那么刪除了這個熱點后,后臺Android系統(tǒng)相同熱點的連接順序需要前移一個,所以需要逐個查找所有后臺Android系統(tǒng)的過濾表,如果有這個相同熱點的信息,且其連接順序在當前 An droid系統(tǒng)之后,則需要更新這個后臺Android系統(tǒng)的過濾表,并重新保存對應的過濾表保存文件;
[0183](3)針對未啟動的Android系統(tǒng),不需要考慮其過濾表,直接查找其過濾表保存文件,和上面一樣,如果有相同熱點的信息,且其保存的連接順序是在當前Android系統(tǒng)之后, 則更新該文件的內容,這樣這個容器的Android系統(tǒng)在下次啟動時,才能正確地初始化過濾表。
[0184]刪除操作還進一步需要考慮,如果刪除指令是進行的偽執(zhí)行,雖然WiFi配置表模塊等已經進行了相應的更新,但是實際上在底層的wpa_suppl i cant中仍然存在,所以當所有后臺Android系統(tǒng)的偽連接全部斷開時,需要執(zhí)行真實的刪除操作,重新執(zhí)行“REM0VE_ NETWORK”指令將之前未刪除的熱點從wpa中刪除。
[0185]4、關閉 WiFi
[0186]關閉WiFi的操作和刪除熱點類似,主要需要考慮操作是否會影響后臺Android系統(tǒng)。當用戶點擊關閉WiFi的按鈕時,首先置狀態(tài)為DISCONNECTING,若不對當前Android系統(tǒng)的WiFi狀態(tài)進行判斷,Android系統(tǒng)會向wpa_supplicant發(fā)送一條“DISCONNECT”指令,wpa_ supplicant收到這條指令后會斷開WiFi的連接;如果此時后臺也有Android系統(tǒng)處于 CONNECTED狀態(tài),即前臺Android系統(tǒng)和后臺Android系統(tǒng)連接了同一個熱點,該指令會斷開真實的熱點連接,導致后臺容器wifi不可用。為了避免上述問題,本實施例采取的【具體實施方式】包括以下步驟:
[0187]步驟601,接收來自當前系統(tǒng)客戶端的關閉WiF i的操作請求。
[0188]步驟602,判斷當前系統(tǒng)是否處于連接狀態(tài),若不是,則進入步驟604;若是則進入步驟603。
[0189]在這里,若當前Andro i d系統(tǒng)沒有處于連接狀態(tài),可以直接進入步驟604。[〇19〇]在這里,主要是判斷當前Android系統(tǒng)是否處于連接狀態(tài);若是,還需要判斷是否只有當前Android系統(tǒng)處于連接、當前Android系統(tǒng)是偽連接還是真實連接等;若不是,貝lj需要結合后臺Android系統(tǒng)的WiFi狀態(tài)進行判斷。
[0191]步驟603,判斷是否只有當前系統(tǒng)處于連接狀態(tài),若是,則直接執(zhí)行斷開命令,置當前系統(tǒng)為斷開狀態(tài);若不是,則直接構造執(zhí)行成功的偽結果和斷開連接的偽消息,并置當前系統(tǒng)為斷開狀態(tài),然后進入步驟604。
[0192]在這里,只有當前Android系統(tǒng)處于連接狀態(tài)時,直接執(zhí)行DISCONNECT指令,然后代理服務端會接收到一條斷開連接的事件消息,此時需要關閉為真實wlanO網卡打開的 dhcp客戶端,然后關閉為域內的容器打開的dhcp服務器。接著判斷當前Android系統(tǒng)是真實連接還是偽連接,如果當前Android系統(tǒng)的連接是真實連接,則直接進入步驟604;而如果是偽連接,則表示此時斷開的真實連接屬于另外一個Android系統(tǒng),和上面刪除WiFi的最后一步相對應,如果此時斷開的連接已經被所屬容器執(zhí)行過刪除操作(偽刪除),這時就需要將這個真實連接的熱點從WPA配置表中刪除,最后置當前Android系統(tǒng)的狀態(tài)為 DISCONNECTED,整個狀態(tài)轉換過程如圖3中的轉換關系4。[〇193]若后臺也有Android系統(tǒng)處于連接狀態(tài),即當前Android系統(tǒng)和后臺Android系統(tǒng)連接了同一熱點,這時就不能真實執(zhí)行這條指令,只需要直接構造執(zhí)行成功的偽結果,然后給對應的虛擬WPA客戶端發(fā)送斷開連接的偽事件消息,并置當前容器的狀態(tài)為 DISCONNECTED。
[0194]步驟604:在關閉WiFi時,還會依次執(zhí)行“DISABLE_NETW0RK”指令來將當前系統(tǒng)的所有可用熱點置為不可用狀態(tài),此時需要判斷后臺系統(tǒng)的偽連接是否建立在當前系統(tǒng)的對應熱點上;若是則直接構造執(zhí)行成功的偽結果;若不是,則直接執(zhí)行“DISABLE_NETW0RK”指令。[〇195]在這里,若后臺Android系統(tǒng)的偽連接建立在當前Android系統(tǒng)對應熱點上;執(zhí)行 DISABLE_NETW0RK x(x為真實連接的熱點id)指令同樣也會斷開真實連接,從而影響后臺 Android系統(tǒng)的WiFi使用,因此此時對這條指令需要進行偽執(zhí)行,以保證后臺Androdid系統(tǒng) WiFi的可用性,否則直接執(zhí)行指令即可。
[0196]5、系統(tǒng)切換
[0197]當用戶將當前Android系統(tǒng)切換到后臺,然后從后臺Android系統(tǒng)中喚醒一個 Android系統(tǒng)到前臺時,為了方便用戶的使用,所做處理包括以下步驟:
[0198]步驟701,接收來自當前系統(tǒng)代理客戶端的系統(tǒng)切換的操作請求。
[0199]步驟702,將當前系統(tǒng)置于后臺。
[0200]在這里,在切換操作前一刻,即當前Android系統(tǒng)即將切換到后臺,如果當前 Android系統(tǒng)的WiFi功能是打開的,并且不是處于⑶NNECTED狀態(tài)或者BACK_DISABLE狀態(tài), 則將當前Android系統(tǒng)的所有可用熱點置為disabled狀態(tài),然后將當前Android系統(tǒng)的狀態(tài)置為BACK_DI SABLE,接著進入步驟703;[〇2〇1]步驟703,喚醒一臺后臺系統(tǒng),同時將后臺系統(tǒng)的WiFi狀態(tài)置為斷開狀態(tài)。[〇2〇2]在這里,在切換操作后一刻,即已經從后臺喚醒了一個Android系統(tǒng)作為前臺系統(tǒng),如果這個前臺系統(tǒng)的WiFi功能是開啟的,且其狀態(tài)為BACK_DISABLE,則通過執(zhí)行 “ENABLE_NETW0RK”指令將所有可用熱點置為enabled狀態(tài),從而保證前臺系統(tǒng)的WiFi使用, 并將狀態(tài)置為DISCONNECTED,如圖3中的轉換關系6,然后進入步驟704;[〇2〇3]步驟704,判斷是否有后臺系統(tǒng)處于連接狀態(tài);若有,則進入步驟705;若沒有,則直接執(zhí)行恢復連接命令,使切換后的當前系統(tǒng)自動重新連接上任一可用熱點,并置切換后的當前系統(tǒng)WiFi狀態(tài)為CONNECTED。[〇2〇4] 在這里,判斷此時是否有后臺Android系統(tǒng)處于⑶NNECTED狀態(tài),如果有后臺 Android系統(tǒng)處于連接狀態(tài),則需要進一步判斷。如果沒有后臺Android系統(tǒng)處于連接狀態(tài), 則執(zhí)行一條“RECONNECT”指令使切換后的前臺Android系統(tǒng)自動重新連接上某個可用熱點, 通常情況下wpa會默認連接上之前在后臺被斷開的那個熱點,最后置前臺Android系統(tǒng)的 WiFi 狀態(tài)為 CONNECTED。
[0205]步驟705,后臺系統(tǒng)處于連接狀態(tài),如果前臺系統(tǒng)也有相同熱點的配置信息,則構造連接成功的偽消息,發(fā)送給前臺系統(tǒng)的虛擬WPA客戶端,讓前臺系統(tǒng)進行自動偽連接,并置其WiFi狀態(tài)為連接狀態(tài);如果沒有,則不做處理,保證后臺系統(tǒng)可以繼續(xù)使用。
[0206]在這里,查詢后臺Android系統(tǒng)的WiFi狀態(tài),如果有后臺Android系統(tǒng)處于 CONNECTED狀態(tài),則根據后臺Android系統(tǒng)的WiFi連接信息在前臺系統(tǒng)對應的WiFi配置過濾表中查找是否有相同熱點的配置信息,若有,則表示前臺Android系統(tǒng)和后臺Android系統(tǒng)具有相同的熱點,則讓前臺Android系統(tǒng)對這個熱點自動進行偽連接,S卩向其對應的虛擬 WPA客戶端發(fā)送連接成功的偽消息,并置其狀態(tài)為CONNECTED,如果沒有相同熱點的信息,則不做處理,保證后臺Android系統(tǒng)可以繼續(xù)使用WiFi。[〇2〇7] 三、WiFi設備終止階段[〇2〇8]在整個WiFi設備的使用周期中,主要是針對多個Anroid系統(tǒng)中的一個來講,還有最后一個階段,即WiFi設備終止階段,這個階段與WiFi初始化階段相對應,以Android系統(tǒng) 4.3為例,容器內的Android系統(tǒng)關機過程中,或者打開飛行模式時,會進入WiFi設備的終止階段;對于Android系統(tǒng)5.0,則每次關閉WiFi時都會進入WiFi設備終止階段。在Android系統(tǒng)技術進化過程中也可能存在其它情形,但不管怎樣,在WiFi設備終止階段,待終止操作完成后,將當前Android系統(tǒng)的狀態(tài)置為TERMINATE,如圖3中的轉換關系7。在此階段,涉及的操作請求依次為終止WiFi設備、關閉守護進程、關閉WPA客戶端、關閉當前系統(tǒng)對應的WPA虛擬客戶端,退出消息接收線程、卸載網卡硬件驅動、清除WPA配置表和當前系統(tǒng)的WiFi配置過濾表中所有內容,針對與所有系統(tǒng)相關的操作請求,均需要結合所有系統(tǒng)當前狀態(tài)對操作請求進行仲裁,決定是否執(zhí)行操作。結合圖8,此階段的WiFi設備復用方案具體包括以下步驟:
[0209]步驟801,接收來自當前系統(tǒng)的終止WiFi設備的操作請求。
[0210]在這里,用戶終止WiFi設備(比如打開飛行模式)時,Android系統(tǒng)首先會發(fā)送一條 “TERMINATE”指令給wpa_supplicant,用來通知wpa_supplicant即將終止WiFi設備的使用; 如果此時WiFi正處于連接狀態(tài),wpa會斷開WiFi的連接。采用代理機制后,代理客戶端會首先將這條命令發(fā)送給代理服務端,由代理服務端進行判斷。[〇211]步驟802,依據代理服務端中所有后臺系統(tǒng)狀態(tài),判斷是否有后臺系統(tǒng)沒有處于終止狀態(tài),若所有后臺系統(tǒng)均處于終止狀態(tài),進入步驟803;若有后臺系統(tǒng)沒有處于終止狀態(tài), 進入步驟804;
[0212] 在這里,比如當一個容器打開飛行模式時,如果還有其它Android系統(tǒng)沒有打開飛行模式,此時就不能真實執(zhí)行“TERMINATE”指令,此時進入步驟804。只有當所有Android系統(tǒng)打開了飛行模式,才進入步驟803。[〇213]步驟803,執(zhí)行終止WiFi設備的操作,并將執(zhí)行結果發(fā)送給當前系統(tǒng)代理客戶端。 [〇214]執(zhí)行終止WiFi設備的操作,斷開連接,關閉WiFi守護進程,關閉WPA客戶端,關閉虛擬WPA客戶端,退出消息接收線程,卸載網卡硬件驅動,清除WPA配置表和當前系統(tǒng)的WiFi配置過濾表中所有內容;最后將執(zhí)行結果發(fā)送給當前系統(tǒng)代理客戶端。[〇215]步驟804,設置執(zhí)行成功的結果,并將偽結果發(fā)送給當前系統(tǒng)代理客戶端。
[0216]針對終止指令、WiFi守護進程、WPA客戶端、網卡硬件驅動,構造執(zhí)行成功、關閉 WiFi守護進程成功、關閉WPA客戶端成功、關閉網卡硬件驅動成功的偽結果發(fā)送給當前系統(tǒng)的代理客戶端;針對當前系統(tǒng)對應的虛擬WPA客戶端,則直接執(zhí)行關閉操作;最后清除當前系統(tǒng)對應的WiFi配置過濾表中的所有內容。
[0217]步驟804進一步包括以下分步驟:[〇218]步驟8041,針對終止指令,構造執(zhí)行成功的偽結果;進一步判斷當前系統(tǒng)與后臺系統(tǒng)是否均處于連接狀態(tài);決定是否執(zhí)行斷開命令。
[0219]在這里,只需要向上層發(fā)送一條執(zhí)行成功的偽事件消息,同時,如果只有當前 Android系統(tǒng)處于連接狀態(tài),由于沒有真實執(zhí)行“TERMINATE”指令,WiFi連接不會自動斷開, 因此需要先執(zhí)行一條DISCONNECT指令斷開WiFi的連接,收到斷開連接成功事件消息時將狀態(tài)置為DISCONNECTED,而如果不只前臺Android系統(tǒng)處于連接狀態(tài),還有后臺Android系統(tǒng)也正處于連接狀態(tài),此時只需要向當前Android系統(tǒng)的虛擬WPA客戶端發(fā)送斷開連接的偽消息即可,并將狀態(tài)置為DISCONNECTED;[〇22〇]步驟8042,針對WiFi守護進程,構造關閉成功的偽結果,并發(fā)送給當前系統(tǒng)代理客戶端。[〇221 ] 在這里,當指令“TERMINATE”執(zhí)行成功后,下一步就是關閉wpa_suppli cant守護進程,如果還有其它Android系統(tǒng)在使用WiFi設備,此時就不能真實關閉這個守護進程,只需要給代理客戶端返回關閉成功的偽結果即可,只有最后一個容器終止WiFi設備時才真實地關閉該進程,并置當前系統(tǒng)的狀態(tài)保存模塊的守護進程啟動標志為STOP。[〇222]步驟8043,針對WPA客戶端,構造關閉成功的偽結果,并發(fā)送給當前系統(tǒng)代理客戶端。
[0223]在這里,關閉wpa_supplicant守護進程后,還需要關閉WPA客戶端,S卩關閉之前打開的域套接字,同樣,如果還有其它Android系統(tǒng)正在使用WiFi,此時就不真實執(zhí)行關閉操作,只需要向對應的代理客戶端發(fā)送關閉成功的偽結果,只有最后一個容器執(zhí)行關閉操作時才真實關閉該域套接字。
[0224]步驟8044,關閉當前系統(tǒng)對應的WPA虛擬客戶端。
[0225]在這里,每個系統(tǒng)都有各自的虛擬WPA客戶端,當前系統(tǒng)選擇終止WiFi設備,那么就需要關閉該虛擬客戶端,不在接收由代理服務端發(fā)送的消息。
[0226]步驟8045,針對消息接收線程,此時可以不做處理。
[0227]在這里,當最后一個系統(tǒng)執(zhí)行了關閉WPA客戶端的操作后,消息接收線程將收到一條WPA客戶端“connect1n-closed”的消息,此時說明所有系統(tǒng)都已經終止了WiFi設備,那么消息接收線程也就不需要繼續(xù)接收消息,此時消息接收線程自動退出。[〇228]步驟8046,針對網卡硬件驅動,構造卸載成功的偽操作結果,并發(fā)送給當前系統(tǒng)代理客戶端。
[0229]在這里,終止WiFi設備的最后一步是卸載硬件驅動,關閉網卡設備,這個操作同樣只需要執(zhí)行一次,根據狀態(tài)保存模塊中的所有Android的驅動加載標志來判斷是否所有系統(tǒng)都執(zhí)行了卸載操作,當所有的Android系統(tǒng)都執(zhí)行了卸載操作時,才真實地卸載硬件驅動,之前的Andro id系統(tǒng)進行的都是偽執(zhí)行,從而保證WiFi設備可供其它Andro id系統(tǒng)繼續(xù)使用,最后置當前系統(tǒng)的驅動加載標志為UNLOADED。[〇23〇] 步驟8045,清除當前系統(tǒng)對應的WiFi配置過濾表。[0231 ] 根據WiFi配置表模塊可知,在終止WiFi設備時,還需要清除WiFi配置表,當一個 Android系統(tǒng)打開飛行模式后,需要清除對應的WiFi配置過濾表,這個表將在該Android系統(tǒng)下次初始化WiFi設備時重新初始化。而WPA配置表只在最后真實終止WiFi設備時才清除表中的所有內容;其它情況下,WPA配置表可以不做處理。
[0232]本發(fā)明實施例提供的基于多Android系統(tǒng)的WiFi設備復用方法,能夠在基于容器的多Android平臺上實現WiFi設備復用,使多個平臺都可以獨立地使用WiFi,并且多個 Android平臺可同時連接一個相同的熱點,做到多容器同時上網。
[0233]本實施例進一步提供了一種基于多系統(tǒng)的WiFi設備復用裝置,
[0234]應用于基于Linux容器技術構建的多個系統(tǒng),每個容器內的系統(tǒng)通過創(chuàng)建的虛擬網卡與容器外部實現數據包在容器內外之間的傳輸;同時通過虛擬網卡與真實網卡之間的源地址轉換,實現數據包在系統(tǒng)與外部設備之間的傳輸;該WiFi設備復用裝置包括:
[0235]接收模塊,接收來自當前系統(tǒng)代理客戶端的操作請求;
[0236]仲裁模塊,依據狀態(tài)存儲模塊中所有系統(tǒng)當前狀態(tài),對來自當前系統(tǒng)代理客戶端的操作請求進行仲裁,決定是否執(zhí)行操作;
[0237]執(zhí)行模塊,對需要執(zhí)行的操作,執(zhí)行操作;
[0238]構造模塊,對不需要執(zhí)行的操作,構造偽結果和/或偽消息;
[0239]發(fā)送模塊,將執(zhí)行結果或偽結果發(fā)送給當前系統(tǒng)代理客戶端,將偽消息發(fā)送給當前系統(tǒng)的虛擬WPA客戶端。[〇24〇]上述基于多系統(tǒng)的WiFi設備復用裝置,進一步包括狀態(tài)保護模塊和WiFi配置表模塊。
[0241]以上對本發(fā)明實施例所提供的基于多Android系統(tǒng)的WiFi設備復用方法進行了詳細介紹,本文中應用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領域的一般技術人員,依據本發(fā)明的思想,在【具體實施方式】及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本發(fā)明的限制。
【主權項】
1.一種基于多系統(tǒng)的WiFi設備復用方法,其特征在于,應用于基于Linux容器技術構建 的多個系統(tǒng),每個容器內的系統(tǒng)通過創(chuàng)建的虛擬網卡與容器外部實現數據包在容器內外之 間的傳輸;同時通過虛擬網卡與真實網卡之間的源地址轉換,實現數據包在系統(tǒng)與外部設 備之間的傳輸;所述WiFi設備復用方法包括以下步驟:接收來自當前系統(tǒng)代理客戶端的操作請求;依據狀態(tài)存儲模塊中所有系統(tǒng)當前狀態(tài),對來自當前系統(tǒng)代理客戶端的操作請求進行 仲裁,決定是否執(zhí)行操作;對需要執(zhí)行的操作,執(zhí)行操作;對不需要執(zhí)行的操作,構造偽結果和/或偽消息;將執(zhí)行結果或偽結果發(fā)送給當前系統(tǒng)代理客戶端,將偽消息發(fā)送給當前系統(tǒng)的虛擬 WPA客戶端;實現多個系統(tǒng)的WiFi設備復用。2.根據權利要求1所述的基于多系統(tǒng)的WiFi設備復用方法,其特征在于,狀態(tài)保存模塊 用于保存所有系統(tǒng)對應的多種狀態(tài),包括驅動加載標志、守護進程啟動標志、WiFi連接狀態(tài) 以及WiFi當前連接信息。3.根據權利要求2所述的基于多系統(tǒng)的WiFi設備復用方法,其特征在于,對WiFi設備初 始化階段,所述操作請求依次為加載網卡硬件驅動、啟動WiFi守護進程、打開虛擬WPA客戶 端、打開WPA客戶端和啟動消息接收線程;具體實現方式包括以下步驟:步驟201,接收來自當前系統(tǒng)代理客戶端的WiFi設備初始化的操作請求;步驟202,加載網卡硬件驅動;判斷網卡硬件驅動是否被后臺系統(tǒng)加載;如果沒有被加 載,則直接加載網卡硬件驅動;如果已經被加載過,則構造加載成功的偽結果;然后將真實 操作結果或者偽結果反饋給當前系統(tǒng)代理客戶端;步驟203,啟動WiFi守護進程;判斷WiFi守護進程是否被后臺系統(tǒng)啟動;如果沒有被啟 動,則直接啟動WiFi守護進程;如果已經被啟動,則構造啟動成功的偽結果;然后將真實操 作結果或者偽結果反饋給當前系統(tǒng)代理客戶端;步驟204,在代理客戶端和代理服務端之間打開一個虛擬WPA客戶端,代替原WPA客戶端 接收由代理服務端發(fā)送的消息;步驟205,打開WPA客戶端;判斷WPA客戶端是否被后臺系統(tǒng)打開;如果沒有被打開,則直 接打開WPA客戶端;如果已經被打開,則構造打開成功的偽結果;然后將真實操作結果或者 偽結果反饋給當前系統(tǒng)代理客戶端;WPA客戶端設置在根域,并以WiFi守護進程作為服務 端,構造狀態(tài)事件消息通道;步驟206,啟動消息接收線程;判斷是否在代理服務端已經啟動了一個消息接收線程, 如果沒有,則啟動該線程;如果已經啟動,則構造啟動成功的偽結果;然后將真實操作結果 或者偽結果反饋給當前系統(tǒng)代理客戶端;WiFi設備初始化后,當前系統(tǒng)WiFi狀態(tài)為斷開狀態(tài)。4.根據權利要求3所述的基于多系統(tǒng)的WiFi設備復用方法,其特征在于,所述操作請求 進一步包括初始化WiFi配置表模塊,具體實現方式進一步包括:步驟207,初始化WiFi配置表模塊;WiFi配置表模塊包括WPA配置表和WiFi配置過濾表; WPA配置表為從WiFi守護進程獲取的包含所有WiFi熱點配置信息的配置表;WiFi配置過濾 表為包含對應系統(tǒng)的所有WiFi熱點配置信息的配置表;WPA配置表初始化,判斷WPA配置表是否被后臺系統(tǒng)初始化;如果沒有被初始化,則獲取 WiFi守護進程中所有WiFi熱點配置信息,然后解析獲取的信息獲得WPA配置表,完成對WPA 配置表的初始化,然后初始化WiFi配置過濾表;如果已經被初始化,則直接初始化WiFi配置 過濾表;WiFi配置過濾表初始化,打開當前系統(tǒng)在代理服務端對應的WiFi過濾表保存文件,讀 取內容,然后根據讀取的內容在WPA配置表中獲取ID信息,完成WiFi配置過濾表初始化。5.根據權利要求2至4任一所述的基于多系統(tǒng)的WiFi設備復用方法,其特征在于,對 WiFi設備使用階段,所述操作請求根據應用場景設定;此階段,在執(zhí)行完操作后,與WiFi狀態(tài)相關的,需要更改并保存當前系統(tǒng)的WiFi狀態(tài);在構造偽結果后,與WiFi狀態(tài)相關的,需要構造偽消息,同時更改并保存當前系統(tǒng)的 WiFi狀態(tài)。6.根據權利要求5所述的基于多系統(tǒng)的WiFi設備復用方法,其特征在于,應用場景包括 開啟WiF1、連接WiF1、刪除WiF1、關閉WiF1、系統(tǒng)切換。7.根據權利要求6所述的基于多系統(tǒng)的WiFi設備復用方法,其特征在于,當應用場景為開啟WiFi時,依據WiFi守護進程返回的熱點列表,經當前系統(tǒng)對應WiFi 配置表過濾,獲取當前系統(tǒng)所有可用熱點的列表,然后發(fā)送給當前系統(tǒng)代理客戶端;當應用場景為連接WiFi時,首先判斷待連接的WiFi熱點是否是新建立的連接,如果是, 則更新WiFi配置表模塊;然后判斷當前待連接的熱點和后臺系統(tǒng)連接的是否是同一熱點, 如果是,則當前系統(tǒng)進行偽連接;構造偽結果和偽消息;如果不是,則執(zhí)行連接操作,并斷開 后臺系統(tǒng)的連接;最后保存相應的WiFi狀態(tài);當應用場景為刪除WiFi熱點時,判斷待刪除的WiFi熱點是否是真實連接;如果當前系 統(tǒng)刪除的是當前連接的熱點,而且后臺系統(tǒng)連接著同一個熱點,并且后臺是進行的偽連接, 則此時不真實執(zhí)行刪除操作,構造偽結果和偽消息,直到后臺系統(tǒng)都斷開連接時,才執(zhí)行真 實的刪除操作;否則直接執(zhí)行刪除操作;最后保存相應的狀態(tài),并更新WiFi配置表模塊;當應用場景為關閉WiFi時,判斷待關閉的WiFi熱點是否是真實連接;如果當前系統(tǒng)處 于連接狀態(tài),則首先需要判斷后臺系統(tǒng)是否連接著同一個熱點,如果是,則前臺系統(tǒng)構造偽 結果和偽消息,進行偽斷開,以保持后臺系統(tǒng)的WiFi繼續(xù)使用;如果不是,則直接執(zhí)行關閉 操作即可;最后保存相應的狀態(tài);當應用場景為系統(tǒng)切換時,判斷待切換的當前系統(tǒng)是否與后臺系統(tǒng)連接了同一個WiFi 熱點;如果不是,由于前臺系統(tǒng)連接了一個不同的熱點而導致連接斷開的后臺系統(tǒng)再次切 換到前臺,如果切換后沒有后臺系統(tǒng)處于連接狀態(tài),那么前臺系統(tǒng)自動連接上之前被斷開 的熱點;如果切換后有后臺系統(tǒng)處于連接狀態(tài),則自動偽連接上相同的熱點;最后保存相應 的狀態(tài)。8.根據權利要求3所述的基于多系統(tǒng)的WiFi設備復用方法,其特征在于,對WiFi設備終 止階段,所述操作請求依次為終止WiFi設備、關閉守護進程、關閉WPA客戶端、關閉當前系統(tǒng) 對應的WPA虛擬客戶端,退出消息接收線程、卸載網卡硬件驅動、清除WPA配置表和當前系統(tǒng) 的WiFi配置過濾表中所有內容,針對與所有系統(tǒng)相關的操作請求,均需要結合所有系統(tǒng)當 前狀態(tài)對操作請求進行仲裁,決定是否執(zhí)行操作。9.一種基于多系統(tǒng)的WiFi設備復用裝置,其特征在于,應用于基于Linux容器技術構建的多個系統(tǒng),每個容器內的系統(tǒng)通過創(chuàng)建的虛擬網卡與容器外部實現數據包在容器內外之 間的傳輸;同時通過虛擬網卡與真實網卡之間的源地址轉換,實現數據包在系統(tǒng)與外部設 備之間的傳輸;該WiFi設備復用裝置包括:接收模塊,接收來自當前系統(tǒng)代理客戶端的操作請求;仲裁模塊,依據狀態(tài)存儲模塊中所有系統(tǒng)當前狀態(tài),對來自當前系統(tǒng)代理客戶端的操 作請求進行仲裁,決定是否執(zhí)行操作;執(zhí)行模塊,對需要執(zhí)行的操作,執(zhí)行操作;構造模塊,對不需要執(zhí)行的操作,構造偽結果和/或偽消息;發(fā)送模塊,將執(zhí)行結果或偽結果發(fā)送給當前系統(tǒng)代理客戶端,將偽消息發(fā)送給當前系 統(tǒng)的虛擬WPA客戶端。
【文檔編號】G06F9/48GK106020942SQ201610290075
【公開日】2016年10月12日
【申請日】2016年5月5日
【發(fā)明人】郭文生, 楊霞
【申請人】四川安嵌科技有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1