Initial commit of Sphinx docs
[vpp.git] / docs / gettingstarted / users / configuring / startup.rst
1 .. _startup:
2
3
4 .. toctree::
5
6
7 =======================================
8 VPP Configuration File - 'startup.conf'
9 =======================================
10
11
12 After a successful installation, VPP installs a startup config file named
13 *'startup.conf'* in the *'/etc/vpp/'*' directory. This file can be tailored to
14 make VPP run as desired, but contains default values for typical installations.
15 Below are more details about this file and parameter and values it contains.
16
17 Introduction
18 ------------
19
20 The VPP network stack comes with several configuration options that can be
21 provided either on the command line when VPP is started, or in a configuration
22 file. Specific applications built on the stack have been known to require a dozen
23 arguments, depending on requirements.
24
25 Command-line Arguments
26 ----------------------
27
28 Parameters are grouped by a section name. When providing more than one
29 parameter to a section, all parameters for that section must be wrapped in
30 curly braces. For example, to start VPP with configuration data via the
31 command line with the section name *'unix'*:
32
33 .. code-block:: console
34
35     $ sudo /usr/bin/vpp unix { interactive cli-listen 127.0.0.1:5002 }
36
37 The command line can be presented as a single string or as several; anything
38 given on the command line is concatenated with spaces into a single string
39 before parsing. VPP applications must be able to locate their own executable
40 images. The simplest way to ensure this will work is to invoke a VPP
41 application by giving its absolute path. For example:
42 *'/usr/bin/vpp <options>'*  At startup, VPP applications parse through their
43 own ELF-sections [primarily] to make lists of init, configuration, and exit
44 handlers.
45
46 When developing with VPP, in gdb it's often sufficient to start an application
47 like this:
48
49 .. code-block:: console
50
51     (gdb) run unix interactive
52
53 Configuration File
54 ------------------
55
56 It is also possible to supply the configuration parameters in a startup
57 configuration. The path of the file is provided to the VPP application on its
58 command line. The format of the configuration file is a simple text file with
59 the same content as the command line, but with the benefit of being able to use
60 newlines to make the content easier to read. For example:
61
62 .. code-block:: console
63
64     $ cat /etc/vpp/startup.conf
65     unix {
66       nodaemon
67       log /var/log/vpp/vpp.log
68       full-coredump
69       cli-listen localhost:5002
70     }
71     
72     api-trace {
73       on
74     }
75     
76     dpdk {
77       dev 0000:03:00.0
78     }
79
80 VPP is then instructed to load this file with the -c option. For example:
81
82 .. code-block:: console
83
84     $ sudo /usr/bin/vpp -c /etc/vpp/startup.conf
85
86 When the VPP service is started, VPP is started with this option via another
87 installed file, vpp.service (Ubuntu: /lib/systemd/system/vpp.service and
88 CentOS: /usr/lib/systemd/system/vpp.service). See *'ExecStart'* below:
89
90 .. code-block:: console
91
92     $ cat /lib/systemd/system/vpp.service
93     [Unit]
94     Description=vector packet processing engine
95     After=network.target
96     
97     [Service]
98     Type=simple
99     ExecStartPre=-/bin/rm -f /dev/shm/db /dev/shm/global_vm /dev/shm/vpe-api
100     ExecStartPre=-/sbin/modprobe uio_pci_generic
101     ExecStart=/usr/bin/vpp -c /etc/vpp/startup.conf
102     ExecStopPost=/bin/rm -f /dev/shm/db /dev/shm/global_vm /dev/shm/vpe-api
103     Restart=always
104     
105     [Install]
106     WantedBy=multi-user.target
107
108
109 Configuration Parameters
110 ------------------------
111
112 Below is the list of section names and their associated parameters. This is not
113 an exhaustive list of parameters available. The command-line argument parsers
114 can be found in the source code by searching for instances of the
115 **VLIB_CONFIG_FUNCTION** and **VLIB_EARLY_CONFIG_FUNCTION** macro.
116
117 For example, the invocation *'VLIB_CONFIG_FUNCTION (foo_config, "foo")'* will
118 cause the function *'foo_config'* to receive all parameters given in a
119 parameter block named "foo": "foo { arg1 arg2 arg3 ... }". 
120
121
122 List of Basic Parameters:
123 -------------------------
124
125 | unix_ 
126 | dpdk_ 
127 | cpu_  
128
129 List of Advanced Parameters:
130 ----------------------------
131
132 | acl-plugin_ 
133 | api-queue_
134 | api-segment_
135 | api-trace_
136 | buffers_
137 | cj_
138 | dns_
139 | heapsize_
140 | ip_
141 | ip6_
142 | l2learn_
143 | l2tp_
144 | logging_
145 | mactime_
146 | map_
147 | mc_
148 | nat_
149 | oam_
150 | plugins_
151 | plugin_path_
152 | punt_
153 | session_
154 | socketsvr_
155 | stats_
156 | statseg_
157 | tapcli_
158 | tcp_
159 | tls_
160 | tuntap_
161 | vhost-user_
162 | vlib_
163
164 .. _unix:
165
166 "unix" Parameters
167 _________________
168
169 Configure VPP startup and behavior type attributes, as well and any OS based
170 attributes.
171
172  * **interactive**
173      Attach CLI to stdin/out and provide a debugging command line interface.
174      Implies nodaemon.
175      
176      **Example:** interactive
177      
178  * **nodaemon**
179      Do not fork / background the vpp process. Typical when invoking VPP
180      applications from a process monitor. Set by default in the default
181      *'startup.conf'* file.
182      
183      **Example:** nodaemon
184      
185  * **log <filename>**
186      Logs the startup configuration and all subsequent CLI commands in filename.
187      Very useful in situations where folks don't remember or can't be bothered
188      to include CLI commands in bug reports. The default *'startup.conf'* file
189      is to write to *'/var/log/vpp/vpp.log'*.
190      
191      In VPP 18.04, the default log file location was moved from '/tmp/vpp.log'
192      to '/var/log/vpp/vpp.log' . The VPP code is indifferent to the file location.
193      However, if SELinux is enabled, then the new location is required for the file
194      to be properly labeled. Check your local *'startup.conf'* file for the log file
195      location on your system.
196      
197      **Example:** log /var/log/vpp/vpp-debug.log
198      
199  * **exec|startup-config <filename>**
200      Read startup operational configuration from filename. The contents of the file
201      will be performed as though entered at the CLI. The two keywords are aliases
202      for the same function; if both are specified, only the last will have an effect.
203      The file contains CLI commands, for example:
204
205      | $ cat /usr/share/vpp/scripts/interface-up.txt
206      | set interface state TenGigabitEthernet1/0/0 up
207      | set interface state TenGigabitEthernet1/0/1 up
208      
209      **Example:** startup-config /usr/share/vpp/scripts/interface-up.txt
210      
211  * **gid number|name>**
212      Sets the effective group ID to the input group ID or group name of the calling
213      process.
214      
215      **Example:** gid vpp
216      
217  * **full-coredump**
218      Ask the Linux kernel to dump all memory-mapped address regions, instead of
219      just text+data+bss.
220      
221      **Example:** full-coredump
222      
223  * **coredump-size unlimited|<n>G|<n>M|<n>K|<n>**
224      Set the maximum size of the coredump file. The input value can be set in
225      GB, MB, KB or bytes, or set to *'unlimited'*.
226      
227      **Example:** coredump-size unlimited
228      
229  * **cli-listen <ipaddress:port>|<socket-path>**
230      Bind the CLI to listen at address localhost on TCP port 5002. This will
231      accept an ipaddress:port pair or a filesystem path; in the latter case a
232      local Unix socket is opened instead. The default *'startup.conf'* file
233      is to open the socket *'/run/vpp/cli.sock'*.
234      
235      **Example:** cli-listen localhost:5002
236      **Example:** cli-listen /run/vpp/cli.sock
237      
238  * **cli-line-mode**
239      Disable character-by-character I/O on stdin. Useful when combined with,
240      for example, emacs M-x gud-gdb.
241      
242      **Example:** cli-line-mode
243      
244  * **cli-prompt <string>**
245      Configure the CLI prompt to be string.
246      
247      **Example:** cli-prompt vpp-2
248      
249  * **cli-history-limit <n>**
250      Limit commmand history to <n> lines. A value of 0 disables command history.
251      Default value: 50
252      
253      **Example:** cli-history-limit 100
254      
255  * **cli-no-banner**
256      Disable the login banner on stdin and Telnet connections.
257      
258      **Example:** cli-no-banner
259      
260  * **cli-no-pager**
261      Disable the output pager.
262      
263      **Example:** cli-no-pager
264      
265  * **cli-pager-buffer-limit <n>**
266      Limit pager buffer to <n> lines of output. A value of 0 disables the
267      pager. Default value: 100000
268      
269      **Example:** cli-pager-buffer-limit 5000
270      
271  * **runtime-dir <dir>**
272      Set the runtime directory, which is the default location for certain
273      files, like socket files. Default is based on User ID used to start VPP.
274      Typically it is *'root'*, which defaults to *'/run/vpp/'*. Otherwise,
275      defaults to *'/run/user/<uid>/vpp/'*.
276      
277      **Example:** runtime-dir /tmp/vpp
278      
279  * **poll-sleep-usec <n>**
280      Add a fixed-sleep between main loop poll. Default is 0, which is not to
281      sleep.
282      
283      **Example:** poll-sleep-usec 100
284      
285  * **pidfile <filename>**
286      Writes the pid of the main thread in the given filename.
287      
288      **Example:** pidfile /run/vpp/vpp1.pid
289
290 .. _dpdk:
291
292 "dpdk" Parameters
293 _________________
294
295 Command line DPDK configuration controls a number of parameters, including
296 device whitelisting, the number of CPUs available for launching
297 dpdk-eal-controlled threads, the number of I/O buffers, and the process
298 affinity mask. In addition, the DPDK configuration function attempts to support
299 all of the DPDK EAL configuration parameters.
300
301 All of the DPDK EAL options should be available.
302 See ../src/plugins/dpdk/device/dpdk_priv.h, look at the set of
303 "foreach_eal_XXX" macros.
304
305 Popular options include:
306  * **dev <pci-dev>**
307      White-list [as in, attempt to drive] a specific PCI device. PCI-dev is a
308      string of the form "DDDD:BB:SS.F" where:
309      
310         | DDDD = Domain
311         | BB = Bus Number
312         | SS = Slot number
313         | F = Function
314      
315      This is the same format used in the linux sysfs tree (i.e.
316      /sys/bus/pci/devices) for PCI device directory names.
317      
318      **Example:** dev 0000:02:00.0
319      
320  * **dev <pci-dev> { .. }**
321      When whitelisting specific interfaces by specifying PCI address,
322      additional custom parameters can also be specified. Valid options include:
323
324       * **num-rx-queues <n>**
325           Number of receive queues. Also enables RSS. Default value is 1.
326       * **num-tx-queues <n>**
327           Number of transmit queues. Default is equal to number of worker
328           threads or 1 if no workers treads.
329       * **num-rx-desc <n>**
330           Number of descriptors in receive ring. Increasing or reducing number
331           can impact performance. Default is 1024.
332       * **num-rt-desc <n>**
333           Number of descriptors in transmit ring. Increasing or reducing number
334           can impact performance. Default is 1024.
335       * **workers**
336           TBD
337       * **vlan-strip-offload on|off**:
338           VLAN strip offload mode for interface. VLAN stripping is off by default
339           for all NICs except VICs, using ENIC driver, which has VLAN stripping on
340           by default.
341       * **hqos**
342           Enable the Hierarchical Quaity-of-Service (HQoS) scheduler, default is
343           disabled. This enables HQoS on specific output interface.
344       * **hqos { .. }**
345           HQoS can also have its own set of custom parameters. Setting a custom
346           parameter also enables HQoS.
347
348           * **hqos-thread <n>**
349               HQoS thread used by this interface. To setup a pool of threads that
350               are shared by all HQoS interfaces, set via the*'cpu'* section using
351               either *'corelist-hqos-threads'* or *'coremask-hqos-threads'*.
352
353       * **rss**
354           TBD
355      
356      **Example:**
357      
358                  | dev 0000:02:00.1 {
359                  |    num-rx-queues 2 
360                  |    num-tx-queues 2
361                  | }
362
363  * **vdev <eal-command>**
364      Provide a DPDK EAL command to specify bonded Ethernet interfaces, operating
365      modes and PCI addresses of slave links. Only XOR balanced (mode 2) mode is
366      supported.
367      
368      **Example:**
369
370                  | vdev eth_bond0,mode=2,slave=0000:0f:00.0,slave=0000:11:00.0,xmit_policy=l34
371                  | vdev eth_bond1,mode=2,slave=0000:10:00.0,slave=0000:12:00.0,xmit_policy=l34
372
373  * **num-mbufs <n>**
374      Increase number of buffers allocated. May be needed in scenarios with
375      large number of interfaces and worker threads, or a lot of physical
376      interfaces with multiple RSS queues. Value is per CPU socket. Default is
377      16384.
378      
379      **Example:** num-mbufs 128000
380
381  * **no-pci**
382      When VPP is started, if an interface is not owned by the linux kernel
383      (interface is administratively down), VPP will attempt to manage the
384      interface. *'no-pci'* indicates that VPP should not walk the PCI table
385      looking for interfaces.
386      
387      **Example:** no-pci
388
389  * **no-hugetlb**
390      Don't use huge TLB pages. Potentially useful for running simulator images.
391      
392      **Example:** no-hugetlb
393
394  * **kni <n>**
395      Number of KNI interfaces. Refer to the DPDK documentation.
396      
397      **Example:** kni 2
398
399  * **uio-driver uio_pci_generic|igb_uio|vfio-pci|auto**
400      Change UIO driver used by VPP. Default is *'auto'*.
401      
402      **Example:** uio-driver igb_uio
403
404  * **socket-mem <n>**
405      Change hugepages allocation per-socket, needed only if there is need for
406      larger number of mbufs. Default is 64 hugepages on each detected CPU
407      socket.
408      
409      **Example:** socket-mem 2048,2048
410
411 **Other options include:**
412
413  * **enable-tcp-udp-checksum**
414      Enables UDP/TCP RX checksum offload.
415      
416      **Example:** enable-tcp-udp-checksum
417
418  * **no-multi-seg**
419      Disable mutli-segment buffers, improves performance but disables Jumbo MTU
420      support.
421      
422      **Example:** no-multi-seg
423
424  * **no-tx-checksum-offload**
425      Disables UDP/TCP TX checksum offload. Typically needed for use faster
426      vector PMDs (together with no-multi-seg).
427      
428      **Example:** no-tx-checksum-offload
429
430  * **decimal-interface-names**
431      Format DPDK device names with decimal, as opposed to hexadecimal. 
432      
433      **Example:** decimal-interface-names
434
435  * **log-level  emergency|alert|critical|error|warning|notice|info|debug**
436      Set the log level for DPDK logs. Default is *'notice'*.
437      
438      **Example:** log-level error
439
440  * **dev default { .. }**
441      Change default settings for all intefaces. This sections supports the
442      same set of custom parameters described in *'dev <pci-dev> { .. }*'.
443      
444      **Example:**
445
446                  | dev default {
447                  |    num-rx-queues 3
448                  |    num-tx-queues 3
449                  | }
450
451 .. _cpu:
452
453 "cpu" Parameters
454 ________________
455
456 Command-line CPU configuration controls the creation of named thread types, and
457 the cpu affinity thereof. In the VPP there is one main thread and optionally
458 the user can create worker(s). The main thread and worker thread(s) can be
459 pinned to CPU core(s) automatically or manually.
460
461 **Automatic Pinning:**
462
463  * **workers <n>**
464      Create <n> worker threads.
465      
466      **Example:** workers 4
467
468  * **io <n>**
469      Create <n> i/o threads.
470      
471      **Example:** io 2
472  
473  * **main-thread-io**
474      Handle i/o devices from thread 0, hand off traffic to worker threads.
475      Requires "workers <n>".
476      
477      **Example:** main-thread-io
478  
479  * **skip-cores <n>**
480      Sets number of CPU core(s) to be skipped (1 ... N-1). Skipped CPU core(s)
481      are not used for pinning main thread and working thread(s). The main thread
482      is automatically pinned to the first available CPU core and worker(s) are
483      pinned to next free CPU core(s) after core assigned to main threadLeave
484      the low nn bits of the process affinity mask clear.
485      
486      **Example:** skip-cores 4
487
488 **Manual Pinning:**
489
490  * **main-core <n>**
491      Assign main thread to a specific core.
492      
493      **Example:** main-core 1
494      
495  * **coremask-workers <hex-mask>**
496      Place worker threads according to the bitmap hex-mask.
497      
498      **Example:** coremask-workers 0x0000000000C0000C
499      
500  * **corelist-workers <list>**
501      Same as coremask-workers but accepts a list of cores instead of a bitmap.
502      
503      **Example:** corelist-workers 2-3,18-19
504      
505  * **coremask-io <hex-mask>**
506      Place I/O threads according to the bitmap hex-mask.
507      
508      **Example:** coremask-io 0x0000000003000030
509      
510  * **corelist-io <list>**
511      Same as coremask-io but accepts a list of cores instead of a bitmap.
512      
513      **Example:** corelist-io 4-5,20-21
514      
515  * **coremask-hqos-threads <hex-mask>**
516      Place HQoS threads according to the bitmap hex-mask. A HQoS thread can
517      run multiple HQoS objects each associated with different output interfaces.
518      
519      **Example:** coremask-hqos-threads 0x000000000C0000C0
520
521  * **corelist-hqos-threads <list>**
522      Same as coremask-hqos-threads but accepts a list of cores instead of a
523      bitmap.
524      
525      **Example:** corelist-hqos-threads 6-7,22-23
526
527 **Other:**
528
529  * **use-pthreads**
530      TBD
531      
532      **Example:** use-pthreads
533
534  * **thread-prefix <prefix>**
535      Set a prefix to be prepended to each thread name. The thread name already
536      contains an underscore. If not provided, the default is *'vpp'*.
537      Currently, prefix used on threads: *'vpp_main'*, *'vpp_stats'*
538      
539      **Example:** thread-prefix vpp1
540
541  * **scheduler-policy rr|fifo|batch|idle|other**
542      TBD
543      
544      **Example:** scheduler-policy fifo
545
546  * **scheduler-priority <n>**
547      Set the scheduler priority. Only valid if the *'scheduler-policy'* is set
548      to *'fifo'* or *'rr'*. The valid ranges for the scheduler priority depends
549      on the *'scheduler-policy'* and the current kernel version running. The
550      range is typically 1 to 99, but see the linux man pages for *'sched'* for
551      more details. If this value is not set, the current linux kernel default
552      is left in place.
553      
554      **Example:** scheduler-priority 50
555
556  * **<thread-name> <count>**
557      Set the number of threads for a given thread (by name). Some threads, like
558      *'stats'*, have a fixed number of threads and cannot be changed. List of
559      possible threads include (but not limited too): hqos-threads, workers
560      
561      **Example:** hqos-threads 2
562
563 .. note::
564
565     The "main" thread always occupies the lowest core-id specified in the
566     DPDK [process-level] coremask.
567
568 Here's a full-bore manual placement example:
569
570 .. code-block:: console
571
572    /usr/bin/vpp  unix interactive tuntap disable cpu { main-thread-io coremask-workers 18 coremask-stats 4 } dpdk { coremask 1e }
573    
574    # taskset -a -p <vpe-pid>
575    pid 16251's current affinity mask: 2        # main thread
576    pid 16288's current affinity mask: ffffff   # DPDK interrupt thread (not bound to a core)
577    pid 16289's current affinity mask: 4        # stats thread
578    pid 16290's current affinity mask: 8        # worker thread 0
579    pid 16291's current affinity mask: 10       # worker thread 1
580
581
582 .. _acl-plugin:
583
584 "acl-plugin" Parameters
585 _______________________
586
587 The following parameters should only be set by those that are familiar with the
588 interworkings of VPP and the ACL Plugin.
589
590 The first three parameters, *connection hash buckets*, *connection hash memory*, and *connection count max*, set the **connection table per-interface parameters** for modifying how the two bounded-index extensible hash tables for IPv6 (40\*8 bit key and 8\*8 bit value pairs) and IPv4 (16\*8 bit key and 8\*8 bit value pairs) **ACL plugin FA interface sessions** are initialized.
591
592  * **connection hash buckets <n>**
593      Sets the number of hash buckets (rounded up to a power of 2) in each of the two bi-hash tables. Defaults to 64\*1024 (65536) hash buckets.
594      
595      **Example:** connection hash buckets 65536
596      
597  * **connection hash memory <n>**
598      Sets the number of bytes used for “backing store” allocation in each of the two bi-hash tables. Defaults to 1073741824 bytes.
599      
600      **Example:** connection hash memory 1073741824
601      
602  * **connection count max <n>**
603      Sets the maximum number of pool elements when allocating each per-worker pool of sessions for both bi-hash tables. Defaults to 500000 elements in each pool.
604      
605      **Example:** connection count max 500000
606      
607  * **main heap size <n>G|<n>M|<n>K|<n>**
608      Sets the size of the main memory heap that holds all the ACL module related allocations (other than hash.) Default size is 0, but during ACL heap initialization is equal to *per_worker_size_with_slack * tm->n_vlib_mains + bihash_size + main_slack*. Note that these variables are partially based on the **connection table per-interface parameters** mentioned above.
609      
610      **Example:** main heap size 3G
611
612 The next three parameters, *hash lookup heap size*, *hash lookup hash buckets*, and *hash lookup hash memory*, modify the initialization of the bi-hash lookup table used by the ACL plugin. This table is initialized when attempting to apply an ACL to the existing vector of ACLs looked up during packet processing (but it is found that the table does not exist / has not been initialized yet.)
613      
614  * **hash lookup heap size  <n>G|<n>M|<n>K|<n>**
615      Sets the size of the memory heap that holds all the miscellaneous allocations related to hash-based lookups. Default size is 67108864 bytes.
616      
617      **Example:** hash lookup heap size 70M
618      
619  * **hash lookup hash buckets <n>**
620      Sets the number of hash buckets (rounded up to a power of 2) in the bi-hash lookup table. Defaults to 65536 hash buckets.
621      
622      **Example:** hash lookup hash buckets 65536
623      
624  * **hash lookup hash memory <n>**
625      Sets the number of bytes used for “backing store” allocation in the bi-hash lookup table. Defaults to 67108864 bytes.
626      
627      **Example:** hash lookup hash memory 67108864
628      
629  * **use tuple merge <n>**
630      Sets a boolean value indicating whether or not to use TupleMerge for hash ACL's. Defaults to 1 (true), meaning the default implementation of hashing ACL's **does use** TupleMerge.
631      
632      **Example:** use tuple merge 1
633      
634  * **tuple merge split threshold <n>**
635      Sets the maximum amount of rules (ACE's) that can collide in a bi-hash lookup table before the table is split into two new tables. Splitting ensures less rule collisions by hashing colliding rules based on their common tuple (usually their maximum common tuple.) Splitting occurs when the *length of the colliding rules vector* is greater than this threshold amount. Defaults to a maximum of 39 rule collisions per table.
636      
637      **Example:** tuple merge split threshold 30
638      
639  * **reclassify sessions <n>**
640      Sets a boolean value indicating whether or not to take the epoch of the session into account when dealing with re-applying ACL's or changing already applied ACL's. Defaults to 0 (false), meaning the default implementation **does NOT** take the epoch of the session into account.
641      
642      **Example:** reclassify sessions 1
643
644 .. _api-queue:
645
646 "api-queue" Parameters
647 ______________________
648
649 The following parameters should only be set by those that are familiar with the
650 interworkings of VPP.
651
652  * **length  <n>**
653      Sets the api queue length. Minimum valid queue length is 1024, which is
654      also the default.
655      
656      **Example:** length 2048
657
658 .. _api-segment:
659
660 "api-segment" Parameters
661 ________________________
662
663 These values control various aspects of the binary API interface to VPP.
664
665  * **prefix <path>**
666      Sets the prefix prepended to the name used for shared memory (SHM)
667      segments. The default is empty, meaning shared memory segments are created
668      directly in the SHM directory *'/dev/shm'*. It is worth noting that on
669      many systems *'/dev/shm'* is a symbolic link to somewhere else in the file
670      system; Ubuntu links it to *'/run/shm'*.
671      
672      **Example:** prefix /run/shm
673
674  * **uid <number|name>**
675      Sets the user ID or name that should be used to set the ownership of the
676      shared memory segments. Defaults to the same user that VPP is started
677      with, probably root.
678
679      **Example:** uid root
680
681  * **gid <number|name>**
682      Sets the group ID or name that should be used to set the ownership of the
683      shared memory segments. Defaults to the same group that VPP is started
684      with, probably root.
685      
686      **Example:** gid vpp
687
688 The following parameters should only be set by those that are familiar with the
689 interworkings of VPP.
690
691  * **baseva <x>**
692      Set the base address for SVM global region. If not set, on AArch64, the
693      code will try to determine the base address. All other default to
694      0x30000000.
695      
696      **Example:** baseva 0x20000000
697
698  * **global-size <n>G|<n>M|<n>**
699      Set the global memory size, memory shared across all router instances,
700      packet buffers, etc. If not set, defaults to 64M. The input value can be
701      set in GB, MB or bytes.
702      
703      **Example:** global-size 2G
704
705  * **global-pvt-heap-size <n>M|size <n>**
706      Set the size of the global VM private mheap. If not set, defaults to 128k.
707      The input value can be set in MB or bytes.
708      
709      **Example:** global-pvt-heap-size size 262144
710
711  * **api-pvt-heap-size <n>M|size <n>**
712      Set the size of the api private mheap. If not set, defaults to 128k.
713      The input value can be set in MB or bytes.
714      
715      **Example:** api-pvt-heap-size 1M
716
717  * **api-size <n>M|<n>G|<n>**
718      Set the size of the API region. If not set, defaults to 16M. The input
719      value can be set in GB, MB or bytes.
720      
721      **Example:** api-size 64M
722
723 .. _api-trace:
724
725 "api-trace" Parameters
726 ______________________
727
728 The ability to trace, dump, and replay control-plane API traces makes all the
729 difference in the world when trying to understand what the control-plane has
730 tried to ask the forwarding-plane to do.
731
732  * **on|enable**
733      Enable API trace capture from the beginning of time, and arrange for a
734      post-mortem dump of the API trace if the application terminates abnormally.
735      By default, the (circular) trace buffer will be configured to capture
736      256K traces. The default *'startup.conf'* file has trace enabled by default,
737      and unless there is a very strong reason, it should remain enabled.
738      
739      **Example:** on
740
741  * **nitems <n>**
742      Configure the circular trace buffer to contain the last <n> entries. By
743      default, the trace buffer captures the last 256K API messages received.
744      
745      **Example:** nitems 524288
746
747  * **save-api-table <filename>**
748      Dumps the API message table to /tmp/<filename>.
749      
750      **Example:** save-api-table apiTrace-07-04.txt
751
752 Typically, one simply enables the API message trace scheme:
753
754      api-trace { on }
755
756 .. _buffers:
757
758 "buffers" Parameters
759 ____________________
760
761 Command line Buffer configuration controls buffer management.
762
763  * **memory-size-in-mb <n>**
764      Configure the memory size used for buffers. If not set, VPP defaults
765      to 32MB.
766      
767      **Example:** memory-size-in-mb 64
768
769
770 .. _cj:
771
772 "cj" Parameters
773 _______________
774
775 The circular journal (CJ) thread-safe circular log buffer scheme is
776 occasionally useful when chasing bugs. Calls to it should not be checked in.
777 See .../vlib/vlib/unix/cj.c. The circular journal is disables by default.
778 When enabled, the number of records must be provided, there is no default
779 value.
780
781  * **records <n>**
782      Configure the number of circular journal records in the circular buffer.
783      The number of records should be a power of 2.
784      
785      **Example:** records 131072
786
787  * **on**
788      Turns on logging at the earliest possible moment.
789      
790      **Example:** on
791
792 .. _dns:
793
794 "dns" Parameters
795 ________________
796
797  * **max-cache-size <n>**
798      TBD
799      
800      **Example:** TBD
801      
802  * **max-ttl <n>**
803      TBD
804      
805      **Example:** TBD
806
807 .. _heapsize:
808
809 "heapsize" Parameters
810 _____________________
811
812 Heapsize configuration controls the size of the main heap. The heap size is
813 configured very early in the boot sequence, before loading plug-ins or doing
814 much of anything else.
815
816  * **heapsize <n>M|<n>G**
817      Specifies the size of the heap in MB or GB. The default is 1GB. Setting the
818      main heap size to 4GB or more requires recompilation of the entire system
819      with CLIB_VEC64 > 0. See .../clib/clib/vec_bootstrap.h.
820      
821      **Example:** heapsize 2G
822
823 .. _ip:
824
825 "ip" Parameters
826 _______________
827
828 IPv4 heap configuration. he heap size is configured very early in the boot
829 sequence, before loading plug-ins or doing much of anything else.
830
831  * **heap-size <n>G|<n>M|<n>K|<n>**
832      Set the IPv4 mtrie heap size, which is the amount of memory dedicated to
833      the destination IP lookup table. The input value can be set in GB, MB, KB
834      or bytes. The default value is 32MB.
835      
836      **Example:** heap-size 64M
837
838 .. _ip6:
839
840 "ip6" Parameters
841 ________________
842
843 IPv6 heap configuration. he heap size is configured very early in the boot
844 sequence, before loading plug-ins or doing much of anything else.
845
846
847  * **heap-size <n>G|<n>M|<n>K|<n>**
848      Set the IPv6 forwarding table heap size. The input value can be set in GB,
849      MB, KB or bytes. The default value is 32MB.
850      
851      **Example:** heap-size 64M
852      
853  * **hash-buckets <n>**
854      Set the number of IPv6 forwarding table hash buckets. The default value is
855      64K (65536).
856      
857      **Example:** hash-buckets 131072
858
859 .. _l2learn:
860
861 "l2learn" Parameters
862 ____________________
863
864 Configure Layer 2 MAC Address learning parameters.
865
866  * **limit <n>**
867      Configures the number of L2 (MAC) addresses in the L2 FIB at any one time,
868      which limits the size of the L2 FIB to <n> concurrent entries.  Defaults to
869      4M entries (4194304).
870      
871      **Example:** limit 8388608
872
873 .. _l2tp:
874
875 "l2tp" Parameters
876 _________________
877
878 IPv6 Layer 2 Tunnelling Protocol Version 3 (IPv6-L2TPv3) configuration controls
879 the method used to locate a specific IPv6-L2TPv3 tunnel. The following settings
880 are mutually exclusive:
881
882  * **lookup-v6-src**
883      Lookup tunnel by IPv6 source address.
884      
885      **Example:** lookup-v6-src
886      
887  * **lookup-v6-dst**
888      Lookup tunnel by IPv6 destination address.
889      
890      **Example:** lookup-v6-dst
891      
892  * **lookup-session-id**
893      Lookup tunnel by L2TPv3 session identifier.
894      
895      **Example:** lookup-session-id
896
897 .. _logging:
898
899 "logging" Parameters
900 ____________________
901
902  * **size <n>**
903      TBD
904      
905      **Example:** TBD
906      
907  * **unthrottle-time <n>**
908      TBD
909      
910      **Example:** TBD
911      
912  * **default-log-level emerg|alertcrit|err|warn|notice|info|debug|disabled**
913      TBD
914      
915      **Example:** TBD
916      
917  * **default-syslog-log-level emerg|alertcrit|err|warn|notice|info|debug|disabled**
918      TBD
919      
920      **Example:** TBD
921
922 .. _mactime:
923
924 "mactime" Parameters
925 ____________________
926
927  * **lookup-table-buckets <n>**
928      TBD
929      
930      **Example:** TBD
931      
932  * **lookup-table-memory <n>G|<n>M|<n>K|<n>**
933      TBD
934       The input value can be set in GB, MB, KB or bytes. The default value is 256KB.
935      
936      **Example:** TBD
937      
938  * **timezone_offset <n>**
939      TBD
940      
941      **Example:** TBD
942
943 .. _map:
944
945 "map" Parameters
946 ________________
947
948  * **customer edge**
949      TBD
950      
951      **Example:** customer edge
952
953 .. _mc:
954
955 "mc" Parameters
956 _______________
957
958 MC Test Process.
959
960  * **interface <name>**
961      TBD
962      
963      **Example:** TBD
964      
965  * **n-bytes <n>**
966      TBD
967      
968      **Example:** TBD
969      
970  * **max-n-bytes <n>**
971      TBD
972      
973      **Example:** TBD
974      
975  * **min-n-bytes <n>**
976      TBD
977      
978      **Example:** TBD
979      
980  * **seed <n>**
981      TBD
982      
983      **Example:** TBD
984      
985  * **window <n>**
986      TBD
987      
988      **Example:** TBD
989      
990  * **verbose**
991      TBD
992      
993      **Example:** verbose
994      
995  * **no-validate**
996      TBD
997      
998      **Example:** no-validate
999      
1000  * **min-delay <n.n>**
1001      TBD
1002      
1003      **Example:** TBD
1004      
1005  * **max-delay <n.n>**
1006      TBD
1007      
1008      **Example:** TBD
1009      
1010  * **no-delay**
1011      TBD
1012      
1013      **Example:** no-delay
1014      
1015  * **n-packets <n.n>**
1016      TBD
1017      
1018      **Example:** TBD
1019
1020 .. _nat:
1021
1022
1023 "nat" Parameters
1024 ________________
1025
1026  * **translation hash buckets <n>**
1027      TBD
1028      
1029      **Example:** TBD
1030      
1031  * **translation hash memory <n>**
1032      TBD
1033      
1034      **Example:** TBD
1035      
1036  * **user hash buckets <n>**
1037      TBD
1038      
1039      **Example:** TBD
1040      
1041  * **user hash memory <n>**
1042      TBD
1043      
1044      **Example:** TBD
1045      
1046  * **max translations per user <n>**
1047      TBD
1048      
1049      **Example:** TBD
1050      
1051  * **outside VRF id <n>**
1052      TBD
1053      
1054      **Example:** TBD
1055      
1056  * **outside ip6 VRF id <n>**
1057      TBD
1058      
1059      **Example:** TBD
1060      
1061  * **inside VRF id <n>**
1062      TBD
1063      
1064      **Example:** TBD
1065      
1066  * **inside VRF id <n>**
1067      TBD
1068      
1069      **Example:** TBD
1070      
1071  * **static mapping only**
1072      TBD
1073      
1074      **Example:** static mapping only
1075      
1076  * **connection tracking**
1077      TBD
1078      
1079      **Example:** connection tracking
1080      
1081  * **deterministic**
1082      TBD
1083      
1084      **Example:** deterministic
1085      
1086  * **nat64 bib hash buckets <n>**
1087      TBD
1088      
1089      **Example:** TBD
1090      
1091  * **nat64 bib hash memory <n>**
1092      TBD
1093      
1094      **Example:** TBD
1095      
1096  * **nat64 st hash buckets <n>**
1097      TBD
1098      
1099      **Example:** TBD
1100      
1101  * **nat64 st hash memory <n>**
1102      TBD
1103      
1104      **Example:** TBD
1105      
1106  * **out2in dpo**
1107      TBD
1108      
1109      **Example:** out2in dpo
1110      
1111  * **dslite ce**
1112      TBD
1113      
1114      **Example:** dslite ce
1115      
1116  * **endpoint-dependent**
1117      TBD
1118      
1119      **Example:** endpoint-dependent
1120
1121 .. _oam:
1122
1123 "oam" Parameters
1124 ________________
1125
1126 OAM configuration controls the (ip4-icmp) interval, and number of misses
1127 allowed before reporting an oam target down to any registered listener.
1128
1129  * **interval <n.n>**
1130      Interval, floating-point seconds, between sending OAM IPv4 ICMP messages.
1131      Default is 2.04 seconds.
1132      
1133      **Example:** interval 3.5
1134      
1135  * **misses-allowed <n>**
1136      Number of misses before declaring an OAM target down. Default is 3 misses.
1137      
1138      **Example:** misses-allowed 5
1139
1140 .. _plugins:
1141
1142 "plugins" Parameters
1143 ____________________
1144 A plugin can be disabled by default. It may still be in an experimental phase
1145 or only be needed in special circumstances. If this is the case, the plugin can
1146 be explicitely enabled in *'startup.conf'*. Also, a plugin that is enabled by
1147 default can be explicitely disabled in *'startup.conf'*.
1148
1149 Another useful use of this section is to disable all the plugins, then enable
1150 only the plugins that are desired.
1151
1152  * **path <path>**
1153      Adjust the plugin path depending on where the VPP plugins are installed.
1154      
1155      **Example:** path /home/bms/vpp/build-root/install-vpp-native/vpp/lib64/vpp_plugins
1156      
1157  * **name-filter <filter-name>**
1158      TBD
1159      
1160      **Example:** TBD
1161      
1162  * **vat-path <path>**
1163      TBD
1164      
1165      **Example:** TBD
1166      
1167  * **vat-name-filter <filter-name>**
1168      TBD
1169      
1170      **Example:** TBD
1171      
1172  * **plugin <plugin.so> { .. }**
1173      Configure parameters for a given plugin. Valid parameters are as follows: 
1174
1175       * **enable**
1176           Enable the given plugin.
1177       * **disable**
1178           Disable the given plugin.
1179       * **skip-version-check**
1180           In the plugin registration, if *'.version_required'* is set, the
1181           plugin will not be loaded if there is version mismatch between
1182           plugin and VPP. This can be bypassed by setting "skip-version-check"
1183           for specific plugin.
1184      
1185      **Example:** plugin ila_plugin.so { enable skip-version-check }
1186      
1187  * **plugin default { .. }**
1188      Set the default behavior for all plugins. Valid parameters are as follows:
1189      
1190        * **disable**
1191           Disable all plugins.
1192      
1193      **Example:**
1194                | plugin default { disable }
1195                | plugin dpdk_plugin.so { enable }
1196                | plugin acl_plugin.so { enable }
1197
1198 .. _plugin_path:
1199
1200 "plugin_path" Parameters
1201 ________________________
1202
1203 Alternate syntax to choose plugin path. Plugin_path configuration controls the
1204 set of directories searched for vlib plugins. Supply a colon-separated list of
1205 (absolute) directory names: plugin_path dir1:dir2:...:dirN
1206
1207     **Example:** plugin_path /home/bms/vpp/build-root/install-vpp-native/vpp/lib64/vpp_plugins
1208
1209 .. _punt:
1210
1211 "punt" Parameters
1212 _________________
1213
1214  * **socket <path>**
1215      TBD
1216      
1217      **Example:** TBD
1218
1219 .. _session:
1220
1221 "session" Parameters
1222 ____________________
1223
1224  * **event-queue-length <n>**
1225      TBD
1226      
1227      **Example:** TBD
1228      
1229  * **preallocated-sessions <n>**
1230      TBD
1231      
1232      **Example:** TBD
1233      
1234  * **v4-session-table-buckets <n>**
1235      TBD
1236      
1237      **Example:** TBD
1238      
1239  * **v4-halfopen-table-buckets <n>**
1240      TBD
1241      
1242      **Example:** TBD
1243      
1244  * **v6-session-table-buckets <n>**
1245      TBD
1246      
1247      **Example:** TBD
1248      
1249  * **v6-halfopen-table-buckets <n>**
1250      TBD
1251      
1252      **Example:** TBD
1253      
1254  * **v4-session-table-memory <n>G|<n>M|<n>K|<n>**
1255      TBD
1256      The input value can be set in GB, MB, KB or bytes.
1257      
1258      **Example:** TBD
1259      
1260  * **v4-halfopen-table-memory <n>G|<n>M|<n>K|<n>**
1261      TBD
1262      The input value can be set in GB, MB, KB or bytes.
1263      
1264      **Example:** TBD
1265      
1266  * **v6-session-table-memory <n>G|<n>M|<n>K|<n>**
1267      TBD
1268      The input value can be set in GB, MB, KB or bytes.
1269      
1270      **Example:** TBD
1271      
1272  * **v6-halfopen-table-memory <n>G|<n>M|<n>K|<n>**
1273      TBD
1274      The input value can be set in GB, MB, KB or bytes.
1275      
1276      **Example:** TBD
1277      
1278  * **local-endpoints-table-memory <n>G|<n>M|<n>K|<n>**
1279      TBD
1280      The input value can be set in GB, MB, KB or bytes.
1281      
1282      **Example:** TBD
1283      
1284  * **local-endpoints-table-buckets <n>**
1285      TBD
1286      
1287      **Example:** TBD
1288      
1289  * **evt_qs_memfd_seg**
1290      TBD
1291      
1292      **Example:** evt_qs_memfd_seg
1293
1294 .. _socketsvr:
1295
1296 "socketsvr" Parameters
1297 ______________________
1298
1299 Create a socket server for API server (.../vlibmemory/socksvr_vlib.c.).
1300 If not set, API server doesn't run.
1301
1302  * **socket-name <filename>**
1303      Configure API socket filename.
1304      
1305      **Example:** socket-name /run/vpp/vpp-api.sock
1306      
1307  * **default**
1308      Use the default API socket (/run/vpp-api.sock).
1309      
1310      **Example:** default
1311
1312 .. _stats:
1313
1314 "stats" Parameters
1315 __________________
1316
1317 Create a socket server for *'stats'* poller. If not set, 'stats'* poller
1318 doesn't run.
1319
1320  * **socket-name <filename>**
1321      Configure *'stats'* socket filename.
1322      
1323      **Example:** socket-name /run/vpp/stats.sock
1324      
1325  * **default**
1326      Use the default *'stats'* socket (/run/vpp/stats.sock).
1327      
1328      **Example:** default
1329
1330 .. _statseg:
1331
1332 "statseg" Parameters
1333 ____________________
1334
1335  * **size <n>G|<n>M|<n>K|<n>**
1336      TBD
1337      The input value can be set in GB, MB, KB or bytes.
1338      
1339      **Example:** TBD
1340      
1341 .. _tapcli:     
1342
1343 "tapcli" Parameters
1344 ___________________
1345
1346  * **mtu <n>**
1347      TBD
1348      
1349      **Example:** TBD
1350      
1351  * **disable**
1352      TBD
1353      
1354      **Example:** disable
1355
1356 .. _tcp:
1357
1358 "tcp" Parameters
1359 ________________
1360
1361  * **preallocated-connections <n>**
1362      TBD
1363      
1364      **Example:** TBD
1365      
1366  * **preallocated-half-open-connections <n>**
1367      TBD
1368      
1369      **Example:** TBD
1370      
1371  * **buffer-fail-fraction <n.n>**
1372      TBD
1373      
1374      **Example:** TBD
1375
1376 .. _tls:
1377
1378 "tls" Parameters
1379 ________________
1380
1381  * **se-test-cert-in-ca**
1382      TBD
1383      
1384      **Example:** se-test-cert-in-ca
1385      
1386  * **ca-cert-path <filename>**
1387      TBD
1388      If not set, the default is set to *'/etc/ssl/certs/ca-certificates.crt'*.
1389      
1390      **Example:** TBD
1391
1392 .. _tuntap:
1393
1394 "tuntap" Parameters
1395 ___________________
1396
1397 The "tuntap" driver configures a point-to-point interface between the vpp
1398 engine and the local Linux kernel stack. This allows e.g. users to ssh to the
1399 host | VM | container via vpp "revenue" interfaces. It's marginally useful, and
1400 is currently disabled by default. To [dynamically] create TAP interfaces - the
1401 preferred scheme - see the "tap_connect" binary API. The Linux network stack
1402 "vnet" interface needs to manually configure, and VLAN and other settings if
1403 desired.
1404
1405  * **enable|disable**
1406      Enable or disable the tun/tap driver. 
1407      
1408      **Example:** enable
1409      
1410  * **ethernet|ether**
1411      Create a tap device (ethernet MAC) instead of a tun device (point-to-point
1412      tunnel). The two keywords are aliases for the same function.
1413      
1414      **Example:** ethernet
1415      
1416  * **have-normal-interface|have-normal**
1417      Treat the host Linux stack as a routing peer instead of programming VPP
1418      interface L3 addresses onto the tun/tap devices. The two keywords are
1419      aliases for the same function.
1420      
1421      **Example:** have-normal-interface
1422      
1423  * **name <name>**
1424      Assign name to the tun/tap device.
1425      
1426      **Example:** name vpp1
1427
1428 Here's a typical multiple parameter invocation:
1429
1430      | tuntap { ethernet have-normal-interface name vpp1 }
1431
1432 .. _vhost-user:
1433
1434 "vhost-user" Parameters
1435 _______________________
1436
1437 Vhost-user configuration parameters control the vhost-user driver.
1438
1439  * **coalesce-frames <n>**
1440      Subject to deadline-timer expiration - see next item - attempt to transmit
1441      at least <n> packet frames. Default is 32 frames.
1442      
1443      **Example:** coalesce-frames 64
1444      
1445  * **coalesce-time <seconds>**
1446      Hold packets no longer than (floating-point) seconds before transmitting
1447      them. Default is 0.001 seconds
1448      
1449      **Example:** coalesce-time 0.002
1450      
1451  * **dont-dump-memory**
1452      vhost-user shared-memory segments can add up to a large amount of memory, so
1453      it's handy to avoid adding them to corefiles when using a significant number
1454      of such interfaces.
1455      
1456      **Example:** dont-dump-memory
1457
1458 .. _vlib:
1459
1460 "vlib" Parameters
1461 _________________
1462
1463  * **memory-trace**
1464      TBD
1465      
1466      **Example:** memory-trace
1467      
1468  * **elog-events <n>**
1469      TBD
1470      
1471      **Example:** TBD
1472      
1473  * **elog-post-mortem-dump**
1474      TBD
1475      
1476      **Example:** elog-post-mortem-dump
1477