bwctlrc(5)
okay so like, this is bwctlrc(5) โ it hangs out in the File Formats Manual part of the man pages, and it's literally the whole vibe guide for the Bandwidth Control config file. buckle up bestie, there's a lot here and it's all important ๐
๐ธ NAME ๐ธ
bwctlrc โ the Bandwidth Control configuration file. that's the name. iconic. periodt โจ
๐ฆ DESCRIPTION ๐ฆ
okay so bwctlrc is the config file for the bwctl(8) program. here's the tea: when you ask for a test using bwctl, and there's no local bwctld(8) running, bwctl will just spawn its own lil copy of bwctld all by itself ๐ซถ. this config file is what configures the basic operation of that automatically spawned server. like, for example, it can configure whether to allow the local clock to be unsynchronized, or where the iperf command is located. super practical, no cap ๐
this file can be placed in ~/.bwctlrc, and then it'll be automatically read by bwctl when it spawns off a bwctld. if you put the file somewhere else instead, you can set the BWCTLRC environmental variable to the path to the file, and bwctl will read it from there ๐
the format of this file is:
- 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๐ - 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 ๐
- 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 ๐
access_prioritypriority โ the syslog priority to log access messages with.- Default:
LOG_INFO
- Default:
allow_unsyncโ directsbwctldto keep accepting valid requests for throughput tests even when the system clock is not synchronized ๐ฐ๏ธ.bwctldprefers to have an NTP synchronized system clock, because that's what makes sure the two endpoints of the test are actually agreeing to the same scheduled time window for test execution. this option is used to bypass that requirement for systems that either don't have the NTP system calls, or just prefer not to configure NTP. no judgment ๐- 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. yeah. we know. ๐)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
- Default:
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 ofbwctl, orbwctlwill 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
- Default:
disable_iperf3โ preventbwctlfrom executing Iperf3 tests ๐ซ- Default:
unset
- Default:
disable_nuttcpโ preventbwctlfrom executing Nuttcp tests ๐ซ- Default:
unset
- Default:
disable_owampโ preventbwctlfrom executing Owamp tests ๐ซ- Default:
unset
- Default:
disable_pingโ preventbwctlfrom executing Ping tests ๐ซ- Default:
unset
- Default:
disable_tracepathโ preventbwctlfrom executing Tracepath tests ๐ซ- Default:
unset
- Default:
disable_tracerouteโ preventbwctlfrom executing Traceroute tests ๐ซ- Default:
unset
- Default:
facilityfacility โ the syslog facility to log messages to ๐- 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
- Default:
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 ๐.- Default:
unset
- Default:
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 yeah, that's the first half of the option buffet โ there's literally more coming, so don't go anywhere bestie ๐ซถ
owamp_port,owampportโ the port number(s) that Owamp receivers are gonna use. rn bwctld literally just cycles through this range linearly, no thoughts head empty.owamp_porthas to be specified as a range, written likelow-high. That means two valid port numbers with the-character separating them. Whitespace is NOT allowed anywhere insideowamp_port. So"5001-5004"is valid, but"5001 - 5004"is invalid. ๐
You have to give it a range bc this value gets used for both the Owamp communication and the test ports. It's giving dual purpose bestie.
- Default:
unset
peer_port0|lowport-highportโ this one sets the port range used on the local host for peer connections to otherbwctldservers. Those connections are how the servers verify clock timing with each other and swap test results. It's a required part of the protocol BWCTL uses to run tests, no skipping. But this option lets system administrators limit those connections to a specific port range, which should let BWCTL work inside a firewall environment. ๐ซถ
You can specify it two ways:
- As a
0โ which means bwctld should let the system pick the port (ephemeral). - As a range.
lowportmust be a smaller value thanhighport, and both numbers have to be valid port values. (16-bit unsigned integer values, periodt.)
- Default:
0
ping_cmdpingcmdโ the path to thepingcommand on the system. Ifping_cmddoes not contain a/character, then thePATHof the bwctl environment gets searched to find thepingexecutable. iykyk.- Default:
ping
- Default:
ping6_cmdping6cmdโ the path to theping6command on the system. Ifping6_cmddoes not contain a/character, then thePATHof the bwctl environment gets searched to find theping6executable. โจ- Default:
ping6
- Default:
post_hook/path/to/scriptโ names a script to run after each bwctl session has finished. These hooks are iconic for saving results into a database, tracking usage, or literally any number of other tasks. You can specify as many hooks as you want by including multiplepost_hookentries. stack them like bracelets ๐prioritypriorityโ the syslog priority used to log error messages.- Default:
LOG_ERR
- Default:
root_follyโ this one disables the checks that disablebwctldif it is run with root permissions. There are legitimate reasons to runbwctldas root, but it is risky. Forcing this additional option will make it less likely that root permissions are accidentally used. So likeโฆ be so serious when you touch this one. ๐- Default:
unset
- Default:
src_nodenodename:portโ specify the address and port thatbwctldwill listen on for requests.nodenamecan be given as a DNS name or as the textual representation of the address. You can totally set just the source address without the port by simply leaving off the:and the port specification. ๐
If you're specifying an IPv6 address, note that the accepted format puts nodename in square brackets, like this: [fe80::fe9f:62d8]. That's so the port number stays distinct from the address specification. no cap.
- Default:
nodenameis wildcarded as any currently available address, andportis4823
sync_fuzzsyncfuzzโ this value gets added to the NTP error estimates to makebwctldmore tolerant of incomplete NTP configurations, or of NTP system calls just not being available. If NTP is unavailable tobwctld, it assumes the clock is accurate to within one second plus the value ofsync_fuzz. ๐ธ
Specify it as a floating point number in seconds. For example, to say the system is synchronized within one second, you'd specify this option as 1.0.
Practically speaking, this option is what 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 it's otherwise set using one of the other port variables. rnbwctldjust cycles through this range linearly.test_portmust be specified as a range, written aslow-high. Two valid port numbers,-character separating them. No whitespace insidetest_port."5001-5004"is valid,"5001 - 5004"is invalid. ๐
This value must be set to a range because it's used for both the Owamp communication and test ports.
- Default:
5001-5900
thrulay_portthrulayportโ the port number(s) that Thrulay receivers will use. rnbwctldjust cycles through this range linearly.thrulay_portcan be specified as a single valid port number, or as a range written aslow-high. Two valid port numbers,-separating them. No whitespace insidethrulay_port."5001-5004"valid,"5001 - 5004"invalid. ๐
You should set this to a range, because it can take a few minutes for a port to become free after a test has run. If the port isn't free when the next test starts, the test will fail. If it's set to a range, the daemon cycles through them when starting tests, which decreases the chance that a port will still be open when the test starts. For best results, make sure this range is different from the one for iperf_port and nuttcp_port. ๐
- Default:
unset
tracepath_cmdtracepathcmdโ the path to thetracepathcommand on the system. Iftracepath_cmddoesn't contain a/character, then thePATHof the bwctl environment gets searched to find thetracepathexecutable.- Default:
tracepath
- Default:
tracepath6_cmdtracepath6cmdโ the path to thetracepath6command on the system. Iftracepath6_cmddoesn't contain a/character, then thePATHof the bwctl environment gets searched to find thetracepath6executable.- Default:
tracepath6
- Default:
traceroute_cmdtraceroutecmdโ the path to thetraceroutecommand on the system. Iftraceroute_cmddoesn't contain a/character, then thePATHof the bwctl environment gets searched to find thetracerouteexecutable.- Default:
traceroute
- Default:
traceroute6_cmdtraceroute6cmdโ the path to thetraceroute6command on the system. Iftraceroute6_cmddoesn't contain a/character, then thePATHof the bwctl environment gets searched to find thetraceroute6executable.- Default:
traceroute6
- Default:
useruserโ specifies the uid thebwctldprocess should run as.usercan be given as a valid user name on the system, or by using-uid. This option is only used ifbwctldis started as root. And if the given user has root permissions, theroot_follyoption must also be specified. ๐ญ- Default:
unset
- Default:
var_dirvardirโ directory path where thebwctld.pidfile will be placed. that's it, that's the whole job ๐- Default: Current directory
๐ SEE ALSO โจ
bwctl(1),bwctld(8),bwctld.limits(5),bwctld.keys(5), and thehttp://software.internet2.edu/bwctl/web site. ๐ฆ- For details on Iperf3, see the
https://github.com/esnet/iperfweb site. - For details on Iperf, see the
http://sourceforge.net/projects/iperfweb site. - For details on Nuttcp, see the
http://www.wcisd.hpc.mil/nuttcp/Nuttcp-HOWTO.htmlweb site. - For details on Owamp, see the
http://software.internet2.edu/owampweb 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. ๐
okay bestie that's the whole page, we did it ๐ this version is dated 2008-10-09 12:27:47 -0400 (Thu, 09 Oct 2008) and it's the bwctlrc(5) man page โ go forth and configure responsibly, mwah ๐
โจ
๐ฆ 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