bwctld.conf(5)
π bwctld.conf β the Bandwidth Control daemon config file (bwctld.conf(5)) π
okay bestie, this is the File Formats Manual moment for bwctld.conf, and honestly? it's giving main character energy. buckle up π
β¨ NAME β¨
bwctld.conf β Bandwidth Control daemon configuration file πΈ
π¦ DESCRIPTION π¦
so bwctld.conf is the configuration file for the bwctld(8) program. it's literally where you tell the server how to, like, be. what addresses and ports it should listen on, where it should send error messages, where it should save files β all that foundational stuff. π
the policy rules for bwctld are configured using the bwctld.limits file instead β the details for configuring those policies live in the bwctld.limits(5) manual page. two files, two jobs, no cap.
the format of this file is, and I quote (in vibe):
- Comment lines are any line where the first non-whitespace character is
#. these lines are counted for the purposes of returning line numbers in error messages but are otherwise ignored by the spawnedbwctld. (so yes bestie, your comments still take up a line number. iconic but also rude.) - Lines may be continued using the semi-standard
'\'character followed immediately by a newline character. This is the only valid place for the'\'character. If it is found elsewhere, a syntax error is reported. π¨ - Blank lines are treated as comment lines. vibes only.
- All other lines are used to set configuration options. The format of these lines is an initial keyword followed by a variable list of arguments, separated by whitespace.
π CONFIGURATION OPTIONS π
okay here's the whole menu, no skips, no "etc." β every single one is right here π«Ά
access_prioritypriority β the syslog priority to log access messages.- Default:
LOG_INFO
- Default:
allow_unsyncβ directsbwctldto continue accepting valid requests for throughput tests when the system clock is not synchronized.bwctldprefers to have an NTP synchronized system clock to ensure the two endpoints of the test are actually agreeing to the same scheduled time window for test execution. This option is used to bypass this requirement for systems that either do not have the NTP system calls, or prefer not to configure NTP.- > Note: if the difference between the system clocks on the two endpoints is too great, the eventual throughput test will fail when the endpoints attempt to run the test at different times. The threshold for this difference is controlled using the
sync_fuzzoption. (If you setallow_unsync, you should setsync_fuzzto a reasonable value for your system.) - Default: unset (set if the operating system does have the NTP system calls)
- > Note: if the difference between the system clocks on the two endpoints is too great, the eventual throughput test will fail when the endpoints attempt to run the test at different times. The threshold for this difference is controlled using the
auth_modeauthmode β specify the authentication modes the server is willing to use for communication.auth_modeshould be set as a character string, with any or all of the characters"AEO". the modes are:Aβ [A]uthenticated. This mode encrypts the control connection.Eβ [E]ncrypted. This mode encrypts the control connection. If the test supports encryption, this mode will additionally encrypt the test stream. (Encryption of the test stream is not currently supported, so this mode is currently identical to authenticated.)Oβ [O]pen. No encryption of any kind is done.- The server can specify all the modes with which it is willing to communicate. The most strict mode that both the server and the client are willing to use will be selected. π
- Default:
"AEO"
bottleneck_capacitybottleneckcapacity β this value is used in the algorithm to dynamically set the TCP send/recv window sizes. This option is likely to be removed in the future once a dynamicbottleneck_capacityalgorithm is incorporated into the code. (This option only really works when the local NIC is the bottleneck.) If this option is not specified, the dynamic window calculation requested by the-Woption tobwctlis not done and the advisory value is used.- Default: unset
control_timeoutcontroltimeout β number of seconds to wait for protocol messages before timing out. This value should be significantly larger than what typical users specify for the-Iflag ofbwctlorbwctlwill have to open a new control connection for each new test it requests.- Default:
7200(Picked to be the same as the default for TCP keepalive)
- Default:
die_bydieby β number of seconds to wait for child processes to gracefully terminate before killing them withSIGKILL. This is in response to the master process receivingSIGTERMorSIGHUP.- Default:
5
- Default:
disable_iperfβ preventbwctlfrom executing Iperf tests.- Default: unset
disable_iperf3β preventbwctlfrom executing Iperf3 tests.- Default: unset
disable_nuttcpβ preventbwctlfrom executing Nuttcp tests.- Default: unset
disable_owampβ preventbwctlfrom executing Owamp tests.- Default: unset
disable_pingβ preventbwctlfrom executing Ping tests.- Default: unset
disable_tracepathβ preventbwctlfrom executing Tracepath tests.- Default: unset
disable_tracerouteβ preventbwctlfrom executing Traceroute tests.- Default: unset
facilityfacility β syslog facility to log messages.- Default:
LOG_DAEMON
- Default:
groupgroup β specifies the gid thebwctldprocess should run as.groupcan be specified using a valid group name on the system or by using-gid. This option is only used ifbwctldis started as root.- Default: unset
iperf_cmdiperfcmd β the path to the Iperf command on the system. If theiperf_cmddoes not contain a'/'character, then thePATHof thebwctldenvironment will be searched to find the Iperf executable.- Default:
iperf
- Default:
iperf_portiperfport β the port number(s) that Iperf receivers will use. Currently,bwctldsimply cycles through this range linearly.iperf_portcan be specified as a single valid port number or as a range as low-high. The range must be specified as two valid port numbers with the'-'character separating them. Whitespace is not allowed within theiperf_port. For example,"5001-5004"would be valid, but"5001 - 5004"would be invalid. π- This value should be set to a range because it can take a few minutes for a port to become free after a test has run. If the port is not free when the next test starts, the test will fail. If set to a range, the daemon will cycle through them when starting tests, decreasing the chance that a port will still be open when the test starts. For best results, ensure that this range is different from that of
nuttcp_portandthrulay_port. - Default: unset
- This value should be set to a range because it can take a few minutes for a port to become free after a test has run. If the port is not free when the next test starts, the test will fail. If set to a range, the daemon will cycle through them when starting tests, decreasing the chance that a port will still be open when the test starts. For best results, ensure that this range is different from that of
iperf3_portiperf3port β the port number(s) that Iperf3 receivers will use. Currently,bwctldsimply cycles through this range linearly.iperf3_portcan be specified as a single valid port number or as a range as low-high. The range must be specified as two valid port numbers with the'-'character separating them. Whitespace is not allowed within theiperf3_port. For example,"5001-5004"would be valid, but"5001 - 5004"would be invalid.- This value should be set to a range because it can take a few minutes for a port to become free after a test has run. If the port is not free when the next test starts, the test will fail. If set to a range, the daemon will cycle through them when starting tests, decreasing the chance that a port will still be open when the test starts. For best results, ensure that this range is different from that of
nuttcp_portandthrulay_port. - Default: unset
- This value should be set to a range because it can take a few minutes for a port to become free after a test has run. If the port is not free when the next test starts, the test will fail. If set to a range, the daemon will cycle through them when starting tests, decreasing the chance that a port will still be open when the test starts. For best results, ensure that this range is different from that of
log_locationβ directs thebwctldprocess to report source code file and line number information with error messages. This is a particularly useful option to set when sending in messages as part of a bug report. (devs love this one, fr fr π)- Default: unset
nuttcp_cmdnuttcpcmd β the path to the Nuttcp command on the system. If thenuttcp_cmddoes not contain a'/'character, then thePATHof thebwctlenvironment will be searched to find the Nuttcp executable.- Default:
nuttcp
- Default:
nuttcp_portnuttcpport β the port number(s) that Nuttcp receivers will use. Currently,bwctldsimply cycles through this range linearly.nuttcp_portcan be specified as a single valid port number or as a range as low-high. The range must be specified as two valid port numbers with the'-'character separating them. Whitespace is not allowed within thenuttcp_port. For example,"5001-5004"would be valid, but"5001 - 5004"would be invalid.- This value should be set to a range because it can take a few minutes for a port to become free after a test has run. If the port is not free when the next test starts, the test will fail. If set to a range, the daemon will cycle through them when starting tests, decreasing the chance that a port will still be open when the test starts. For best results, ensure that this range is different from that of
iperf_portandthrulay_port. - Default: unset
- This value should be set to a range because it can take a few minutes for a port to become free after a test has run. If the port is not free when the next test starts, the test will fail. If set to a range, the daemon will cycle through them when starting tests, decreasing the chance that a port will still be open when the test starts. For best results, ensure that this range is different from that of
owamp_cmdowampcmd β the path to theowpingcommand on the system. If theowamp_cmddoes not contain a'/'character, then thePATHof thebwctlenvironment will be searched to find theowpingexecutable.- Default:
owping
- Default:
owamp_server_cmdowampservercmd β the path to theowampdcommand on the system. If theowamp_server_cmddoes not contain a'/'character, then thePATHof thebwctlenvironment will be searched to find theowampdexecutable.- Default:
owampd
- Default:
and that's part 1 bestie, don't go anywhere, there's more π
owamp_portowampport β the port number(s) that Owamp receivers get to use π rnbwctldjust walks through this range in a straight line, no cap. Gotta be a range, written as low-high, and it's non-negotiable: two valid port numbers with a-between them, and zero whitespace inside it. So5001-5004= valid,5001 - 5004= absolutely not, bestie π
You must give a range here because this value does double duty β it's used for both the Owamp communication ports and the test ports.
Default:
unset
peer_port0| lowport-highport β the port range used on the local host for peer connections to otherbwctldservers π«Ά these connections verify clock timing between servers and swap test results around. It's a required part of the protocol BWCTL uses to run tests, but this option lets sysadmins pin those connections to a specific port range, which is what makes BWCTL work inside a firewall β¨
Two ways to write it:
0β meaningbwctldlets the system pick the port (ephemeral, whatever it wants π)- a range β lowport has to be a smaller value than highport, and both have to be valid port values (16-bit unsigned integer values, iykyk)
Default:
0
ping_cmdpingcmd β the path to thepingcommand on your system. If ping_cmd has no/character in it, then thePATHof the bwctl environment gets searched to find the ping executable π¦
Default:
ping
ping6_cmdping6cmd β same energy, but forping6π if ping6_cmd has no/in it, thePATHof the bwctl environment gets searched to find the ping6 executable.
Default:
ping6
post_hook/path/to/scriptβ names a script to run after every single bwctl session wraps up π these hooks are for saving results into a database, tracking usage, or literally any other task you want. Stack as many as your heart desires by including multiplepost_hookentries, periodt.prioritypriority β the Syslog priority used to log error messages.
Default:
LOG_ERR
root_follyβ turns off the checks that disablebwctldwhen it's running with root permissions π yes there are legitimate reasons to runbwctldas root, but it's risky. Forcing this extra option makes it less likely that root permissions get used by accident.
Default:
unset
src_nodenodename:port β the address and portbwctldlistens on for requests π nodename can be a DNS name or the textual representation of the address. You can set just the source address without a port by leaving off the:and the port spec entirely. And if you're giving an IPv6 address, heads up: the accepted format puts the nodename in square brackets, like[fe80::fe9f:62d8]β that keeps the port number distinct from the address spec π
Default:
nodename is wildcarded as any currently available address
port is 4823
sync_fuzzsyncfuzz β this value gets added onto the NTP error estimates to makebwctldmore tolerant of incomplete NTP configurations, or of the case where the NTP system calls just aren't available π if NTP is unavailable tobwctld, it assumes the clock is accurate to within one second plus the value ofsync_fuzz. Specified as a floating point number in seconds β e.g. to say the system is synchronized within one second, you'd specify this option as1.0β
Practically speaking, this option determines the size of the time window buffer before and after each throughput test.
Default:
0.0
test_porttestport β the port number(s) that receivers of all test types will use, unless something else sets it via one of the other port variables π rnbwctldcycles through this range linearly. test_port must be a range written as low-high: two valid port numbers with a-between them. Whitespace is not allowed inside the test_port. So5001-5004= valid,5001 - 5004= invalid π
This value must be a range because it's used for both the Owamp communication ports and the test ports.
Default:
5001-5900
thrulay_portthrulayport β the port number(s) that Thrulay receivers will use π¦ rnbwctldcycles through this range linearly. thrulay_port can be a single valid port number, or a range written as low-high β two valid port numbers with a-between them. No whitespace inside the thrulay_port, so5001-5004is valid and5001 - 5004is not.
You should set this one to a range, because a port can take a few minutes to become free after a test has run β and if the port isn't free when the next test starts, the test fails π with a range, the daemon cycles through them when starting tests, decreasing the chance that a port is still open when the test starts. For best results, make sure this range is different from the one used by iperf_port and nuttcp_port β¨
Default:
unset
tracepath_cmdtracepathcmd β the path to thetracepathcommand on the system. If tracepath_cmd contains no/, then thePATHof the bwctl environment gets searched to find the tracepath executable πΈ
Default:
tracepath
tracepath6_cmdtracepath6cmd β the path to thetracepath6command on the system. No/in tracepath6_cmd? Then thePATHof the bwctl environment gets searched for the tracepath6 executable π
Default:
tracepath6
traceroute_cmdtraceroutecmd β the path to thetraceroutecommand on the system. If traceroute_cmd has no/, thePATHof the bwctl environment is searched to find the traceroute executable π
Default:
traceroute
traceroute6_cmdtraceroute6cmd β the path to thetraceroute6command on the system. If traceroute6_cmd has no/, thePATHof the bwctl environment is searched to find the traceroute6 executable π§
Default:
traceroute6
useruser β the uid thebwctldprocess should run as π user can be a valid user name on the system, or you can use-uid. This option is only used ifbwctldis started as root. And if the given user has root permissions, theroot_follyoption must also be specified β no exceptions π
Default:
unset
var_dirvardir β the directory path where thebwctld.pidfile gets placed.
Default:
Current directory
π SEE ALSO π
bwctl(1), bwctld(8), bwctld.limits(5), bwctld.keys(5), and the http://software.internet2.edu/bwctl/ web site π«Ά
For the tea on Iperf3, hit up the https://github.com/esnet/iperf web site π
For details on Iperf, see the http://sourceforge.net/projects/iperf web site β¨
For details on Nuttcp, see the http://www.wcisd.hpc.mil/nuttcp/Nuttcp-HOWTO.html web site π¦
For details on Owamp, see the http://software.internet2.edu/owamp web site πΈ
π ACKNOWLEDGMENTS π
This material is based in part on work supported by the National Science Foundation (NSF) under Grant No. ANI-0314723. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the NSF π
and that's the whole page, bestie π
this little masterpiece is from the bwctld.conf(5) manual, dated 2008-10-09 β yes, that date, 12:27:47 -0400 on a Thursday, iconic behavior honestly. go configure something beautiful πβ¨
π¦ where this page comes from
- ubuntu jammy: bwctl-server 1.5.4+dfsg1-1build1 Β· Apache-2.0
- Copyright (C) 2004 #
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms