Compound Module WirelessHost

File: Nodes/Wireless/WirelessHost.ned

Models a host with one wireless (802.11b) card in infrastructure mode. This module is basically a StandardHost with an Ieee80211NicSTA added. It should be used in conjunction with WirelessAP, or any other AP model which contains Ieee80211NicAP.

See also: WirelessAP, WirelessAPSimplified, WirelessAPWithEth, WirelessAPWithEthSimplified

See also: WirelessHost, WirelessHostSimplified

See also: MobileHost, MFMobileHost

notificationBoard: NotificationBoard interfaceTable: InterfaceTable routingTable: RoutingTable tcpApp: tcpAppType like TCPApp tcp: TCP udpApp: udpAppType like UDPApp udp: UDP pingApp: PingApp networkLayer: NetworkLayer ppp: PPPInterface eth: EthernetInterface wlan: Ieee80211NicSTA mobility: mobilityType like BasicMobility

Usage diagram:

The following diagram shows usage relationships between modules, networks and channels. Unresolved module (and channel) types are missing from the diagram. Click here to see the full picture.

WirelessHost PingApp TCPApp UDPApp NotificationBoard BasicMobility InterfaceTable RoutingTable EthernetInterface Ieee80211NicSTA PPPInterface NetworkLayer TCP UDP

Contains the following modules:

If a module type shows up more than once, that means it has been defined in more than one NED file.

BasicMobility

This is not an actual mobility model, but a prototype for other mobility models.

EthernetInterface

Ethernet network interface. Corresponds to the prototype NetworkInterface. Complements EtherMAC and EtherEncap with an output queue for QoS and RED support.

Ieee80211NicSTA

This NIC implements an 802.11 network interface card, in a STA, using infrastructure mode.

InterfaceTable

Keeps the table of network interfaces.

NetworkLayer

Network layer of an IP node.

NotificationBoard

Using NotificationBoard, modules can now notify each other about "events" such as routing table changes, interface status changes (up/down), interface configuration changes, wireless handovers, changes in the state of the wireless channel, mobile node position changes, etc.

PPPInterface

PPP interface. Complements the PPP module with an output queue for QoS and RED support.

PingApp

Generates ping requests and calculates the packet loss and round trip parameters of the replies.

RoutingTable

Stores the routing table. (Per-interface configuration is stored in InterfaceTable.)

TCP

TCP protocol implementation. Supports RFC 793, RFC 1122, RFC 2001. Compatible with both IPv4 and IPv6.

TCPApp

Template for TCP applications.

UDP

UDP protocol implementation, for IPv4 and IPv6.

UDPApp

Template for UDP applications.

Parameters:

Name Type Description
numTcpApps numeric const
numUdpApps numeric const
tcpAppType string
udpAppType string
IPForward bool
routingFile string
mobilityType string

Gates:

Name Direction Description
in [ ] input
out [ ] output
ethIn [ ] input
ethOut [ ] output
radioIn input

Unassigned submodule parameters:

Name Type Description
tcp.mss numeric const

maximum segment size

tcp.advertisedWindow numeric const

in bytes (Note: normally, NIC queues should be at least this size)

tcp.tcpAlgorithmClass string

TCPTahoe/TCPReno/TCPNoCongestionControl/DumbTCP

tcp.sendQueueClass string

TCPVirtualDataSendQueue/TCPMsgBasedSendQueue

tcp.receiveQueueClass string

TCPVirtualDataRcvQueue/TCPMsgBasedRcvQueue

tcp.recordStats bool

recording seqNum etc. into output vectors on/off

pingApp.destAddr string

destination IP or IPv6 address

pingApp.srcAddr string

source IP or IPv6 address (useful with multi-homing)

pingApp.packetSize numeric const

of ping payload, in bytes

pingApp.interval numeric

time to wait between pings (can be random)

pingApp.hopLimit numeric const

TTL or hopLimit for IP packets

pingApp.count numeric const

stop after count ping requests, 0 means continuously

pingApp.startTime numeric const

send first ping at startTime

pingApp.stopTime numeric const

send no pings after stopTime, 0 means forever

pingApp.printPing bool

dump on stdout

networkLayer.ip.procDelay numeric const
networkLayer.arp.retryTimeout numeric

number seconds ARP waits between retries to resolve an IP address

networkLayer.arp.retryCount numeric

number of times ARP will attempt to resolve an IP address

networkLayer.arp.cacheTimeout numeric

number seconds unused entries in the cache will time out

ppp[*].queueType string
eth[*].queueType string
eth[*].mac.promiscuous bool

if true, all packets are received, otherwise only the ones with matching destination MAC address

eth[*].mac.address string

MAC address as hex string (12 hex digits), or "auto". "auto" values will be replaced by a generated MAC address in init stage 0.

eth[*].mac.txrate numeric

maximum data rate supported by this station (bit/s); actually chosen speed may be lower due to auto- configuration. 0 means fully auto-configured.

eth[*].mac.duplexEnabled bool

whether duplex mode can be enabled or not; whether MAC will actually use duplex mode depends on the result of the auto-configuration process (duplex is only possible with DTE-to-DTE connection).

eth[*].mac.writeScalars bool

enable/disable recording statistics in omnetpp.sca

eth[*].encap.writeScalars bool

enable/disable recording statistics in omnetpp.sca

wlan.agent.activeScan bool

selects between active and passive scanning

wlan.agent.channelsToScan string

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

wlan.agent.probeDelay numeric const

delay before sending a probe request during active scanning

wlan.agent.minChannelTime numeric const

min interval to spend on a channel during active scanning

wlan.agent.maxChannelTime numeric const

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

wlan.agent.authenticationTimeout numeric const

timeout for the authentication procedure

wlan.agent.associationTimeout numeric const

timeout for the association procedure

wlan.mgmt.frameCapacity numeric const

maximum queue length

wlan.mac.address string

MAC address as hex string (12 hex digits), or "auto". "auto" values will be replaced by a generated MAC address in init stage 0.

wlan.mac.maxQueueSize numeric const

max queue length in frames; only used if queueModule==""

wlan.mac.bitrate numeric const
wlan.mac.rtsThresholdBytes numeric const

longer messages will be sent using RTS/CTS; use 2346 for default

wlan.mac.retryLimit numeric const

maximum number of retries per message, -1 means default

wlan.mac.cwMinData numeric const

contention window for normal data frames, -1 means default

wlan.mac.cwMinBroadcast numeric const

contention window for broadcast messages, -1 means default

wlan.radio.channelNumber numeric const

channel identifier

wlan.radio.transmitterPower numeric const

power used for transmission of messages (in mW)

wlan.radio.bitrate numeric const

(in bits/s)

wlan.radio.thermalNoise numeric const

base noise level (dBm)

wlan.radio.pathLossAlpha numeric const

used by the path loss calculation

wlan.radio.snirThreshold numeric const

if signal-noise ratio is below this threshold, frame is considered noise (in dB)

wlan.radio.sensitivity numeric const

received signals with power below sensitivity are ignored

Source code:

module WirelessHost
    parameters:
        numTcpApps: numeric const,
        numUdpApps: numeric const,
        tcpAppType: string,
        udpAppType: string,
        IPForward: bool,
        routingFile: string,
        mobilityType: string;
    gates:
        in: in[];
        out: out[];
        in: ethIn[];
        out: ethOut[];
        in: radioIn;
    submodules:
        notificationBoard: NotificationBoard;
            display: "p=60,70;i=block/control";
        interfaceTable: InterfaceTable;
            display: "p=60,150;i=block/table";
        routingTable: RoutingTable;
            parameters:
                IPForward = IPForward,
                routerId = "",
                routingFile = routingFile;
            display: "p=60,230;i=block/table";
        tcpApp: tcpAppType[numTcpApps] like TCPApp;
            display: "p=163,67;i=block/app";
        tcp: TCP;
            display: "p=163,154;i=block/wheelbarrow";
        udpApp: udpAppType[numUdpApps] like UDPApp;
            display: "i=block/app;p=272,67";
        udp: UDP;
            display: "p=272,154;i=block/transport";
        pingApp: PingApp;
            display: "i=block/app;p=343,200";
        networkLayer: NetworkLayer;
            parameters:
                proxyARP = false;
            gatesizes:
                ifIn[sizeof(out)+sizeof(ethOut)+1],
                ifOut[sizeof(out)+sizeof(ethOut)+1];
            display: "p=248,247;i=block/fork;q=queue";
        ppp: PPPInterface[sizeof(out)];
            display: "p=205,350,row,90;q=txQueue;i=block/ifcard";
        eth: EthernetInterface[sizeof(ethOut)];
            display: "p=240,350,row,90;q=txQueue;i=block/ifcard";
        wlan: Ieee80211NicSTA;
            display: "p=120,350;q=queue;i=block/ifcard";
        mobility: mobilityType like BasicMobility;
            display: "p=58,301;i=block/cogwheel_s";
    connections nocheck:
        for i=0..numTcpApps-1 do
            tcpApp[i].tcpOut --> tcp.from_appl++;
            tcpApp[i].tcpIn <-- tcp.to_appl++;
        endfor;

        tcp.to_ip --> networkLayer.TCPIn;
        tcp.from_ip <-- networkLayer.TCPOut;

        for i=0..numUdpApps-1 do
            udpApp[i].to_udp --> udp.from_app++;
            udpApp[i].from_udp <-- udp.to_app++;
        endfor;

        udp.to_ip --> networkLayer.UDPIn;
        udp.from_ip <-- networkLayer.UDPOut;

        networkLayer.pingOut --> pingApp.pingIn;
        networkLayer.pingIn <-- pingApp.pingOut;

        // connections to network outside
        for i=0..sizeof(out)-1 do
            in[i] --> ppp[i].physIn;
            out[i] <-- ppp[i].physOut;
            ppp[i].netwOut --> networkLayer.ifIn[i];
            ppp[i].netwIn <-- networkLayer.ifOut[i];
        endfor;

        for i=0..sizeof(ethOut)-1 do
            ethIn[i] --> eth[i].physIn;
            ethOut[i] <-- eth[i].physOut;
            eth[i].netwOut --> networkLayer.ifIn[sizeof(out)+i];
            eth[i].netwIn <-- networkLayer.ifOut[sizeof(out)+i];
        endfor;

        radioIn --> wlan.radioIn;
        wlan.uppergateOut --> networkLayer.ifIn[sizeof(out)+sizeof(ethOut)];
        wlan.uppergateIn <-- networkLayer.ifOut[sizeof(out)+sizeof(ethOut)];
endmodule