EXABGP(1)
π¦ exabgp β NAME π¦
okay so hi bestie, welcome to the manual page for exabgp (that's the <pink>exabgp(1)</pink> page, section 1, iykyk) and its whole entire vibe is: Influence or control network using BGP. that's it. that's the whole pitch. π
πΈ 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 π
so exabgp lets engineers control their network from commodity servers. like, normal servers. not fancy router hardware. iconic behavior honestly. β¨
the ways people use it, fr fr:
- DDoS mitigation
- network visualisation
- service high availability
- implementing anycast
big important thing though bestie: exabgp does not perform any FIB manipulation on the system it runs on. if that's what you need, this is not the program for you. no cap. π
and ALSO, exabgp can print received BGP messages into readable plain text or JSON formatted text. cute and useful, we love a dual threat. π
π the arguments, one by one
--env env-config|-e env-configβ tell it where the environment configuration file can be found. π--full-env|--feβ print the full environment configuration on stdout, using the env format.--diff-env|--deβ print only the non-default environment configuration on stdout, using the env format.--full-ini|--fiβ print the full environment configuration used on stdout, using the ini format.--diff-ini|--diβ print the non-default environment configuration on stdout, using the ini format.--debug|-dβ start the python debugger on serious logging and on reception of theSIGTERMsignal. this impliesexabgp.log.all=trueandexabgp.log.level=DEBUG. π--signal timeβ issue aSIGUSR1signal to reload the configuration after the specified number of seconds. only useful for code debugging, so don't be cute with it.--once|-1β only perform one attempt to connect to peers. used mostly for debugging.--pdb|-pβ start the python debugger on critical logging, reception ofSIGTERM, and on uncaught python exceptions. this is a shortcut forexabgp.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 forexabgp.profile.enable=trueandexabgp.profile.file=profile.--test|-tβ only do a configuration validity check. nothing else, just the vibe 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 ofexabgp.--version|-vβ display theexabgpversion number and exit. π«Ά
π ENVIRONMENT π
okay so the configuration of exabgp is split in two, bestie, keep up:
- the environment configuration, which controls the basic execution of
exabgpsuch as logging, daemonizing, pid-file, profiling etc. - the BGP configuration of
exabgp, which specifies which neighbors it should talk BGP with and all other aspects of the BGP configuration.
π§ how you can set the environment config (priority order, lowkey important)
you can specify the environment configuration a number of different ways, and they have different priority:
- Command line values using dot-separated notation.
- Environment variables using dot-separated notation.
- Command line values using underscore-separated notation.
- Environment variables using underscore-separated notation.
- The values from the ini configuration file,
/etc/exabgp/exabgp.env - The built-in default values.
so yeah, number 1 wins over everything, and number 6 is the fallback when nobody else showed up to the party. periodt.
π the environment variables (all of them, no skipping, we don't do that here)
exabgp.api.ackβ Acknowledge api commands 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 ifexabgpshould create a named pipe for the CLI. Default:true.exabgp.api.compactβ Determines whetherexabgpshould use shorter JSON encoding for IPv4/IPv6 unicast NLRI. Default:false.exabgp.api.encoderβ (experimental) default encoder to use with external API (textorjson). Default:text.exabgp.api.pipenameβ Base name to be used for theexabgppipe 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 whetherexabgpshould run in the background. Default:false.exabgp.daemon.dropβ Determines ifexabgpshould drop privileges before forking processes. Default:true.exabgp.daemon.pidβ Where to save the PID ofexabgpif 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 runexabgpas. 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 theLOG_DAEMONfacility (used to beLOG_USER).host:<location>sends the data to a remote syslog server.stdoutsends the data to stdout.stderrsends 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β Controls 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 whetherpdb, 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 alternative "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, and 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). don't forget bestie, both files, both vibes. π¦
π SIGNALS π
exabgp catches a few different signals to control specific actions. they are, in no particular order of drama:
ALRMβ Restartsexabgp.USR1β Causesexabgpto reload the configuration.USR2β Causesexabgpto reload the configuration and restart any forked processes.TERMβ Terminatesexabgp.HUPβ Also terminatesexabgp(does not reload the configuration anymore).
lowkey a warning bestie: 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. π that's not the slay we're going for.
β¨ DIAGNOSTICS β¨
okay so bestie, if you wanna make sure your config file isn't about to cause a syntax-error meltdown, the --test argument is literally there to validate the syntax of the configuration file. it's giving vibe check but for configs, and it ate. π
And the --debug flag? It will provide copious debug output β like, copious copious β to wherever the various exabgp.log variable settings dictate. So it's not just a little sprinkle, it's the whole glitter cannon. π
π SEE ALSO π
exabgp.conf(5)β the other manual page you need in your life. Go read it, bestie. iykyk. π
π 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 SpaceRFC 4760β Multiprotocol Extension for BGP-4RFC 4659β BGP-MPLS IP Virtual Private Network (VPN) Extension for IPv6 VPNRFC 4762β Virtual Private LAN Service (VPLS) Using Label Distribution Protocol (LDP) SignallingRFC 5575β Dissemination of Flow Specification RulesRFC 4724β Graceful Restart Mechanism for BGPRFC 7313β Enhanced Route Refresh Capability for BGP-4RFC 7311β The Accumulated IGP Metric Attribute for BGPdraft-raszuk-idr-flow-spec-v6-03(draft-ietf-idr-flow-spec-v6-06) β Dissemination of Flow Specification Rules for IPv6draft-simpson-idr-flowspec-redirect-00(-02) β BGP Flow-Spec Redirect to IP Actiondraft-ietf-idr-flowspec-redirect-00(-02) β BGP Flow-Spec Redirect to IP Actiondraft-ietf-idr-add-paths-08(-10) β Advertisement of Multiple Paths in BGPdraft-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 AttributeRFC 8092β BGP Large Communities AttributeRFC 2385β Protection of BGP Sessions via the TCP MD5 SignatureRFC 2545β Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain RoutingRFC 2918β Route Refresh Capability for BGP-4RFC 3107β Carrying Label Information in BGP-4RFC 3765β NOPEER Community for Border Gateway Protocol (BGP) Route Scope ControlRFC 7999β BLACKHOLE BGP Community for BlackholingRFC 4271β A Border Gateway Protocol 4 (BGP-4)RFC 4360β BGP Extended Communities AttributeRFC 4364β Constrained Route Distribution for BGP/MPLS IP VPNsRFC 4456β BGP Route Reflection: An Alternative to Full Mesh Internal BGP (iBGP)RFC 5396β Textual Representation of Autonomous System (AS) NumbersRFC 5492β Capabilities Advertisement with BGP-4RFC 6286β Autonomous-System-Wide Unique BGP Identifier for BGP-4RFC 6608β Subcodes for BGP Finite State Machine ErrorRFC 7752β North-Bound Distribution of Link-State and Traffic Engineering (TE) Information Using BGPdraft-gredler-idr-bgp-ls-segment-routing-ext-03β BGP Link-State extensions for Segment Routingdraft-ietf-idr-bgp-prefix-sid-05β Segment Routing Prefix SID extensions for BGP
And that's the whole thing, bestie. This iconic page is EXABGP(1), dated October 14, 2022. slay, bye. πβ¨π¦
π¦ where this page comes from
- fedora 44: exabgp 5.0.5-1.fc44 Β· BSD-3-Clause
- fedora 44: exabgp 5.0.9-1.fc44 Β· BSD-3-Clause
- ubuntu resolute: exabgp 5.0.8-1 Β· BSD-3-Clause
- ubuntu stonking: exabgp 5.0.8-1 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms