Skip to content

lwimmer/rmbt-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

815e7b4 · Aug 22, 2019

History

42 Commits
Feb 22, 2019
Feb 16, 2019
Feb 22, 2019
Apr 20, 2017
Feb 22, 2019
Apr 7, 2017
Apr 23, 2017
Aug 22, 2019
Feb 22, 2019
Jun 4, 2017
Apr 23, 2017

Repository files navigation

rmbt-client - RMBT speed measurement client in C

This project is a result of the master thesis "Platform for Measuring Mobile Broadband Performance Analysis and Implementation". Detailed documentation can be found in the thesis.

For more information about RMBT see also:

This code is licensed under the Apache License, Version 2.0.

Docker

Server

To run the rmbt-server with docker, run:

docker run -v rmbtd-config:/config -p 8081-8082:8081-8082 lwimmer/rmbt-server

For more information see https://github.com/lwimmer/rmbt-server

Client

To run rmbt-client with docker, run:

docker run lwimmer/rmbt-client -h <server hostname> -p <server port> -s <secret>

For more information about the configuration parameters, see below.

To supply a config file you can use:

docker run -v <path to config>:/config.json:ro lwimmer/rmbt-client -c config.json

or

docker run -i lwimmer/rmbt-client -c - < <path to config>

Building

rmbt-client has the following requirements:

  • autoconf, automake, make
  • gcc, clang or another C compiler
  • libuuid
  • libssl, libcrypto
  • libjson-c
  • (xz-utils / liblzma)
  • (git)

To install the required build dependencies on apt based distos (Debian, Ubuntu, ...) run:

sudo apt install libc-dev git autoconf automake make gcc pkg-config libjson-c-dev libssl-dev uuid-dev liblzma-dev

For yum based distros (CentOS, Fedora, ...) this should work:

yum install git autoconf automake make gcc json-c-devel openssl-devel libuuid-devel xz-devel

To build simply run:

git clone https://github.com/lwimmer/rmbt-client
cd rmbt-client
./autobuild.sh

To install run:

make install

Running

To run rmbt-client you need to supply rmbt-client with the configuration.

For the most important parameters this can be done via the command line (see rmbt -?):

-c     json config file; use "-" to read from stdin
-b     local ip to bind
-h     host to connect to
-p     port to connect to
-e     connect using SSL/TLS
-t     token to use (either -t or -s is needed)
-s     secret for token generation
-f     number of flows
-d     measurement duration for downlink
-u     measurement duration for uplink
-n     number of rtt_tcp_payloads

Alternatively a JSON configuration file can be supplied via stdin (rmbt -c -) or as a file (rmbt -c config.json).

A minimum configuration file could look something like this:

{
  "cnf_server_host": "127.0.0.1",
  "cnf_server_port": 8081,
  "cnf_secret": ""
}

For more information see the file config.example.json.

Server installation

The server code can be found here: https://github.com/rtr-nettest/rmbt-server

It has the following requirements:

  • make
  • gcc, clang or another C compiler
  • libssl
  • libuuid
  • (git)

To install the required build dependencies on apt based distos (Debian, Ubuntu, ...) run:

sudo apt install libc-dev git make gcc libssl-dev uuid-dev

For yum based distros (CentOS, Fedora, ...) this should work:

yum install git make gccopenssl-devel libuuid-devel

To build simply run:

git clone https://github.com/rtr-nettest/rmbt-server
cd rmbt-server/
# The following line disables the token check:
sed -i 's|#define CHECK_TOKEN 1|#define CHECK_TOKEN 0|' config.h
# Generate self-signed certificate:
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -nodes -subj '/CN=localhost' -sha256 -days 10000
# Build:
make server-prod random

To use systemd for running rmbtd as a service you can create a file like this and save it as /etc/systemd/system/rmbtd.service:

[Unit]
Description=RMBTd
After=network.target

[Service]
WorkingDirectory=/home/rmbtd/rmbtd
ExecStart=@/home/rmbtd/rmbtd/rmbtd rmbtd -l 10080 -L 10443 -c server.crt -k server.key -u rmbtd
TimeoutStopSec=60
Restart=always

[Install]
WantedBy=multi-user.target

Paths and ports may need to be changed (lines given above configure to start listening on ports 10080 -without encryption- and 10443 -with encryption-).

To finally run and enable the server at bootup run the following commands as root:

systemctl daemon-reload
systemctl start rmbtd.service
systemctl enable rmbtdservice

You can use the following command (or edit the config file manually) to change the number of flows that the server allows (replace <n>; rebuild afterwards):

sed -i 's|#define DEFAULT_NUM_THREADS   200|#define DEFAULT_NUM_THREADS   <n>|' config.h

About

RMBT speed measurement client in C

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages