我正在節點模型中實現無線路由協議,該模型使用Ieee80211Nic類型的網絡接口卡,並將其設置爲ad-hoc模式(Ieee80211MgmtAdhoc)。我想使用來自NIC的RSSI值作爲路由協議中的指標之一。
如何從NIC獲取特定鄰居節點(由其MAC地址標識)的RSSI值?Omnet ++/INET:如何從802.11網卡獲取RSSI?
編輯:
在INET 3.6源代碼一些挖後,我發現,Ieee80211NIC組分由下列模塊(或層)(以自上而下的順序)的:
- 劑
- MGMT(只在一個站STA使用在基礎設施模式)(可以是類型Ieee80211MgmtAP,Ieee80211MgmtSTA,Ieee80211MgmtAdhoc的)
- MAC
- 無線電
我進一步分析了Ieee80211MgmtSTA源代碼,並發現它實現了以下方法,該方法記錄所接收的信號強度(bss.setRxPower(AP-> RXPOWER)):
void Ieee80211MgmtSTA::sendScanConfirm()
{
EV << "Scanning complete, found " << apList.size() << " APs, sending confirmation to agent\n";
// copy apList contents into a ScanConfirm primitive and send it back
int n = apList.size();
Ieee80211Prim_ScanConfirm *confirm = new Ieee80211Prim_ScanConfirm();
confirm->setBssListArraySize(n);
auto it = apList.begin();
//XXX filter for req'd bssid and ssid
for (int i = 0; i < n; i++, it++) {
APInfo *ap = &(*it);
Ieee80211Prim_BSSDescription& bss = confirm->getBssList(i);
bss.setChannelNumber(ap->channel);
bss.setBSSID(ap->address);
bss.setSSID(ap->ssid.c_str());
bss.setSupportedRates(ap->supportedRates);
bss.setBeaconInterval(ap->beaconInterval);
bss.setRxPower(ap->rxPower);
}
sendConfirm(confirm, PRC_SUCCESS);
}
然而,在Ieee80211MgmtAdhoc型的情況下,信道掃描(其由代理模塊控制)未實現。因此,不可能檢索特定節點的Rx電源。
有沒有人設法實現一個代理模塊,在Adhoc模式下進行頻道掃描?
或者有其他方法可以獲取RSSI信息嗎?
ad-hoc管理模塊的實現實際上相當有限。我正在考慮進行以下更改以啓用讀取RSSI:1.向Ieee80211MgmtAdhoc類添加信標廣播; 2.添加一個表格來保存相鄰節點的RSSI等級; 3.修改SNIRReceiverBase類(無線電模塊)中的computeReceptionIndication()方法,將RSSI讀數添加到附加到MAC幀的ReceptionIndication結構中。 >>這個想法是從信標幀讀取RSSI並將其添加到鄰居節點的表中 – zanlik