展類(lèi))
EasyMesh 核心模塊深挖筆記(模塊 9-17:接入安全與 R2/R3/R6 擴(kuò)展類(lèi))學(xué)習(xí)目標(biāo):通過(guò) EasyMesh R6 認(rèn)證。本篇覆蓋 9 個(gè)"接入安全 + R2/R3/R6 擴(kuò)展類(lèi)"模塊。方法:協(xié)議原理為主線,prplMesh 源碼作佐證(代碼只用來(lái)印證"協(xié)議字段長(zhǎng)這樣、怎么處理")。代碼路徑:prplMesh/agent/src/beerocks/slave/tasks/、prplMesh/controller/src/beerocks/master/、prplMesh/framework/tlvf/風(fēng)格沿用notes/EASYMESH-02-ieee1905-1-協(xié)議詳解.md:每模塊五段式 = 協(xié)議原理 → 關(guān)鍵 TLV/消息 → 抓包驗(yàn)證 → 實(shí)現(xiàn)要點(diǎn)(代碼佐證) → 認(rèn)證 Test Case(??待核對(duì))模塊 9 Onboarding(PBC + DPP/EasyConnect)9.1 協(xié)議原理Onboarding 是"新設(shè)備入網(wǎng)"流程,EasyMesh 提供兩條路徑:PBC(Push Button Configuration):EasyMesh R1 即支持,源自 WPS 思路。用戶在 Controller 與 Enrollee(待入網(wǎng)設(shè)備)上各按一次物理/虛擬按鍵,雙方通過(guò) 1905.1 多播PUSH_BUTTON_EVENT/JOIN互相通告,再走 WSC M1-M8 完成配置。R6 仍保留作為兼容路徑。DPP/EasyConnect(Wi-Fi Easy Connect):R2 引入,R4 標(biāo)準(zhǔn)化,R6 進(jìn)一步強(qiáng)化(新增 DPP AKM)。用 QR 碼/URI 引導(dǎo)密鑰,做公鑰認(rèn)證 + 加密配置下發(fā),安全性遠(yuǎn)高于 PBC。EasyMesh 在 DPP 中定義三個(gè)角色:Enrollee:待入網(wǎng)設(shè)備(帶 DPP URI,可顯示 QR 碼)Configurator:通常是 Controller,簽發(fā) Connector、下發(fā)網(wǎng)絡(luò)配置Proxy Agent:通常是 Agent,把 Enrollee 的 DPP 幀通過(guò) 1905.1 隧道轉(zhuǎn)發(fā)給 Controller(Enrollee 不一定能直接夠到 Controller)DPP 幀本身是 802.11 公共動(dòng)作幀/GAS 幀,EasyMesh 用ENCAP_DPP把它封裝進(jìn) 1905.1 CMDU,讓 DPP 能跨多跳網(wǎng)絡(luò)跑。9.2 關(guān)鍵 TLV / 消息值消息/TLV用途0x000bPUSH_BUTTON_EVENT_NOTIFICATIONEnrollee 按鍵后多播,宣告"我要入網(wǎng)"0x000cPUSH_BUTTON_JOIN_NOTIFICATIONController 側(cè)按鍵后多播,回應(yīng)"我來(lái)配你"0x801dDPP_CCE_INDICATIONConfigurator/Proxy 通告 CCE(Configurator/Controller/Enrollee)能力0x8029PROXIED_ENCAP_DPPProxy Agent 把 DPP 幀隧道轉(zhuǎn)發(fā)給 Controller0x802aDIRECT_ENCAP_DPP直連場(chǎng)景下 DPP 幀封裝(不經(jīng) Proxy)0x8031DPP_BOOTSTRAPPING_URI_NOTIFICATION把 Enrollee 的 DPP URI 上報(bào)給 Controller0xd2TLV_DPP_CCE_INDICATIONCCE 能力位(ENABLE/DISABLE)0xcdTLV_1905_ENCAP_DPP封裝 DPP 幀(含 frame_flags/dest_sta_mac/frame_type/encapsulated_frame)0xcfTLV_DPP_BOOTSTRAPPING_URI_NOTIFICATIONruid + bssid + backhaul_sta_addr + dpp_uri0xd3TLV_DPP_CHIRP_VALUEChirp 通知(Enrollee 發(fā)的 DPP 發(fā)現(xiàn) chirp 幀)TLV_1905_ENCAP_DPP的frame_type區(qū)分兩類(lèi) DPP 幀:DPP_PUBLIC_ACTION_FRAME(0)、GAS_FRAME(1)。9.3 抓包驗(yàn)證過(guò)濾:ieee1905 (msg.type == 0x801d || msg.type == 0x8029 || msg.type == 0x802a || msg.type == 0x8031),PBC 路徑另加msg.type == 0x000b/0x000c。時(shí)序要點(diǎn):Enrollee 按鍵 → 多播PUSH_BUTTON_EVENT(0x000b)(帶 media_type 列表)Controller 按鍵 → 多播PUSH_BUTTON_JOIN(0x000c)DPP 路徑:Enrollee 發(fā) chirp → Proxy Agent 用CHIRP_NOTIFICATION(0x802f)上報(bào) → Controller 與 Enrollee 通過(guò)PROXIED_ENCAP_DPP(0x8029)交換 DPP Auth/Config 幀Enrollee 把自己的 DPP URI 通過(guò)DPP_BOOTSTRAPPING_URI_NOTIFICATION(0x8031)上報(bào)(含 ruid/bssid/backhaul_sta_addr/dpp_uri)9.4 實(shí)現(xiàn)要點(diǎn)(代碼佐證)prplMesh 在 Agent 側(cè)用proxy_agent_dpp_task處理 DPP 三類(lèi)入站消息,體現(xiàn) Proxy Agent 的"轉(zhuǎn)發(fā)器"角色:代碼佐證:prplMesh/agent/src/beerocks/slave/tasks/proxy_agent_dpp_task.cppswitch(cmdu_rx.getMessageType()){caseieee1905_1::eMessageType::DPP_CCE_INDICATION_MESSAGE:handle_dpp_cce_indication(cmdu_rx);returntrue;caseieee1905_1::eMessageType::CHIRP_NOTIFICATION_MESSAGE:handle_chirp_notification(cmdu_rx);returntrue;caseieee1905_1::eMessageType::PROXIED_ENCAP_DPP_MESSAGE:handle_proxied_encap_dpp(fd,src_mac,cmdu_rx);returntrue;}handle_proxied_encap_dpp按src_mac判向:來(lái)自 Controller 的轉(zhuǎn)發(fā)給 ap_manager,來(lái)自 ap_manager 的轉(zhuǎn)發(fā)給 Controller,并按frame_type區(qū)分 DPP Auth Request(0) 與 GAS(1):代碼佐證:同文件if(src_mac==db-controller_info.bridge_mac){if(encap_1905_dpp_tlv-frame_type()==0){// DPP authentication request → 轉(zhuǎn)給所有 radio 的 ap_managerfor(autoradio:db-get_radios_list()){...forward_cmdu_to_uds(ap_manager_fd,cmdu_rx);}}...}elseif(src_mac==net::network_utils::ZERO_MAC){// 來(lái)自 ap_manager(無(wú)線側(cè) chirp 上來(lái)),保存 fd 并轉(zhuǎn)發(fā)給 Controllerif(encap_1905_dpp_tlv-frame_type()==1)active_onboarding_ap_manager_fd=fd;m_btl_ctx.forward_cmdu_to_controller(cmdu_rx);}DPP URI 上報(bào) TLV 的字段定義(YAML 即協(xié)議線格式):代碼佐證:prplMesh/framework/tlvf/yaml/tlvf/wfa_map/tlvDppBootstrappingUriNotification.yamltlvDppBootstrappingUriNotification:ruid:sMacAddrbssid:sMacAddr# 收到 URI 的本地接口(= BSSID)backhaul_sta_address:sMacAddr# 收到 URI 的 backhaul STA 地址dpp_uri:char# DPP URI(格式見(jiàn) Wi-Fi Easy Connect 5.2.1)PBC 的PUSH_BUTTON_EVENT_NOTIFICATIONTLV:代碼佐證:prplMesh/framework/tlvf/yaml/tlvf/ieee_1905_1/tlvPushButtonEventNotification.yamltlvPushButtonEventNotification:media_type_list_length:uint8_tmedia_type_list:sMediaType# 含 media_type + 802.11 specific info9.5 認(rèn)證 Test Case(??待核對(duì))MAP-5.x 系列(R5/R6 Onboarding):??待核對(duì)官方 Test Plan 中 PBC 與 DPP 的具體 case 編號(hào)重點(diǎn):DPP Configurator/Proxy/Enrollee 三角色交互、URI 傳遞、CCE Indication 通告R6 新增 DPP AKM(0x0080)相關(guān) case:??待核對(duì)模塊 10 Backhaul Management(回程鏈路管理)10.1 協(xié)議原理回程(Backhaul)是 Agent 上聯(lián) Controller 的上行鏈路。EasyMesh 支持三類(lèi)回程:Wired:以太網(wǎng)回程(最優(yōu)先,無(wú)無(wú)線開(kāi)銷(xiāo))Wireless:Wi-Fi 回程(Agent 的 backhaul STA 關(guān)聯(lián)到上游 AP)1905.1 secure:跨 1905.1 匯聚層的加密回程(用于異構(gòu)鏈路安全互通)回程管理包括:鏈路選擇(優(yōu)先級(jí) Wired Wireless)、回程切換(BACKHAUL_STEERING_REQUEST/RESPONSE)、回程能力查詢(BACKHAUL_STA_CAPABILITY_QUERY/REPORT)。R2 起回程安全強(qiáng)制 SAE(見(jiàn)模塊 11)。10.2 關(guān)鍵 TLV / 消息值消息用途0x8019BACKHAUL_STEERING_REQUESTController 要求 Agent 把 backhaul STA 引導(dǎo)到指定 BSSID0x801aBACKHAUL_STEERING_RESPONSEAgent 回應(yīng)引導(dǎo)結(jié)果0x8027BACKHAUL_STA_CAPABILITY_QUERY查詢 backhaul STA 能力0x8028BACKHAUL_STA_CAPABILITY_REPORT上報(bào) backhaul STA 能力0xcbTLV_BACKHAUL_STA_RADIO_CAPABILITIESbackhaul STA 無(wú)線能力0xd0TLV_BACKHAUL_BSS_CONFIGURATION回程 BSS 配置10.3 抓包驗(yàn)證過(guò)濾:ieee1905 msg.type in {0x8019, 0x801a, 0x8027, 0x8028}關(guān)注:回程切換時(shí) Agent 的 backhaul STA 是否完成"斷開(kāi)舊 BSSID → 關(guān)聯(lián)新 BSSID → 1905.1 拓?fù)涓?全流程10.4 實(shí)現(xiàn)要點(diǎn)(代碼佐證)Agent 側(cè)backhaul_manager維護(hù)回程 FSM,回程引導(dǎo)有 10s 超時(shí):代碼佐證:prplMesh/agent/src/beerocks/slave/backhaul_manager/backhaul_manager.cppconstexprautobackhaul_steering_timeout=std::chrono::milliseconds(10000);conststd::string dev_set_config_backhaul_param="backhaul";// 主 FSM:backhaul_fsm_main() 處理回程連接、切換、斷開(kāi)if(!backhaul_fsm_main(continue_processing)){...}// 注冊(cè) BACKHAUL_STEERING_REQUEST 處理ieee1905_1::eMessageType::BACKHAUL_STEERING_REQUEST_MESSAGE,10.5 認(rèn)證 Test Case(??待核對(duì))回程引導(dǎo)(Wired ? Wireless 切換):??待核對(duì) MAP-3.x / MAP-4.x 編號(hào)R2 SAE 回程:見(jiàn)模塊 11模塊 11 Security(SAE / PMF)11.1 協(xié)議原理R2 起回程安全強(qiáng)制使用SAE(Simultaneous Authentication of Equals),即 WPA3-Personal 的密鑰協(xié)商協(xié)議。SAE 替代了 WPS/PSK 在回程中的角色,抗離線字典攻擊。PMF(Protected Management Frames,IEEE 802.11w):保護(hù)單播/組播管理幀(如 dea