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
正如您所看到的,我正在重写Ieee80211ScalarRadio
的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
值?
包含MAC地址的标签的正确名称是MacAddressInd
,而不是MacAddress
。它在您包含的MacAddressTag_m.h
中声明。
EDIT
附加说明:MacAddressInd
包含两个地址:源和目的地。因此,你应该精确地确定你想要获得哪一个,例如:
auto macAddress = macFrame->getTag<MacAddressInd>()->getSrcAddress();
相关文章:
- 动态获取 esp32 的 mac 地址并在以太网库中使用它.
- OMNET++:如何在INET 4.0中获取帧的源MAC地址?
- 如何在Mac OSX中获取真实的日历微秒时间(自1970年以来的纪元)?
- 如何在Mac OSX上的窗口客户端内获取真实的鼠标位置?
- 在 linux/mac 中获取多字节字符的"char"
- C - 在Mac OSX上获取文件路径
- 如何在 Windows 中使用 C++ 获取 MAC 地址
- 从Netsh WLAN获取MAC地址
- Linux C++ 如何以编程方式获取 LAN 上所有适配器的 MAC 地址
- 如何在给定设备实例ID的情况下可靠快速地获取网卡的MAC地址
- 获取 MAC OS X 的机器 ID
- 如何在Mac Os上获得按名称获取进程
- 获取系统的唯一标识符(而不是MAC地址)
- 如何使用本机 Wifi API C++获取 MAC 地址和信道信息
- C++通用多平台解决方案来获取MAC地址
- Ping网络并获取mac地址
- 如何获取MAC Xcode C++上当前用户临时文件夹的路径
- 如何在Visual C++上获取MAC
- 如何在Qt应用程序中获取MAC OS中驱动器的文件格式
- 获取Mac.app捆绑包中的相对路径