未知协议:protocolId = 92,protocolName = CbdProto,servicePrimitive = REQUEST

Unknown protocol: protocolId = 92, protocolName = CbdProto, servicePrimitive = REQUEST

我尝试使用 INET SensorNode 模块实现网络层协议。我正确地扩展了 NED 简单模块如下:

simple CbdProto extends NetworkProtocolBase like INetworkProtocol
{
    @class(inet::CbdProto);
}

此协议通过扩展 class :

添加到 INET 协议列表 class (Protocol.cc)

在ProtocolNew.h

static const ProtocolNew CbdProto;

在ProtocolNew.cc

const ProtocolNew ProtocolNew::CbdProto("CbdProto","Network Protocol",ProtocolNew::NetworkLayer);

C++ class 已相应设置。我在 initialize() 方法中注册协议:

void inet::CbdProto::initialize(int stage) {
    if (stage == INITSTAGE_NETWORK_LAYER) {
        registerProtocol(ProtocolNew::CbdProto, gate("transportOut"), gate("transportIn"));
    }
}

.ini文件如下:

**.hasIpv4 = false
**.hasIpv6 = false
**.hasGn = true
**.generic.typename = "SimpleNetworkLayer"
**.generic.np.typename = "CbdProto"

但我一直遇到这个错误,我不知道如何修复它。

 <!> handlePacket(): Unknown protocol: protocolId = 92, protocolName = CbdProto, servicePrimitive = REQUEST, pathStartGate = WsnCbd.s[0].udp.ipOut, pathEndGate = WsnCbd.s[0].tn.in[0] -- in module (inet::MessageDispatcher) WsnCbd.s[0].tn (id=18), at t=0s, event #6

拜托,我会感谢你的意见。

谢谢

  1. 您不必创建新的 class。您只需将新协议添加到 Protocol.cc 和 .h 文件,添加到现有的 Protocol。 (不要忘记在 .cc 文件中创建一个实例。
  2. 您的新协议向上层提供了服务,因此您必须在协议代码中使用registerService()