Compound Module Ieee80211Nic

Package: inet.linklayer.ieee80211
File: src/inet/linklayer/ieee80211/Ieee80211Nic.ned

This NIC implements an 802.11 network interface card. It can be configured via the mgmtType parameter to act as an AP or a STA, or for ad-hoc mode.

Potential mgmType values: Ieee80211MgmtSTASimplified, Ieee80211MgmtSTA Ieee80211MgmtAP, Ieee80211MgmtAPSimplified, Ieee80211MgmtAdhoc.

A classifier is needed if you want to use QoS.

IIeee8021dQoSClassifier Ieee80211AgentSTA IIeee80211Mgmt IIeee80211Mac IRadio

Usage diagram:

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.

Inheritance diagram:

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Used in compound modules:

Name Type Description
Client compound module (no description)
Node compound module (no description)
SinkClient compound module (no description)
SinkClient compound module (no description)
SinkNode compound module (no description)
ThroughputClient compound module (no description)
ThroughputClient compound module (no description)
ThroughputClient compound module (no description)
ThroughputClient compound module (no description)
ThroughputServer compound module (no description)
ThroughputServer compound module (no description)
WirelessAPWithSink compound module (no description)
WirelessAPWithSink compound module

Well, this models a 802.11 Access Point with a Sink.

Parameters:

Name Type Default value Description
interfaceTableModule string
energySourceModule string ""
classifierType string ""

needed for EDCA, as the classifier assigns User Priority (UP) to packets; UP determines Access Category via TID

mgmtType string "Ieee80211MgmtSTA"

name of the management module type (implements IIeee80211Mgmt)

radioType string "Ieee80211ScalarRadio"
macType string "Ieee80211CompatibleMac"

choose from Ieee80211Mac and Ieee80211CompatibleMac,

See also: IIeee80211Mac

opMode string "g(mixed)"
bitrate double -1bps
_agentNeeded bool (mgmtType == "Ieee80211MgmtSTA")

internal par. do not use, shows if optional agent module is needed

Properties:

Name Value Description
nic
display i=block/ifcard

Gates:

Name Direction Size Description
upperLayerIn input

to upper layers

upperLayerOut output

from upper layers

radioIn input

to receive radio frames

Unassigned submodule parameters:

Name Type Default value Description
agent.interfaceTableModule string

The path to the InterfaceTable module

agent.activeScan bool true

selects between active and passive scanning

agent.channelsToScan string ""

list of channel numbers to scan (space delimited); empty means all channels

agent.probeDelay double 100ms

delay before sending a probe request during active scanning

agent.minChannelTime double 150ms

min interval to spend on a channel during active scanning

agent.maxChannelTime double 300ms

channel time for passive scanning, and max channel time for active scanning

agent.authenticationTimeout double 5s

timeout for the authentication procedure

agent.associationTimeout double 5s

timeout for the association procedure

agent.startingTime double -1s

agent starting time.

agent.default_ssid string "SSID"

default ssid

Source code:

//
// This NIC implements an 802.11 network interface card.
// It can be configured via the mgmtType parameter to act
// as an AP or a STA, or for ad-hoc mode.
//
// Potential mgmType values: Ieee80211MgmtSTASimplified, Ieee80211MgmtSTA
// Ieee80211MgmtAP, Ieee80211MgmtAPSimplified, Ieee80211MgmtAdhoc.
//
// A classifier is needed if you want to use QoS.
//
module Ieee80211Nic like IWirelessNic
{
    parameters:
        string interfaceTableModule;
        string energySourceModule = default("");
        string classifierType = default(""); // needed for EDCA, as the classifier assigns User Priority (UP) to packets; UP determines Access Category via TID
        string mgmtType = default("Ieee80211MgmtSTA"); // name of the management module type (implements IIeee80211Mgmt)
        string radioType = default("Ieee80211ScalarRadio");
        string macType = default("Ieee80211CompatibleMac");   // choose from Ieee80211Mac and Ieee80211CompatibleMac, @see IIeee80211Mac
        string opMode @enum("a","b","g(erp)","g(mixed)","n","p") = default("g(mixed)");
        double bitrate @unit("bps") = default(-1bps);
        bool _agentNeeded = (mgmtType == "Ieee80211MgmtSTA");   // internal par. do not use, shows if optional agent module is needed
        **.opMode = opMode;
        **.bitrate = bitrate;
        *.interfaceTableModule = default(absPath(interfaceTableModule));
        *.energySourceModule = default(absPath(energySourceModule));
        @nic;
        @display("i=block/ifcard");
    gates:
        input upperLayerIn; // to upper layers
        output upperLayerOut; // from upper layers
        input radioIn @labels(IRadioFrame); // to receive radio frames
    submodules:
        classifier: <classifierType> like IIeee8021dQoSClassifier if classifierType != "" {
            parameters:
                @display("p=200,100");
        }
        agent: Ieee80211AgentSTA if _agentNeeded {
            parameters:
                @display("p=200,200");
        }
        mgmt: <mgmtType> like IIeee80211Mgmt {
            parameters:
                macModule = "^.mac";
                @display("p=100,100");
        }
        mac: <macType> like IIeee80211Mac {
            parameters:
                @display("p=100,200");
        }
        radio: <radioType> like IRadio {
            parameters:
                @display("p=100,300");
        }
    connections:
        radioIn --> { @display("m=s"); } --> radio.radioIn;
        radio.upperLayerIn <-- mac.lowerLayerOut;
        radio.upperLayerOut --> mac.lowerLayerIn;

        mac.upperLayerOut --> mgmt.macIn;
        mac.upperLayerIn <-- mgmt.macOut;

        mgmt.agentOut --> agent.mgmtIn if _agentNeeded;
        mgmt.agentIn <-- agent.mgmtOut if _agentNeeded;

        mgmt.upperLayerOut --> { @display("m=n"); } --> upperLayerOut;
        mgmt.upperLayerIn <-- { @display("m=n"); } <-- upperLayerIn if classifierType == "";
        mgmt.upperLayerIn <-- { @display("m=n"); } <-- classifier.out if classifierType != "";
        classifier.in <-- { @display("m=n"); } <-- upperLayerIn if classifierType != "";
}