AccessPoint

Package: inet.node.wireless

AccessPoint

compound module

A wireless access point device that connects wireless stations (like WirelessHost) to a wired network. Supports multiple wireless radios and multiple Ethernet ports.

The access point relays frames between the wireless and wired interfaces using a built-in MAC relay unit (bridging). It implements the IEEE 802.11 AP functionality including association, authentication, and frame forwarding between network segments.

Key features:

  • Configurable number of wireless interfaces (radios)
  • Configurable number of Ethernet ports
  • IEEE 802.11 management functionality
  • MAC-layer bridging between interfaces
  • Customizable wireless management type (simplified or full-featured)
  • Stationary by default, but mobility can be added

The wireless management can be configured to use either the full IEEE 802.11 management protocol (~Ieee80211MgmtAp) or a simplified version (~Ieee80211MgmtApSimplified) that doesn't support scanning, authentication, and association processes.

<b>See also:</b> ~WirelessHost, ~EthernetSwitch, ~StandardHost

status : NodeStatus

Keeps track of the status of the network node (up, down, etc.) for other modules, and also displays...

Source:
status: NodeStatus if hasStatus {
    @display("p=100,100;is=s");
} interfaceTable : InterfaceTable

Keeps the table of network interfaces.

Source:
interfaceTable: InterfaceTable {
    @display("p=100,200;is=s");
} macTable : like IMacForwardingTable

MacForwardingTable: Handles the mapping between ports and MAC addresses.

IMacForwardingTable: Interface for MAC address tables, used by MAC relay units in Ethenet switches.

Source:
macTable: <default("MacForwardingTable")> like IMacForwardingTable {
    @display("p=100,300;is=s");
} mobility : like IMobility

StationaryMobility: Mobility module for stationary nodes.

IMobility: The module interface for mobility models.

Source:
mobility: <default("StationaryMobility")> like IMobility {
    @display("p=100,400;is=s");
} bridging : like IMacRelayUnit

IMacRelayUnit: Module interface for modules providing Ethernet switch functionality.

Source:
bridging: <default(firstAvailable("Ieee8021dRelay","MacRelayUnit"))> like IMacRelayUnit if sizeof(ethg)+numWlanInterfaces > 1 && typename != "" {
    @display("p=800,100");
} bl : MessageDispatcher

Facilitates the interconnection of applications, protocols, and network interfaces, dispatching...

Source:
bl: MessageDispatcher if sizeof(ethg)+numWlanInterfaces > 1 && exists(bridging) {
    @display("p=800,200;b=1200,5,,,,1");
} ethernet : like IEthernetLayer

EthernetEncapsulation: Performs Ethernet II or Ethernet with LLC/SNAP encapsulation/decapsulation.

IEthernetLayer: Module interface for Ethernet protocol layer implementations.

Source:
ethernet: <default("EthernetEncapsulation")> like IEthernetLayer if typename != "" && exists(bridging) {
    @display("p=700,300");
} li : MessageDispatcher

Facilitates the interconnection of applications, protocols, and network interfaces, dispatching...

Source:
li: MessageDispatcher {
    @display("p=800,400;b=1000,5,,,,1");
} wlan[numWlanInterfaces] : like IWirelessInterface

Ieee80211Interface: Implements an IEEE 802.11 network interface.

IWirelessInterface: Interface for wireless network interfaces.

Source:
wlan[numWlanInterfaces]: <default("Ieee80211Interface")> like IWirelessInterface {
    @display("p=250,500,row,150;q=queue");
} eth[sizeof(ethg)] : like IEthernetInterface

EthernetInterface: Represents an Ethernet network interface.

IEthernetInterface: Interface for Ethernet network interfaces.

Source:
eth[sizeof(ethg)]: <default("EthernetInterface")> like IEthernetInterface {
    mac.promiscuous = true;
    @display("p=850,500,row;q=txQueue");
}

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

Name Type Description
AnnotationShowcase network (no description)
ConfiguratorC network (no description)
ConfiguratorE network (no description)
HandoverNetwork network (no description)
HandoverShowcase network (no description)
Ieee80211VisualizationAdvancedFeaturesShowcase network (no description)
Ieee80211VisualizationDisplayingAssociationsShowcase network (no description)
Ieee80211VisualizationSignalLevelsShowcase network (no description)
Ieee80211VisualizationVisualizingHandoverShowcase network (no description)
InterfaceTableVisualizationAdvancedFeaturesShowcase network (no description)
Lan80211 network (no description)
Lan80211ac network (no description)
mIPv6Network network (no description)
MultiRadio network (no description)
MultiRadioShowcase network (no description)
NetworkPathRIPShowcase network (no description)
PacketDropQueueOverflowShowcase network (no description)
PhysicalLinkVisualizerFilteringShowcase network (no description)
QosShowcase network (no description)
QosThroughput network (no description)
SeaportNetwork network (no description)
Throughput network (no description)
WiredAndWirelessHostsWithAP network (no description)
WirelessNetWith2DHCP network (no description)
WirelessNetWithDHCP network (no description)

Parameters

Name Type Default value Description
numWlanInterfaces int 1

The number of radios in the access point

hasStatus bool false
fcsMode string "declared"

Properties

Name Value Description
networkNode
labels node
display i=device/accesspoint

Gates

Name Direction Size Description
radioIn [ ] input numWlanInterfaces
ethg [ ] inout

Unassigned submodule parameters

Name Type Default value Description
status.displayStringTextFormat string ""

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

status.initialStatus string "UP"

TODO @signal, @statistic

interfaceTable.displayStringTextFormat string ""

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

interfaceTable.displayAddresses bool false

Whether to display IP addresses on links

macTable.agingTime double
macTable.forwardingTableFile string
bl.displayStringTextFormat string "processed %p pk (%l)"

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

bl.interfaceTableModule string

Module path to the ~InterfaceTable module

bl.forwardServiceRegistration bool true
bl.forwardProtocolRegistration bool true
bl.interfaceMapping object {}

Maps network interface names to connected submodule names (e.g. {"eth0": "bridging"}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

bl.serviceMapping object {}

Maps protocols to connected submodule names (e.g. {"ethernetmac": "bridging"}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

bl.protocolMapping object {}

Maps protocols to connected submodule names (e.g. {"ipv4": "bridging"}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

li.displayStringTextFormat string "processed %p pk (%l)"

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

li.interfaceTableModule string

Module path to the ~InterfaceTable module

li.forwardServiceRegistration bool true
li.forwardProtocolRegistration bool true
li.interfaceMapping object {}

Maps network interface names to connected submodule names (e.g. {"eth0": "bridging"}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

li.serviceMapping object {}

Maps protocols to connected submodule names (e.g. {"ethernetmac": "bridging"}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

li.protocolMapping object {}

Maps protocols to connected submodule names (e.g. {"ipv4": "bridging"}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

eth.bitrate double

Source code

//
// A wireless access point device that connects wireless stations (like WirelessHost)
// to a wired network. Supports multiple wireless radios and multiple Ethernet ports.
//
// The access point relays frames between the wireless and wired interfaces using
// a built-in MAC relay unit (bridging). It implements the IEEE 802.11 AP functionality
// including association, authentication, and frame forwarding between network segments.
//
// Key features:
// - Configurable number of wireless interfaces (radios)
// - Configurable number of Ethernet ports
// - IEEE 802.11 management functionality
// - MAC-layer bridging between interfaces
// - Customizable wireless management type (simplified or full-featured)
// - Stationary by default, but mobility can be added
//
// The wireless management can be configured to use either the full IEEE 802.11 management
// protocol (~Ieee80211MgmtAp) or a simplified version (~Ieee80211MgmtApSimplified) that
// doesn't support scanning, authentication, and association processes.
//
// @see ~WirelessHost, ~EthernetSwitch, ~StandardHost
//
module AccessPoint like INetworkNode
{
    parameters:
        @networkNode();
        @labels(node,ethernet-node,wireless-node);
        @display("i=device/accesspoint");
        int numWlanInterfaces = default(1);               // The number of radios in the access point
        bool hasStatus = default(false);
        string fcsMode @enum("declared","computed") = default("declared");
        wlan[*].protocol = default("ethernetmac");
        wlan[*].mgmt.typename = default("Ieee80211MgmtAp");
        wlan[*].llc.typename = default("Ieee80211Portal");
        wlan[*].agent.typename = default("");
        wlan[*].radio.antenna.mobilityModule = default("^.^.^.mobility");
        eth[*].encap.typename = "";
        *.macTableModule = default(absPath(".macTable"));
        *.interfaceTableModule = default(absPath(".interfaceTable"));
        bridging.hasStp = false;
        *.fcsMode = this.fcsMode;
        ethernet.registerProtocol = default(true);
    gates:
        input radioIn[numWlanInterfaces] @directIn;
        inout ethg[] @labels(EtherFrame-conn);
    submodules:
        status: NodeStatus if hasStatus {
            @display("p=100,100;is=s");
        }
        interfaceTable: InterfaceTable {
            @display("p=100,200;is=s");
        }
        macTable: <default("MacForwardingTable")> like IMacForwardingTable {
            @display("p=100,300;is=s");
        }
        mobility: <default("StationaryMobility")> like IMobility {
            @display("p=100,400;is=s");
        }
        bridging: <default(firstAvailable("Ieee8021dRelay","MacRelayUnit"))> like IMacRelayUnit if sizeof(ethg)+numWlanInterfaces > 1 && typename != "" {
            @display("p=800,100");
        }
        bl: MessageDispatcher if sizeof(ethg)+numWlanInterfaces > 1 && exists(bridging) {
            @display("p=800,200;b=1200,5,,,,1");
        }
        ethernet: <default("EthernetEncapsulation")> like IEthernetLayer if typename != "" && exists(bridging) {
            @display("p=700,300");
        }
        li: MessageDispatcher {
            @display("p=800,400;b=1000,5,,,,1");
        }
        wlan[numWlanInterfaces]: <default("Ieee80211Interface")> like IWirelessInterface {
            @display("p=250,500,row,150;q=queue");
        }
        eth[sizeof(ethg)]: <default("EthernetInterface")> like IEthernetInterface {
            mac.promiscuous = true;
            @display("p=850,500,row;q=txQueue");
        }
    connections allowunconnected:
        bl.out++ --> bridging.lowerLayerIn if sizeof(ethg)+numWlanInterfaces > 1 && exists(bridging);
        bl.in++ <-- bridging.lowerLayerOut if sizeof(ethg)+numWlanInterfaces > 1 && exists(bridging);

        bl.out++ --> li.in++ if exists(bl);
        li.out++ --> bl.in++ if exists(bl);

        bl.out++ --> ethernet.upperLayerIn if exists(ethernet);
        ethernet.upperLayerOut --> bl.in++ if exists(ethernet);
        ethernet.lowerLayerOut --> li.in++ if exists(ethernet);
        li.out++ --> ethernet.lowerLayerIn if exists(ethernet);

        // connections to network outside
        // wireless interfaces MUST be connected first (i.e. ports 0..numWlanInterfaces-1)
        // because broadcasts must be handled differently for wireless IFs by the bridging
        for i=0..numWlanInterfaces-1 {
            radioIn[i] --> { @display("m=s"); } --> wlan[i].radioIn;
            wlan[i].upperLayerOut --> li.in++ if sizeof(ethg)+numWlanInterfaces > 1 && exists(bridging);
            wlan[i].upperLayerIn <-- li.out++ if sizeof(ethg)+numWlanInterfaces > 1 && exists(bridging);
        }
        // ethernet must be connected only AFTER wireless ports
        for i=0..sizeof(ethg)-1 {
            eth[i].phys <--> { @display("m=s"); } <--> ethg[i];
            eth[i].upperLayerIn <-- li.out++ if sizeof(ethg)+numWlanInterfaces>1;
            eth[i].upperLayerOut --> li.in++ if sizeof(ethg)+numWlanInterfaces>1;
        }
}

File: src/inet/node/wireless/AccessPoint.ned