SLIDE 1 OMNeT++ Community Summit, 2016
An outline of the new IEEE 802.11 model in the INET framework
Brno University of Technology – Czech Republic – September 15-16, 2016 Levente Mészáros
SLIDE 2 Quick Recap
- The old model was a dead end
- Design draft for a new model was presented at the
OMNeT++ Community Summit 2015 in Zurich
- First version was released in INET-3.1.1, October, 2015
- The old model was replaced in INET-3.2, December, 2015
- Benjámin M. Seregi works on the model ever since
–
First design draft has been significantly reworked
SLIDE 3 Model Goals
- Full-featured and validated model
- Directly implement the standard
–
Implementation mirrors the concepts in the Standard
- Modular, pluggable architecture
–
Allow experimentation
–
Widely configurable
SLIDE 4
Conceptual Architecture
Mac Rx Coordination Function Tx Procedure Procedure Procedure Policy Policy Policy Queue Queue Queue Mac Data Service Process Process Process Policy Policy Policy Channel Access Function Channel Access Function Channel Access Function Frame Sequence
SLIDE 5 Some Experimentation Options
- New policies can be defined by the user to allow
experimenting with non-standard scenarios
–
Custom ACK policy (e.g. for long-range wifi)
–
Custom policy for RTS/CTS protection
–
Fragmentation/aggregation policy
–
Block ACK agreement initiatation/termination policy
- Custom rate selection and new rate control algorithms
- Custom backoff procedure
- New frame sequences
SLIDE 6 Experimenting with Rate Management
–
Assigns rate based on frame type and receiver
–
Determines optimal rates based on channel quality
SLIDE 7
Contents
Coordination Functions Channel Access Functions Procedures Policies Mac Data Service Frame Exchange Sequences Dynamic Model Behavior
SLIDE 8 Coordination Functions
- Implemented as compound modules using C++ classes
derived from cModule
–
Dcf
–
Hcf (Edca only)
–
Pcf
–
Mcf
IEEE 802.11 Mac
SLIDE 9 Distributed Coordination Function (Dcf)
- Submodules communicate via direct C++ method calls
SLIDE 10
Hybrid Coordination Function (Hcf)
scary
SLIDE 11
Contents
Coordination Functions Channel Access Functions Procedures Policies Mac Data Service Frame Exchange Sequences Dynamic Model Behavior
SLIDE 12 Channel Access Functions
- Implemented as compound modules using C++ classes
derived from cModule
–
Dcaf
–
Edcaf
Channel Access Function
SLIDE 13
Backoff Procedure
IDLE DEFER IFS BACKOFF Start & Busy Ch-Free Ch-Busy Ch-Busy Start & !Busy Backoff-Done IFS-Done
SLIDE 14 Enhanced Distributed Channel Access (Edca)
- Edca contains one Edcaf per access category (AC)
- EdcaCollisionController resolves internal
collisions
SLIDE 15
Contents
Coordination Functions Channel Access Functions Procedures Policies Mac Data Service Frame Exchange Sequences Dynamic Model Behavior
SLIDE 16 Procedures
- Procedures answer how to do something as opposed to when
- Our procedure implementations directly follow the standard
- Implemented as C++ classes
–
Backoff procedure
–
Ack procedure
–
Rts/Cts procedure
–
Block Ack Agreement procedure
–
Block Ack procedure
–
Recovery procedure
–
Protection mechanism
–
TxOp procedure
SLIDE 17 Procedure Example
- Keeps track of frame reception statuses for block ack agreements
- RecipientBlockAckAgreementProcedure contains
map<pair<MACAddress, Tid>, BlockAckAgreement>
- BlockAckAgreement contains
Starting sequence number Buffer size Expiration time BlockAckRecord
pair<SeqNum, FragNum> → Status (arrived or not)
SLIDE 18
Contents
Coordination Functions Channel Access Functions Procedures Policies Mac Data Service Frame Exchange Sequences Dynamic Model Behavior
SLIDE 19 Policies
- Policies answer when as opposed to how
- Meant to be easily replaceable with custom versions
- Implemented as simple modules
–
Ack policy
–
Rts / Cts policy
–
Fragmentation policy
–
Aggregation policy
–
Block ack agreement policy
SLIDE 20 Policy Example
- OriginatorBlockAckAgreementPolicy determines
–
when to initiate a new agreement
–
when to terminte an existing agreement
- OriginatorQoSAckPolicy determines
–
ack policy subfield for outgoing data frames NORMAL_ACK, BLOCK_ACK, NO_ACK
–
when to send BlockAckReq
SLIDE 21
Contents
Coordination Functions Channel Access Functions Procedures Policies Mac Data Service Frame Exchange Sequences Dynamic Model Behavior
SLIDE 22
Coordination Function
Data Flow at the Originator
Frame(s) Frame(s) Pending queue Pending queue Pending queue In progress frames In progress frames In progress frames Mac Data Service Process Policy Policy Policy Process Process
SLIDE 23
As Defined in the Standard
SLIDE 24
Correspondence to the Standard
SLIDE 25 Implementation
- Implemented as compound modules using C++ classes derived
from cModule
- Contains processes implemented as C++ classes
–
Sequence number assignment / Duplicate removal
–
Fragmentation / Defragmentation
–
Aggregation / Deaggregation
–
Block Ack reordering
- Contains policies as submodules
–
Fragmentation policy
–
Aggregation policy
Originator mac data service
SLIDE 26
Contents
Coordination Functions Channel Access Functions Procedures Policies Mac Data Service Frame Exchange Sequences Dynamic Model Behavior
SLIDE 27
Correspondence to the Standard
SLIDE 28
Hcf Frame Sequence Example
Originator Recipient RTS CTS Data ACK Qos Data BlockAckReq BlockAck TxOp RTS CTS (Data+individual) ACK (Data +QoS +individual +block-ack) (Data +QoS +individual +block-ack) BlockAckReq BlockAck Qos Data
SLIDE 29 Implementation
- Implemented as C++ classes
- Coordination functions have their own frame sequences
directly corresponding to the 802.11 Annex G. (normative)
–
DcfFs, PcfFs, HcfFs, and McfFs
–
SequentialFs, OptionalFs, RepeatingFs, AlternativeFs
–
FragFrameFs, AckFs, SelfCtsFs, etc.
SLIDE 30
Contents
Coordination Functions Channel Access Functions Procedures Policies Mac Data Service Frame Exchange Sequences Dynamic Model Behavior
SLIDE 31
- Processing the Data Frame at the Originator
–
Data Frame Arrived → Backoff Procedure Started
–
Backoff Procdedure Finished → Data Frame Extracted
–
Data Frame Extracted→ Data Transmission Started
–
Data Transmission Finished → Waiting for ACK Started
- Processing the Data Frame at the Recipient
- Processing the ACK Frame at the Originator
Data ACK Frame Sequence Example
SLIDE 32
Data Frame Arrived → Backoff Procedure Started
Mac Dcf Pending Queue Backoff Procedure Dcaf processUpperFrame() insert() requestChannel() startBackoffProcedure() waiting for backoff procedure to finish handleMessage() scheduleAt()
SLIDE 33
Backoff Procdedure Finished → Data Frame Extracted
Dcaf Dcf Frame Sequence Handler DcfFs backoffProcedureFinished() channelGranted() startFrameSequence() prepareStep() Backoff Procedure handleMessage() extractFramesToTransmit() MacData Service Frag. Policy computeFragmentSizes()
SLIDE 34
Data Frame Extracted→ Data Transmission Started
Dcf Tx Rate Selection transmitFrame() computeDataFrameMode() waiting for Data transmission to finish send() transmitFrame() Frame Sequence Handler Dcf Dcaf Backoff Procedure
SLIDE 35
Data Transmission Finished → Waiting for ACK Started
Frame Sequence Handler DcfFs Dcf completeStep() prepareStep() scheduleStartRxTimeout() waiting for ACK frame to arrive transmissionComplete() Tx receiveSignal() transmissionComplete() scheduleAt() Dcf
SLIDE 36 Frequently Asked Questions
- When will it be available?
–
Needs more work on: validation, logging, visualization
- Is it compatible with the current version?
–
It’s meant to be (Ieee80211CompatibleMac)
- What features are implemented?
–
New: block ack, MSDU aggregation
–
Still missing: Hcca, Pcf, Mcf, MPDU aggregation, frame lifetime, etc.
- Can I build a simplified MAC?
–
Yes (work in progress)
SLIDE 37 Questions and Answers
Levente Mészáros
Thank you for your kind attention!
Brno University of Technology – Czech Republic – September 15-16, 2016