Skip to content
Alessandro Morelli edited this page Jun 26, 2019 · 25 revisions

The Proactive Dissemination Service (DSPro) extends the capabilities of DisService by efficiently and proactively disseminating information objects (IOs) to the edge nodes by means of replication and forwarding policies. The proactive behavior is the result of the integration of policies and a distributed learning algorithm that takes into account the estimated Value of the Information (VoI) carried by the single IOs, along with the history of previously requested information and the characteristics of the target nodes and the mission. As new information becomes available, DSPro matches it against the mission profile and pushes relevant information to the edge nodes. Information that is selected to be pushed is sorted based on the VoI, the predicted time to use, and the confidence value of the prediction.

VoI-based information dissemination is a content-based networking approach where individual IOs are selected and prioritized for distribution based on their estimated value for the different users of the system. Media object chunking is the capability to split large media objects into smaller low-resolution chunks that are still individually intelligible and that can be reassembled to recompose the original object. While only a single chunk is distributed at first, additional chunks are available on-demand. The combination of these two features allows DSPro to gracefully adapt to the conditions of the network.

DSPro has been developed and tested on Microsoft Windows, Linux and MacOSX, and it is likely to work on other flavors of Unix. DSPro has also been ported on Android. Support is currently provided for Android 2.2 and newer versions.

DSPro is written in C++, it operates at the application layer, and therefore it does not rely on any particular driver/libraries. DSPro also offers a Java API that is available through proxies that communicate to DSPro via TCP Sockets. By default DisService proxy clients and server communicate on port 56487. A different port can be specified in the DSPro configuration file.

More information on DSPro can be found in this wiki, or in the manual.

Project Structure

The following list describes the main directories and content of the DSPro Project.

  • aci/cpp/dspro2 - Source files of the DSPro Project
  • aci/cpp/dspro2/linux - Linux Makefiles to compile DSPro under a 32/64 bit Linux OS.
  • aci/cpp/dspro2/win32 - Microsoft Visual Studio 2013 Solution and Project files
  • aci/conf - Folder containing all configuration files of DSPro

Compilation

Microsoft Windows Operating Systems

To compile DSPro under Windows OSs, it is possible to open the DSPro solution file using Microsoft Visual Studio and compile the application from there after having built all necessary third-party libraries and put them in the proper directories.

The next Sections provides more details on the third-party libraries that DSPro requires.

Compiling Google Protobuf Libraries under Windows OS

DSPro needs to link to a number of third-party libraries; for simplicity, we already included most of them into the repository. However, due to the large file size of the Google Protobuf static libraries, the user is required to compile the necessary versions (debug/release build for x86/x64 systems) of the that library starting from the source code provided at path/to/nomads/externals-win/protobuf/3.6.1/sources/ before proceeding with building DSPro.

To compile those libraries under Windows OSs using Microsoft Visual Studio 2017 and without the support for ZLIB (not required by DSPro), you first need to have cmake in your system PATH. Then, you can follow these steps from the root directory of the Protobuf source code:

mkdir build
cd build
mkdir <architecture_name>  # e.g., "x86" or "x64"
cd <architecture_name>
# use "Visual Studio 15 2017" for 32-bits architectures or "Visual Studio 15 2017 Win64" for 64-bits architectures
cmake -G "Visual Studio 15 2017" -Dprotobuf_BUILD_TESTS=OFF ../..

The last command creates a protobuf.sln VS2017 solution file in the current directory that can be opened with Visual Studio 2017 to build Debug and Release versions of the Protobuf static library ("libprotobuf" project). This will create two .lib files under the Debug/ and Release/ directories: libprotobufd.lib and libprotobuf.lib, respectively. Rename the former to libprotobuf_MTd.lib and the latter to libprotobuf_MT.lib and copy them to path/to/nomads/externals-win/protobuf/3.6.1/lib/vs2017/<architecture_name>/

Above, <architecture_name> is either x86 or x64, depending on the architecture chosen when creating the solution file with cmake.

If you encounter issues building the library, additional information is available in the README.md file under the cmake/ directory.

Linux Operating Systems

To compile DSPro under Linux operating systems, the gcc compiler and the make and configure commands need to be installed on your system. The folder aci/cpp/dspro2/linux contains the necessary Makefile. The Makefile detects the local computer architecture and compiles the code accordingly. Before launching the compilation, please make sure that all necessary third-party libraries have been compiled and copied to the proper location (more details on this process below). Once that is done, open a terminal and change your current directory to path/to/nomads/aci/cpp/dspro2/linux. From there, simply type and execute make.

In order to link successfully, the DSPro Makefile requires the Protobuf and OpenSSL static libraries, which are not included in this repository due to reasons related to the large size of those libraries. The next Sections provides more details on the compilation of Protobuf and OpenSSL under Linux OSs.

Compiling Google Protobuf Libraries under Linux OS

The source code for Protobuf 3.6.1 is located at the directory path/to/nomads/externals/protobuf/3.6.1/sources. The following tools are necessary to build Protobuf under Linux:

  • autoconf
  • automake
  • libtool
  • make
  • g++
  • unzip

On Ubuntu/Debian, it is possible to install them running the following command:

sudo apt-get install autoconf automake libtool curl make g++ unzip

If you are using a different Linux distribution, please make sure you have installed those packages before proceeding. The following steps should be sufficient to successfully compile the library and put it in the right location for the DSPro Makefile to link to it:

cd path/to/nomads/externals/protobuf/3.6.1/sources
./configure --disable-shared
make
cd src/.libs
cp libprotobuf.a ../../../lib/<linux-architecture-glibc>/

<architecture-glibc> depends on the target machine's architecture and glibc version and it must be one of the following:

  • linux
  • linux-arm
  • linux-glibc22
  • linux64
  • linux64-arm
  • linux64-glibc22

If you encounter errors when compiling Protobuf, further details are available in the README file located under the src/ directory within the Protobuf source code.

Compiling OpenSSL under Linux OS

The source code for OpenSSL is located at the directory path/to/nomads/externals/openssl/1.0.2h/sources. The following tools are necessary to build Protobuf under Linux:

  • make
  • Perl 5

On Ubuntu/Debian, it is possible to install them running the following command:

sudo apt-get install make perl

If you are using a different Linux distribution, please make sure you have installed those packages before proceeding. The following steps should be sufficient to successfully compile the library and put it in the right location for the DSPro Makefile to link to it:

cd path/to/nomads/externals/openssl/1.0.2h/sources
./config no-zlib no-shared
make depend
make
cp *.a ../lib/<linux-architecture-glibc>/

Just like for the Protbuf libraries, <architecture-glibc> depends on the target machine's architecture and glibc version and it must be one of the following:

  • linux
  • linux-arm
  • linux-glibc22
  • linux64
  • linux64-arm
  • linux64-glibc22

If you encounter errors when compiling OpenSSL, further details are available in the INSTALL file located at the root of the OpenSSL source code directory.

Autotools errors

While compiling external libraries and dependencies, errors might occur due to different version of aclocal and other autotools utilities. If this happens, you can run

autoreconf -f -i

from the directory that contains the configure file of the library you are trying to build.

DSPro VM

DSPro can be provided pre-compiled and pre-configured in a pre-configured Ubuntu Linux virtual machine. In the VM, all the files related to DSPro are located at ~/IHMC, in particular the IHMC directory is structured as follows:

  • ~/IHMC/bin contains the executable for DSPro and the monitoring applications.
  • ~/IHMC/code is optional. If present, it contains DSPro’s source code.
  • ~/IHMC/conf contains the configuration files for DSPro and mockets.
  • ~/IHMC/logs will contain the logs generated by DSPro
  • ~/IHMC/scripts contains scripts to run DSPro, to run DSPro in the gdb debugger, and to run the Information Manager (IM) GUI.

Running DSPro

Configuration

The aci/conf directory contains the configuration file for DSPro, in addition to those of other components of the Agile Computing Middleware. At startup, DSPro will read the configuration file given as an argument to the executable. An example of such file can be found in aci/conf/dspro.properties. Further information on DSPro configuration parameters can be found at the corresponding entry of this wiki.