|
INET Framework for OMNeT++/OMNEST
|
Compound module for PIM protocol (RFC 4601).
More...
#include <Pim.h>
Compound module for PIM protocol (RFC 4601).
◆ Pim()
◆ ~Pim()
◆ computeCrc()
166 MemoryOutputStream stream;
168 auto pseudoHeader = makeShared<TransportPseudoHeader>();
169 pseudoHeader->setSrcAddress(srcAddress);
170 pseudoHeader->setDestAddress(destAddress);
171 pseudoHeader->setNetworkProtocolId(networkProtocol->getId());
173 pseudoHeader->setPacketLength(pimPacket->getChunkLength());
174 pseudoHeader->setChunkLength(
B(40));
Referenced by insertCrc(), and verifyCrc().
◆ getCrcMode()
◆ handleCrashOperation()
◆ handleMessageWhenUp()
| void inet::Pim::handleMessageWhenUp |
( |
cMessage * |
msg | ) |
|
|
overrideprotectedvirtual |
◆ handleStartOperation()
◆ handleStopOperation()
◆ initialize()
| void inet::Pim::initialize |
( |
int |
stage | ) |
|
|
overrideprotectedvirtual |
Reimplemented from inet::OperationalMixin< cSimpleModule >.
32 const char *crcModeString = par(
"crcMode");
37 cModuleType *moduleType = cModuleType::get(
"inet.routing.pim.PimCrcInsertionHook");
38 auto crcInsertion = check_and_cast<PimCrcInsertionHook *>(moduleType->create(
"crcInsertion",
this));
39 crcInsertion->finalizeParameters();
40 crcInsertion->callInitialize();
51 auto ipv6 =
dynamic_cast<INetfilter *
>(findModuleByPath(
"^.ipv6.ipv6"));
53 ipv6->registerHook(0, crcInsertion);
◆ insertCrc() [1/2]
114 pimPacket->setCrc(0x0000);
118 pimPacket->setCrc(0xC00D);
122 pimPacket->setCrc(0xBAAD);
127 pimPacket->setCrc(0x0000);
128 auto crc =
computeCrc(networkProtocol, srcAddress, destAddress, pimPacket);
129 pimPacket->setCrc(crc);
133 throw cRuntimeError(
"Unknown CRC mode: %d", (
int)
crcMode);
◆ insertCrc() [2/2]
| void inet::Pim::insertCrc |
( |
const Ptr< PimPacket > & |
pimPacket | ) |
|
|
static |
Referenced by inet::PimCrcInsertionHook::datagramPostRoutingHook(), inet::PimDm::sendAssertPacket(), inet::PimDm::sendGraftAckPacket(), inet::PimDm::sendGraftPacket(), inet::PimBase::sendHelloPacket(), inet::PimDm::sendJoinPacket(), inet::PimSm::sendPIMAssert(), inet::PimSm::sendPIMJoin(), inet::PimSm::sendPIMPrune(), inet::PimSm::sendPIMRegister(), inet::PimSm::sendPIMRegisterNull(), inet::PimSm::sendPIMRegisterStop(), inet::PimDm::sendPrunePacket(), and inet::PimDm::sendStateRefreshPacket().
◆ numInitStages()
| virtual int inet::Pim::numInitStages |
( |
| ) |
const |
|
inlineoverrideprotectedvirtual |
◆ verifyCrc()
| bool inet::Pim::verifyCrc |
( |
const Protocol * |
networkProtocol, |
|
|
const Ptr< const PimPacket > & |
pimPacket, |
|
|
Packet * |
packet |
|
) |
| |
|
static |
139 switch (pimPacket->getCrcMode()) {
142 return pimPacket->getCrc() == 0x0000;
145 auto totalLength = pimPacket->getChunkLength();
147 return pimPacket->isCorrect() && udpDataBytes->isCorrect();
154 auto srcAddress = l3AddressInd->getSrcAddress();
155 auto destAddress = l3AddressInd->getDestAddress();
156 auto computedCrc =
computeCrc(networkProtocol, srcAddress, destAddress, pimPacket);
157 return computedCrc == 0xFFFF;
160 throw cRuntimeError(
"Unknown CRC mode");
◆ crcMode
The documentation for this class was generated from the following files:
static const Protocol ipv4
Definition: Protocol.h:93
static const Protocol ipv6
Definition: Protocol.h:94
virtual void initialize(int stage) override
Definition: OperationalMixinImpl.h:26
@ CRC_COMPUTED
Definition: CrcMode_m.h:59
static void serialize(MemoryOutputStream &stream, const Ptr< const Chunk > &chunk, b offset=b(0), b length=b(-1))
Serializes a chunk into the given stream.
Definition: Chunk.cc:175
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd L3AddressInd
Definition: IUdp-gates.txt:20
CrcMode parseCrcMode(const char *crcModeString, bool allowDisable)
Definition: CrcMode.cc:14
@ CRC_DISABLED
Definition: CrcMode_m.h:56
static uint16_t computeCrc(const Protocol *networkProtocol, const L3Address &srcAddress, const L3Address &destAddress, const Ptr< const PimPacket > &pimPacket)
Definition: Pim.cc:164
static void insertCrc(const Ptr< PimPacket > &pimPacket)
Definition: Pim.cc:103
static const Protocol pim
Definition: Protocol.h:103
intscale< b, 1, 8 > B
Definition: Units.h:1168
INET_API InitStage INITSTAGE_TRANSPORT_LAYER
Initialization of transport-layer protocols.
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
CrcMode
Enum generated from inet/transportlayer/common/CrcMode.msg:12 by opp_msgtool.
Definition: CrcMode_m.h:54
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
@ PF_ALLOW_INCORRECT
Definition: Chunk.h:281
static uint16_t checksum(const void *addr, unsigned int count)
Definition: TcpIpChecksum.h:33
@ CRC_DECLARED_CORRECT
Definition: CrcMode_m.h:57
@ CRC_DECLARED_INCORRECT
Definition: CrcMode_m.h:58
CrcMode crcMode
Definition: Pim.h:36
@ IP_PROT_PIM
Definition: IpProtocolId_m.h:106
void registerProtocol(const Protocol &protocol, cGate *gate, ServicePrimitive servicePrimitive)
Registers a protocol primitive (PDU processing) at the given gate.
Definition: IProtocolRegistrationListener.cc:83
INET_API InitStage INITSTAGE_ROUTING_PROTOCOLS
Initialization of routing protocols.