2.2. L'interface réseau IEEE 802.11a de la
librairie INET
Après avoir bien expliqué les classes de la
couche MAC et PHY de la librairie MF, nous allons décrire les classes de
ces deux couches que nous avons ajoutées à la librairie INET.
Nous commençons par la couche PHY, ses différentes classes et
ensuite la couche MAC 802.11.
2.2.1 Le diagramme des classes de la couche PHY
La figure 3.10 représente le diagramme de classe de la
couche PHY de la librairie
INET.
|
IRadioModel
|
|
|
|
|
AbstractRadio
|
|
|
|
|
|
|
|
+ initilizeFrom (cModule * radioModule) : void
+ ~IRadioModel ()
+ calculateDuration ( AirFrame *) : double
+ isReceivedCorrectly (AirFrame * airframe, const SnrList&
receivedList) : bool
|
|
|
|
|
|
|
Ieee80211aRadioModel
|
|
|
|
# snirThreshold : double
# headerLengthBits : long
# bandwidth : double
# modes : std::vector<TransmissionMode *>
# errormasks : FILE*
- perVector : cOutVector
|
|
|
|
|
IModulation
NoFecTransmissionMode
- signalSpread : double rate : uint32t
+ TrasmissionMode () : void
+ getSignalSpread () : double
+ getDateRate () : uint32_t
+ getRate () : uint32_t
+ getChrunkSuccessRate (double snr, unsigned int nbits, FILE *
errormasks, double bitrate) : double
+ generateErrorMasks (unsigned int nbits, double Pb, bool
errordistributiontype, FILE * error masks, double EER, double snr) : void
+ getBitNumbersPerModulationSymbol () : uint32t
+ ~IModulation ()
+ bitErrorRate (double snir, double bandwidth, double bitrate) :
double
TransmissionMode
+ CurrentGenerateRandomNumbersForMaskGeneration : double
+ currentValues[] : double
+ dFree : uint32t
+ adFree : uint32t
+ punctuationPeriod : uint32_t
+ coderOutputBits : uint32_t
+ codingRate : double
+ Ck[] : uint32_t
0..1
1..*
FecQam Mode
- m
- adFree
dFree
- adFreePlusone
|
: unsigned int : unsigned int : unsigned int : unsigned
int
|
|
+ NoFecTransmissionMode (double signalspread, uint32t rate,
double codingrate) + ~NoFecTransmissionMode ()
+ getSignalSpread () : double
+ getDataRate () : uint32t
# getBpskBer (double snr) : double
# getQamBer (double snr, unsigned int m) : double
# Qfunction (double x) : double
# log2 (double v) : double
+ getRate () : uint32t
FecTransmissionMode
NoFecBpskMode
+ NoFecBpskMode (double signal_spread, uint32_t rate, double
cod_rate)
+ ~NoFecBpskMode ()
+ getChunkSuccessRate (double snr, unsigned int nbits, FILE *
errormasks, double bitrate) : double
+ bitErrorRate (double snir, double bandwidth, double bitrate) :
double
+ getBitNumbersPerModulationSymbol () : uint32_t
WirelessMacBase
Ieee80211aMac
INotifia ble
+ Ieee80211aModel () : void
+ ~Ieee80211aModel () : void
+ initializeFrom (cModule * radioModule) : void
+ calculateDuration (AirFrame * airframe) : int
+ isReceivedCorrectly (AirFrame * airframe, const SnrList&
receivedList) : int
# packetOK (double snirMin, int length, double bitrate) :
bool
# dB2fraction (double dB) : double
# configure80211a () : void
# getMode (double bitrate) : TransmissionMode
# addTransmissionMode (TransmissionMode * mode) : void
0..1 0..*
initializedFrom (cModule * radioModule) : void
calculateReceivedPower (double pSend, double carrierFrequency,
double distance) : double ~IReceptionModel ()
# FadingProcessCoefs : cmat
# FadingArrayIndex : int
# FadingArrayIndexInternal : int
+ FecTransmissionMode (double signal_spread, uint32_t rate,
double coding_rate) + ~FecTransmissionMode ()
+ getDataRate () : unint32t
+ increaseFadingArrayIndex () : void
+ getFadingFactor () : double
# calculatePdOdd (double ber, unsigned int d) : double
# calculatePdEven (double ber, unsigned int d) : double
# calculatePd (double ber, unsigned int d) : double
# calculatePb (double ber, uint32t dfree, uint32t Ck[], uint32t
puncturingperiod) : double
- factorial (uint32_t k) : unint32_t
- binomial (uint32t k, double p, uint32t n) : double
FecBpskMode
- dFree : unsigned int - adFree : unsigned int + FecBpskMode
(double signalspread, uint32t rate, double codingrate, unsigned int dfree,
unsigned int adfree)
+ FecBpskMode (double signal_spread, uint32_t rate, double
coding_rate)
+ ~FecBpskMode ()
+ getChunkSuccessRate () : double
+ bitErrorRate (double snir, double bandwidth, double bitrate) :
double
+ getBitNumbersPerModulationSymbol () : uint32t
1..1
0..*
0..1
Ieee80211aRadio
+ createReceptionModel () : IReceptionModel * + createRadioModel
(): IRadioModel *
0..1
NoFecQamMode
+ NoFecQamMode (double signal _spread, uint32 _t rate, double
cod_rate, unsigned int m) + ~NoFecQamMode ()
+ getBitNumbersPerModulationSymbol () : uint32t
+ bitErrorRate (double snir, double bandwidth, double bitrate) :
double
+ getChunkSuccessRate (double snr, unsigned int nbits, FILE *
error_masks, double bitrate) : double
- m : unsigned int
1..1
IRece ptionModel
ShadowingMode
systemLoss : double
- receivedAntennaGain : double
shadowing : double
- pathLossExponent : double
- shadowingVariance : double
shadowingNumberOfSamples : int
- shadowingRandomNumberVectorIndex : int
shadowingRandomNumberVector : vec
+ initializedFrom (cModule * radioModule) : void
+ calculateReceivedPower (double pSend, double carrierFrequency,
double distance) : double
+ + +
TwoRayMode
-systemLoss : double
- receiverAntennaGain : double
- ht : double
hr : double
|
|
+ initializedFrom (cModule * radioModule) : void
+ FecQamMode (double signalSpread, int32_t rate, double
codingRate, unsigned int M, unsigned int dFree, unsigned int adFree, unsigned
int adFreePlusOne) + FecQamMode (double signalSpread, int32 _t rate, double
codingRate, unsigned int M)
+ ~FecQamkMode () : void
+ getBitNumbersPerModulationSymbol () : uint32_t
+ getBitNumbersPerModulationSymbol2 () : uint32t
+ bitErrorRate (double snir, double bandwidth, double bitrate) :
double
+ calculateReceivedPower (double pSend, double carrierFrequency,
double distance) : double
- address : MACAddress
- bitrate : double
- basicBitrate : double
- maxQueueSize : int
- rtsThreshold : int
retryLimit : int
- cwMinData : int
- cwMinBroadcast : int
- fragmentationThreshold : int
- sequenceNumber : int
lastReceiveFailed : bool
backoff : bool
- nav : bool
- backoffPeriod : double
- retryCounter : int
radioState : RadioState::State
transmissionQueue : Ieee80211DataOrMgmtFrameList
- asfTuplesList : Ieee80211ASFTupleList
- queueModule : IPassiveQueue *
- pendingRadioConfigMsg : cMessage *
# autoBitrate : int
# rateIndex : int
# successCounter : int
# failedCounter : int
recovery : bool
timer : int
successThreshold : int
maxSuccessThreshold : int
timerTimeout : int
minSuccessThreshold : int
minTimerTimeout : int
successCoeff : double
timerCoeff : double
stateVector : cOutVector
radioStateVector : cOutVector
PHYRateVector : cOutVector
mediumStateChange : cMessage *
|
Ieee80211aMac () ~Ieee80211aMac ()
numInitStages () : int
initialize ( int) : void
registerInterface () : void
initializeQueueModule () : void
frameDuration (Ieee80211Frame * msg) : double
frameDuration (int bits, double bitrate) : double
getTimeout () : int
getMaxBitrate () : int
getMinBitrate () : int
reportDataOk () : void
reportDataFailed () : void
getMinTimerTimeout () : int
getMinSuccessThreshold () : int
getTimerTimeout () : int
getSuccessThreshold () : int
setTimerTimeout (int timertimeout) : void
setSuccessThreshold (int success_threshold) : void
reportRecoveryFailure () : void
reportFailure () : void
needRecoveryFallback () : bool
needNorma lFallback () : bool
getBitrate () : double
setBitrate (double b_rate) : void
|
|
0..1
FreeSpaceMode
- systemLoss : double
- receiverAntennaGain : double
+ initializedFrom (cModule * radioModule) : void
+ calculateReceivedPower (double pSend, double carrierFrequency,
double distance) : double
2.2.1.1. La classe Ieee80211aRadio
Cette classe représente la couche physique IEEE
802.11. Elle est une classe dérivée de la classe AbstractRadio.
Elle calcule la puissance reçue à l'aide de la classe
IReceptionModel et le PER à l'aide de Ieee8021 1aRadioModel.
Ieee8021 1a Radio
+ createReceptionModel Ø+ createRadioModel
Ø
|
: IReceptionModel * : IRadioModel *
|
|
Figure 3.11 La classe Ieee80211aRadio
Le module Ieee8021 1aRadio possède comme
paramètre bitrate le débit de transmission physique,
transmitterPower la puissance émise et d'autre paramètre
utilisé par les sous classes de la classe IReceptionModel pour le calcul
de la puissance reçue.
Ieee80211aRadio Parameters:
channelNumber: numeric
transmitterPower : numeric
bitrate: numeric const
thermalNoise: numeric
snirThreshold: numeric
sensitivity: numeric
systemLoss : numeric
propagationModelType: numeric
ht : numeric
hr : numeric
pathLossExponent : numeric
shadowingVariance : numeric
shadowingNumberofSamples : numeric receiverAntennaGain :
numeric
Gates:
in: uppergateIn out: uppergateOut in: radioIn
|
|
Figure 3.12 Le module Ieee80211aRadio 2.2.1.2. La classe
Ieee8021 1 aRadioModel
Cette classe permet de calculer la durée de
transmission d'un paquet à l'aide de la méthode
calculateDuration(). Elle prend aussi la décision si le paquet
reçu est erroné ou pas à l'aide de la méthode
isReceivedCorrectly(). Cette dernière fait appel à la
méthode packetOK() qui retourne true si le paquet est correctement
reçu et false dans le cas contraire. La méthode packetOK() prend
comme paramètre le débit avec lequel a été
envoyé le paquet afin de connaître la modulation utilisé
pour envoyer le payload. Suivant la modulation, elle calcule le PER.
Enfin, elle génère un nombre aléatoire entre 0 et 1 et le
compare avec PER pour décider s'il y a eu des erreurs de
transmission.
Ieee80211aRadioModel
# snirThreshold
# headerLengthBits # bandwidth
# modes
# error_masks
- perVector
: double : long
: double
: std::vector<TransmissionMode *> : FILE*
: cOutVector
+ Ieee80211aModel ()
+ ~Ieee80211aModel ()
+ initializeFrom (cModule * radioModule)
+ calculateDuration (AirFrame * airframe)
+ isReceivedCorrectly (AirFrame * airframe, const SnrList&
receivedList) # packetOK (double snirMin, int length, double bitrate)
# dB2fraction (double dB)
# configure80211a ()
# getMode (double bitrate)
# addTransmissionMode (TransmissionMode * mode)
: void : void : void : int
: int
: bool
: double
: void
: TransmissionMode : void
Figure 3.13 La classe Ieee80211aRadioModel 2.2.1.3. La
classe IReceptionModel
Cette classe est une classe abstraite utilisée par le
module Ieee8021 1aRadio pour le calcul de la puissance reçue. La
méthode calculateReceivedPower() prend comme paramètre la
puissance émise et la distance entre l'émetteur et le
récepteur. Les nouveaux modèles de propagation tel que
Free-Space, Two-Ray et Shadowing ont été dérivées
à partir de cette classe.
IReceptionModel
+ initializedFrom (cModule * radioModule) : void
+ calculateReceivedPower (double pSend, double carrierFrequency,
double distance) : double + ~IReceptionModel ()
|
|
Figure 3.14 La classe IReceptionModel 2.2.1.4. La classe
TransmissionMode
TransmissionMode est une classe abstraite permettant de
générer un fichier masque d'erreurs et de calculer le BER. A
partir de cette classe, nous avons crée de nouvelle classes contenant
chacune leur propre implémentation des fonctions de calcul du BER.
+ CurrentGenerateRandomNumbersForMaskGeneration +
currentValues[]
+ dFree
+ adFree
+ punctuationPeriod
+ coderOutputBits
+ coding Rate
+ Ck[]
: double : double : uint32_t : uint32_t : uint32_t : uint32_t
: double : uint32_t
+ TrasmissionMode () : void
+ getSignalSpread () : double
+ getDateRate () : uint32_t
+ getRate () : uint32_t
+ getChrunkSuccessRate (double snr, unsigned int nbits, FILE *
error_masks, double bitrate) : double
+ generateErrorMasks (unsigned int nbits, double Pb, bool
error_distribution_type, FILE * error_masks, double EER, double snr) : void
+ getBitNumbersPerModulationSymbol () : uint32_t
TransmissionMode
Ieee80211Mac
Ieee80211aMAC
- autoBitrate
- rateIndex
- successCounter - failedCounter - recovery
- timer
- successThreshold
- maxSuccessThreshold - timerTimeout
- minSuccessThreshold - minTimerTimeout
- successCoeff - timerCoeff
- PHYRateVector
Ieee80211MacLBMS
- MulticastGrouplist - numSentMulticast -
numReceivedMulticast
: MulticastGroupList : int
: int
Ieee80211MacLBMSnonAP
: int : int : int : int : int : bool : int : int : int : int
: int : double
: double
: cOutVector
- multicastGroupList - numSentMulticast -
numReceivedMulticast
: MulticastMACAddressList : long
: long
+ Ieee80211aMac () + ~Ieee80211aMac ()
+ num In i tStag es () + initialize ( int) + frameDuration
(Ieee80211Frame * msg)
+ double frameDuration (int bits, double bitrate) + getTimeout
()
+ getMaxBitrate () + getMinBitrate () + reportDataOk ()
+ reportDataFailed ()
+ getMinTimerTimeout ()
+ getMinSuccessThreshold ()
+ getTimerTimeout ()
+ getSuccessThreshold ()
+ setTimerTimeout (int timer_timeout)
+ setSuccessThreshold (int success_threshold)
+ reportRecoveryFailure ()
+ reportFailure ()
+ needRecoveryFallback ()
+ needNormalFallback ()
+ getBitrate ()
+ setBitrate (double b_rate)
: int
: int
: void : void : void
: Ieee80211DataOrMgmtFrame : bool
: bool : bool : bool : void : void : void : void : void :
void : bool
+ Ieee80211MacLBMS ()
+ ~Ieee80211MacLBMS ()
+numInitStages ()
+ initialize ( int)
+ handleWithFSM ()
+ scheduleMulticastTimeoutPeriod (Ieee80211DataOrMgmtFrame *
frame) + sendMulticastFrame (Ieee80211DataOrMgmtFrame * frameToSend)
+ buildMulticastFrame (Ieee80211DataOrMgmtFrame * frameToSend) +
isMulticast (Ieee80211Frame * msg)
+ isForUs (int Ieee80211Frame *msg)
+ isNewGroup (Ieee80211Frame * frameToSend)
+ isAssociatedGroup (Ieee80211DataOrMgmtFrame * frameToSend) +
setLeader (Ieee80211DataOrMgmtFrame * frameToSend)
+ setNonLeader (Ieee80211DataOrMgmtFrame * frameToSend) +
processIncomingLBMS (Ieee80211Frame * frameToSend)
+ processIncomingMulticastFrame (Ieee80211 Frame * frameToSend)
+ addNewMulticastGroup (Ieee80211Frame * frameToSend)
+ myMulticastGroup (Ieee80211Frame * frame)
+ isLBMSFrame (Ieee80211Frame * frame)
: int
: void : void : void : void : void
: Ieee80211DataOrMgmtFrame * : bool
: bool : bool : void : void : void : bool
+ Ieee80211MacLBMSnonAP ()
+ ~Ieee80211MacLBMSnonAP ()
+numInitStages ()
+ initialize ( int)
+ handleWithFSM (cMessage * msg)
+ scheduleMulticastTimeoutPeriod (Ieee80211DataOrMgmtFrame *
frame) + sendMulticastFrame (Ieee80211DataOrMgmtFrame * frameToSend)
+ sendLBMSFrame (Ieee80211DataOrMgmtFrame * frameToSend)
+ buildMulticastFrame (Ieee80211DataOrMgmtFrame * frameToSend) +
isMulticast (Ieee80211Frame * msg)
+ isForUs (int Ieee80211Frame *msg)
+ isLeader (Ieee80211Frame * frameToSend)
+ setLeader (Ieee80211Frame * frameToSend)
+ joinMulticastGroup (Ieee80211Frame * frameToSend)
+ leaveMulticastGroup (Ieee80211Frame * frameToSend)
+ isNewGroup (Ieee80211Frame * frame)
: int
: void
: double : double : int : int : int : int : int : int : int :
int : int : void
: void
: void
: void
: bool
: bool
: double : void
2.2.2.1. La classe Ieee80211aMAC
Cette classe implémente la norme IEEE 802.1 1a en
modifiant quelques méthodes de la classe Ieee8021 1MAC comme le calcul
de la durée de transmission. Nous avons ajouté aussi des
méthodes et des structures permettant d'adapter le débit de
transmission physique en fonction du nombre de transmission avec succès
et du nombre de retransmission.
Ieee8021 1aMAC
- autoBitrate
- rateIndex
- successCounter - failedCounter - recovery
- timer
- successThreshold
- maxSuccessThreshold - timerTimeout
- minSuccessThreshold - minTimerTimeout
- successCoeff
- timerCoeff
- PHYRateVector
: int : int : int : int : int : bool
: int : int : int : int : int : double
: double
: cOutVector
+ Ieee80211aMac () + ~Ieee80211aMac ()
+ numInitStages () : int
+ initialize ( int) : void
+ frameDuration (Ieee8021 1 Frame * msg) : double
+ double frameDuration (int bits, double bitrate) : double
+ getTimeout () : int
+ getMaxBitrate () : int
+ getMinBitrate () : int
+ reportDataOk () : int
+ reportDataFailed () : int
+ getMinTimerTimeout () : int
+ getMinSuccessThreshold () : int
+ getTimerTimeout () : int
+ getSuccessThreshold () : int
+ setTimerTimeout (int timer_timeout) : void
+ setSuccessThreshold (int success_threshold) : void
+ reportRecoveryFailure () : void
+ reportFailure () : void
+ needRecoveryFal l back () : bool
+ needNormalFallback () : bool
+ getBitrate () : double
+ setBitrate (double b_rate) : void
Figure 3.17 La classe Ieee80211aMAC 2.2.2.2. La classe
Ieee80211MacLBMS
Cette classe correspond à l'implémentation de
la couche MAC pour un point d'accès. Cette classe permet de faire le
filtrage des trames multipoint reçues. Nous avons modifié dans
cette classe la machine à états finis déjà
implémentée. Nous avons ajouté un nouveau état
appelé WAITMULTICAST permettant à la station de distinguer les
messages multipoint des autres types de messages. Parmi les attributs que nous
avons ajouté se trouve MulticastGroupList qui enregistre pour chaque
adresse MAC multicast les adresses MAC des stations associées avec ce
groupe et l'adresse MAC du Leader.
Ieee8021 1MacLBMS
- MulticastGrouplist : MulticastGroupList
- numSentMulticast : int
- numReceivedMulticast : int
+ Ieee8021 1 MacLBMS () + ~Ieee8021 1 MacLBMS ()
+ numInitStages () : int
+ initialize ( int) : int
+ handleWithFSM () : void
+ scheduleMulticastTimeoutPeriod (Ieee8021 1 DataOrMgmtFrame *
frame) : void
+ sendMulticastFrame (Ieee8021 1 DataOrMgmtFrame * frameToSend)
: void
+ buildM ulticastFrame (Ieee8021 1 DataOrMgmtFrame *
frameToSend) : Ieee8021 1 DataOrMgmtFrame
+ isMulticast (Ieee80211Frame * msg) : bool
+ isForUs (int Ieee80211Frame *msg) : bool
+ isNewGroup (Ieee80211Frame * frameToSend) : bool
+ isAssociatedGroup (Ieee8021 1 DataOrMgmtFrame * frameToSend) :
bool
+ setLeader (Ieee8021 1 DataOrMgmtFrame * frameToSend) : void
+ setNonLeader (Ieee8021 1 DataOrMgmtFrame * frameToSend) :
void
+ processIncomi ngLBMS (Ieee8021 1 Frame * frameToSend) : void
+ processIncomi ngMulticastFrame (Ieee8021 1 Frame * frameToSend)
: void
+ addNewMulticastGroup (Ieee8021 1 Frame * frameToSend) : void
+ myMulticastGroup (Ieee8021 1 Frame * frame) : void
+ isLBMSFrame (Ieee8021 1 Frame * frame) : bool
|
|
Figure 3.18 La classe Ieee80211MacLBMS
2.2.2.3. La classe Ieee8021 1MacLBMSnonAP
La classe Ieee8021 1MacLBMSnonAP correspond à la
couche MAC d'une station réceptrice d'un flux multipoint. Cette classe
permet de filtrer les trames multipoint reçues. Elle enregistre les
adresses des groupes multipoint avec lesquelles elle est associées. Pour
chaque flux multipoint, si elle correspond au Leader, elle acquitte la trame
multipoint reçue.
Ieee8021 1MacLBMSnonAP
- multicastGroupList : MulticastMACAddressList
- numSentMulticast : long
- numReceivedMulticast : long
+ Ieee80211MacLBMSnonAP () + ~Ieee80211MacLBMSnonAP ()
+ numInitStages () : int
+ initialize ( int) : void
+ handleWithFSM (cMessage * msg) : void
+ scheduleMulticastTi meoutPeriod (Ieee8021 1 DataOrMgmtFrame *
frame) : void
+ sendMulticastFrame (Ieee8021 1 DataOrMgmtFrame * frameToSend)
: void
+ sendLBMSFrame (Ieee8021 1 DataOrMgmtFrame * frameToSend) :
void
+ bui ldMulticastFrame (Ieee8021 1 DataOrMgmtFrame *
frameToSend) : Ieee80211DataOrMgmtFrame *
+ isMulticast (Ieee8021 1 Frame * msg) : bool
+ isForUs (int Ieee80211Frame *msg) : bool
+ isLeader (Ieee80211Frame * frameToSend) : bool
+ setLeader (Ieee8021 1 Frame * frameToSend) : void
+ joinMulticastGroup (Ieee8021 1 Frame * frameToSend) : void
+ leaveMulticastGroup (Ieee8021 1 Frame * frameToSend) : void
+ isNewGroup (Ieee8021 1 Frame * frame) : bool
|
|
Figure 3.19 La classe
Ieee80211MacLBMSnonAP
|