exabgp - Man Page

Influence or control network using BGP

Synopsis

exabgp[--help | -h] [--version | -v] [--env env-config | -e env-config] [--full-ini | --fi] [--diff-ini | --di] [--full-env | --fe] [--diff-env | --de] [--debug | -d] [--signal time] [--once | -1] [--pdb | -p] [--memory | -s] [--profile profile] [--validate] [--test | -t] [--decode hex-message | -x hex-message] [configuration ...]

Description

exabgp allows engineers to control their network from commodity servers. Possible uses include DDoS mitigation, network visualisation, service high availability and implementing anycast. exabgp does not perform any FIB manipulation on the system it runs on; if you need that this is not the program for you. exabgp can also print received BGP messages into readable plain text or JSON formatted text.

The arguments are as follows:

--env env-config | -e env-config

Specify where the environment configuration file can be found.

--full-env | --fe

Display the full environment configuration on stdout using the env format.

--diff-env | --de

Display the non-default environment configuration on stdout using the env format.

--full-ini | --fi

Display the full environment configuration used on stdout using the ini format.

--diff-ini | --di

Display the non-default environment configuration on stdout using the ini format.

--debug | -d

Start the python debugger on serious logging and on reception of the SIGTERM signal. This implies exabgp.log.all=true and exabgp.log.level=DEBUG.

--signal time

Issue a SIGUSR1 signal to reload the configuration after the specified number of seconds, only useful for code debugging.

--once | -1

Only perform one attempt to connect to peers, used mostly for debugging.

--pdb | -p

Start the python debugger on critical logging, reception of SIGTERM, and on uncaught python exceptions. This is a shortcut for exabgp.pdb.enable=true.

--memory | -s

Display memory usage information on program exit.

--profile profile

Enable collection of profiling information to the given file. This is a shortcut for exabgp.profile.enable=true and exabgp.profile.file=profile.

--test | -t

Only do a configuration validity check.

--validate

Validate the configuration file format only.

--decode hex-message | -x hex-message

Decode a raw route packet in hexadecimal string.

--help | -h

Display summary of usage and configuration of exabgp.

--version | -v

Display the exabgp version number and exit.

Environment

The configuration of exabgp is split in two:

The environment configuration can be specified a number of different ways, with different priority:

  1. Command line values using dot-separated notation.

  2. Environment variables using dot-separated notation.

  3. Command line values using underscore-separated notation.

  4. Environment variables using underscore-separated notation.

  5. The values from the ini configuration file, /etc/exabgp/exabgp.env

  6. The built-in default values.

The following environment variables can be used to configure the basic execution of exabgp:

exabgp.api.ack

Acknowledge api comman(s) and report issues. Default: true.

exabgp.api.chunk

Maximum number of lines to print before yielding in "show routes" api. Default: 1.

exabgp.api.cli

Determines if exabgp should create a named pipe for the CLI. Default: true.

exabgp.api.compact

Determines whether exabgp should use shorter JSON encoding for IPv4/IPv6 unicast NLRI. Default: false.

exabgp.api.encoder

(experimental) default encoder to use with external API (text or json). Default: text.

exabgp.api.pipename

Base name to be used for the exabgp pipe for the CLI interface. Default: exabgp.

exabgp.api.respawn

Controls whether to respawn a helper process if it dies. Default: false.

exabgp.api.terminate

Controls whether to exit if any helper process dies. Default: false.

exabgp.bgp.openwait

Controls how many seconds we should wait for a BGP open message once the TCP session is established. Default: 60 seconds.

exabgp.cache.attributes

Controls whether all attributes (configuration and wire) should be cached for faster parsing. Default: true.

exabgp.cache.nexthops

(deprecated, next-hops are always cached) Default: true.

exabgp.daemon.daemonize

Controls whether exabgp should run in the background. Default: false.

exabgp.daemon.drop

Determines if exabgp should drop privileges before forking processes. Default: true.

exabgp.daemon.pid

Where to save the PID of exabgp if we manage it. Default: '' (not set).

exabgp.daemon.umask

Controls umask to set, controls permissions of created files, e.g. logs. Default: 0137.

exabgp.daemon.user

The user to run exabgp as. Should be an unprivileged user. Default: nobody.

exabgp.log.all

Controls whether debug logging should be done for everything. Default: false.

exabgp.log.configuration

Controls whether logging should be done for the configuration and command parsing. Default: true.

exabgp.log.daemon

Controls whether logging should be done for PID change, forking, etc. Default: true.

exabgp.log.destination

Controls where logging should be sent. syslog (or no setting) sends the data to the local syslog server with the LOG_DAEMON facility (used to be LOG_USER). host:<location> sends the data to a remote syslog server. stdout sends the data to stdout. stderr sends the data to stderr. <filename> sends the data to the named file. Default: stdout.

exabgp.log.enable

Controls whether logging should be done. Default: true.

exabgp.log.level

Sets the minimum severity level to log. Default: INFO.

exabgp.log.message

Controls logging of changes in route announcement in config reload. Default: false.

exabgp.log.network

Controls logging of networking information (TCP/IP state, network state etc.). Default: true.

exabgp.log.statistics

Controls logging of packet statistics (counters). Default: true.

exabgp.log.packets

Controls logging of BGP packets sent and received. Default: false.

exabgp.log.parser

Controls logging of BGP message parsing details. Default: false.

exabgp.log.processes

Controls logging of forked processes. Default: true.

exabgp.log.reactor

Controls logging of signals received and command reload. Default: true.

exabgp.log.rib

Controls logging of changes in locally configured routes. Default: false.

exabgp.log.routes

Controls logging of received routes. Default: false.

exabgp.log.short

Coontrols whether to use long or short log format (not prepended with time, level, pid and source). Default: false.

exabgp.log.timers

Controls logging of keepalive timers. Default: false.

exabgp.pdb.enable

Controls whether pdb, the python interactive debugger should be started on program faults. Default: false.

exabgp.profile.enable

Controls whether profiling of the code should be done. Default: false.

exabgp.profile.file

Controls where profiling results should be written. None/empty means stdout. Default: empty.

exabgp.reactor.speed

Controls the time of one reactor loop. Use only if you understand the code. Default: 1.0.

exabgp.tcp.acl

(experimental, unimplemented). Default: empty.

exabgp.tcp.bind

List of IP addresses to bind to when listening (no ip to disable). Default: empty.

exabgp.tcp.delay

Start to announce routes when the minutes in the hour is a modulo of this number. Default: 0.

exabgp.tcp.once

Only perform one TCP connection attempt per peer, for debugging scripts. Default: false.

exabgp.tcp.port

Port to bind to when listening. Default: 179.

Files

/etc/exabgp/exabgp.env is the default file for setting the "environment" variables controlling the execution of exabgp. An alaternative "env" configuration file can be supplied via the --env env-config argument. The format of this file is "Windows INI format". All the default settings can be shown with the exabgp --test --full-init command, an example showing parts of this output is:

[exabgp.api]
encoder = text
respawn = false

[exabgp.bgp]
openwait = 60

Additionally, the user will need to supply a configuration file controlling the BGP configuration of exabgp, in the format described in exabgp.conf(5).

Signals

exabgp catches a few different signals to control specific actions. They are:

ALRM

Restarts exabgp.

USR1

Causes exabgp to reload the configuration.

USR2

Causes exabgp to reload the configuration and restart any forked processes.

TERM

Terminates exabgp.

HUP

Also terminates exabgp (does not reload the configuration anymore).

Reloading large configurations using signals is currently not recommended, because the configuration parsing code is currently blocking. Therefore if you have a large configuration change, it could cause the peer to miss some keepalive and cause a session flap.

Diagnostics

The --test argument is useful to validate the syntax of the configuration file. The --debug flag will provide copious debug output to wherever the various exabgp.log variable settings dictate.

See Also

exabgp.conf(5)

Standards

A list of the standards exabgp implements which is indicative of the features implemented is:

RFC 4893

BGP Support for Four-octet AS Number Space

RFC 4760

Multiprotocol Extension for BGP-4

RFC 4659

BGP-MPLS IP Virtual Private Network (VPN) Extension for IPv6 VPN

RFC 4762

Virtual Private LAN Service (VPLS) Using Label Distribution Protocol (LDP) Signalling

RFC 5575

Dissemination of Flow Specification Rules

RFC 4724

Graceful Restart Mechanism for BGP

RFC 7313

Enhanced Route Refresh Capability for BGP-4

RFC 7311

The Accumulated IGP Metric Attribute for BGP

draft-raszuk-idr-flow-spec-v6-03

(draft-ietf-idr-flow-spec-v6-06), Dissemination of Flow Specification Rules for IPv6

draft-simpson-idr-flowspec-redirect-00 (-02)

BGP Flow-Spec Redirect to IP Action

draft-ietf-idr-flowspec-redirect-00 (-02)

BGP Flow-Spec Redirect to IP Action

draft-ietf-idr-add-paths-08 (-10)

Advertisement of Multiple Paths in BGP

draft-ietf-idr-bgp-multisession-07 (??)
draft-scudder-bmp-01 (??)

A list of other more basic BGP-related standard entirely or partially implemented is:

RFC 1997

BGP Communities Attribute

RFC 8092

BGP Large Communities Attribute

RFC 2385

Protection of BGP Sessions via the TCP MD5 Signature

RFC 2545

Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing

RFC 2918

Route Refresh Capability for BGP-4

RFC 3107

Carrying Label Information in BGP-4

RFC 3765

NOPEER Community for Border Gateway Protocol (BGP) Route Scope Control

RFC 7999

BLACKHOLE BGP Community for Blackholing

RFC 4271

A Border Gateway Protocol 4 (BGP-4)

RFC 4360

BGP Extended Communities Attribute

RFC 4364

Constrained Route Distribution for BGP/MPLS IP VPNs

RFC 4456

BGP Route Reflection: An Alternative to Full Mesh Internal BGP (iBGP)

RFC 5396

Textual Representation of Autonomous System (AS) Numbers

RFC 5492

Capabilities Advertisement with BGP-4

RFC 6286

Autonomous-System-Wide Unique BGP Identifier for BGP-4

RFC 6608

Subcodes for BGP Finite State Machine Error

RFC 7752

North-Bound Distribution of Link-State and Traffic Engineering (TE) Information Using BGP

draft-gredler-idr-bgp-ls-segment-routing-ext-03

BGP Link-State extensions for Segment Routing

draft-ietf-idr-bgp-prefix-sid-05

Segment Routing Prefix SID extensions for BGP

Referenced By

exabgp.conf(5).

October 14, 2022