.. _startup:


.. toctree::


=======================================
VPP Configuration File - 'startup.conf'
=======================================


After a successful installation, VPP installs a startup config file named
*'startup.conf'* in the *'/etc/vpp/'*' directory. This file can be tailored to
make VPP run as desired, but contains default values for typical installations.
Below are more details about this file and parameter and values it contains.

Introduction
------------

The VPP network stack comes with several configuration options that can be
provided either on the command line when VPP is started, or in a configuration
file. Specific applications built on the stack have been known to require a dozen
arguments, depending on requirements.

Command-line Arguments
----------------------

Parameters are grouped by a section name. When providing more than one
parameter to a section, all parameters for that section must be wrapped in
curly braces. For example, to start VPP with configuration data via the
command line with the section name *'unix'*:

.. code-block:: console

    $ sudo /usr/bin/vpp unix { interactive cli-listen 127.0.0.1:5002 }

The command line can be presented as a single string or as several; anything
given on the command line is concatenated with spaces into a single string
before parsing. VPP applications must be able to locate their own executable
images. The simplest way to ensure this will work is to invoke a VPP
application by giving its absolute path. For example:
*'/usr/bin/vpp <options>'*  At startup, VPP applications parse through their
own ELF-sections [primarily] to make lists of init, configuration, and exit
handlers.

When developing with VPP, in gdb it's often sufficient to start an application
like this:

.. code-block:: console

    (gdb) run unix interactive

Configuration File
------------------

It is also possible to supply the configuration parameters in a startup
configuration. The path of the file is provided to the VPP application on its
command line. The format of the configuration file is a simple text file with
the same content as the command line, but with the benefit of being able to use
newlines to make the content easier to read. For example:

.. code-block:: console

    $ cat /etc/vpp/startup.conf
    unix {
      nodaemon
      log /var/log/vpp/vpp.log
      full-coredump
      cli-listen localhost:5002
    }
    
    api-trace {
      on
    }
    
    dpdk {
      dev 0000:03:00.0
    }

VPP is then instructed to load this file with the -c option. For example:

.. code-block:: console

    $ sudo /usr/bin/vpp -c /etc/vpp/startup.conf

When the VPP service is started, VPP is started with this option via another
installed file, vpp.service (Ubuntu: /lib/systemd/system/vpp.service and
CentOS: /usr/lib/systemd/system/vpp.service). See *'ExecStart'* below:

.. code-block:: console

    $ cat /lib/systemd/system/vpp.service
    [Unit]
    Description=vector packet processing engine
    After=network.target
    
    [Service]
    Type=simple
    ExecStartPre=-/bin/rm -f /dev/shm/db /dev/shm/global_vm /dev/shm/vpe-api
    ExecStartPre=-/sbin/modprobe uio_pci_generic
    ExecStart=/usr/bin/vpp -c /etc/vpp/startup.conf
    ExecStopPost=/bin/rm -f /dev/shm/db /dev/shm/global_vm /dev/shm/vpe-api
    Restart=always
    
    [Install]
    WantedBy=multi-user.target


Configuration Parameters
------------------------

Below is the list of section names and their associated parameters. This is not
an exhaustive list of parameters available. The command-line argument parsers
can be found in the source code by searching for instances of the
**VLIB_CONFIG_FUNCTION** and **VLIB_EARLY_CONFIG_FUNCTION** macro.

For example, the invocation *'VLIB_CONFIG_FUNCTION (foo_config, "foo")'* will
cause the function *'foo_config'* to receive all parameters given in a
parameter block named "foo": "foo { arg1 arg2 arg3 ... }". 


List of Basic Parameters:
-------------------------

| unix_ 
| dpdk_ 
| cpu_  

List of Advanced Parameters:
----------------------------

| acl-plugin_ 
| api-queue_
| api-segment_
| api-trace_
| buffers_
| cj_
| dns_
| heapsize_
| ip_
| ip6_
| l2learn_
| l2tp_
| logging_
| mactime_
| map_
| mc_
| nat_
| oam_
| plugins_
| plugin_path_
| punt_
| session_
| socketsvr_
| stats_
| statseg_
| tapcli_
| tcp_
| tls_
| tuntap_
| vhost-user_
| vlib_

.. _unix:

"unix" Parameters
_________________

Configure VPP startup and behavior type attributes, as well and any OS based
attributes.

 * **interactive**
     Attach CLI to stdin/out and provide a debugging command line interface.
     Implies nodaemon.
     
     **Example:** interactive
     
 * **nodaemon**
     Do not fork / background the vpp process. Typical when invoking VPP
     applications from a process monitor. Set by default in the default
     *'startup.conf'* file.
     
     **Example:** nodaemon
     
 * **log <filename>**
     Logs the startup configuration and all subsequent CLI commands in filename.
     Very useful in situations where folks don't remember or can't be bothered
     to include CLI commands in bug reports. The default *'startup.conf'* file
     is to write to *'/var/log/vpp/vpp.log'*.
     
     In VPP 18.04, the default log file location was moved from '/tmp/vpp.log'
     to '/var/log/vpp/vpp.log' . The VPP code is indifferent to the file location.
     However, if SELinux is enabled, then the new location is required for the file
     to be properly labeled. Check your local *'startup.conf'* file for the log file
     location on your system.
     
     **Example:** log /var/log/vpp/vpp-debug.log
     
 * **exec|startup-config <filename>**
     Read startup operational configuration from filename. The contents of the file
     will be performed as though entered at the CLI. The two keywords are aliases
     for the same function; if both are specified, only the last will have an effect.
     The file contains CLI commands, for example:

     | $ cat /usr/share/vpp/scripts/interface-up.txt
     | set interface state TenGigabitEthernet1/0/0 up
     | set interface state TenGigabitEthernet1/0/1 up
     
     **Example:** startup-config /usr/share/vpp/scripts/interface-up.txt
     
 * **gid number|name>**
     Sets the effective group ID to the input group ID or group name of the calling
     process.
     
     **Example:** gid vpp
     
 * **full-coredump**
     Ask the Linux kernel to dump all memory-mapped address regions, instead of
     just text+data+bss.
     
     **Example:** full-coredump
     
 * **coredump-size unlimited|<n>G|<n>M|<n>K|<n>**
     Set the maximum size of the coredump file. The input value can be set in
     GB, MB, KB or bytes, or set to *'unlimited'*.
     
     **Example:** coredump-size unlimited
     
 * **cli-listen <ipaddress:port>|<socket-path>**
     Bind the CLI to listen at address localhost on TCP port 5002. This will
     accept an ipaddress:port pair or a filesystem path; in the latter case a
     local Unix socket is opened instead. The default *'startup.conf'* file
     is to open the socket *'/run/vpp/cli.sock'*.
     
     **Example:** cli-listen localhost:5002
     **Example:** cli-listen /run/vpp/cli.sock
     
 * **cli-line-mode**
     Disable character-by-character I/O on stdin. Useful when combined with,
     for example, emacs M-x gud-gdb.
     
     **Example:** cli-line-mode
     
 * **cli-prompt <string>**
     Configure the CLI prompt to be string.
     
     **Example:** cli-prompt vpp-2
     
 * **cli-history-limit <n>**
     Limit commmand history to <n> lines. A value of 0 disables command history.
     Default value: 50
     
     **Example:** cli-history-limit 100
     
 * **cli-no-banner**
     Disable the login banner on stdin and Telnet connections.
     
     **Example:** cli-no-banner
     
 * **cli-no-pager**
     Disable the output pager.
     
     **Example:** cli-no-pager
     
 * **cli-pager-buffer-limit <n>**
     Limit pager buffer to <n> lines of output. A value of 0 disables the
     pager. Default value: 100000
     
     **Example:** cli-pager-buffer-limit 5000
     
 * **runtime-dir <dir>**
     Set the runtime directory, which is the default location for certain
     files, like socket files. Default is based on User ID used to start VPP.
     Typically it is *'root'*, which defaults to *'/run/vpp/'*. Otherwise,
     defaults to *'/run/user/<uid>/vpp/'*.
     
     **Example:** runtime-dir /tmp/vpp
     
 * **poll-sleep-usec <n>**
     Add a fixed-sleep between main loop poll. Default is 0, which is not to
     sleep.
     
     **Example:** poll-sleep-usec 100
     
 * **pidfile <filename>**
     Writes the pid of the main thread in the given filename.
     
     **Example:** pidfile /run/vpp/vpp1.pid

.. _dpdk:

"dpdk" Parameters
_________________

Command line DPDK configuration controls a number of parameters, including
device whitelisting, the number of CPUs available for launching
dpdk-eal-controlled threads, the number of I/O buffers, and the process
affinity mask. In addition, the DPDK configuration function attempts to support
all of the DPDK EAL configuration parameters.

All of the DPDK EAL options should be available.
See ../src/plugins/dpdk/device/dpdk_priv.h, look at the set of
"foreach_eal_XXX" macros.

Popular options include:
 * **dev <pci-dev>**
     White-list [as in, attempt to drive] a specific PCI device. PCI-dev is a
     string of the form "DDDD:BB:SS.F" where:
     
        | DDDD = Domain
        | BB = Bus Number
        | SS = Slot number
        | F = Function
     
     This is the same format used in the linux sysfs tree (i.e.
     /sys/bus/pci/devices) for PCI device directory names.
     
     **Example:** dev 0000:02:00.0
     
 * **dev <pci-dev> { .. }**
     When whitelisting specific interfaces by specifying PCI address,
     additional custom parameters can also be specified. Valid options include:

      * **num-rx-queues <n>**
          Number of receive queues. Also enables RSS. Default value is 1.
      * **num-tx-queues <n>**
          Number of transmit queues. Default is equal to number of worker
          threads or 1 if no workers treads.
      * **num-rx-desc <n>**
          Number of descriptors in receive ring. Increasing or reducing number
          can impact performance. Default is 1024.
      * **num-rt-desc <n>**
          Number of descriptors in transmit ring. Increasing or reducing number
          can impact performance. Default is 1024.
      * **workers**
          TBD
      * **vlan-strip-offload on|off**:
          VLAN strip offload mode for interface. VLAN stripping is off by default
          for all NICs except VICs, using ENIC driver, which has VLAN stripping on
          by default.
      * **hqos**
          Enable the Hierarchical Quaity-of-Service (HQoS) scheduler, default is
          disabled. This enables HQoS on specific output interface.
      * **hqos { .. }**
          HQoS can also have its own set of custom parameters. Setting a custom
          parameter also enables HQoS.

          * **hqos-thread <n>**
              HQoS thread used by this interface. To setup a pool of threads that
              are shared by all HQoS interfaces, set via the*'cpu'* section using
              either *'corelist-hqos-threads'* or *'coremask-hqos-threads'*.

      * **rss**
          TBD
     
     **Example:**
     
                 | dev 0000:02:00.1 {
                 |    num-rx-queues 2 
                 |    num-tx-queues 2
                 | }

 * **vdev <eal-command>**
     Provide a DPDK EAL command to specify bonded Ethernet interfaces, operating
     modes and PCI addresses of slave links. Only XOR balanced (mode 2) mode is
     supported.
     
     **Example:**

                 | vdev eth_bond0,mode=2,slave=0000:0f:00.0,slave=0000:11:00.0,xmit_policy=l34
                 | vdev eth_bond1,mode=2,slave=0000:10:00.0,slave=0000:12:00.0,xmit_policy=l34

 * **num-mbufs <n>**
     Increase number of buffers allocated. May be needed in scenarios with
     large number of interfaces and worker threads, or a lot of physical
     interfaces with multiple RSS queues. Value is per CPU socket. Default is
     16384.
     
     **Example:** num-mbufs 128000

 * **no-pci**
     When VPP is started, if an interface is not owned by the linux kernel
     (interface is administratively down), VPP will attempt to manage the
     interface. *'no-pci'* indicates that VPP should not walk the PCI table
     looking for interfaces.
     
     **Example:** no-pci

 * **no-hugetlb**
     Don't use huge TLB pages. Potentially useful for running simulator images.
     
     **Example:** no-hugetlb

 * **kni <n>**
     Number of KNI interfaces. Refer to the DPDK documentation.
     
     **Example:** kni 2

 * **uio-driver uio_pci_generic|igb_uio|vfio-pci|auto**
     Change UIO driver used by VPP. Default is *'auto'*.
     
     **Example:** uio-driver igb_uio

 * **socket-mem <n>**
     Change hugepages allocation per-socket, needed only if there is need for
     larger number of mbufs. Default is 64 hugepages on each detected CPU
     socket.
     
     **Example:** socket-mem 2048,2048

**Other options include:**

 * **enable-tcp-udp-checksum**
     Enables UDP/TCP RX checksum offload.
     
     **Example:** enable-tcp-udp-checksum

 * **no-multi-seg**
     Disable mutli-segment buffers, improves performance but disables Jumbo MTU
     support.
     
     **Example:** no-multi-seg

 * **no-tx-checksum-offload**
     Disables UDP/TCP TX checksum offload. Typically needed for use faster
     vector PMDs (together with no-multi-seg).
     
     **Example:** no-tx-checksum-offload

 * **decimal-interface-names**
     Format DPDK device names with decimal, as opposed to hexadecimal. 
     
     **Example:** decimal-interface-names

 * **log-level  emergency|alert|critical|error|warning|notice|info|debug**
     Set the log level for DPDK logs. Default is *'notice'*.
     
     **Example:** log-level error

 * **dev default { .. }**
     Change default settings for all intefaces. This sections supports the
     same set of custom parameters described in *'dev <pci-dev> { .. }*'.
     
     **Example:**

                 | dev default {
                 |    num-rx-queues 3
                 |    num-tx-queues 3
                 | }

.. _cpu:

"cpu" Parameters
________________

Command-line CPU configuration controls the creation of named thread types, and
the cpu affinity thereof. In the VPP there is one main thread and optionally
the user can create worker(s). The main thread and worker thread(s) can be
pinned to CPU core(s) automatically or manually.

**Automatic Pinning:**

 * **workers <n>**
     Create <n> worker threads.
     
     **Example:** workers 4

 * **io <n>**
     Create <n> i/o threads.
     
     **Example:** io 2
 
 * **main-thread-io**
     Handle i/o devices from thread 0, hand off traffic to worker threads.
     Requires "workers <n>".
     
     **Example:** main-thread-io
 
 * **skip-cores <n>**
     Sets number of CPU core(s) to be skipped (1 ... N-1). Skipped CPU core(s)
     are not used for pinning main thread and working thread(s). The main thread
     is automatically pinned to the first available CPU core and worker(s) are
     pinned to next free CPU core(s) after core assigned to main threadLeave
     the low nn bits of the process affinity mask clear.
     
     **Example:** skip-cores 4

**Manual Pinning:**

 * **main-core <n>**
     Assign main thread to a specific core.
     
     **Example:** main-core 1
     
 * **coremask-workers <hex-mask>**
     Place worker threads according to the bitmap hex-mask.
     
     **Example:** coremask-workers 0x0000000000C0000C
     
 * **corelist-workers <list>**
     Same as coremask-workers but accepts a list of cores instead of a bitmap.
     
     **Example:** corelist-workers 2-3,18-19
     
 * **coremask-io <hex-mask>**
     Place I/O threads according to the bitmap hex-mask.
     
     **Example:** coremask-io 0x0000000003000030
     
 * **corelist-io <list>**
     Same as coremask-io but accepts a list of cores instead of a bitmap.
     
     **Example:** corelist-io 4-5,20-21
     
 * **coremask-hqos-threads <hex-mask>**
     Place HQoS threads according to the bitmap hex-mask. A HQoS thread can
     run multiple HQoS objects each associated with different output interfaces.
     
     **Example:** coremask-hqos-threads 0x000000000C0000C0

 * **corelist-hqos-threads <list>**
     Same as coremask-hqos-threads but accepts a list of cores instead of a
     bitmap.
     
     **Example:** corelist-hqos-threads 6-7,22-23

**Other:**

 * **use-pthreads**
     TBD
     
     **Example:** use-pthreads

 * **thread-prefix <prefix>**
     Set a prefix to be prepended to each thread name. The thread name already
     contains an underscore. If not provided, the default is *'vpp'*.
     Currently, prefix used on threads: *'vpp_main'*, *'vpp_stats'*
     
     **Example:** thread-prefix vpp1

 * **scheduler-policy rr|fifo|batch|idle|other**
     TBD
     
     **Example:** scheduler-policy fifo

 * **scheduler-priority <n>**
     Set the scheduler priority. Only valid if the *'scheduler-policy'* is set
     to *'fifo'* or *'rr'*. The valid ranges for the scheduler priority depends
     on the *'scheduler-policy'* and the current kernel version running. The
     range is typically 1 to 99, but see the linux man pages for *'sched'* for
     more details. If this value is not set, the current linux kernel default
     is left in place.
     
     **Example:** scheduler-priority 50

 * **<thread-name> <count>**
     Set the number of threads for a given thread (by name). Some threads, like
     *'stats'*, have a fixed number of threads and cannot be changed. List of
     possible threads include (but not limited too): hqos-threads, workers
     
     **Example:** hqos-threads 2

.. note::

    The "main" thread always occupies the lowest core-id specified in the
    DPDK [process-level] coremask.

Here's a full-bore manual placement example:

.. code-block:: console

   /usr/bin/vpp  unix interactive tuntap disable cpu { main-thread-io coremask-workers 18 coremask-stats 4 } dpdk { coremask 1e }
   
   # taskset -a -p <vpe-pid>
   pid 16251's current affinity mask: 2        # main thread
   pid 16288's current affinity mask: ffffff   # DPDK interrupt thread (not bound to a core)
   pid 16289's current affinity mask: 4        # stats thread
   pid 16290's current affinity mask: 8        # worker thread 0
   pid 16291's current affinity mask: 10       # worker thread 1


.. _acl-plugin:

"acl-plugin" Parameters
_______________________

The following parameters should only be set by those that are familiar with the
interworkings of VPP and the ACL Plugin.

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.

 * **connection hash buckets <n>**
     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.
     
     **Example:** connection hash buckets 65536
     
 * **connection hash memory <n>**
     Sets the number of bytes used for “backing store” allocation in each of the two bi-hash tables. Defaults to 1073741824 bytes.
     
     **Example:** connection hash memory 1073741824
     
 * **connection count max <n>**
     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.
     
     **Example:** connection count max 500000
     
 * **main heap size <n>G|<n>M|<n>K|<n>**
     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.
     
     **Example:** main heap size 3G

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.)
     
 * **hash lookup heap size  <n>G|<n>M|<n>K|<n>**
     Sets the size of the memory heap that holds all the miscellaneous allocations related to hash-based lookups. Default size is 67108864 bytes.
     
     **Example:** hash lookup heap size 70M
     
 * **hash lookup hash buckets <n>**
     Sets the number of hash buckets (rounded up to a power of 2) in the bi-hash lookup table. Defaults to 65536 hash buckets.
     
     **Example:** hash lookup hash buckets 65536
     
 * **hash lookup hash memory <n>**
     Sets the number of bytes used for “backing store” allocation in the bi-hash lookup table. Defaults to 67108864 bytes.
     
     **Example:** hash lookup hash memory 67108864
     
 * **use tuple merge <n>**
     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.
     
     **Example:** use tuple merge 1
     
 * **tuple merge split threshold <n>**
     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.
     
     **Example:** tuple merge split threshold 30
     
 * **reclassify sessions <n>**
     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.
     
     **Example:** reclassify sessions 1

.. _api-queue:

"api-queue" Parameters
______________________

The following parameters should only be set by those that are familiar with the
interworkings of VPP.

 * **length  <n>**
     Sets the api queue length. Minimum valid queue length is 1024, which is
     also the default.
     
     **Example:** length 2048

.. _api-segment:

"api-segment" Parameters
________________________

These values control various aspects of the binary API interface to VPP.

 * **prefix <path>**
     Sets the prefix prepended to the name used for shared memory (SHM)
     segments. The default is empty, meaning shared memory segments are created
     directly in the SHM directory *'/dev/shm'*. It is worth noting that on
     many systems *'/dev/shm'* is a symbolic link to somewhere else in the file
     system; Ubuntu links it to *'/run/shm'*.
     
     **Example:** prefix /run/shm

 * **uid <number|name>**
     Sets the user ID or name that should be used to set the ownership of the
     shared memory segments. Defaults to the same user that VPP is started
     with, probably root.

     **Example:** uid root

 * **gid <number|name>**
     Sets the group ID or name that should be used to set the ownership of the
     shared memory segments. Defaults to the same group that VPP is started
     with, probably root.
     
     **Example:** gid vpp

The following parameters should only be set by those that are familiar with the
interworkings of VPP.

 * **baseva <x>**
     Set the base address for SVM global region. If not set, on AArch64, the
     code will try to determine the base address. All other default to
     0x30000000.
     
     **Example:** baseva 0x20000000

 * **global-size <n>G|<n>M|<n>**
     Set the global memory size, memory shared across all router instances,
     packet buffers, etc. If not set, defaults to 64M. The input value can be
     set in GB, MB or bytes.
     
     **Example:** global-size 2G

 * **global-pvt-heap-size <n>M|size <n>**
     Set the size of the global VM private mheap. If not set, defaults to 128k.
     The input value can be set in MB or bytes.
     
     **Example:** global-pvt-heap-size size 262144

 * **api-pvt-heap-size <n>M|size <n>**
     Set the size of the api private mheap. If not set, defaults to 128k.
     The input value can be set in MB or bytes.
     
     **Example:** api-pvt-heap-size 1M

 * **api-size <n>M|<n>G|<n>**
     Set the size of the API region. If not set, defaults to 16M. The input
     value can be set in GB, MB or bytes.
     
     **Example:** api-size 64M

.. _api-trace:

"api-trace" Parameters
______________________

The ability to trace, dump, and replay control-plane API traces makes all the
difference in the world when trying to understand what the control-plane has
tried to ask the forwarding-plane to do.

 * **on|enable**
     Enable API trace capture from the beginning of time, and arrange for a
     post-mortem dump of the API trace if the application terminates abnormally.
     By default, the (circular) trace buffer will be configured to capture
     256K traces. The default *'startup.conf'* file has trace enabled by default,
     and unless there is a very strong reason, it should remain enabled.
     
     **Example:** on

 * **nitems <n>**
     Configure the circular trace buffer to contain the last <n> entries. By
     default, the trace buffer captures the last 256K API messages received.
     
     **Example:** nitems 524288

 * **save-api-table <filename>**
     Dumps the API message table to /tmp/<filename>.
     
     **Example:** save-api-table apiTrace-07-04.txt

Typically, one simply enables the API message trace scheme:

     api-trace { on }

.. _buffers:

"buffers" Parameters
____________________

Command line Buffer configuration controls buffer management.

 * **memory-size-in-mb <n>**
     Configure the memory size used for buffers. If not set, VPP defaults
     to 32MB.
     
     **Example:** memory-size-in-mb 64


.. _cj:

"cj" Parameters
_______________

The circular journal (CJ) thread-safe circular log buffer scheme is
occasionally useful when chasing bugs. Calls to it should not be checked in.
See .../vlib/vlib/unix/cj.c. The circular journal is disables by default.
When enabled, the number of records must be provided, there is no default
value.

 * **records <n>**
     Configure the number of circular journal records in the circular buffer.
     The number of records should be a power of 2.
     
     **Example:** records 131072

 * **on**
     Turns on logging at the earliest possible moment.
     
     **Example:** on

.. _dns:

"dns" Parameters
________________

 * **max-cache-size <n>**
     TBD
     
     **Example:** TBD
     
 * **max-ttl <n>**
     TBD
     
     **Example:** TBD

.. _heapsize:

"heapsize" Parameters
_____________________

Heapsize configuration controls the size of the main heap. The heap size is
configured very early in the boot sequence, before loading plug-ins or doing
much of anything else.

 * **heapsize <n>M|<n>G**
     Specifies the size of the heap in MB or GB. The default is 1GB. Setting the
     main heap size to 4GB or more requires recompilation of the entire system
     with CLIB_VEC64 > 0. See .../clib/clib/vec_bootstrap.h.
     
     **Example:** heapsize 2G

.. _ip:

"ip" Parameters
_______________

IPv4 heap configuration. he heap size is configured very early in the boot
sequence, before loading plug-ins or doing much of anything else.

 * **heap-size <n>G|<n>M|<n>K|<n>**
     Set the IPv4 mtrie heap size, which is the amount of memory dedicated to
     the destination IP lookup table. The input value can be set in GB, MB, KB
     or bytes. The default value is 32MB.
     
     **Example:** heap-size 64M

.. _ip6:

"ip6" Parameters
________________

IPv6 heap configuration. he heap size is configured very early in the boot
sequence, before loading plug-ins or doing much of anything else.


 * **heap-size <n>G|<n>M|<n>K|<n>**
     Set the IPv6 forwarding table heap size. The input value can be set in GB,
     MB, KB or bytes. The default value is 32MB.
     
     **Example:** heap-size 64M
     
 * **hash-buckets <n>**
     Set the number of IPv6 forwarding table hash buckets. The default value is
     64K (65536).
     
     **Example:** hash-buckets 131072

.. _l2learn:

"l2learn" Parameters
____________________

Configure Layer 2 MAC Address learning parameters.

 * **limit <n>**
     Configures the number of L2 (MAC) addresses in the L2 FIB at any one time,
     which limits the size of the L2 FIB to <n> concurrent entries.  Defaults to
     4M entries (4194304).
     
     **Example:** limit 8388608

.. _l2tp:

"l2tp" Parameters
_________________

IPv6 Layer 2 Tunnelling Protocol Version 3 (IPv6-L2TPv3) configuration controls
the method used to locate a specific IPv6-L2TPv3 tunnel. The following settings
are mutually exclusive:

 * **lookup-v6-src**
     Lookup tunnel by IPv6 source address.
     
     **Example:** lookup-v6-src
     
 * **lookup-v6-dst**
     Lookup tunnel by IPv6 destination address.
     
     **Example:** lookup-v6-dst
     
 * **lookup-session-id**
     Lookup tunnel by L2TPv3 session identifier.
     
     **Example:** lookup-session-id

.. _logging:

"logging" Parameters
____________________

 * **size <n>**
     TBD
     
     **Example:** TBD
     
 * **unthrottle-time <n>**
     TBD
     
     **Example:** TBD
     
 * **default-log-level emerg|alertcrit|err|warn|notice|info|debug|disabled**
     TBD
     
     **Example:** TBD
     
 * **default-syslog-log-level emerg|alertcrit|err|warn|notice|info|debug|disabled**
     TBD
     
     **Example:** TBD

.. _mactime:

"mactime" Parameters
____________________

 * **lookup-table-buckets <n>**
     TBD
     
     **Example:** TBD
     
 * **lookup-table-memory <n>G|<n>M|<n>K|<n>**
     TBD
      The input value can be set in GB, MB, KB or bytes. The default value is 256KB.
     
     **Example:** TBD
     
 * **timezone_offset <n>**
     TBD
     
     **Example:** TBD

.. _map:

"map" Parameters
________________

 * **customer edge**
     TBD
     
     **Example:** customer edge

.. _mc:

"mc" Parameters
_______________

MC Test Process.

 * **interface <name>**
     TBD
     
     **Example:** TBD
     
 * **n-bytes <n>**
     TBD
     
     **Example:** TBD
     
 * **max-n-bytes <n>**
     TBD
     
     **Example:** TBD
     
 * **min-n-bytes <n>**
     TBD
     
     **Example:** TBD
     
 * **seed <n>**
     TBD
     
     **Example:** TBD
     
 * **window <n>**
     TBD
     
     **Example:** TBD
     
 * **verbose**
     TBD
     
     **Example:** verbose
     
 * **no-validate**
     TBD
     
     **Example:** no-validate
     
 * **min-delay <n.n>**
     TBD
     
     **Example:** TBD
     
 * **max-delay <n.n>**
     TBD
     
     **Example:** TBD
     
 * **no-delay**
     TBD
     
     **Example:** no-delay
     
 * **n-packets <n.n>**
     TBD
     
     **Example:** TBD

.. _nat:


"nat" Parameters
________________

 * **translation hash buckets <n>**
     TBD
     
     **Example:** TBD
     
 * **translation hash memory <n>**
     TBD
     
     **Example:** TBD
     
 * **user hash buckets <n>**
     TBD
     
     **Example:** TBD
     
 * **user hash memory <n>**
     TBD
     
     **Example:** TBD
     
 * **max translations per user <n>**
     TBD
     
     **Example:** TBD
     
 * **outside VRF id <n>**
     TBD
     
     **Example:** TBD
     
 * **outside ip6 VRF id <n>**
     TBD
     
     **Example:** TBD
     
 * **inside VRF id <n>**
     TBD
     
     **Example:** TBD
     
 * **inside VRF id <n>**
     TBD
     
     **Example:** TBD
     
 * **static mapping only**
     TBD
     
     **Example:** static mapping only
     
 * **connection tracking**
     TBD
     
     **Example:** connection tracking
     
 * **deterministic**
     TBD
     
     **Example:** deterministic
     
 * **nat64 bib hash buckets <n>**
     TBD
     
     **Example:** TBD
     
 * **nat64 bib hash memory <n>**
     TBD
     
     **Example:** TBD
     
 * **nat64 st hash buckets <n>**
     TBD
     
     **Example:** TBD
     
 * **nat64 st hash memory <n>**
     TBD
     
     **Example:** TBD
     
 * **out2in dpo**
     TBD
     
     **Example:** out2in dpo
     
 * **dslite ce**
     TBD
     
     **Example:** dslite ce
     
 * **endpoint-dependent**
     TBD
     
     **Example:** endpoint-dependent

.. _oam:

"oam" Parameters
________________

OAM configuration controls the (ip4-icmp) interval, and number of misses
allowed before reporting an oam target down to any registered listener.

 * **interval <n.n>**
     Interval, floating-point seconds, between sending OAM IPv4 ICMP messages.
     Default is 2.04 seconds.
     
     **Example:** interval 3.5
     
 * **misses-allowed <n>**
     Number of misses before declaring an OAM target down. Default is 3 misses.
     
     **Example:** misses-allowed 5

.. _plugins:

"plugins" Parameters
____________________
A plugin can be disabled by default. It may still be in an experimental phase
or only be needed in special circumstances. If this is the case, the plugin can
be explicitely enabled in *'startup.conf'*. Also, a plugin that is enabled by
default can be explicitely disabled in *'startup.conf'*.

Another useful use of this section is to disable all the plugins, then enable
only the plugins that are desired.

 * **path <path>**
     Adjust the plugin path depending on where the VPP plugins are installed.
     
     **Example:** path /home/bms/vpp/build-root/install-vpp-native/vpp/lib64/vpp_plugins
     
 * **name-filter <filter-name>**
     TBD
     
     **Example:** TBD
     
 * **vat-path <path>**
     TBD
     
     **Example:** TBD
     
 * **vat-name-filter <filter-name>**
     TBD
     
     **Example:** TBD
     
 * **plugin <plugin.so> { .. }**
     Configure parameters for a given plugin. Valid parameters are as follows: 

      * **enable**
          Enable the given plugin.
      * **disable**
          Disable the given plugin.
      * **skip-version-check**
          In the plugin registration, if *'.version_required'* is set, the
          plugin will not be loaded if there is version mismatch between
          plugin and VPP. This can be bypassed by setting "skip-version-check"
          for specific plugin.
     
     **Example:** plugin ila_plugin.so { enable skip-version-check }
     
 * **plugin default { .. }**
     Set the default behavior for all plugins. Valid parameters are as follows:
     
       * **disable**
          Disable all plugins.
     
     **Example:**
               | plugin default { disable }
               | plugin dpdk_plugin.so { enable }
               | plugin acl_plugin.so { enable }

.. _plugin_path:

"plugin_path" Parameters
________________________

Alternate syntax to choose plugin path. Plugin_path configuration controls the
set of directories searched for vlib plugins. Supply a colon-separated list of
(absolute) directory names: plugin_path dir1:dir2:...:dirN

    **Example:** plugin_path /home/bms/vpp/build-root/install-vpp-native/vpp/lib64/vpp_plugins

.. _punt:

"punt" Parameters
_________________

 * **socket <path>**
     TBD
     
     **Example:** TBD

.. _session:

"session" Parameters
____________________

 * **event-queue-length <n>**
     TBD
     
     **Example:** TBD
     
 * **preallocated-sessions <n>**
     TBD
     
     **Example:** TBD
     
 * **v4-session-table-buckets <n>**
     TBD
     
     **Example:** TBD
     
 * **v4-halfopen-table-buckets <n>**
     TBD
     
     **Example:** TBD
     
 * **v6-session-table-buckets <n>**
     TBD
     
     **Example:** TBD
     
 * **v6-halfopen-table-buckets <n>**
     TBD
     
     **Example:** TBD
     
 * **v4-session-table-memory <n>G|<n>M|<n>K|<n>**
     TBD
     The input value can be set in GB, MB, KB or bytes.
     
     **Example:** TBD
     
 * **v4-halfopen-table-memory <n>G|<n>M|<n>K|<n>**
     TBD
     The input value can be set in GB, MB, KB or bytes.
     
     **Example:** TBD
     
 * **v6-session-table-memory <n>G|<n>M|<n>K|<n>**
     TBD
     The input value can be set in GB, MB, KB or bytes.
     
     **Example:** TBD
     
 * **v6-halfopen-table-memory <n>G|<n>M|<n>K|<n>**
     TBD
     The input value can be set in GB, MB, KB or bytes.
     
     **Example:** TBD
     
 * **local-endpoints-table-memory <n>G|<n>M|<n>K|<n>**
     TBD
     The input value can be set in GB, MB, KB or bytes.
     
     **Example:** TBD
     
 * **local-endpoints-table-buckets <n>**
     TBD
     
     **Example:** TBD
     
 * **evt_qs_memfd_seg**
     TBD
     
     **Example:** evt_qs_memfd_seg

.. _socketsvr:

"socketsvr" Parameters
______________________

Create a socket server for API server (.../vlibmemory/socksvr_vlib.c.).
If not set, API server doesn't run.

 * **socket-name <filename>**
     Configure API socket filename.
     
     **Example:** socket-name /run/vpp/vpp-api.sock
     
 * **default**
     Use the default API socket (/run/vpp-api.sock).
     
     **Example:** default

.. _stats:

"stats" Parameters
__________________

Create a socket server for *'stats'* poller. If not set, 'stats'* poller
doesn't run.

 * **socket-name <filename>**
     Configure *'stats'* socket filename.
     
     **Example:** socket-name /run/vpp/stats.sock
     
 * **default**
     Use the default *'stats'* socket (/run/vpp/stats.sock).
     
     **Example:** default

.. _statseg:

"statseg" Parameters
____________________

 * **size <n>G|<n>M|<n>K|<n>**
     TBD
     The input value can be set in GB, MB, KB or bytes.
     
     **Example:** TBD
     
.. _tapcli:     

"tapcli" Parameters
___________________

 * **mtu <n>**
     TBD
     
     **Example:** TBD
     
 * **disable**
     TBD
     
     **Example:** disable

.. _tcp:

"tcp" Parameters
________________

 * **preallocated-connections <n>**
     TBD
     
     **Example:** TBD
     
 * **preallocated-half-open-connections <n>**
     TBD
     
     **Example:** TBD
     
 * **buffer-fail-fraction <n.n>**
     TBD
     
     **Example:** TBD

.. _tls:

"tls" Parameters
________________

 * **se-test-cert-in-ca**
     TBD
     
     **Example:** se-test-cert-in-ca
     
 * **ca-cert-path <filename>**
     TBD
     If not set, the default is set to *'/etc/ssl/certs/ca-certificates.crt'*.
     
     **Example:** TBD

.. _tuntap:

"tuntap" Parameters
___________________

The "tuntap" driver configures a point-to-point interface between the vpp
engine and the local Linux kernel stack. This allows e.g. users to ssh to the
host | VM | container via vpp "revenue" interfaces. It's marginally useful, and
is currently disabled by default. To [dynamically] create TAP interfaces - the
preferred scheme - see the "tap_connect" binary API. The Linux network stack
"vnet" interface needs to manually configure, and VLAN and other settings if
desired.

 * **enable|disable**
     Enable or disable the tun/tap driver. 
     
     **Example:** enable
     
 * **ethernet|ether**
     Create a tap device (ethernet MAC) instead of a tun device (point-to-point
     tunnel). The two keywords are aliases for the same function.
     
     **Example:** ethernet
     
 * **have-normal-interface|have-normal**
     Treat the host Linux stack as a routing peer instead of programming VPP
     interface L3 addresses onto the tun/tap devices. The two keywords are
     aliases for the same function.
     
     **Example:** have-normal-interface
     
 * **name <name>**
     Assign name to the tun/tap device.
     
     **Example:** name vpp1

Here's a typical multiple parameter invocation:

     | tuntap { ethernet have-normal-interface name vpp1 }

.. _vhost-user:

"vhost-user" Parameters
_______________________

Vhost-user configuration parameters control the vhost-user driver.

 * **coalesce-frames <n>**
     Subject to deadline-timer expiration - see next item - attempt to transmit
     at least <n> packet frames. Default is 32 frames.
     
     **Example:** coalesce-frames 64
     
 * **coalesce-time <seconds>**
     Hold packets no longer than (floating-point) seconds before transmitting
     them. Default is 0.001 seconds
     
     **Example:** coalesce-time 0.002
     
 * **dont-dump-memory**
     vhost-user shared-memory segments can add up to a large amount of memory, so
     it's handy to avoid adding them to corefiles when using a significant number
     of such interfaces.
     
     **Example:** dont-dump-memory

.. _vlib:

"vlib" Parameters
_________________

 * **memory-trace**
     TBD
     
     **Example:** memory-trace
     
 * **elog-events <n>**
     TBD
     
     **Example:** TBD
     
 * **elog-post-mortem-dump**
     TBD
     
     **Example:** elog-post-mortem-dump
 
