Provided by: kea-admin_2.4.1-3build3_amd64 bug

NAME

       perfdhcp - DHCP benchmarking tool

SYNOPSIS

       perfdhcp  [-1]  [-4  | -6] [-A encapsulation-level] [-b base] [-B] [-c] [-C separator] [-d
       drop-time]  [-D  max-drop]  [-e  lease-type]  [-E   time-offset]   [-f   renew-rate]   [-F
       release-rate]  [-g thread-mode] [-h] [-i] [-I ip-offset] [-J remote-address-list-file] [-l
       local-address|interface]  [-L  local-port]  [-M  mac-list-file]   [-n   num-request]   [-N
       remote-port]        [-O        random-offset]        [-o       code,hexstring]       [--or
       encapsulation-level:code,hexstring]  [-p  test-period]  [-P   preload]   [-r   rate]   [-R
       num-clients]  [-s seed] [-S srvid-offset] [--scenario name] [-t report] [-T template-file]
       [-u] [-v] [-W exit-wait-time] [-w script_name] [-x  diagnostic-selector]  [-X  xid-offset]
       [server]

DESCRIPTION

       perfdhcp is a DHCP benchmarking tool. It provides a way to measure the performance of DHCP
       servers by generating large amounts of traffic from multiple simulated clients. It is able
       to  test both IPv4 and IPv6 servers, and provides statistics concerning response times and
       the number of requests that are dropped.

       The tool supports two different scenarios, which offer certain behaviors to be tested.  By
       default  (the  basic scenario), tests are run using the full four-packet exchange sequence
       (DORA for DHCPv4, SARR for DHCPv6). An option is provided to run tests using  the  initial
       two-packet exchange (DO and SA) instead. It is also possible to configure perfdhcp to send
       DHCPv6 RENEW and RELEASE messages at  a  specified  rate,  in  parallel  with  the  DHCPv6
       four-way  exchanges.  By  default,  if  there  is  no response received with one second, a
       response is considered lost and perfdhcp continues with other transactions.

       A second scenario, called avalanche, is selected via --scenario avalanche.  It first sends
       the  number  of  Discovery  or  Solicit  messages  specified  by  the  -R  option;  then a
       retransmission (with an exponential back-off mechanism) is used for each simulated client,
       until  all  requests  are  answered.  It generates a report when all clients receive their
       addresses, or when it is manually stopped. This scenario  attempts  to  replicate  a  case
       where  the  server  is  not  able  to handle the traffic swiftly enough. Real clients will
       assume the packet or response was  lost  and  will  retransmit,  further  increasing  DHCP
       traffic.  This is sometimes called an avalanche effect, thus the scenario name.  Option -p
       is ignored in the avalanche scenario.

       When running a performance test, perfdhcp exchanges packets with the server under test  as
       quickly as possible, unless the -r parameter is used to limit the request rate. The length
       of the test can be limited by setting a threshold on any or all of the number of  requests
       made by perfdhcp, the elapsed time, or the number of requests dropped by the server.

TEMPLATES

       To  allow the contents of packets sent to the server to be customized, perfdhcp allows the
       specification of template files that determine the contents of the packets.  For  example,
       the  customized packet may contain a DHCPv6 ORO to request a set of options to be returned
       by the server, or it may contain the Client FQDN option to request that the server perform
       DNS  updates.  This  may  be used to discover performance bottlenecks for different server
       configurations (e.g. DDNS enabled or disabled).

       Up to two template files can be specified on the command line, with each file representing
       the  contents  of  a  particular type of packet, and the type being determined by the test
       being carried out. For example, if testing DHCPv6:

       • With no template files specified on the command line, perfdhcp  generates  both  Solicit
         and Request packets.

       • With  one template file specified, that file is used as the pattern for Solicit packets:
         perfdhcp generates the Request packets.

       • With two template files given on the command line, the first is used as the pattern  for
         Solicit packets, and the second as the pattern for Request packets.

       (A similar determination applies to DHCPv4's DHCPDISCOVER and DHCPREQUEST packets.)

       The  template  file  holds  the  DHCP packet, represented as a stream of ASCII hexadecimal
       digits; it excludes any IP/UDP stack headers. The  template  file  must  not  contain  any
       characters  other  than  hexadecimal  digits  and  spaces.  Spaces  are discarded when the
       template file is parsed; in the file, 12B4 is the same as 12 B4, which is the same as 1  2
       B 4.

       The  template  files  should be used in conjunction with the command-line parameters which
       specify offsets of the data fields being modified in outbound packets. For example, the -E
       time-offset  switch  specifies  the offset of the DHCPv6 Elapsed Time option in the packet
       template.  If the offset is specified, perfdhcp injects  the  current  elapsed-time  value
       into this field before sending the packet to the server.

       In  many  scenarios,  perfdhcp  needs  to  simulate multiple clients, each having a unique
       client identifier. Since packets for each client are  generated  from  the  same  template
       file,  it is necessary to randomize the client identifier (or HW address in DHCPv4) in the
       packet created from it. The -O random-offset option allows specification of the offset  in
       the  template  where  randomization should be performed. It is important to note that this
       offset points to the end (not the beginning) of  the  client  identifier  (or  HW  address
       field).  The  number of bytes being randomized depends on the number of simulated clients.
       If the number of simulated clients is between 1 and 255,  only  one  byte  (to  which  the
       randomization  offset points) is randomized. If the number of simulated clients is between
       256 and 65535, two bytes are randomized. Note that  the  last  two  bytes  of  the  client
       identifier  are randomized in this case: the byte which the randomization offset parameter
       points to, and the one which precedes it (random-offset - 1). If the number  of  simulated
       clients exceeds 65535, three bytes are randomized, and so on.

       perfdhcp  can  simulate  traffic from multiple subnets by enabling option -J and passing a
       path to a file that contains v4 or  v6  addresses  to  be  used  as  relays  in  generated
       messages.  That  enables  testing  of  vast  numbers of Kea shared networks. While testing
       DHCPv4, Kea should  be  started  with  the  KEA_TEST_SEND_RESPONSES_TO_SOURCE  environment
       variable,  to  force  Kea to send generated messages to the source address of the incoming
       packet.

       Templates may currently be used to generate packets being sent  to  the  server  in  4-way
       exchanges,  i.e.  Solicit,  Request  (DHCPv6) and DHCPDISCOVER, DHCPREQUEST (DHCPv4). They
       cannot be used when Renew or DHCPRELEASE packets are being sent.

OPTIONS

       -1     Takes the server-id option from the first received message.

       -4     Establishes DHCPv4 operation; this is the default. It is incompatible with  the  -6
              option.

       -6     Establishes DHCPv6 operation. It is incompatible with the -4 option.

       -b basetype=value
              Indicates the base MAC or DUID used to simulate different clients. The basetype may
              be "mac" or "duid". (The keyword "ether" may alternatively used for  MAC.)  The  -b
              option  can be specified multiple times. The MAC address must consist of six octets
              separated by single (:) or double (::) colons; for example:  mac=00:0c:01:02:03:04.
              The DUID value is a hexadecimal string; it must be at least six octets long and not
              longer than 64 bytes, and the length must be less than 128 hexadecimal digits.  For
              example: duid=0101010101010101010110111F14.

       -d drop-time
              Specifies  the time after which a request is treated as having been lost. The value
              is given in seconds and may contain a fractional component. The default is 1.

       -e lease-type
              Specifies the type of lease being requested from the server. It may be one  of  the
              following:

              address-only
                     Only regular addresses (v4 or v6) are requested.

              prefix-only
                     Only IPv6 prefixes are requested.

              address-and-prefix
                     Both IPv6 addresses and prefixes are requested.

              The  -e  prefix-only  and  -e  address-and-prefix forms may not be used with the -4
              option.

       -F release-rate
              Specifies the rate at which DHCPv4 DHCPRELEASE or DHCPv6 Release requests are  sent
              to  a  server.  This value is only valid when used in conjunction with the exchange
              rate (given by -r rate). Furthermore, the sum of  this  value  and  the  renew-rate
              (given by -f rate) must be equal to or less than the exchange rate value.

       -f renew-rate
              Specifies the rate at which DHCPv4 DHCPREQUEST or DHCPv6 Renew requests are sent to
              a server.  This value is only valid when used in conjunction with the exchange rate
              (given  by -r rate). Furthermore, the sum of this value and the release-rate (given
              by -F rate) must be equal to or less than the exchange rate.

       -g thread-mode
              Allows  selection  of  thread-mode,  which  can  be  either  single  or  multi.  In
              multi-thread  mode,  packets are received in a separate thread, which allows better
              utilisation of CPUs. In a single-CPU system it is better to run in one  thread,  to
              avoid  threads  blocking each other. If more than one CPU is present in the system,
              multi-thread mode is the default; otherwise single-thread is the default.

       -h     Prints help and exits.

       -i     Performs only the initial part of the exchange: DISCOVER-OFFER if -4  is  selected,
              Solicit-Advertise if -6 is chosen.

              -i  is  incompatible  with the following options: -1, -d, -D, -E, -S, -I and -F. In
              addition, it cannot be used with multiple instances of -O, -T, and -X.

       -J remote-address-list-file
              Specifies a text file that includes multiple addresses, and  is  designed  to  test
              shared  networks.  If  provided, perfdhcp randomly chooses one of the addresses for
              each exchange, to generate traffic from multiple subnets. When testing  DHCPv4,  it
              should  be  started  with  the KEA_TEST_SEND_RESPONSES_TO_SOURCE=ENABLE environment
              variable; otherwise, perfdhcp will not be able to receive responses.

       -l local-addr|interface
              For  DHCPv4  operation,  specifies  the  local   hostname/address   to   use   when
              communicating  with  the  server.  By  default, the interface address through which
              traffic would normally be routed to the server  is  used.   For  DHCPv6  operation,
              specifies the name of the network interface through which exchanges are initiated.

       -L local-port
              Specifies  the  local  port  to  use. This must be zero or a positive integer up to
              65535. A value of 0 (the default) allows perfdhcp to choose its own port.

       -M mac-list-file
              Specifies a text file containing  a  list  of  MAC  addresses,  one  per  line.  If
              provided,  a  MAC address is chosen randomly from this list for every new exchange.
              In DHCPv6, MAC addresses are used to generate DUID-LLs. This parameter must not  be
              used in conjunction with the -b parameter.

       -N remote-port
              Specifies  the  remote  port  to use. This must be zero or a positive integer up to
              65535. A value of 0 (the default) allows perfdhcp to choose  the  standard  service
              port.

       -o code,hexstring
              Forces  perfdhcp  to  insert the specified extra option (or options if used several
              times) into packets being transmitted. The code specifies the option code  and  the
              hexstring  is  a  hexadecimal  string  that defines the content of the option. Care
              should be taken as perfdhcp does not offer any kind of logic behind those  options;
              they  are  simply inserted into packets and sent as is. Be careful not to duplicate
              options that are already inserted. For example, to insert client  class  identifier
              (option  code  60)  with a string "docsis", use "-o 60,646f63736973". The -o may be
              used multiple times. It is necessary to specify the protocol family (either  -4  or
              -6) before using -o.

       -P preload
              Initiates  preload  exchanges back-to-back at startup. Must be 0 (the default) or a
              positive integer.

       -r rate
              Initiates the rate of DORA/SARR (or if -i is given, DO/SA) exchanges per second.  A
              periodic  report  is  generated  showing  the  number  of  exchanges which were not
              completed, as well as the average response latency.  The  program  continues  until
              interrupted, at which point a final report is generated.

       -R num-clients
              Specifies how many different clients are used. With a value of 1 (the default), all
              requests appear to come from the same client.  Must be a positive number.

       -s seed
              Specifies the seed for randomization, making runs of perfdhcp repeatable. This must
              be  0 or a positive integer. The value 0 means that a seed is not used; this is the
              default.

       --scenario name
              Specifies the type of scenario, and can be basic (the default) or avalanche.

       -T template-file
              Specifies a file containing the template to use as a stream of hexadecimal  digits.
              This may be specified up to two times and controls the contents of the packets sent
              (see the "Templates" section above).

       -u     Enables checks for address uniqueness.  The  lease  valid-lifetime  should  not  be
              shorter than the test duration, and clients should not request an address more than
              once without releasing it.

       -v     Prints the version of this program.

       -W exit-wait-time
              Specifies the exit-wait-time parameter, which causes perfdhcp to wait for a certain
              amount of time after an exit condition has been met, to receive all packets without
              sending any new packets. Expressed in microseconds.  If not specified,  0  is  used
              (i.e. exit immediately after exit conditions are met).

       -w script_name
              Specifies the name of the script to be run before/after perfdhcp.  When called, the
              script is passed a single parameter, either "start" or "stop",  indicating  whether
              it is being called before or after perfdhcp.

       -x diagnostic-selector
              Includes  extended  diagnostics  in the output. This is a string of single keywords
              specifying the operations for which verbose output is  desired.  The  selector  key
              letters are:

              a      Prints the decoded command-line arguments.

              e      Prints the exit reason.

              i      Prints the rate-processing details.

              l      Prints the received leases.

              s      Prints the first server ID.

              t      When finished, prints timers of all successful exchanges.

              T      When finished, prints templates.

       -Y seconds
              Time  in  seconds  after which perfdhcp starts simulating the client waiting longer
              for server responses. This increases the secs field in DHCPv4 and  sends  increased
              values in the Elapsed Time option in DHCPv6. Must be used with -y.

       -y seconds
              Time  in  seconds  during  which  perfdhcp  simulates the client waiting longer for
              server responses. This increases the secs  field  in  DHCPv4  and  sends  increased
              values in the Elapsed Time option in DHCPv6. Must be used with -Y.

DHCPV4-ONLY OPTIONS

       The following options only apply for DHCPv4 (i.e. when -4 is given).

       -B     Forces broadcast handling.

DHCPV6-ONLY OPTIONS

       The following options only apply for DHCPv6 (i.e. when -6 is given).

       -c     Adds a rapid-commit option (exchanges are Solicit-Advertise).

       -A encapsulation-level
              Specifies  that relayed traffic must be generated. The argument specifies the level
              of encapsulation, i.e. how many relay agents  are  simulated.  Currently  the  only
              supported encapsulation-level value is 1, which means that the generated traffic is
              equivalent to the amount of traffic passing through a single relay agent.

       --or encapsulation-level:code,hexstring
              This option is very similar to -o, only that  it  forces  perfdhcp  to  insert  the
              specified  extra  option  (or  options  if  used several times) into relayed DHCPv6
              message  at  given  level  of   encapsulation   (currently   the   only   supported
              encapsulation-level  value  is  1).  The  code  specifies  the  option code and the
              hexstring is a hexadecimal string that defines the  content  of  the  option.  Care
              should  be taken as perfdhcp does not offer any kind of logic behind those options;
              they are  simply  inserted  into  packets  and  sent  as  is.  Please  notice  that
              encapsulation-level:  is optional and if omitted, default encapsulation-level value
              1 is used.  For example, to insert Subscriber identifier (option code  38)  with  a
              value  1234  at  first  level  of  encapsulation,  use  --or  38,31323334  or  --or
              1:38,31323334. The --or may be used multiple times.  It must be used together  with
              -A.

TEMPLATE-RELATED OPTIONS

       The  following  options  may  only be used in conjunction with -T and control how perfdhcp
       modifies the template. The options may be specified multiple times on  the  command  line;
       each occurrence affects the corresponding template file (see "Templates" above).

       -E time-offset
              Specifies  the offset of the secs field (DHCPv4) or Elapsed Time option (DHCPv6) in
              the second (i.e. Request) template; must be 0 or a positive integer. A value  of  0
              disables this.

       -I ip-offset
              Specifies the offset of the IP address (DHCPv4) in the requested-ip option or IA_NA
              option (DHCPv6) in the second (Request) template.

       -O random-offset
              Specifies the offset of the last octet to randomize in the template. This  must  be
              an integer greater than 3. The -T switch must be given to use this option.

       -S srvid-offset
              Specifies  the  offset  of  the  server-id option in the second (Request) template.
              This must be a positive integer, and the switch can only be used when the  template
              option (-T) is also given.

       -X xid-offset
              Specifies  the  offset  of the transaction ID (xid) in the template. This must be a
              positive integer, and the switch can only be used when the template option (-T)  is
              also given.

OPTIONS CONTROLLING A TEST

       -D max-drop
              Aborts  the test immediately if "max-drop" requests have been dropped.  Use -D 0 to
              abort if even a single request has been dropped.  "max-drop"  must  be  a  positive
              integer.  If  "max-drop" includes the suffix %, it specifies the maximum percentage
              of requests that may be dropped before aborting.  In  this  case,  testing  of  the
              threshold begins after 10 requests are expected to have been received.

       -n num-requests
              Initiates "num-request" transactions. No report is generated until all transactions
              have been initiated/waited-for, after which a report is generated and  the  program
              terminates.

       -p test-period
              Sends requests for "test-period", which is specified in the same manner as -d. This
              can be used as an alternative to -n, or both options can be given,  in  which  case
              the testing is completed when either limit is reached.

       -t interval
              Sets the delay (in seconds) between two successive reports.

       -C separator
              Suppresses  the  preliminary output and causes the interim data to only contain the
              values delimited by separator. Used  in  conjunction  with  -t  to  produce  easily
              parsable reports at -t intervals.

ARGUMENTS

       server Indicates  the  server to test, specified as an IP address. In the DHCPv6 case, the
              special name all can be used to  refer  to  All_DHCP_Relay_Agents_and_Servers  (the
              multicast   address   FF02::1:2),   or   the  special  name  servers  to  refer  to
              All_DHCP_Servers (the multicast address FF05::1:3). The server is mandatory  except
              where  the -l option is given to specify an interface, in which case it defaults to
              all.

ERRORS

       perfdhcp can report the following errors in the packet exchange:

       tooshort
              A message was received that was too short.

       orphans
              A message was received which does not match one sent to the server (i.e.  it  is  a
              duplicate message, a message that has arrived after an excessive delay, or one that
              is just not recognized).

       locallimit
              Local system limits have been reached when sending a message.

EXIT STATUS

       perfdhcp exits with one of the following status codes:

       0      Success.

       1      General error.

       2      Error in command-line arguments.

       3      No general failures in operation, but one or more exchanges were unsuccessful.

USAGE EXAMPLES

       Here is an example that simulates regular DHCPv4 traffic of 100 DHCPv4 devices  (-R  100),
       10 packets per second (-r 10), shows the query/response rate details (-xi), shows a report
       every 2 seconds (-t 2), and sends the packets to the IP 192.0.2.1:

          sudo perfdhcp -xi -t 2 -r 10 -R 100 192.0.2.1

       Here's a similar case, but for DHCPv6. Note  that  the  DHCPv6  protocol  uses  link-local
       addresses,  so the interface (eth0 in this example) must be specified on which to send the
       traffic. all is a convenience alias for All_DHCP_Relay_Agents_and_Servers  (the  multicast
       address   FF02::1:2).  It  is  also  possible  to  use  the  servers  alias  to  refer  to
       All_DHCP_Servers (the multicast address FF05::1:3). The default is all.

          sudo perfdhcp -6 -xi -t 1 -r 1 -R 10 -l eth0 all

       The following examples simulate normal DHCPv4 and DHCPv6 traffic that,  after  3  seconds,
       starts  pretending not to receive any responses from the server for 10 seconds. The DHCPv4
       protocol signals this by an increased secs field,  while  DHCPv6  uses  the  Elapsed  Time
       option.  In  real  networks,  this  indicates  that clients are not getting responses in a
       timely matter. This can be used to simulate some HA scenarios, as Kea uses the secs  field
       and  Elapsed  Time  option  value  as  one  of  the  indicators that the HA partner is not
       responding. When enabled with -y and  -Y,  the  secs  and  Elapsed  Time  values  increase
       steadily.

          sudo perfdhcp -xi -t 1 -r 1 -y 10 -Y 3 192.0.2.1

          sudo perfdhcp -6 -xi -t 1 -r 1 -y 10 -Y 3 2001:db8::1

DOCUMENTATION

       Kea  comes with an extensive Kea Administrator Reference Manual that covers all aspects of
       running  the  Kea  software  -  compilation,  installation,  configuration,  configuration
       examples, and much more. Kea also features a Kea Messages Manual, which lists all possible
       messages Kea can print with a brief description for  each  of  them.  Both  documents  are
       available  in  various  formats  (.txt,  .html,  .pdf)  with the Kea distribution. The Kea
       documentation is available at https://kea.readthedocs.io.

       Kea  source  code  is  documented   in   the   Kea   Developer's   Guide,   available   at
       https://reports.kea.isc.org/dev_guide/.

       The Kea project website is available at https://kea.isc.org.

MAILING LISTS AND SUPPORT

       There  are two public mailing lists available for the Kea project. kea-users (kea-users at
       lists.isc.org) is intended for Kea users, while  kea-dev  (kea-dev  at  lists.isc.org)  is
       intended  for  Kea  developers,  prospective  contributors, and other advanced users. Both
       lists are available at https://lists.isc.org. The community provides  best-effort  support
       on both of those lists.

       ISC  provides  professional  support  for  Kea  services. See https://www.isc.org/kea/ for
       details.

HISTORY

       The perfdhcp tool was initially coded in October 2011 by John DuBois, Francis Dupont,  and
       Marcin  Siodelski  of  ISC.  Kea  1.0.0, which included perfdhcp, was released in December
       2015.

SEE ALSO

       kea-dhcp4(8),    kea-dhcp6(8),    kea-dhcp-ddns(8),    kea-ctrl-agent(8),    kea-admin(8),
       kea-netconf(8), keactrl(8), kea-lfc(8), Kea Administrator Reference Manual.

AUTHOR

       Internet Systems Consortium

COPYRIGHT

       2019-2024, Internet Systems Consortium

 2.4.1                                     Apr 14, 2024                               PERFDHCP(8)