我正在使用INET并且想要模拟由三个接入点(AP)和一个移动节点(MN)组成的场景,可能每个AP在其范围内具有其他关联的MN,我想要的是:而MN (在我的场景中)移动并从AP获取信标,在与AP关联之前,我可以获得与每个AP关联的其他MN的数量吗?我探索了很多源代码,我在ieee80211MgmtAP中找到了MACaddressTable和类似stalist的东西,它们对我有用吗?并将它们用作相关MN的总数, 那么我如何评估斯大林主义者的长度呢?还是MACaddressTable?
否则我必须把一个计数器计算在AP侧并通过信标帧发射它?如果是这样,请给我一些指南或捷径 问候....
答案 0 :(得分:1)
在INET模型中,AP在staList
地图中存储自己的电台。要在本地计算当前的关联站数,可以使用以下代码:
STAList::const_iterator it;
int assocSta = 0;
for (it = staList.begin(); it != staList.end(); ++it) {
if (it->second.status == ASSOCIATED)
assocSta++;
}
如果您想要修改标准信标帧,首先,您必须假设您想要在信标帧中添加新字段的位置,例如之后的现有领域,以及此提交的大小应该具有的范围。然后:
int noOfAssociatedStas;
的课程Ieee80211BeaconFrameBody
中添加新的字段(例如Ieee80211MgmtFrames.msg
),并在Ieee80211BeaconFrame
定义中更正长度Ieee80211Serializer.cc
在else if (dynamic_cast<const Ieee80211BeaconFrame *>(pkt))
添加新字段序列化后的,例如:
unsigned int numSta = Frame->getBody().getNoOfAssociatedStas();
b.writeByte(numSta); // assuming that the new field is 1 byte length
在Ieee80211Serializer.cc
中的deserialize
中添加新字段的反序列化,例如case 0x80: //ST_BEACON
之后:
unsigned int numSta = b.readByte();
请注意,添加新文件的位置(第二个项目符号)必须与阅读它的位置完全匹配(第三个项目符号)。