AP 节点被当作固定位置的网络设备进行配置和使用,并没有考虑其移动性相关的功能实现。而要赋予 AP 节点移动的特性,需要借助 MininetWiFi 中已有的移动模型相关机制,并参考其他可移动节点(比如站点 sta
节点,通常在无线仿真中站点是可移动的)的代码逻辑来进行改造。
使用脚本mobility中的sta节点的可移动特性代码逻辑
import time # 导入time模块,以便于控制移动的时间间隔
p1, p2, p3, p4 = {}, {}, {}, {}
if '-c' not in args:
p1 = {'position': '40.0,30.0,0.0'}
p2 = {'position': '40.0,40.0,0.0'}
p3 = {'position': '31.0,10.0,0.0'}
p4 = {'position': '55.0,31.0,0.0'}
net.mobility(sta1, 'start', time=1, **p1)
net.mobility(sta2, 'start', time=2, **p2)
net.mobility(sta1, 'stop', time=12, **p3)
net.mobility(sta2, 'stop', time=22, **p4)
net.stopMobility(time=23)
因为使用到移动时间的概念,所以导入time模块。
这样子就可以实现AP节点的移动。
无线 Mesh 网络是一种自组织、自我修复的无线网络结构,其中多个节点通过无线信号相互连接,形成一个网络。这种网络的特点是每个节点不仅可以转发数据,还可以与多个其他节点直接通信,从而增加了网络的覆盖范围和稳定性。
在脚本中加入命令执行代码,通过mesh组网方式实现AP之间的无线连接。
ef execute_command(command):
"""执行终端命令并返回输出"""
info(f"执行命令: {command}\n")
os.system(command)
def setup_mesh_ap(ap, mesh_id):
"""设置无线Mesh接入点"""
info(f"配置接入点 {ap.name} 为无线Mesh接入点...\n")
# 创建Mesh接口
execute_command(f"sudo iw dev {ap.name} interface add {ap.name}-mesh type mesh")
# 设置Mesh ID
execute_command(f"sudo iw dev {ap.name}-mesh set mesh_id {mesh_id}")
# 设置频道
execute_command(f"sudo iw dev {ap.name}-mesh set channel 1")
# 启动Mesh接口
execute_command(f"sudo ip link set {ap.name}-mesh up")
# 加入Mesh网络
execute_command(f"sudo iw dev {ap.name}-mesh join {mesh_id}")
info(f"接入点 {ap.name} 设置为Mesh接入点成功!\n")
AP1,2,3都成功接入mesh组网。
使用sta2 iw dev sta2-wlan0 link命令测试自组织网络是否实现就近连接以及是否可连接
//sta2站点节点
sta2 iw dev sta2-wlan0 link
显示sta2站点没网,sta1站点因为离ap3近所以就近连接ap3