<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                **ctrl_iface.c::wpa_supplicant_ctrl_iface_process** ~~~ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,char *buf,size_t *resp_len) { char *reply; const int reply_size = 4096; int ctrl_rsp = 0; int reply_len; ...... reply = os_malloc(reply_size); ..... //開始命令處理 ...... else if (os_strcmp(buf, "ADD_NETWORK") == 0) { reply_len = wpa_supplicant_ctrl_iface_add_network( wpa_s, reply, reply_size); }else if ......//其他命令處理 if (reply_len < 0) {//命令處理出錯 os_memcpy(reply, "FAIL\n", 5); reply_len = 5; } ...... *resp_len = reply_len; return reply; ~~~ ADD_NETWORK的真正處理在wpa_supplicant_ctrl_iface_add_network函數中,其代碼如下所示。 **ctrl_iface.c::wpa_supplicant_ctrl_iface_add_network** ~~~ static int wpa_supplicant_ctrl_iface_add_network(struct wpa_supplicant *wpa_s, char *buf, size_t buflen) { struct wpa_ssid *ssid; int ret; //wpa_config_add_network返回一個wpa_ssid對象,讀者還記得它嗎?wpa_ssid是無線網絡配置項在 //WPAS中的反映(請參考4.3.3中“wpa_ssid結構體介紹”一節)。wpa_config_add_network內部就是 //分配一個wpa_ssid對象,然后將其保存到一個鏈表中。注意,wpa_config是wpa_supplicant.conf //在代碼中的代表。所以,此處添加的無線網絡信息將會保存到配置文件中,以備下次使用。 ssid = wpa_config_add_network(wpa_s->conf); ...... wpas_notify_network_added(wpa_s, ssid); ssid->disabled = 1; //disabled為1表示該無線網絡未啟用,需要通過ENABLE_NETWORK來啟動它 //設置該無線網絡的默認配置項 wpa_config_set_network_defaults(ssid); //返回該網絡的編號(由wpa_ssid的id變量表示。它在wpa_config_add_network函數中被賦值) ret = os_snprintf(buf, buflen, "%d\n", ssid->id); ...... return ret; } ~~~ 上述代碼比較簡單,無非就是分配一個wpa_ssid對象,然后設置它的一些默認屬性。整個函數返回該wpa_ssid對象的id,即它在鏈表中的順序。 wpa_ssid的默認屬性對后續流程有一些影響,那么默認屬性都是什么呢?不妨來看看wpa_config_set_network_defaults函數,代碼如下所示。 **config.c::wpa_config_set_network_defaults** ~~~ void wpa_config_set_network_defaults(struct wpa_ssid *ssid) { //設置proto、pairwise_cipher、group_cipher以及key_mgmt的信息,讀者還記得這些變量的含義嗎? //請參考4.3.3中“安全相關成員變量及背景知識介紹”一節 ssid->proto = DEFAULT_PROTO; ssid->pairwise_cipher = DEFAULT_PAIRWISE; ssid->group_cipher = DEFAULT_GROUP; ssid->key_mgmt = DEFAULT_KEY_MGMT; #ifdef IEEE8021X_EAPOL ssid->eapol_flags = DEFAULT_EAPOL_FLAGS;//EAP相關變量,見下文解釋 ssid->eap_workaround = DEFAULT_EAP_WORKAROUND; ssid->eap.fragment_size = DEFAULT_FRAGMENT_SIZE; #endif /* IEEE8021X_EAPOL */ #ifdef CONFIG_HT_OVERRIDES ......//和802.11n有關,本書不涉及 #endif /* CONFIG_HT_OVERRIDES */ } ~~~ 上述代碼中出現了三個和EAPOL相關的變量,此處簡單介紹一下: * **1、eapol_flags**:它和動態WEP key有關。只適用于非WPA安全環境中,可取值有三個, * 分別是1(代碼中定義為BIT(0),表示需要為單播數據傳輸使用動態WEP Key,對應宏為EAPOL_FLAG_REQUIRE_KEY_UNICAST) * 2(代碼中定義為BIT(1),表示需要為組播數據傳輸使用動態WEP Key,對應宏為EAPOL_FLAG_REQUIRE_KEY_BROADCAST) * 3(單播和組播都使用動態WEP Key,對應宏為DEFAULT_EAPOL_FLAGS) * **2、eap_workaround**:身份認證方法多種多樣,而有些Authenticator服務器(縮寫為AS)并不嚴格遵守規范。該變量表示碰到這種情況時,WPAS是否可以采取“繞”(workaround本意是“變通”)過去的方式來對待這些AS。由于這種不嚴格的情況非常普遍,所以該值默認是1, * **3、fragment_size**:該變量和EAPOL消息分片大小有關。默認的DEFAULT_FRAGMENT_SIZE大小為1398,表示EAPOL消息只要不超過這個大小,就不用對其進行分片。 “ADD_NETWORK”命令比較簡單,它最終將返回給客戶端對應的無線網絡配置的編號。在本例中,它是0。 下面來看客戶端通過“SET_NETWORK”為該無線網絡配置項設置參數的處理過程。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看