簡體   English   中英

OMNET ++:如何在INET 4.0中獲取幀的源MAC地址?

[英]OMNET++: How to obtain frame's source MAC Address in INET 4.0?

我將INET Framework 4.0與OMNET++ 我已經自定義了Ieee80211ScalarRadio模塊,以讀取從AdhocHost各個AP接收到的信標的信號功率和源MAC地址。
這是我的自定義CIeee80211ScalarRadio.ned文件:

import inet.physicallayer.ieee80211.packetlevel.Ieee80211ScalarRadio;

module CIeee80211ScalarRadio extends Ieee80211ScalarRadio
{
    @class(inet::physicallayer::CIeee80211ScalarRadio);
}

這是對應的CIeee80211ScalarRadio.cc文件:

#include "inet/physicallayer/ieee80211/packetlevel/Ieee80211Radio.h"
#include "inet/physicallayer/common/packetlevel/SignalTag_m.h"
#include "inet/linklayer/common/MacAddressTag_m.h"


#include <omnetpp.h>
#include <string>

#include <cmath>
#include <iostream>

namespace inet{
namespace physicallayer{
class CIeee80211ScalarRadio : public Ieee80211Radio{
protected:
   virtual void sendUp(Packet *macFrame) override;
};

Define_Module(CIeee80211ScalarRadio);

void CIeee80211ScalarRadio::sendUp(Packet *macFrame)
{
    if (macFrame->findTag<SignalPowerInd>() != nullptr) {
           auto signalPowerInd = macFrame->getTag<SignalPowerInd>();
           auto rxPower = signalPowerInd->getPower().get();
           double pdBm = 10*log10(rxPower)+30;
           EV_INFO << "RX power = " << pdBm << " dBm" << endl;
    }
    if(macFrame->findTag<MacAddress>() != nullptr){
        auto macAddress = macFrame->getTag<MacAddress>();
        EV_INFO << "Mac Address = " << macAddress << endl;
    }

    Radio::sendUp(macFrame);
}
}//namespace physicallayer
}//namespace inet

如您所見,我正在重寫Ieee80211ScalarRadiosendUp()方法,以從macFrame獲取所需的值。
我可以成功提取RxPower ,但是,當我對MacAddress做同樣的事情時,我在INET自己的源代碼中收到以下編譯器錯誤:

../inet4/src/inet/common/packet/tag/TagSet.h:123:36: error: static_cast from 'std::__1::__vector_base<omnetpp::cObject *, std::__1::allocator<omnetpp::cObject *> >::value_type' (aka 'omnetpp::cObject *') to 'inet::MacAddress *', which are not related by inheritance, is not allowed

如何獲得MacAddress值而沒有任何錯誤?

包含MAC地址的標記的專有名稱是MacAddressInd ,而不是MacAddress 它已包含在MacAddressTag_m.h中聲明。

編輯
附加說明: MacAddressInd包含兩個地址:源和目標。 因此,您應該確定要獲取的對象,例如:

auto macAddress = macFrame->getTag<MacAddressInd>()->getSrcAddress();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM