Provided by: bwctl-server_1.5.4+dfsg1-1build1_amd64 bug

NAME

       bwctld.limits - Bandwidth Control daemon policy configuration file

DESCRIPTION

       The  bwctld.limits  file is used to define the policy configuration for the bwctld program. It allows the
       system administrator to allocate the resources in a variety of ways.

       There are two parts to the policy configuration:

       Authentication
              Who is making the request? This can be very specific to an individual  user  or  it  can  be  more
              general in that the connection is coming from some particular network.

       Authorization
              Now that the connection has been generally identified, what will bwctld allow it to do?

       The authentication is done by assigning a userclass to each new connection as it comes in. Each userclass
       has a set of limits associated with it. The userclasses are hierarchical, so a connection must  pass  the
       limit restrictions of the given userclass as well as all parent classes.

       Within  the  bwcltd.limits file, assign lines are used to assign a userclass to a given connection. limit
       lines are used to define a userclass and set the limits associated with that userclass. The file is  read
       sequentially, and it is not permitted to use a classname before it is defined using a limit line.

       The format of this file is:

              •      Comment  lines  are  any line where the first non-whitespace character is '#'.  These lines
                     are counted to return line numbers in error messages but are otherwise ignored by bwctld.

              •      Lines may be continued using the semi-standard '\'  character  followed  immediately  by  a
                     newline.  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 must conform to the syntax of a limit line or an assign line.

CONFIGURATION OPTIONS

       limit  This directive is used to define the userclass hierarchy. It defines the classname as well as  the
              limits  associated  with that class. A classname may only be defined once. The format of the limit
              directive is:

              limit classname with limtype=value[,limtype=value]*

              classname defines the name of the class with the given limits. Whitespace is used as  a  separator
              but  is  otherwise  ignored. classname may be used as a directory name component within bwctld, so
              take care not to use characters that would be invalid. (i.e. '*'  or  '/'  would  be  particularly
              bad.)

              limtype  and value indicate the particular type of limit and value to apply to this userclass. The
              available settings for limtype are:

              ───────────────────────────────────────────────────────────────
              limtype           valid values                   default
              allow_open_mode   on/off                         on
              allow_tcp         on/off                         on
              allow_udp         on/off                         off
              bandwidth         integer (b/s)                  0 (unlimited)
              duration          integer (seconds)              0 (unlimited)
              event_horizon     integer (seconds)              0 (unlimited)

              max_time_error    integer (seconds)              0 (unlimited)
              parent            previously defined classname   null
              pending           integer                        0 (unlimited)

              allow_open_mode
                     This limit is only useful if the class is assigned to  a  netmask.  It  is  used  to  limit
                     specific  IP/netmask  identities to only encrypted or authenticated mode transactions or to
                     allow open mode.

              allow_tcp
                     Allow TCP Iperf tests for userclass.

              allow_udp
                     Allow UDP Iperf tests for userclass.

              bandwidth
                     Maximum amount of bandwidth to allow userclass to use in a UDP  Iperf  test.   0  indicates
                     unlimited by policy, but remember this is checked all the way to the root of the hierarchy.
                     (If you want an unlimited userclass, your root must be unlimited, and the whole  path  down
                     to the given userclass.)

              duration
                     Maximum duration of a single Iperf test for this userclass.

              event_horizon
                     Maximum window into the future to look when trying to schedule a test for this userclass.

              max_time_error
                     Maximum amount of time error to allow for tests in this class. The time error is the sum of
                     the errors reported by NTP on the two involved systems.  The larger  the  time  error,  the
                     larger the duration of the reservation because the time error is used to ensure tests don't
                     overlap. There is a limit on this to defend against DOS attacks where a client could report
                     large errors to ensure other clients can not allocate test reservations.

              parent The  first  limit  line cannot have a parent since none have been defined yet. As such, the
                     first line defines the root of your class hierarchy.  All remaining limit lines MUST assign
                     a parent.  (It is hierarchical, after all.)

              pending
                     Maximum number of pending reservations for this userclass.

       assign The  assign  directive  is  used  to  assign  a  userclass  to  a  given connection. Basically, it
              authenticates the connection.  The format of the assign directive is:

              assign authtype [args] classname

              authtype identifies the type of authentication being used. Whitespace is used as a  separator  but
              is otherwise ignored. classname must have been previously defined with the limit directive earlier
              in the file.

              The available settings for authtype are:

              default
                     Used if no other assignment matches. It takes no args.

              net subnet
                     Assign a specific subnet to a  given  userclass.   subnet  must  be  specified  using  VLSM
                     notation (IP/nbits).  The only arg is the subnet.  For example:

                     127.0.0.1/32
                            would match only the loopback IPv4 address.

                     ::1/128
                            would match only the loopback IPv6 address.

                     192.168.1.0/24
                            would match all hosts on the 192.168.1.XXX network.

                     There  must  be  no  set  bits  in the non-masked portion of the address part of the subnet
                     specification. i.e., 192.168.1.1/24 would be an invalid subnet due to the bit  set  in  the
                     fourth octet.

              user user
                     Assign  a  specific user to a given userclass.  The user must be defined in the bwctld.keys
                     file.

AUTHENTICATION PROCESS

       bwctld determines if it should allow a connection from the client based upon the authentication  mode  of
       the  request and the source IP address of the connection. If the client connection is in authenticated or
       encrypted mode, the daemon does not do any filtering based upon the source  address  of  the  connection.
       (See  the -A option to bwctl and the authmode option in bwctld.conf.)  In these modes, bwctld simply uses
       the identity of the connection to determine the userclass limits. If the connection is made in open mode,
       then  bwctld  first  uses  the source address to determine if bwctld should allow an open mode connection
       from that subnet at all. (This is the purpose of the allow_open_mode limtype described above.)   If  open
       mode is allowed from this subnet, then the userclass is determined by the closest subnet match defined by
       the assign net lines in the bwctld.limits file.

EXAMPLES

       An initial limit line might look like:

              limit root with \
                     bandwidth=900m, \
                     duration=0, \
                     allow_udp=on, \
                     allow_tcp=on, \
                     allow_open_mode=off

       This would create a userclass named root. Because  no  parent  is  specified,  this  must  be  the  first
       userclass  defined  in  the  file.  This userclass has very liberal limits (UDP enabled with 900m limit).
       However, open mode authentication is not enabled for this userclass, so the connections  that  get  these
       limits must successfully authenticate using an AES key.

       If an administrator also wants to create a userclass that is used to deny all requests, they might add:

              limit jail with \
                     parent=root, \
                     allow_udp=off, \
                     allow_tcp=off, \
                     allow_open_mode=off

       This  would create a userclass named jail. Because UDP and TCP tests have both been denied, no tests will
       be allowed. Also, allow_open_mode is off, so  initial  connections  that  are  not  in  authenticated  or
       encrypted  mode  would  be  dropped  immediately  anyway.  (It would not make much sense to assign a user
       identity to this userclass. If you don't want connections from a particular user, the best thing to do is
       to remove that user from the bwctld.keys file.

       If the administrator wanted to allow a limited amount of open tests, they could define a userclass like:

              limit open with \
                     parent=root, \
                     allow_open_mode=on, \
                     allow_udp=off, \
                     allow_tcp=on, \
                     duration=30, \
                     event_horizon=300, \
                     pending=5

       This  could  be  used  to  allow TCP throughput tests by random connections.  It limits those tests to 30
       seconds in duration, and only allows them to be scheduled within the next 5 minutes  (event_horizon=300).
       Additionally,  it  only allows this userclass to have 5 currently pending reservations. This ensures that
       this userclass can only schedule 50% of the next 5 minutes. The advantage of this kind of setup  is  that
       the administrator can define other userclasses with a larger event_horizon allowing then to have priority
       over  this  class.   (Suggestions  for  other  methods  of  priority  scheduling  should   be   sent   to
       bwctl-users@internet2.edu.)

       Now, these three userclasses might be assigned to specific connections in the following ways:

              # default open
              assign default open

              # badguys subnet
              assign net 192.168.1.0/24 jail

              # network admins
              assign user joe root
              assign user jim root
              assign user bob root

       This  set  of  assign  lines  specifically  denies  access from any open mode connection from the badguys
       subnet. It  specifically  allows  access  to  authenticated  or  encrypted  mode  transactions  that  can
       authenticate as the identities joe jim or bob (even from the badguys subnet). All other connections would
       match the assign default rule and get the limits associated with the open userclass.

SEE ALSO

       bwctl(1), bwctld(8), bwctld.limits(5), bwctld.keys(5), and the  http://software.internet2.edu/bwctl/  web
       site.

       For details on Iperf3, see 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.

                                                     $Date$                                     bwctld.limits(5)