该脚本的WiFi网络由一个接入点(AccessPoint,AP)和nWiFi个移动节点组成。这里的AP节点为一个双模节点,安装有WiFi设备和PPP设备。
下图为该脚本中的Wifi网络部分C++示意图:
WifiNetDevice+Mac+Phy 三层网络设备结构
WifiNetDevice:连接上下层,无实际作用
配置的具体步骤:
1. 创建结点
NodeContainer wifiStaNodes;
wifiStaNodes.Create(nWifi);
NodeContainer wifiApNode = p2pNodes.Get(0);
2. 设置Channel和WifiPhy
使用YansWifiChannelHelper和YansWifiPhyHelper两个助手类来配置Channel和WifiPhy。Wifi Channel需要配置传播延迟(propagation delay)和损耗模型(propagation loss),这两个模型加上最后一步中的移动模型一起决定了一个分组在无线信道中的传播延迟和接收功率。(在third.cc中使用Default()函数设置delay和loss的默认模型:ConstantSpeedPropagationDelayModel和LogDistancePropagationLossModel)。
YansWifiChannelHelper channel = YansWifiChannelHelper::Default();
YansWifiPhyHelper phy;
phy.SetChannel(channel.Create());
3. 设置WifiMac并在节点中安装NetDevice
使用WifiMacHelper和WifiHelper两个助手类。
前者需要设置两个参数:WifiMac子类和服务集标识符(SSID)。前者决定节点的种类(AP或移动节点),后者决定节点所属的服务集。
WifiMacHelper mac;
Ssid ssid = Ssid("ns-3-ssid");
WifiHelper wifi;
NetDeviceContainer staDevices;
mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid), "ActiveProbing", BooleanValue(false));
staDevices = wifi.Install(phy, mac, wifiStaNodes);
NetDeviceContainer apDevices;
mac.SetType("ns3::ApWifiMac", "Ssid", SsidValue(ssid));
apDevices = wifi.Install(phy, mac, wifiApNode);
WifiHelper将Wifi网络设备安装到指定结点。默认的Wifi协议是802.11a,可以通过SetStandard()函数来选择其他Wifi协议类型。
4.设置移动模型
在网络设备安装至结点后配置。
助手类为MobilityHelper,在设置时需要区分AP和移动结点。
MobilityHelper mobility;
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
mobility.Install(wifiApNode);
mobility.SetPositionAllocator("ns3::GridPositionAllocator",
"MinX",
DoubleValue(0.0),
"MinY",
DoubleValue(0.0),
"DeltaX",
DoubleValue(5.0),
"DeltaY",
DoubleValue(10.0),
"GridWidth",
UintegerValue(3),
"LayoutType",
StringValue("RowFirst"));
mobility.SetMobilityModel("ns3::RandomWalk2dMobilityModel",
"Bounds",
RectangleValue(Rectangle(-50, 50, -50, 50)));
mobility.Install(wifiStaNodes);
AP:固定结点。使用SetMobilityModel()为其设置固定位置移动模型ConstantPositionMobilityModel。
移动结点:初始位置分布+后续移动轨迹模型。SetPositionAllocator()函数设置初始位置,SetMobilityModel()设置RandomWalk2dMobilityModel移动模型。