Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __INET_ETHERMAC_H
00019 #define __INET_ETHERMAC_H
00020
00021 #include <stdio.h>
00022 #include <string.h>
00023 #include <omnetpp.h>
00024 #include "INETDefs.h"
00025 #include "Ethernet.h"
00026 #include "EtherFrame_m.h"
00027 #include "EtherMACBase.h"
00028
00029
00030 #define AUTOCONFIG_PERIOD 0.001
00031
00032 class IPassiveQueue;
00033
00037 class INET_API EtherMAC : public EtherMACBase
00038 {
00039 public:
00040 EtherMAC();
00041 virtual ~EtherMAC();
00042
00043 protected:
00044 virtual void initialize();
00045 virtual void initializeTxrate();
00046 virtual void handleMessage(cMessage *msg);
00047 virtual void finish();
00048
00049 protected:
00050
00051 bool autoconfigInProgress;
00052 double lowestTxrateSuggested;
00053 bool duplexVetoed;
00054
00055
00056 int backoffs;
00057 int numConcurrentTransmissions;
00058
00059
00060 EtherFrame *frameBeingReceived;
00061 cMessage *endRxMsg, *endBackoffMsg, *endJammingMsg;
00062
00063
00064 simtime_t totalCollisionTime;
00065 simtime_t totalSuccessfulRxTxTime;
00066 simtime_t channelBusySince;
00067 unsigned long numCollisions;
00068 unsigned long numBackoffs;
00069 cOutVector numCollisionsVector;
00070 cOutVector numBackoffsVector;
00071
00072
00073 virtual void processFrameFromUpperLayer(EtherFrame *msg);
00074 virtual void processMsgFromNetwork(cPacket *msg);
00075 virtual void handleEndIFGPeriod();
00076 virtual void handleEndTxPeriod();
00077 virtual void handleEndRxPeriod();
00078 virtual void handleEndBackoffPeriod();
00079 virtual void handleEndJammingPeriod();
00080
00081
00082 virtual void startAutoconfig();
00083 virtual void handleAutoconfigMessage(cMessage *msg);
00084 virtual void printState();
00085
00086
00087 virtual void scheduleEndRxPeriod(cPacket *);
00088 virtual void sendJamSignal();
00089 virtual void handleRetransmission();
00090 virtual void startFrameTransmission();
00091
00092
00093 virtual void updateHasSubcribers();
00094 };
00095
00096 #endif
00097
00098