WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Extensions du simulateur Omnet++ pour la validation de mécanismes de transmission multimédia dans les réseaux IEEE 802.11

( Télécharger le fichier original )
par Ahmed Ayadi
Ecole Nationale des Sciences de l'Informatique - Ingénieur informatique 2007
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

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

précédent sommaire suivant






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"En amour, en art, en politique, il faut nous arranger pour que notre légèreté pèse lourd dans la balance."   Sacha Guitry