1PERFDHCP(8)                           Kea                          PERFDHCP(8)
2
3
4

NAME

6       perfdhcp - DHCP benchmarking tool
7

SYNOPSIS

9       perfdhcp  [-1]  [-4  | -6] [-A encapsulation-level] [-b base] [-B] [-c]
10       [-C  separator]  [-d  drop-time]  [-D  max-drop]  [-e  lease-type]  [-E
11       time-offset]  [-f  renew-rate]  [-F release-rate] [-g thread-mode] [-h]
12       [-i] [-I ip-offset] [-J remote-address-list-file] [-l local-address|in‐
13       terface]  [-L  local-port]  [-M mac-list-file] [-n num-request] [-N re‐
14       mote-port] [-O random-offset] [-o code,hexstring] [-p test-period]  [-P
15       preload] [-r rate] [-R num-clients] [-s seed] [-S srvid-offset] [--sce‐
16       nario  name]   [-t   report]   [-T   template-file]   [-u]   [-v]   [-W
17       exit-wait-time]  [-w script_name] [-x diagnostic-selector] [-X xid-off‐
18       set] [server]
19

DESCRIPTION

21       perfdhcp is a DHCP benchmarking tool. It provides a  way  of  measuring
22       the  performance of DHCP servers by generating large amounts of traffic
23       from simulated multiple clients. It is able to test both IPv4 and  IPv6
24       servers, and provides statistics concerning response times and the num‐
25       ber of requests that are dropped.
26
27       The tool supports scenarios, which offer certain  behaviours.   By  de‐
28       fault  (basic  scenario)  tests  are run using the full four-packet ex‐
29       change sequence (DORA for DHCPv4, SARR for DHCPv6). An option  is  pro‐
30       vided  to  run  tests using the initial two-packet exchange (DO and SA)
31       instead. It is also possible to configure perfdhcp to send DHCPv6 RENEW
32       and  RELEASE  messages  at a specified rate in parallel with the DHCPv6
33       four-way exchanges. By default, if there is no response received with 1
34       second, a response is considered lost and perfdhcp continues with other
35       transactions.
36
37       Second scenario is called avalanche, which is  selected  by  --scenario
38       avalanche.  It first sends as many Discovery or Solicit messages as re‐
39       quest in -R option then a retransmission  (with  exponential  back  off
40       mechanism) is used for each simulated client until all requests are an‐
41       swered. It will generate report when all clients get their addresses or
42       when it will be manually stopped. This scenario attempts to replicate a
43       case where the server is not able to handle the traffic swiftly enough.
44       Real  clients  will assume the packet or the response was lost and will
45       retransmit, further increasing DHCP traffic. This is  sometimes  called
46       avalanche  effect,  thus  the  scenario  name.  Option -p is ignored in
47       avalanche scenario.
48
49       When running a performance test, perfdhcp will  exchange  packets  with
50       the  server  under  test as fast as possible unless the -r parameter is
51       used to limit the request rate. The length of the test can  be  limited
52       by  setting a threshold on any or all of the number of requests made by
53       perfdhcp, the elapsed time, or the number of requests  dropped  by  the
54       server.
55

TEMPLATES

57       To  allow  the contents of packets sent to the server to be customized,
58       perfdhcp allows the specification of template files that determine  the
59       contents of the packets. For example, the customized packet may contain
60       a DHCPv6 ORO to request a set of options to be returned by the  server,
61       or  it  may  contain  the Client FQDN option to request that the server
62       perform DNS updates. This may be used to discover  performance  bottle‐
63       necks  for  different  server configurations (e.g. DDNS enabled or dis‐
64       abled).
65
66       Up to two template files can be specified on  the  command  line,  each
67       file representing the contents of a particular type of packet, the type
68       being determined by the test being carried out. For example, if testing
69       DHCPv6:
70
71       • With  no  template files specified on the command line, perfdhcp will
72         generate both SOLICIT and REQUEST packets.
73
74       • With one template file specified, that file will be used as the  pat‐
75         tern for SOLICIT packets: perfdhcp will generate the REQUEST packets.
76
77       • With  two template files given on the command line, the first will be
78         used as the pattern for SOLICIT packets, the second  as  the  pattern
79         for REQUEST packets.
80
81       (Similar  determination  applies to DHCPv4's DISCOVER and REQUEST pack‐
82       ets.)
83
84       The template file holds the DHCP packet  represented  as  a  stream  of
85       ASCII  hexadecimal digits and it excludes any IP/UDP stack headers. The
86       template file must not contain any characters  other  than  hexadecimal
87       digits  and  spaces.  Spaces  are  discarded  when the template file is
88       parsed; in the file, '12B4' is the same as '12 B4' which is the same as
89       '1 2 B 4'.
90
91       The  template files should be used in conjunction with the command-line
92       parameters which specify offsets of the data fields being  modified  in
93       outbound  packets. For example, the -E time-offset switch specifies the
94       offset of the DHCPv6 Elapsed Time option in the  packet  template.   If
95       the  offset is specified, perfdhcp will inject the current elapsed-time
96       value into this field before sending the packet to the server.
97
98       In many scenarios, perfdhcp needs to simulate  multiple  clients,  each
99       having  a  unique  client identifier. Since packets for each client are
100       generated from the same template file, it is necessary to randomize the
101       client  identifier (or HW address in DHCPv4) in the packet created from
102       it. The -O random-offset option allows specification of the  offset  in
103       the  template  where randomization should be performed. It is important
104       to note that this offset points to the end (not the beginning)  of  the
105       client identifier (or HW address field). The number of bytes being ran‐
106       domized depends on the number of simulated clients. If  the  number  of
107       simulated  clients  is  between  1 and 255, only one byte (to which the
108       randomization offset points) will be randomized. If the number of simu‐
109       lated  clients  is between 256 and 65535, two bytes will be randomized.
110       Note that the last two bytes of the client identifier will  be  random‐
111       ized  in  this  case: the byte which the randomization offset parameter
112       points to, and the one which precedes it (random-offset -  1).  If  the
113       number  of simulated clients exceeds 65535, three bytes will be random‐
114       ized, and so on.
115
116       Perfdhcp can now simulate traffic from multiple subnets by enabling op‐
117       tion  -J and passing path to file that contains v4 or v6 addresses that
118       will be used as relay in generated messages.  That  enable  testing  of
119       vast  numbers of Kea shared networks. While testing Kea v4 it should be
120       started with KEA_TEST_SEND_RESPONSES_TO_SOURCE environment variable  to
121       force  Kea  to  send  generated  messages to source address of incoming
122       packet.
123
124       Templates may currently be used to generate packets being sent  to  the
125       server in 4-way exchanges, i.e. SOLICIT, REQUEST (DHCPv6) and DISCOVER,
126       REQUEST (DHCPv4). They cannot be used when RENEW or RELEASE packets are
127       being sent.
128

OPTIONS

130       -1     Takes the server-ID option from the first received message.
131
132       -4     Establishes  DHCPv4 operation; this is the default. It is incom‐
133              patible with the -6 option.
134
135       -6     Establishes DHCPv6 operation. This is incompatible with  the  -4
136              option.
137
138       -b basetype=value
139              Indicates  the  base  MAC  or  DUID  used  to simulate different
140              clients. The basetype may  be  "mac"  or  "duid".  (The  keyword
141              "ether"  may  alternatively  used for MAC.) The -b option can be
142              specified multiple times. The MAC address must  consist  of  six
143              octets  separated by single (:) or double (::) colons, for exam‐
144              ple: mac=00:0c:01:02:03:04. The  DUID  value  is  a  hexadecimal
145              string;  it must be at least six octets long and not longer than
146              64 bytes, and the length must be less than 128 hexadecimal  dig‐
147              its, for example: duid=0101010101010101010110111F14.
148
149       -d drop-time
150              Specifies  the  time  after which a request is treated as having
151              been lost. The value is given in seconds and may contain a frac‐
152              tional component. The default is 1 second.
153
154       -e lease-type
155              Specifies  the type of lease being requested from the server. It
156              may be one of the following:
157
158              address-only
159                     Only regular addresses (v4 or v6) will be requested.
160
161              prefix-only
162                     Only IPv6 prefixes will be requested.
163
164              address-and-prefix
165                     Both IPv6 addresses and prefixes will be requested.
166
167              The -e prefix-only and -e address-and-prefix forms  may  not  be
168              used with the -4 option.
169
170       -F release-rate
171              Specifies  the  rate  at  which  RELEASE  requests are sent to a
172              server. This value is only valid when used in  conjunction  with
173              the  exchange  rate  (given by -r rate). Furthermore, the sum of
174              this value and the renew-rate (given by -f rate) must  be  equal
175              to or less than the exchange rate value.
176
177       -f renew-rate
178              Specifies  the rate at which DHCPv4 or DHCPv6 renew requests are
179              sent to a server.  This value is only valid when  used  in  con‐
180              junction with the exchange rate (given by -r rate). Furthermore,
181              the sum of this value and the release-rate (given  by  -F  rate)
182              must be equal to or less than the exchange rate.
183
184       -g thread-mode
185              Allows selection of thread-mode, which can be either 'single' or
186              'multi'. In multi-thread mode packets are received in a separate
187              thread, which allows better utilisation of CPUs. In a single-CPU
188              system it is better to run in one thread to avoid threads block‐
189              ing  each  other. If more than one CPU is present in the system,
190              multi-thread mode is the default; otherwise single-thread is the
191              default.
192
193       -h     Prints help and exits.
194
195       -i     Performs  only  the initial part of the exchange: DISCOVER-OFFER
196              if -4 is selected, SOLICIT-ADVERTISE if -6 is chosen.
197
198              -i is incompatible with the following options: -1, -d,  -D,  -E,
199              -S,  -I and -F. In addition, it cannot be used with multiple in‐
200              stances of -O, -T and -X.
201
202       -J remote-address-list-file
203              Text file that include multiple addresses. If provided  perfdhcp
204              will choose randomly one of addresses for each exchange. This is
205              used to generate traffic from multiple subnets. Designed to test
206              shared-networks.  While testing kea v4 it should be started with
207              KEA_TEST_SEND_RESPONSES_TO_SOURCE=ENABLE env variable  otherwise
208              perfdhcp will not be able to receive responses.
209
210       -l local-addr|interface
211              For  DHCPv4  operation,  specifies the local hostname/address to
212              use when communicating with the server. By default,  the  inter‐
213              face  address  through which traffic would normally be routed to
214              the server is used.  For DHCPv6 operation, specifies the name of
215              the network interface through which exchanges are initiated.
216
217       -L local-port
218              Specifies the local port to use. This must be zero or a positive
219              integer up to 65535. A value of 0 (the default) allows  perfdhcp
220              to choose its own port.
221
222       -M mac-list-file
223              Specifies  a  text  file containing a list of MAC addresses, one
224              per line. If provided, a MAC address  will  be  chosen  randomly
225              from  this list for every new exchange. In DHCPv6, MAC addresses
226              are used to generate DUID-LLs. This parameter must not  be  used
227              in conjunction with the -b parameter.
228
229       -N remote-port
230              Specifies  the  remote port to use. This must be zero or a posi‐
231              tive integer up to 65535. A value  of  0  (the  default)  allows
232              perfdhcp to choose the standard service port.
233
234       -o code,hexstring
235              Forces perfdhcp to insert the specified extra option (or options
236              if used several times) into packets being transmitted. The  code
237              specifies  the  option  code  and the hexstring is a hexadecimal
238              string that defines the content of the option.  Care  should  be
239              taken  as perfdhcp does not offer any kind of logic behind those
240              options; they are simply inserted into packets and sent  as  is.
241              Be  careful  not to duplicate options that are already inserted.
242              For example, to insert client class identifier (option code  60)
243              with  a  string  'docsis', use -o 60,646f63736973. The -o may be
244              used multiple times. It is necessary  to  specify  the  protocol
245              family (either -4 or -6) before using -o.
246
247       -P preload
248              Initiates  preload  exchanges back-to-back at startup. Must be 0
249              (the default) or a positive integer.
250
251       -r rate
252              Initiates the rate of DORA/SARR (or if -i is given,  DO/SA)  ex‐
253              changes  per  second. A periodic report is generated showing the
254              number of exchanges which were not completed, as well as the av‐
255              erage response latency. The program continues until interrupted,
256              at which point a final report is generated.
257
258       -R num-clients
259              Specifies how many different clients are used. With a value of 1
260              (the  default),  all requests seem to come from the same client.
261              Must be a positive number.
262
263       -s seed
264              Specifies the seed for randomization, making  runs  of  perfdhcp
265              repeatable.  This  must  be 0 or a positive integer. The value 0
266              means that a seed is not used; this is the default.
267
268       --scenario name
269              Specifies type of  the  scenario,  can  be  basic  (default)  or
270              avalanche.
271
272       -T template-file
273              Specifies  a  file containing the template to use as a stream of
274              hexadecimal digits. This may be specified up to  two  times  and
275              controls  the  contents of the packets sent (see the "Templates"
276              section above).
277
278       -u     Enable checking address uniqueness. Lease valid lifetime  should
279              not be shorter than test duration and clients should not request
280              address more than once without releasing it first.
281
282       -v     Prints the version of this program.
283
284       -W exit-wait-time
285              Specifies the exit-wait-time parameter, which causes perfdhcp to
286              wait for exit-wait-time after an exit condition has been met, to
287              receive all packets without sending any new  packets.  Expressed
288              in microseconds.  If not specified, 0 is used (i.e. exit immedi‐
289              ately after exit conditions are met).
290
291       -w script_name
292              Specifies the name of the script to be run  before/after  perfd‐
293              hcp.   When called, the script is passed a single parameter, ei‐
294              ther "start" or "stop", indicating whether it  is  being  called
295              before or after perfdhcp.
296
297       -x diagnostic-selector
298              Includes extended diagnostics in the output. This is a string of
299              single keywords specifying the operations for which verbose out‐
300              put is desired. The selector key letters are:
301
302              a      Prints the decoded command line arguments.
303
304              e      Prints the exit reason.
305
306              i      Prints the rate processing details.
307
308              l      Prints the received leases.
309
310              s      Prints the first server-ID.
311
312              t      When finished, prints timers of all successful exchanges.
313
314              T      When finished, prints templates.
315
316       -y seconds
317              Time  in  seconds after which perfdhcp will start simulating the
318              client waiting longer for server responses.  This  increase  the
319              secs  field  in DHCPv4 and sends increased values in Elapsed op‐
320              tion in DHCPv6. Must be used with '-Y'.
321
322       -Y seconds
323              Period of time in seconds in which perfdhcp will  be  simulating
324              the  client  waiting  longer for server responses. This increase
325              the secs field in DHCPv4 and sends increased values  in  Elapsed
326              option in DHCPv6. Must be used with '-y'.
327

DHCPV4-ONLY OPTIONS

329       The following options only apply for DHCPv4 (i.e. when -4 is given).
330
331       -B     Forces broadcast handling.
332

DHCPV6-ONLY OPTIONS

334       The following options only apply for DHCPv6 (i.e. when -6 is given).
335
336       -c     Adds  a  rapid-commit  option  (exchanges will be SOLICIT-ADVER‐
337              TISE).
338
339       -A encapsulation-level
340              Specifies that relayed traffic must be generated.  The  argument
341              specifies the level of encapsulation, i.e. how many relay agents
342              are simulated. Currently the only supported  encapsulation-level
343              value is 1, which means that the generated traffic is equivalent
344              to the amount of traffic passing through a single relay agent.
345
347       The following options may only be used in conjunction with -T and  con‐
348       trol  how  perfdhcp modifies the template. The options may be specified
349       multiple times on the command line; each occurrence affects the  corre‐
350       sponding template file (see "Templates" above).
351
352       -E time-offset
353              Specifies  the offset of the secs field (DHCPv4) or elapsed-time
354              option (DHCPv6) in the second (i.e. REQUEST) template; must be 0
355              or a positive integer. A value of 0 disables this.
356
357       -I ip-offset
358              Specifies  the  offset  of  the  IP  address (DHCPv4) in the re‐
359              quested-IP option or IA_NA option (DHCPv6) in  the  second  (RE‐
360              QUEST) template.
361
362       -O random-offset
363              Specifies  the offset of the last octet to randomize in the tem‐
364              plate. This must be an integer greater than  3.  The  -T  switch
365              must be given to use this option.
366
367       -S srvid-offset
368              Specifies  the offset of the server-ID option in the second (RE‐
369              QUEST) template.  This must  be  a  positive  integer,  and  the
370              switch  can  only  be used when the template option (-T) is also
371              given.
372
373       -X xid-offset
374              Specifies the offset of the transaction ID  (xid)  in  the  tem‐
375              plate.  This must be a positive integer, and the switch can only
376              be used when the template option (-T) is also given.
377

OPTIONS CONTROLLING A TEST

379       -D max-drop
380              Aborts the test  immediately  if  max-drop  requests  have  been
381              dropped.   Use  -D  0 to abort if even a single request has been
382              dropped. max-drop must be a positive integer.  If  max-drop  in‐
383              cludes  the suffix '%', it specifies a maximum percentage of re‐
384              quests that may be dropped before abort. In this  case,  testing
385              of  the threshold begins after 10 requests have been expected to
386              be received.
387
388       -n num-requests
389              Initiates num-request transactions. No report is generated until
390              all  transactions  have been initiated/waited-for, after which a
391              report is generated and the program terminates.
392
393       -p test-period
394              Sends requests for test-period, which is specified in  the  same
395              manner  as  -d. This can be used as an alternative to -n or both
396              options can be given, in which case  the  testing  is  completed
397              when either limit is reached.
398
399       -t interval
400              Sets the delay (in seconds) between two successive reports.
401
402       -C separator
403              Output reduced, an argument is a separator for periodic (-t) re‐
404              ports generated in easy parsable  mode.  Data  output  won't  be
405              changed, remain identical as in -t option.
406

ARGUMENTS

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

ERRORS

417       perfdhcp can report the following errors in the packet exchange:
418
419       tooshort
420              A message was received that was too short.
421
422       orphans
423              A  message  was  received  which  does not match one sent to the
424              server (i.e.  it is a duplicate message, a message that has  ar‐
425              rived  after  an excessive delay, or one that is just not recog‐
426              nized).
427
428       locallimit
429              Local system limits have been reached when sending a message.
430

EXIT STATUS

432       perfdhcp can exit with one of the following status codes:
433
434       0      Success.
435
436       1      General error.
437
438       2      Error in command-line arguments.
439
440       3      No general failures in operation, but one or more exchanges were
441              unsuccessful.
442

USAGE EXAMPLES

444       Simulate  regular DHCPv4 traffic: 100 DHCPv4 devices (-R 100), 10 pack‐
445       ets per second (-r 10), show the query/response rate details (-xi), the
446       report  should be shown every 2 seconds (-t 2), send the packets to the
447       IP 192.0.2.1:
448
449       sudo perfdhcp -xi -t 2 -r 10 -R 100 192.0.2.1
450
451       Here's a similar case, but for DHCPv6. Note that DHCPv6  protocol  uses
452       link-local  addresses,  so  you  need to specify the interface (eth0 in
453       this example) to send the traffic. 'all' is  a  convenience  alias  for
454       All_DHCP_Relay_Agents_and_Servers  (the  multicast  address FF02::1:2).
455       Alternatively, you can use 'servers' alias to refer to All_DHCP_Servers
456       (the  multicast address FF05::1:3), or skip it all together and the de‐
457       fault value (all) will be used.
458
459       sudo perfdhcp -6 -xi -t 1 -r 1 -R 10 -l eth0 all
460
461       The following examples simulate normal DHCPv4 and DHCPv6  traffic  that
462       after 3 seconds starts pretending to not receive any responses from the
463       server for 10 seconds. DHCPv4 protocol signals this by  increased  secs
464       field  and  DHCPv6  uses elapsed option for that. In real networks this
465       indicates that the clients are not getting responses in a  timely  mat‐
466       ter.  This  can be used to simulate some HA scenarios, as Kea uses secs
467       field and elapsed option value as one of the  indicators  that  the  HA
468       partner  is  not  responding. When enabled with -y and -Y, the secs and
469       elapsed time value increased steadily.
470
471       sudo perfdhcp -xi -t 1 -r 1 -y 10 -Y 3 192.0.2.1
472
473       sudo perfdhcp -6 -xi -t 1 -r 1 -y 10 -Y 3 2001:db8::1
474

MAILING LISTS AND SUPPORT

476       There are two public mailing  lists  available  for  the  Kea  project.
477       kea-users (kea-users at lists.isc.org) is intended for Kea users, while
478       kea-dev (kea-dev at lists.isc.org)  is  intended  for  Kea  developers,
479       prospective  contributors,  and  other  advanced  users. Both lists are
480       available at https://lists.isc.org. The community provides  best-effort
481       support on both of those lists.
482
483       ISC    provides    professional   support   for   Kea   services.   See
484       https://www.isc.org/kea/ for details.
485

HISTORY

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

SEE ALSO

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

AUTHOR

497       Internet Systems Consortium
498
500       2019-2022, Internet Systems Consortium
501
502
503
504
5052.0.2                            Mar 03, 2022                      PERFDHCP(8)
Impressum