Cross/ServiceManagementLayerAPI

Service Management Layer

Communication Protocol

As with each of the VT-CROSS components, the communication protocol between components must adhere to a specific standard. The following sections detail the major SML functions and the communication protocol needed to work with it.

Registration with Cognitive Radio Shell

In order for the system to know that an SML is available, the SML must register itself with the Cognitive Radio Shell. This process is usually performed immediately after the SML successfully connects to the Cognitive Radio Shell. The process is as follows:

  1. SML connects to the Cognitive Radio Shell's dedicated primary port.
  2. SML sends "register_sml" command to the Cognitive Radio Shell.
  3. SML waits for "register_ack" response from the Cognitive Radio Shell to acknowledge receipt of registration request.

Cognitive Engine Registration

If a Service Management Layer component is active, Cognitive Engine will connect directly to the SML. In these cases, the Cognitive Engine registration process informs the SML of the available Cognitive Engine services in addition to performing the standard Cognitive Engine registration process with the Cognitive Radio shell. The SML must pass the standard Cognitive Engine registration information between the CE component and the Shell component. The process is as follows:

  1. Cognitive Engine connects to the SML dedicated Cognitive Engine port.
  2. Cognitive Engine sends "register_engine_cognitive" command to the SML.
  3. SML sends "register_engine_cognitive" command to the Cognitive Radio Shell.
  4. Cognitive Radio Shell sends a "receive_register_ack" response to the SML.
  5. SML sends a "receive_register_ack" response to the Cognitive Engine.
  6. Cognitive Radio Shell sends the Radio Configuration data? to the SML.
  7. SML sends the Radio Configuration data? to the Cognitive Engine.
  8. Cognitive Engine sends "receive_config_ack" response to the SML.
  9. SML sends "receive_config_ack" response to the Cognitive Radio Shell.
  10. Cognitive Radio Shell sends the local cache of Radio Experience data? to the SML.
  11. SML sends the local cache of Radio Experience data? to the Cognitive Engine.
  12. Cognitive Engine sends "receive_exp_ack" response to the SML.
  13. SML sends "receive_exp_ack" response to the Cognitive Radio Shell.
  14. Cognitive Engine sends "register_service" to the SML.
  15. Cognitive Engine sends "service_name" to the SML, where service_name depends on the service that the CE is offering.
  16. SML sends "receive_service_ack" to the Cognitive Engine.
  17. Process loops back to 14. and continues to loop until CE has no more services to register.

At this point the Cognitive Engine is now completely registered and may begin to accept optimization requests from the host application.

Policy Engine Registration

If a Service Management Layer component is active, Cognitive Engine will connect directly to the SML. In these cases, the Cognitive Engine registration process informs the SML of the available Cognitive Engine services in addition to performing the standard Cognitive Engine registration process with the Cognitive Radio shell. The SML must pass the standard Cognitive Engine registration information between the CE component and the Shell component. The process is as follows:

  1. Policy Engine connects to the SML dedicated Policy Engine port.
  2. Policy Engine sends "register_engine_policy" command to the SML.
  3. SML sends "register_engine_policy" command to the Cognitive Radio Shell.
  4. Cognitive Radio Shell sends a "receive_register_ack" response to the SML.
  5. SML sends a "receive_register_ack" response to the Policy Engine.
  6. Policy Engine sends "register_service" to the SML.
  7. Policy Engine sends "service_name" to the SML, where service_name depends on the service that the PE is offering.
  8. SML sends "receive_service_ack" to the Policy Engine.
  9. Process loops back to 14. and continues to loop until PE has no more services to register.

At this point the Policy Engine is now completely registered and may begin to validation transmission parameters against policies.

Setting Active Mission

The services executed through requests to the Cognitive Engines are determined by the current Active Mission. The Active Mission is set by the host application through the Cognitive Radio API. The protocol is as follows:

  1. The Host Application sends a request to set the active mission to a specific mission is sent to the Cognitive Radio Shell.
  2. Cognitive Radio Shell sends "set_active" followed by "missionID", where missionID is the specific mission identification number as defined in the SML configuration file.
  3. SML sends "receive_mission_ack" to Cognitive Radio Shell.
  4. Cognitive Radio Shell sends "receive_mission_ack" to the Host Application.
  5. SML sets active mission which in turn sets the active set of services to execute when an optimization request comes in.

Cognitive Engine Parameter Optimization with Services

If the VT-CROSS system has an active SML present, the optimization done by the Cognitive Engines will be performed according to the ordered services that correspond to the current Active Mission as defined in the SML configuration. The process begins with an optimization request from the Host Application through the Cognitive Radio API. The request triggers the SML to make requests to the cognitive engines to perform specific services until all the services for the corresponding active mission are completed. The process is as follows:

  1. The Host Application sends a request for optimization along with the current observable parameters to the Cognitive Radio Shell through the Cognitive Radio API.
  2. The Cognitive Radio Shell sends "request_optimization" to the SML.
  3. The Cognitive Radio Shell sends each observable parameter to the SML, in the following format:
    1. "observable_name"
    2. "observable_value"
  4. For each service in the Active Missions list, the SML determines the corresponding Cognitive Engine and sends the following:
    1. "request_optimization_service"
    2. "service_name" where service_name is the actual name of the service to be used.
    3. "observable_name"
    4. "observable_value"
    5. Loop back to c. until all observables have been passed.
  5. The Cognitive Engine responds with a set of transmission parameters and their values in the following format:
    1. "parameter_name"
    2. "parameter_value"
  6. These parameters and their values are passed onto the Cognitive Radio Shell and back to the Host Application.
  7. This process loops back to 4. until all the services have been completed.

This figure shows and example process of a mission oriented service-based optimization process. The example shows two services being executed using two cognitive engines. They are executed sequentially, with the first service being executed and transmission parameters sent to the host application, followed by the second service being executed and sending the transmission parameters to the host application.

Public Member Functions

Constructors / Destructors

ServiceManagementLayer();
~ServiceManagementLayer();
void ConnectToShell(const char* serverName, const char* serverPort);

Inherited from abstract base class Component

void SendComponentType();
void WaitForSignal();
void Shutdown();
void Reset();
void RegisterComponent();
void DeregisterComponent();

Private Member Functions

void TransferRadioConfiguration();

Forwards the current Radio Configuration information to the component that requested it.

void TransferExperience();

Transfers the local experience cache from the Cognitive Radio Shell to the component that requested it.

void ReceiveServices();

Queries all connected components for their available services.

void SetActiveMission();

Sets the current operating mission of the Service Management Layer. This will dictate the services from the connected components that are invoked when the Cognitive Radio is triggered for a request for optimal parameters.

void ListServices();

Prints the current available services and the associated components.

void ReloadConfiguration();

Reloads the SML configuration file into the system.

void LoadConfiguration();

Loads the SML configutation file into the system.

Attachments