Link Layer Programming

Application developers writing network aware applications can benefit from the Unified Link Layer API (ULLA) in many ways. In comparison with the access to the Wireless Extensions for WLAN, the API is simplified tremendously. Also, the set of the targeted link layer technologies supported, such as 802.11, GSM, Bluetooth and other is much broader. However, ULLA scales the level of detail the application developer needs to put in from totally technology unaware to detailed technology and product specific parameters.

API Function Overview

The ullaRequestAttribute is the most important function of ULLA and allows the application programmer to retrieve link layer information from the device driver in a synchronous manner. Also, the application using ULLA can set attribute values. In order to specify a specfic request a subset of SQL, the UQL, is utilized. Additionally, a constraint about the validity of the returned value can be set in milliseconds granularity. The developer can trade the time waiting for the result versus the up-to-dateness of the value.

In order to learn about the available attributes and commands the ullaRequestReflection method provides a reflection interface. The available tables contain also a semantic description of the attributes and commands supported.

The result returned by ULLA can be accessed using a set of accessor functions iterating through the rows of the ullaResult .

In order to perform a sampling of link layer data for monitoring purposes, the ullaRequestSample method allows the application using ULLA to specifiy a sampling period. The query is always evaluated after this time has elapsed. The sampling request is canceled by the application can be or auto-canceled by setting a maximum number of samples to be taken.

Additionally, ULLA provides an asynchrounous notification mechanism. Using the ullaRequestNotification function the application developer can specify an event by means of an UQL statement to receive a notification upon fulfilment of the condition. The request can be canceled from the program later on or gets auto-canceled if the notification is fired the maximum number of times requested. The notification can be also multicasted to a number of threads if required.

The commands already mentioned in the reflection interface can be executed using the ullaRequestCommand function. Commands can be used to for configuration purposes. Parameters to the commands are given by attributes set before by the means of the ullaRequestAttribute with an UQL update_statement. In order to ensure no other application does interfer with the new attribute settings, attributes and commands can be locked using the ullaRequestLock function.

There exist a few man-pages in the repository decribing the ULLA function definitions more detailed.

The current header files of the ULLA at SourceForge project are documented using doxygen documentation.

Architecture

The overall architecture of ULLA reveals that there is no magic behind the scenes. ULLA provides an interface tailored for application developers, but relies on the support of Link Layer Adapters (LLAs), or device drivers supporting ULLA. The following figure shows the overall relationship between the implemented components. However, in the current implementation, beginning 2006, there is only a single LLA for the wlan-ng driver available.

ULLA architecture

In case you are interested in more detailed information, there is an UML model available for Enterprise Architect.

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