Installation

The BNG Blaster should run on any modern Linux distribution but is primarily tested on Ubuntu 18.04, 20.04 and 22.04 LTS.

Install Ubuntu

Install dependencies:

# Ubuntu 18.04 and 20.04
sudo apt install -y libssl1.1 libncurses5 libjansson4
# Ubuntu 22.04
sudo apt install -y libssl3 libncurses6 libjansson4

Download and install the Debian package: https://github.com/rtbrick/bngblaster/releases

sudo dpkg -i <package>

This command installs the BNG Blaster to /usr/sbin/bngblaster.

Build from Sources

Dependencies

The BNG Blaster has dependencies on the RtBrick libdict fork and the following standard dependencies:

# install libdict for Ubuntu 18.04 LTS
wget https://github.com/rtbrick/libdict/releases/download/v1.0.1/libdict-debian.zip
unzip libdict-debian.zip
sudo dpkg -i libdict_1.0.1_amd64.deb
sudo dpkg -i libdict-dev_1.0.1_amd64.deb

# install libdict for Ubuntu 22.04 LTS
wget https://github.com/rtbrick/libdict/releases/download/1.0.3/libdict-ubuntu-22.04.zip
unzip libdict-ubuntu-22.04.zip
sudo dpkg -i libdict_1.0.3_amd64.deb
sudo dpkg -i libdict-dev_1.0.3_amd64.deb

# install other dependencies
sudo apt install -y cmake \
    libpcap-dev \
    libcunit1-dev \
    libncurses5-dev \
    libssl-dev \
    libjansson-dev

Build

Per default cmake (cmake .) will build the BNG Blaster as a release version with optimization and without debugging symbols.

git clone https://github.com/rtbrick/bngblaster.git
cd bngblaster
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make all

Alternative it is also possible to build a debug version for detailed troubleshooting using gdb.

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make all

There are also CPack files generated which allow to easily generate a Debian package by just executing cpack from the build directory.

It is also recommended to provide the GIT commit details to be included in the manually build the version as shown below:

cmake -DGIT_REF=`git rev-parse --abbrev-ref HEAD` -DGIT_SHA=`git rev-parse HEAD` .

Example:

$ bngblaster -v
GIT:
REF: dev
SHA: df453a5ee9dbf6440aefbfb9630fa0f06e326d44
IO Modes: packet_mmap_raw (default), packet_mmap, raw

Install

Then BNG Blaster can be installed using the make install target.

sudo make install

This command installs the BNG Blaster to /usr/sbin/bngblaster.

Build and Run Unit Tests

Building and running unit tests requires CMocka to be installed:

sudo apt install libcmocka-dev

The option BNGBLASTER_TESTS enables to build unit tests.

cmake -DCMAKE_BUILD_TYPE=Debug -DBNGBLASTER_TESTS=ON .
make all
make test

Example:

$ make test
Running tests...
Test project
    Start 1: TestProtocols
1/1 Test #1: TestProtocols ....................   Passed    0.00 sec

100% tests passed, 0 tests failed out of 1

Total Test time (real) =   0.00 sec

Build with DPDK Support

The following steps are required to build the BNG Blaster with experimental DPDK support.

Note

Tested with DPDK version 22.11.4 and Ubuntu 22.04 (LTS)!

Download and install DPDK: https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html

# install meson
sudo apt install meson ninja-build

# download DPDK
wget https://fast.dpdk.org/rel/dpdk-22.11.4.tar.xz
tar xJf dpdk-22.11.4.tar.xz
cd dpdk-stable-22.11.4

# build with driver SDK
meson -Denable_driver_sdk=true build
cd build
ninja

# install
sudo ninja install
sudo ldconfig

Building BNG Blaster with DPDK support works as explained before but with the additional cmake argument -DBNGBLASTER_DPDK=on

cmake -DBNGBLASTER_DPDK=on ..

If DPDK is installed correctly, cmake should show the following output:

-- Build bngblaster with DPDK support
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.0")
-- Checking for module 'libdpdk'
--   Found libdpdk, version 22.11.4
-- Found DPDK via pkg-config

The installed version should now show dpdk as new IO mode.

sudo bngblaster -v
Version: DEV
Compiler: GNU (11.2.0)
IO Modes: packet_mmap_raw (default), packet_mmap, raw, dpdk

Running BNG Blaster

The BNG Blaster needs permission to send raw packets and change network interface settings. The easiest way to run the BNG Blaster is either as the root user or with sudo:

# As root
bngblaster -C config.json -I

# As a normal user:
sudo bngblaster -C config.json -I

A third option is to set capabilities on the binary with for example setcap as shown below:

sudo setcap cap_net_raw,cap_net_admin,cap_dac_read_search+eip `which bngblaster`

# As normal user:
bngblaster -C config.json -I