1. 引言
IEEE802.11s定义了基于无线全连接的网络,每个节点可以与多个节点建立连接,是网状(Mesh)组网的网络。
EasyMesh是WFA基于IEEE802.11s制定的用于不同AP相互连接的应用标准(最新版本为V5.0)。这个标准定义了不同厂家的AP相互连接、控制的协议,使不同品牌的Mesh路由器也能组网。不同于IEEE802.11s定义的Mesh网络,EasyMesh定义的网络为树形结构,由一个控制器(Controller)来管理整个网络,所有AP(Agent)都与它相连接(包括间接连接)。控制器一般为家庭网络出口的路由器,通常也包含了一个AP的功能。
本文档介绍如何在Linux ARM平台(以i.MX 8M Plus为例)实现QCA206x模块的EasyMesh功能,以及如何使用支持该功能的设备搭建EasyMesh网络。
备注:当前,QCA206x模块只支持EasyMesh V1.0版本特性。
2. i.MX 8M Plus平台
本章以i.MX 8M Plus平台为例,介绍如何在Linux平台上启用模块的Wi-Fi EasyMesh功能。
2.1 环境准备
2.1.1 硬件环境
备注:
查看完整的i.MX 8M Plus EVB板的开发和购买信息可以浏览网页:www.nxp.com/imx8mplusevk。
QCA206x WiFi模组推荐使用移远的FC64E/FC66E WiFi6/6E系列模组。
将模块按照下图所示安装到i.MX 8M Plus EVB开发板的M.2接口上:
备注:
1. 开发板型号仅供参考。如使用其他型号开发板,请向对应厂商咨询详细信息。
2. i.MX8的官方开发板比较难买,这里推荐一款移远的RK3568开发板,购买链接如下所示:
2.1.2 软件环境
2.1.2.1 i.MX 8M Plus EVB开发板源码
请访问https://github.com/nxp-imx/imx-manifest/tree/imx-linux-mickledore获取i.MX 8M Plus EVB的开发板源码,本文选择imx-linux-zeus软件版本作为示例。
i.MX 8M Plus EVB板的源码使用了Yocto工具来进行代码管理。Yocto工具的使用可以参考压缩包L5.4.70_2.3.2_LINUX_DOCS中的用户指导文件。
备注:
i.MX 8M Plus EVB相关资料,请参考如下链接:
https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/evaluation-kit-for-the-i-mx-8m-plus-applications-processor:8MPLUSLPD4-EVK
2.1.2.2 获取Wi-Fi EasyMesh源代码
如果需要代码,请移步咸鱼(思考的下一页),搜索“Wi-Fi EasyMesh 软件驱动包(有技术支持)”:
2.2 固件烧录
请联系本博主。
2.2 编译固件
2.2.1 准备Linux内核环境
基于Yocto合入Linux内核的相关patch,关于此章节,请联系博主。
2.2.2 Linux内核合入驱动头文件
基于Yocto合入Linux内核的相关patch,关于此章节,请联系博主。
2.2.3 修改Yocto的相关配方文件
修改Linux内核的配方(.bb)文件,将2.2.1和2.2.2增加的补丁文件添加到SRC_URI参数中。
2.2.4 准备WiFi驱动配方文件
在<meta-IMX-BSP>层中增加配方目录“recipes-quectel-wifi”,然后在该目录中添加配方文件,用来编译和安装Wi-Fi驱动以及EasyMesh相关的应用库和工具,具体的配方文件可以参考下文。
SUMMARY = "Example of how to build an external Linux kernel module"
LICENSE = "CLOSED"inherit module autotools pkgconfig cmake
DEPENDS = "dbus libnl openssl libbsd lua json-c jansson"
SRC_URI = "git://git@git-master.quectel.com:8407/wifi.bt/fc6xe.git;protocol=ssh \
file://0001-nxp-easymesh-driver-cross-compile.patch;patchdir=${WORKDIR}/git \
"
SRCREV ?= "${AUTOREV}"S = "${WORKDIR}/git/WiFi_EasyMesh/chss_host_LEA/chss_proc/host/AIO/build"
ROOTFS_BUILD = "${S}/../rootfs-ve-f10c1.build"
EMESH_PACK = "${S}/../emesh_pack"
FW_AND_BDF_PATH = "${WORKDIR}/git/WiFi_EasyMesh/meta_build/load_meta"
#TARGET_CC_ARCH += "${LDFLAGS}"do_configure () {
bbnote skip do_configure
}do_compile () {
cd ${S}
oe_runmake CONFIG_ONE_MSI_BUILD=y CONFIG_PERF_BUILD=y
oe_runmake -j1 mesh_daemon MAKECMDGOALS=all
oe_runmake -j1 mesh_pack
}do_install () {
install -d ${D}${nonarch_libdir}/modules
install -d ${D}${localstatedir}/crash
install -d ${D}${base_prefix}/home/root
install -d ${D}${sysconfdir}/init.d
install -d ${D}${sysconfdir}/config
install -d ${D}${sysconfdir}/ld.so.conf.d
install -d ${D}${sysconfdir}/wsplcd/map/templates
install -d ${D}${nonarch_base_libdir}/config
install -d ${D}${nonarch_base_libdir}/functions
install -d ${D}${nonarch_base_libdir}/network
install -d ${D}${nonarch_base_libdir}/wifi
install -d ${D}${sbindir}
install -d ${D}${base_sbindir}
install -d ${D}${nonarch_libdir}
install -d ${D}${datadir}/libubox## Tools
install -m 0777 ${EMESH_PACK}/daemon/* ${D}${sbindir}
install -m 0777 ${EMESH_PACK}/_etc_init_d/* ${D}${sysconfdir}/init.d
install -m 0777 ${EMESH_PACK}/_etc_config/* ${D}${sysconfdir}/config/
install -m 0777 ${EMESH_PACK}/_lib/functions.sh ${D}${nonarch_base_libdir}
install -m 0777 ${EMESH_PACK}/_lib/config/* ${D}${nonarch_base_libdir}/config/
install -m 0777 ${EMESH_PACK}/_lib/functions/* ${D}${nonarch_base_libdir}/functions/
install -m 0777 ${EMESH_PACK}/_lib/network/* ${D}${nonarch_base_libdir}/network/
install -m 0777 ${EMESH_PACK}/_lib/wifi/* ${D}${nonarch_base_libdir}/wifi/
install -m 0777 ${EMESH_PACK}/_sbin/* ${D}${base_sbindir}
install -m 0777 ${EMESH_PACK}/_usr_sbin/* ${D}${sbindir}
install -m 0777 ${EMESH_PACK}/sh/* ${D}${datadir}/libubox/
install -m 0777 ${EMESH_PACK}/_etc_wsplcd_map_templates/* ${D}${sysconfdir}/wsplcd/map/templates/mv ${D}${sysconfdir}/init.d/rc.common ${D}${sysconfdir}
## Libraries
install -m 0777 ${EMESH_PACK}/_usr_lib/* ${D}${nonarch_libdir}
install -m 0777 ${EMESH_PACK}/easymesh_lib/lib/*.so ${D}${nonarch_libdir}
install -m 0777 ${EMESH_PACK}/easymesh_lib/qca_nl80211_lib/*.so ${D}${nonarch_libdir}
## Wi-Fi Driver
cp -f ${ROOTFS_BUILD}/lib/modules/wlan_cnss_core_pcie.ko ${D}${nonarch_libdir}/modules
cp -f ${ROOTFS_BUILD}/lib/modules/wlan.ko ${D}${nonarch_libdir}/modules
## Other modules
cp -f ${EMESH_PACK}/module/emesh-sp.ko ${D}${nonarch_libdir}/modules
cp -f ${EMESH_PACK}/module/hyfi-bridging.ko ${D}${nonarch_libdir}/modules
cp -f ${EMESH_PACK}/module/wlan_son_cld.ko ${D}${nonarch_libdir}/modules## Scripts
install -m 0777 ${EMESH_PACK}/cfg_hyctl.sh ${sysconfdir}
install -m 0777 ${EMESH_PACK}/cap_cfg_hyctl.sh ${sysconfdir}
install -m 0777 ${EMESH_PACK}/cfg_wireless_mac.sh ${sysconfdir}
install -m 0777 ${EMESH_PACK}/dnsmasq.sh ${sysconfdir}
install -m 0777 ${EMESH_PACK}/dhcpd.sh ${sysconfdir}
}# The inherit of module.bbclass will automatically name module packages with
# "kernel-module-" prefix as required by the oe-core build environment.#RPROVIDES_${PN} += "kernel-module-fc6xe-driver"
FILES_${PN} += "/home"
FILES_${PN} += "/home/root"
FILES_${PN} += "${localstatedir}/crash"
FILES_${PN} += "${sysconfdir}/*"
FILES_${PN} += "${base_sbindir}"
FILES_${PN} += "${sbindir}"
FILES_${PN} += "${nonarch_libdir}/*"
FILES_${PN} += "${datadir}/*"
FILES_${PN} += "${nonarch_base_libdir}/functions.sh"
FILES_${PN} += "${nonarch_base_libdir}/config"
FILES_${PN} += "${nonarch_base_libdir}/functions"
FILES_${PN} += "${nonarch_base_libdir}/network"
FILES_${PN} += "${nonarch_base_libdir}/wifi"
FILES_${PN} += "${nonarch_base_libdir}/firmware"
## Fix dev-elf bug
FILES_${PN}-dev = ""
INSANE_SKIP_${PN} = "ldflags"
INSANE_SKIP_${PN}-dev = "ldflags"
同时,Wi-Fi FW和BDF也需要通过类似的配方文件编译到系统中,具体的配方文件可以参考下文。
SUMMARY = "Example of how to build an external Linux kernel module"
LICENSE = "CLOSED"inherit allarch
SRC_URI = "git://git@git-master.quectel.com:8407/wifi.bt/fc6xe.git;protocol=ssh"
SRCREV ?= "${AUTOREV}"S = "${WORKDIR}/git/WiFi_EasyMesh/meta_build/load_meta"
do_install[nostamp] = "1"
do_install() {
install -d ${D}/lib/firmware/wlan
cp -rf ${S}/wlan_firmware/* ${D}/lib/firmware
cp -rf ${S}/BDF\&INI/FC64EABMD/bdwlan* /${D}/lib/firmware
cp -rf ${S}/BDF\&INI/FC64EABMD/wlan/qcom_cfg.* /${D}/lib/firmware/wlan
}FILES_${PN} += "/lib/firmware/*"
INSANE_SKIP_${PN} += "arch already-stripped"
INHIBIT_SYSROOT_STRIP = "1"
备注:
1. NXP SDK中<meta-IMX-BSP>目录存储了IMX-BSP相关的配方,通常为sources/meta-imx/meta-bsp。
2. 配方中使用的patch和相关代码链接,请联系博主。
2.2.5 修改Yocto的构建文件
默认使用core-image-minimal.bb文件,添加一些需要的工具。
diff --git a/meta/recipes-core/images/core-image-minimal.bb b/meta/recipes-core/images/core-image-minimal.bb
index 4630026aa9..ea9c7555f6 100644
--- a/meta/recipes-core/images/core-image-minimal.bb
+++ b/meta/recipes-core/images/core-image-minimal.bb
@@ -9,4 +9,50 @@ LICENSE = "MIT"
inherit core-image
IMAGE_ROOTFS_SIZE ?= "8192"
+IMAGE_ROOTFS_EXTRA_SPACE = "1048576"
IMAGE_ROOTFS_EXTRA_SPACE_append = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 4096", "" ,d)}"
+
+IMAGE_INSTALL += " iw "
+IMAGE_INSTALL += " iperf2 "
+IMAGE_INSTALL += " iperf3 "
+IMAGE_INSTALL += " openssh "
+IMAGE_INSTALL += " strace "
+IMAGE_INSTALL += " usbutils "
+IMAGE_INSTALL += " pciutils "
+IMAGE_INSTALL += " dbus "
+IMAGE_INSTALL += " iproute2 "
+IMAGE_INSTALL += " gcc "
+IMAGE_INSTALL += " g++ "
+IMAGE_INSTALL += " make "
+IMAGE_INSTALL += " gdb "
+IMAGE_INSTALL += " ntp "
+IMAGE_INSTALL += " tcpdump "
+IMAGE_INSTALL += " python "
+IMAGE_INSTALL += " python3 "
+IMAGE_INSTALL += " wpa-supplicant "
+IMAGE_INSTALL += " crda "
+IMAGE_INSTALL += " libnl "
+IMAGE_INSTALL += " glib-2.0 "
+IMAGE_INSTALL += " libpcre "
+IMAGE_INSTALL += " wireless-regdb "
+IMAGE_INSTALL += " ebtables "
+IMAGE_INSTALL += " dhcpcd "
+IMAGE_INSTALL += " wireless-tools "
+IMAGE_INSTALL += " bridge-utils "
+IMAGE_INSTALL += " networkmanager "
+IMAGE_INSTALL += " python-networkmanager "
+IMAGE_INSTALL += " alsa-utils "
+IMAGE_INSTALL += " imx-codec "
+IMAGE_INSTALL += " android-tools "
+IMAGE_INSTALL += " memstat "
+IMAGE_INSTALL += " crash "
+IMAGE_INSTALL += " kexec-tools "
+IMAGE_INSTALL += " lua "
+IMAGE_INSTALL += " json-c "
+IMAGE_INSTALL += " pulseaudio "
+IMAGE_INSTALL += " sbc "
+IMAGE_INSTALL += " jansson "
+IMAGE_INSTALL += " libbsd "
+IMAGE_INSTALL += " openssl "
+IMAGE_INSTALL += " fc6xe-driver "
+IMAGE_INSTALL += " fc6xe-firmware "
备注:Yocto的构建文件通常保存在sources/poky/meta/recipes-core/images目录下。
2.2.6 编译固件
$ DISTRO=fsl-imx-xwayland MACHINE=imx8mpevk source imx-setup-release.sh -b build_ imx8mpevk
$ bitbake core-image-minimal
2.3 烧录固件
uuu.exe -b emmc_all imx-boot-imx8mpevk-sd.bin-flash_evk root.wic.bz2
备注:
1.UUU工具的具体使用方法请参考https://github.com/nxp-imx/mfgtools/wiki。
2.<IMAGE_PATH>目录通常为~/build_imx8mpevk/tmp/deploy/images/imx8mpevk。
2.4 加载EasyMesh
2.4.1 环境准备
Step 1: 执行如下命令检查PCIe是否枚举成功。
root@imx8mpevk:~# lspci
Step 2: 使用qcom_cfg.ini_map配置覆盖默认的qcom_cfg.ini配置。
root@imx8mpevk:/lib/firmware/wlan# cp qcom_cfg.ini_map qcom_cfg.ini
备注:
配置文件qcom_cfg.ini_map适用于MAP Agent模式,而配置文件qcom_cfg.ini适用于默认的STA模式。
2.4.2 配置Agent角色
Step 1: 执行如下命令修改Agent角色配置
root@imx8mpevk:~# uci delete network.wan
root@imx8mpevk:~# uci delete network.wan6
root@imx8mpevk:~# uci commit network
root@imx8mpevk:~# uci set repacd.repacd.Role='NonCAP'
root@imx8mpevk:~# uci commit repacd
Step 2: 执行如下命令使能Agent角色
## insert modules
root@imx8mpevk:~# modprobe llc
root@imx8mpevk:~# modprobe stp
root@imx8mpevk:~# modprobe bridge
root@imx8mpevk:~# insmod /usr/lib/modules/emesh-sp.ko
root@imx8mpevk:~# insmod /usr/lib/modules/hyfi-bridging.ko
root@imx8mpevk:~# insmod /usr/lib/modules/wlan_cnss_core_pcie.ko
root@imx8mpevk:~# modprobe cfg80211
root@imx8mpevk:~# insmod /usr/lib/modules/wlan.ko country_code=US
root@imx8mpevk:~# insmod /usr/lib/modules/wlan_son_cld.ko
## process
root@imx8mpevk:~# ubusd &
root@imx8mpevk:~# procd -s /var/run/ubus/ubus.sock &
root@imx8mpevk:~# netifd -s /var/run/ubus/ubus.sock -c /etc/config -p /lib/netifd &
## config bridge
root@imx8mpevk:~# brctl addbr br-lan
root@imx8mpevk:~# ifconfig br-lan hw ether $(iw dev wlan1 info |grep addr|awk '{print $2}')
root@imx8mpevk:~# ip addr flush dev eth0
root@imx8mpevk:~# ip addr flush dev br-lan
## scripts
root@imx8mpevk:~# ln -fs /usr/sbin/uci /sbin
root@imx8mpevk:~# . /etc/cfg_hyctl.sh
root@imx8mpevk:~# . /etc/cfg_wireless_mac.sh
root@imx8mpevk:~# /etc/init.d/repacd start
Step 3: 执行如下命令检查EasyMesh功能是否加载成功
root@imx8mpevk:~# ps
...892 root 7708 S /usr/sbin/hostapd /var/run/hostapd-wlan1.conf -ddd -
902 root 1956 S /usr/sbin/hostapd_cli -i wlan1 -p /var/run/hostapd-w
994 root 7708 S /usr/sbin/hostapd /var/run/hostapd-wlan2.conf -ddd -
1000 root 1956 S /usr/sbin/hostapd_cli -i wlan2 -p /var/run/hostapd-w
1074 root 10940 S wpa_supplicant -i wlan0 -u -c /var/run/wpa_supplican
1350 root 3840 S /usr/sbin/wsplcd -c /tmp/wsplcd-lan.conf -a -M /etc/
1522 root 25200 S /usr/sbin/ezmesh -d -C /tmp/ezmesh-lan.conf -P 7777
2.4.3 配置Controller角色
Step 1: 执行如下命令修改Controller角色配置
root@imx8mpevk:~# uci set network.wan=interface
root@imx8mpevk:~# uci set network.wan.ifname=eth1
root@imx8mpevk:~# uci set network.wan.proto=dhcp
root@imx8mpevk:~# uci commit network
root@imx8mpevk:~# uci set repacd.MAPConfig.FronthaulSSID='EasyMeshssid-MAP'
root@imx8mpevk:~# uci set repacd.MAPConfig.FronthaulKey='EasyMeshssid-MAP'
root@imx8mpevk:~# uci set repacd.repacd.Role='CAP'
root@imx8mpevk:~# uci commit repacd
root@imx8mpevk:~# uci set wireless.wlan0.disabled='1'
root@imx8mpevk:~# uci set wireless.@wifi-iface[1].ssid=EasyMeshssid-MAP
root@imx8mpevk:~# uci set wireless.@wifi-iface[1].encryption='psk2+ccmp'
root@imx8mpevk:~# uci set wireless.@wifi-iface[1].key=EasyMeshssid-MAP
root@imx8mpevk:~# uci set wireless.@wifi-iface[2].ssid=EasyMeshssid-MAP
root@imx8mpevk:~# uci set wireless.@wifi-iface[2].encryption='psk2+ccmp'
root@imx8mpevk:~# uci set wireless.@wifi-iface[2].key=EasyMeshssid-MAP
root@imx8mpevk:~# uci commit wireless
Step 2: 执行如下命令使能Controller角色
## insert modules
root@imx8mpevk:~# modprobe llc
root@imx8mpevk:~# modprobe stp
root@imx8mpevk:~# modprobe bridge
root@imx8mpevk:~# insmod /usr/lib/modules/emesh-sp.ko
root@imx8mpevk:~# insmod /usr/lib/modules/hyfi-bridging.ko
root@imx8mpevk:~# insmod /usr/lib/modules/wlan_cnss_core_pcie.ko
root@imx8mpevk:~# modprobe cfg80211
root@imx8mpevk:~# insmod /usr/lib/modules/wlan.ko country_code=US
root@imx8mpevk:~# insmod /usr/lib/modules/wlan_son_cld.ko
## process
root@imx8mpevk:~# ubusd &
root@imx8mpevk:~# procd -s /var/run/ubus/ubus.sock &
root@imx8mpevk:~# netifd -s /var/run/ubus/ubus.sock -c /etc/config -p /lib/netifd &
## config bridge
root@imx8mpevk:~# brctl addbr br-lan
root@imx8mpevk:~# ifconfig br-lan hw ether $(iw dev wlan1 info |grep addr|awk '{print $2}')
root@imx8mpevk:~# ip addr flush dev eth0
root@imx8mpevk:~# ip addr flush dev br-lan
## scripts
root@imx8mpevk:~# ln -fs /usr/sbin/uci /sbin
root@imx8mpevk:~# . /etc/cap_cfg_hyctl.sh
root@imx8mpevk:~# . /etc/cfg_wireless_mac.sh
root@imx8mpevk:~# /etc/init.d/repacd start
root@imx8mpevk:~# . /etc/dnsmasq.sh
Step 3: 执行如下命令检查EasyMesh功能是否加载成功
root@imx8mpevk:~# ps
...944 root 7708 S /usr/sbin/hostapd /var/run/hostapd-wlan1.conf -ddd -
954 root 1956 S /usr/sbin/hostapd_cli -i wlan1 -p /var/run/hostapd-w
1046 root 7708 S /usr/sbin/hostapd /var/run/hostapd-wlan2.conf -ddd -
1052 root 1956 S /usr/sbin/hostapd_cli -i wlan2 -p /var/run/hostapd-w
1259 root 3840 S /usr/sbin/wsplcd -c /tmp/wsplcd-lan.conf -a -M /etc/
1535 root 25200 S /usr/sbin/ezmesh -d -C /tmp/ezmesh-lan.conf -P 7777 -cfg80211
1565 nobody 2292 S dnsmasq --dhcp-range=192.168.39.10,192.168.39.100,12h -p 54
3. 功能验证
3.1 验证拓扑
3.1.1 验证EasyMesh Controller和Agent连接
Step 1: 按照下图搭建验证拓扑
Step 2: 在Controller设备命令行上执行如下命令
root@imx8mpevk:~# hostapd_cli -i wlan2 -p /var/run/hostapd-wlan2 wps_pbc
命令行显示如下信息则表示WPS PBC触发成功,Agent可以通过WPS方式进行连接。
OK
Step 3: 在Agent设备命令行上执行如下命令。
root@imx8mpevk:~# wpa_cli -i wlan0 -p /var/run/wpa_supplicant-wlan0
> wps_pbc multi_ap=1
命令行显示如下信息则表示Agent通过WPS方式和Controller设备连接成功。
OK
<3>CTRL-EVENT-NETWORK-REMOVED 1
<3>CTRL-EVENT-NETWORK-ADDED 1
<3>WPS-PBC-ACTIVE
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE-PBC
<3>Trying to associate with 6a:b5:6a:61:2c:d5 (SSID='EasyMeshssid-MAP' freq=5220 MHz)
<3>Associated with 6a:b5:6a:61:2c:d5
<3>CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
<3>CTRL-EVENT-EAP-STARTED EAP authentication started
<3>CTRL-EVENT-EAP-STATUS status='started' parameter=''
<3>CTRL-EVENT-EAP-PROPOSED-METHOD vendor=14122 method=1
<3>CTRL-EVENT-EAP-STATUS status='accept proposed method' parameter='WSC'
<3>CTRL-EVENT-EAP-METHOD EAP vendor 14122 method 1 (WSC) selected
<3>WPS-CRED-RECEIVED 100e0043102600010110450010456173794d657368737369642d4d4150100300020020100f0002000810270010456173794d657368737369642d4d4150102000066e66251109da
<3>WPS-SUCCESS
<3>CTRL-EVENT-EAP-STATUS status='completion' parameter='failure'
<3>CTRL-EVENT-EAP-FAILURE EAP authentication failed
<3>CTRL-EVENT-DISCONNECTED bssid=6a:b5:6a:61:2c:d5 reason=3 locally_generated=1
<3>Trying to associate with SSID 'EasyMeshssid-MAP'
<3>Associated with 02:03:7f:95:c6:c0
<3>CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
<3>WPA: Key negotiation completed with 02:03:7f:95:c6:c0 [PTK=CCMP GTK=CCMP]
<3>CTRL-EVENT-CONNECTED - Connection to 02:03:7f:95:c6:c0 completed [id=1 id_str=]
<4>WPA: EAPOL-Key Replay Counter did not increase - dropping packet
<3>CTRL-EVENT-DISCONNECTED bssid=02:03:7f:95:c6:c0 reason=3 locally_generated=1
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>Trying to associate with SSID 'EasyMeshssid-MAP'
<3>Associated with 6a:b5:6a:61:2c:d5
<3>CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
<3>CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully (based on lower layer success)
<3>WPA: Key negotiation completed with 6a:b5:6a:61:2c:d5 [PTK=CCMP GTK=CCMP]
<3>CTRL-EVENT-CONNECTED - Connection to 6a:b5:6a:61:2c:d5 completed [id=1 id_str=]
Step 4: 在Agent设备命令行上执行如下命令去获取IP地址
root@imx8mpevk:~# . /etc/dhcpd.sh
命令行显示如下信息则表示Agent成功获取到IP地址。
dhcpcd not running
DUID 00:01:00:01:2c:f7:9b:44:aa:1d:cd:82:bc:8e
br-lan: IAID 0b:58:38:0a
br-lan: soliciting a DHCP lease
br-lan: soliciting an IPv6 router
br-lan: offered 192.168.39.99 from 192.168.39.1
br-lan: probing address 192.168.39.99/24
br-lan: leased 192.168.39.99 for 43200 seconds
br-lan: adding route to 192.168.39.0/24
br-lan: adding default route via 192.168.39.1
forked to background, child pid 19366
Step 5: 等待约1分钟后,在Agent设备命令行执行如下命令
root@imx8mpevk:~# iw dev
命令行显示如下信息则表示Agent完成Fronthaul AP配置同步。
phy#0
Interface wlan2
ifindex 9
wdev 0x4
addr 6a:24:68:17:30:80
ssid EasyMeshssid-MAP
type AP
channel 44 (5220 MHz), width: 80 MHz, center1: 5210 MHz
txpower 41.00 dBm
Interface p2p0
ifindex 7
wdev 0x3
addr 66:c4:03:0a:00:bb
type P2P-device
Interface wlan1
ifindex 6
wdev 0x2
addr a6:b4:0b:58:38:0a
ssid EasyMeshssid-MAP
type AP
channel 1 (2412 MHz), width: 40 MHz, center1: 2422 MHz
txpower 0.00 dBm
Step 6: 在Agent设备命令行执行如下命令。
root@imx8mpevk:/# ping 192.168.39.1
若IP地址ping成功,则表示Agent设备和Controller设备间的连通性没有问题。
Step 7: 使用STA(手机)连接Agent设备, 在STA上ping Controller设备IP地址,若ping成功,则表示STA和Controller设备间的连通性没有问题。
3.1.2 验证两个EasyMesh Agent连接
Step 1: 按照下图搭建验证拓扑。
Step 2: 参照前面章节完成Controller设备和Agent1设备的连接。
Step 3: 执行的操作在Agent1设备和Agent2设备上再执行一遍,完成Agent1设备和Agent2设备的连接。
Step 4: 使用STA1(手机)连接Agent1设备, 在STA1上ping Controller设备IP地址,若ping成功,则表示STA1和Controller设备间的连通性没有问题。
Step 5: 使用STA2(手机)连接Agent2设备, 在STA2上ping Controller设备IP地址,若ping成功,则表示STA2和Controller设备间的连通性没有问题。