OMNET ++: Как получить MAC-адрес источника кадра в INET 4.0?

я использую INET Framework 4.0 с OMNET++, Я настроил свой Ieee80211ScalarRadio модуль для считывания мощности сигнала и MAC-адреса источника маяков, полученных от различных точек доступа в моем AdhocHost,
Вот мой обычай 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

Как видите, я переопределяю Ieee80211ScalarRadio«s sendUp() метод для получения значений, которые я хочу от 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 значение без каких-либо ошибок?

0

Решение

Правильное имя тега, который содержит MAC-адрес: MacAddressIndне MacAddress, Объявлено в MacAddressTag_m.h который вы включили.

РЕДАКТИРОВАТЬ
Дополнительное замечание: MacAddressInd содержит два адреса: источник и пункт назначения. Таким образом, вы должны указать, какой из них вы хотите получить, например:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]