Configure Baseboxd as SDN Controller

Getting started

Log into the switch with the following credentials:

USER = "basebox"
PASSWORD = "b-isdn"

You should then see the console of BISDN Linux. You can also display the OS information by running cat /etc/os-release.

BISDN Linux, as most other Linux systems, requires superuser privileges to run commands that change system settings. The examples below must then be run via sudo to succeed.

BISDN Linux makes use of systemd. There are several systemd-enabled services required that turn a whitebox switch into a router:

  • ofdpa
  • ofdpa-grpc
  • ofagent
  • baseboxd
  • frr

You may start/stop/query a service like this:

systemctl start | stop | restart | enable | disable | status SERVICE.service

where for example the command to show information about baseboxd would be systemctl status baseboxd.service.

System and component versions

Checking the versions of packages, like the ones listed above, can be done using

sudo opkg info <package name>

You can also print all installed packages with their associated versions with

sudo opkg list_installed

For the current version of baseboxd, simply run

baseboxd --version

List information about the BISDN Linux release with

cat /etc/os-release

And information about the build date and linux kernel can be found via

uname -a

Configure a local or remote controller

BISDN Linux contains the prerequisites to control the switch by either local or remote OpenFlow controllers. The default configuration is a local controller, with BISDN Linux currently supporting baseboxd and Ryu.

Run the following scripts in the BISDN Linux shell to configure the local or remote controller.

Local controller

To configure a local baseboxd controller using the default OpenFlow port 6653:

sudo basebox-change-config -l baseboxd

To configure a local Ryu controller:

sudo basebox-change-config -l ryu-manager ryu.app.ofctl_rest

where ryu.app.ofctl_rest is the Ryu application. If you have a file for a custom application, please use the absolute path to the application file.

Please note that with Ryu the integration of Linux networking (netlink) events is not supported, as that is a feature from baseboxd.

Remote controller

To configure a remote OpenFlow controller with <IP-address> and <OpenFlow-port>:

sudo basebox-change-config -r <IP-address> <OpenFlow-port>

Verify your ofagent configuration

You can check the results of your configuration in the following file: /etc/default/ofagent

The section “OPTION=” should point to localhost (local controller) or to the remote controller and respective port that you have configured.

Setup baseboxd

The baseboxd configuration file located in ‘/etc/default/baseboxd’ allows you to set flags for which ports to listen on and for enabling/disabling multicast and KNET interfaces. The default configuration file shows the basic structure:

### Configuration options for baseboxd
#
# Enable multicast support:
# FLAGS_multicast=true
#
# Listening port:
# FLAGS_port=6653
#
# gRPC listening port:
# FLAGS_ofdpa_grpc_port=50051
#
# Use KNET interfaces:
# FLAGS_use_knet=true
#
# Mark switched packets as offloaded:
# FLAGS_mark_fwd_offload=true
#
# Vlan ID used for untagged traffic on unbridged ports (1-4095):
# FLAGS_port_untagged_vid=1

### glog
#
# log to stderr by default:
GLOG_logtostderr=1

# verbose log level:
# GLOG_v=0

# verbose per-module log level:
# GLOG_vmodule=

Logging options

We use the Google Logging Library for logging. This includes the GLOG_vmodule that allows you to set the log level for specific sub-modules.

The numbers of severity levels INFO, WARNING, ERROR, and FATAL are 0, 1, 2 and 3, respectively.

The default configuration, as shown in the above section, logs all messages at level INFO and above to stderr.

You can reduce log verbosity by setting minloglevel.

# log to stderr by default:
GLOG_logtostderr=1

# Only show WARNING ERROR and FATAL level messages
GLOG_minloglevel=1 
Verbose logging

glog also supports verbose logging levels, asecending from 0.

These are defined separately as GLOG_v* options. This can be enabled globally in the baseboxd configuration file using the following syntax.

Note: Verbose logging requires the INFO level to be enabled.

GLOG_v=2

You can also set verbose logging levels on a per-module basis:

For example, if you want to set the log levels for the cnetlink and nl_bridge sub-modules to 3 and 2, respectively, simply add the following line to the configuration file:

GLOG_vmodule=cnetlink=3,nl_bridge=2
File-based logging

glog can also be configured to log to files. The default level is INFO. You can use the stderrthreshold to send the most important messages to stderr, whilst writing everything including INFO level and verbose logs to a file.

Files are written to the log directory, with INFO, ERROR etc. files. Each file contains any log messages ar the named level or greater.

A symlink is created for the latest file for each level e.g basebox.INFO.

# Enable logging to stderr and to a file
# Note, default of GLOG_logtostderr=1 must be commented out
# GLOG_logtostderr=1
# Log anything WARN and above to standard error
GLOG_stderrthreshold=2
# Defaults to /tmp. Note: not created automatically
GLOG_log_dir=/var/log/baseboxd
Creating log directory automatically

You can configure systemd to create the directory automatically by running sudo systemctl edit baseboxd and adding the below lines to the file.

Note, the path must be relative to /var/log to use this mechanism. e.g /var/log/baseboxd, as shown above, becomes baseboxd.

[Service]
LogsDirectory=baseboxd

You can then apply the changes by running sudo systemctl daemon-reload and following the steps in the next section.

Applying configuration changes

In order to apply changes in the baseboxd configuration you can either reboot the switch:

reboot

or restart the baseboxd service:

sudo systemctl restart baseboxd