EPONImplementationforOMNet++
0.8Beta
|
#include <ONUMacCtlBase.h>
Public Member Functions | |
ONUMacCtlBase () | |
virtual | ~ONUMacCtlBase () |
Protected Member Functions | |
virtual void | initialize () |
virtual void | finish () |
Log Scalars. | |
virtual void | startTxOnPON ()=0 |
virtual void | processFrameFromMAC (cMessage *msg) |
virtual void | processMPCP (EthernetIIFrame *frame)=0 |
virtual cModule * | getNeighbourOnGate (const char *gate) |
virtual void | dumpReg () |
std::string | getStateStr () |
Protected Attributes | |
uint64_t | txrate |
Tx Rate TODO: make it a parameter. | |
EPON_mac * | emac |
Pointer to the mac layer for some control and use of MAC address. | |
uint32_t | clock_reg |
uint32_t | start_reg |
uint32_t | len_reg |
int | transmitState |
int | RTT |
uint16_t | slotLength |
uint16_t | slotNumber |
int | numGates |
IPassiveQueue * | queue_mod |
cQueue | tmp_queue |
int | numFramesFromHL |
int | numFramesFromLL |
int | numFramesFromHLDropped |
simtime_t | fragmentedTime |
cMessage * | startTxMsg |
{
// TODO Auto-generated constructor stub
}
ONUMacCtlBase::~ONUMacCtlBase | ( | ) | [virtual] |
{
// TODO Auto-generated destructor stub
}
void ONUMacCtlBase::dumpReg | ( | ) | [protected, virtual] |
{ EV << "Sim(ns16): "<<MPCPTools::simTimeToNS16()<<endl; EV << "Clock: "<<clock_reg<<endl; EV << "Start: "<<start_reg<<endl; EV << "Length: "<<len_reg<<endl; }
void ONUMacCtlBase::finish | ( | ) | [protected, virtual] |
Log Scalars.
{ simtime_t t = simTime(); recordScalar("simulated time", t); recordScalar("messages handled", numFramesFromHL+numFramesFromLL); recordScalar("Dropped Frames From HL", numFramesFromHLDropped); double fragBits = fragmentedTime.dbl()/(1/GIGABIT_ETHERNET_TXRATE); recordScalar("FragmentedBits", fragBits); if (t>0) { recordScalar("frames/sec", (numFramesFromHL+numFramesFromLL)/t); recordScalar("drops/sec", numFramesFromHLDropped/t); recordScalar("FragmentedBits/sec", fragBits/t); } }
cModule * ONUMacCtlBase::getNeighbourOnGate | ( | const char * | gate | ) | [protected, virtual] |
{
return gate(g)->getNextGate()->getOwnerModule();
}
std::string ONUMacCtlBase::getStateStr | ( | ) | [protected] |
void ONUMacCtlBase::initialize | ( | ) | [protected, virtual] |
Reimplemented in ONUMacCtl_NP, and ONUMacCtl_P.
{ clock_reg=0; start_reg=0; len_reg=0; numGates = 0; // Link to MAC layer emac = dynamic_cast<EPON_mac *>(getNeighbourOnGate("lowerLayerOut")); if (!emac) opp_error("No MAC layer found connected under ONU MAC Control Layer"); transmitState = TX_OFF; txrate=GIGABIT_ETHERNET_TXRATE; startTxMsg = new cMessage("startTxMsg", STARTTXMSG); // Init Stats numFramesFromHL=0; numFramesFromLL=0; numFramesFromHLDropped=0; fragmentedTime=0; WATCH(numFramesFromHL); WATCH(numFramesFromLL); WATCH(numFramesFromHLDropped); WATCH(fragmentedTime); WATCH(clock_reg); WATCH(start_reg); WATCH(len_reg); WATCH(transmitState); // MPCP transmitState = TX_INIT; // Initialize the Q mgmt module queue_mod = dynamic_cast<IPassiveQueue *>(getNeighbourOnGate("upperLayerOut")); if (!queue_mod) opp_error("ONUMacCtlBase: An IPassiveQueue is needed above mac control"); }
void ONUMacCtlBase::processFrameFromMAC | ( | cMessage * | msg | ) | [protected, virtual] |
{ EV << "ONUMacCtlBase: Incoming message from PON\n"; EthernetIIFrame * frame = dynamic_cast<EthernetIIFrame *>(msg); if (frame && frame->getEtherType() == MPCP_TYPE){ // Check that the frame is for us... if (frame->getDest() != emac->getMACAddress() && !frame->getDest().isBroadcast()){ EV << "MPCP not for us... dropping\n"; delete frame; return; } processMPCP(frame ); } send(msg,"upperLayerOut"); numFramesFromLL++; }
virtual void ONUMacCtlBase::processMPCP | ( | EthernetIIFrame * | frame | ) | [protected, pure virtual] |
Implemented in ONUMacCtl_NP, and ONUMacCtl_P.
virtual void ONUMacCtlBase::startTxOnPON | ( | ) | [protected, pure virtual] |
Implemented in ONUMacCtl_NP, and ONUMacCtl_P.
uint32_t ONUMacCtlBase::clock_reg [protected] |
EPON_mac* ONUMacCtlBase::emac [protected] |
Pointer to the mac layer for some control and use of MAC address.
simtime_t ONUMacCtlBase::fragmentedTime [protected] |
uint32_t ONUMacCtlBase::len_reg [protected] |
int ONUMacCtlBase::numFramesFromHL [protected] |
int ONUMacCtlBase::numFramesFromHLDropped [protected] |
int ONUMacCtlBase::numFramesFromLL [protected] |
int ONUMacCtlBase::numGates [protected] |
IPassiveQueue* ONUMacCtlBase::queue_mod [protected] |
int ONUMacCtlBase::RTT [protected] |
uint16_t ONUMacCtlBase::slotLength [protected] |
uint16_t ONUMacCtlBase::slotNumber [protected] |
uint32_t ONUMacCtlBase::start_reg [protected] |
cMessage* ONUMacCtlBase::startTxMsg [protected] |
cQueue ONUMacCtlBase::tmp_queue [protected] |
int ONUMacCtlBase::transmitState [protected] |
uint64_t ONUMacCtlBase::txrate [protected] |
Tx Rate TODO: make it a parameter.