Advanced Users

The Unified Link Layer API (ULLA) can help you to manage your network cards and make life with multiple technologies a lot easier. The current ULLA Core implementation is not limited in the number of devices supported. However, right now the ULLA project at SourceForge can only provide the wlan-ng driver with ULLA support. If you are about to use this driver, please read on.

ULLA supports a very easy to use API for users, who do not want to know about the technology details. In order to perform the most interesting tasks, such as finding and connecting links you can use the ullaTools: Below, you can find some examples how-to use ULLA with the ullaReflection, ullaAttribute, ullaCommand, ullaSamples, and ullaNotification tools.

  • Inserting your WLAN card, will auto-load the device driver and the Link Layer Adapter (LLA) kernel modules. The LLA will register a so-called Link Provider (LP) with ULLA. The LP is an abstraction of the Network Interface Card (NIC) and is described using a table description with attributes and command. You can display the current LP descriptions by the means of the reflection tool ullaReflection.
    ullaReflection "SHOW TABLES;"
    ullaReflection "SHOW ATTRIBUTES OF ullaLinkProvider;"
    ullaReflection "SHOW COMMANDS OF p80211LinkProvider;"
  • The attribute values can be queries using the ullaAttribute tool.
    ullaAttribute "SELECT lpId FROM ullaLinkProvider;"
  • Then you can use the ullaCommand utility to start-off the firmware of one of your WLAN cards.
    ullaCommand "SELECT enable FROM p80211LinkProvider;"
  • Next, you might want to find available links around you. If you issue a command on the LP, the available Links are registered with ULLA automatically. These Links are also described using a table-based notation. Parameters to the command can be given as attribute values set before (scan_mode is set to active and passive scanning mode).
    ullaAttribute "UPDATE ullaLinkProvider SET scan_mode = 1;"
  • ullaCommand "SELECT updateAvailableLinks FROM ullaLinkProvider;"
  • You can list the available Links by requesting as many detail as you need. Therefore, you can place any valid statement of the ULLA Query Language (UQL) in the string part.
    ullaAttribute "SELECT linkId, networkName, mode
    FROM ullaLink
    WHERE rxBitrate > 1000000;"
  • In order to connect a Link just pick a linkId from the returned list and do
    ullaCommand "SELECT connect FROM ullaLink WHERE linkId = 2;"
  • You can monitor the Link charateristics and take samples periodically using the ullaSamples tools. ullaSamples "SELECT rxRetransmisstionRatio, SNIR FROM p80211Link WHERE linkId = 2;"
  • In order to utilize the notification mechanism you can use any UQL statement with the ullaNotification tool. For instance, get yourself informed if the link connection broke down
    ullaNotification "SELECT linkId
    FROM ullaLink
    WHERE state = 0;"
  • Or register an arbitrary complex notification spanning over multiple tables..
    ullaNotification "SELECT ullaLink.localeL2Address
    FROM ullaLink, p80211Link
    WHERE ((ullaLink.rxBitrate > 2000000) AND
    (p80211Link.SNIR < -60)) OR
    (ullaLink.txByte > 300000);"

If you got interessted, you can get more details about the UQL syntax in the UQL section.

© RWTH Aachen University. All rights reserved. 2006
Created February 2006 by Marten Bandholz.