
unix {{
  nodaemon
  log /var/log/vpp/vpp.log
  full-coredump
  cli-listen /run/vpp/cli.sock
  gid vpp
}}

api-trace {{
## This stanza controls binary API tracing. Unless there is a very strong reason,
## please leave this feature enabled.
  on
## Additional parameters:
##
## To set the number of binary API trace records in the circular buffer, configure nitems
##
## nitems <nnn>
##
## To save the api message table decode tables, configure a filename. Results in /tmp/<filename>
## Very handy for understanding api message changes between versions, identifying missing
## plugins, and so forth.
##
## save-api-table <filename>
}}

socksvr {{
  default
}}

cpu {{
{cpu}
	## 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) manually or automatically

	## Manual pinning of thread(s) to CPU core(s)

	## Set logical CPU core where main thread runs, if main core is not set
	## VPP will use core 1 if available
	# main-core 1

	## Set logical CPU core(s) where worker threads are running
	# corelist-workers 2-3,18-19

	## Automatic pinning of thread(s) to CPU core(s)

	## 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 thread
	# skip-cores 4

	## Specify a number of workers to be created
	## Workers are pinned to N consecutive CPU cores while skipping "skip-cores" CPU core(s)
	## and main thread's CPU core
	# workers 2

	## Set scheduling policy and priority of main and worker threads

	## Scheduling policy options are: other (SCHED_OTHER), batch (SCHED_BATCH)
	## idle (SCHED_IDLE), fifo (SCHED_FIFO), rr (SCHED_RR)
	# scheduler-policy fifo

	## Scheduling priority is used only for "real-time policies (fifo and rr),
	## and has to be in the range of priorities supported for a particular policy
	# scheduler-priority 50
}}

buffers {{
{buffers}

	## Increase number of buffers allocated, needed only in scenarios with
	## large number of interfaces and worker threads. Value is per numa node.
	## Default is 16384 (8192 if running unpriviledged)
	# buffers-per-numa 128000

	## Size of buffer data area
	## Default is 2048
	# default data-size 2048
}}

dpdk {{
{devices}

	## Change default settings for all interfaces
	# dev default {{
		## Number of receive queues, enables RSS
		## Default is 1
		# num-rx-queues 3

		## Number of transmit queues, Default is equal
		## to number of worker threads or 1 if no workers treads
		# num-tx-queues 3

		## Number of descriptors in transmit and receive rings
		## increasing or reducing number can impact performance
		## Default is 1024 for both rx and tx
		# num-rx-desc 512
		# num-tx-desc 512

		## TCP Segment Offload
		## Default is off
		## To enable TSO, 'enable-tcp-udp-checksum' must be set
		# tso on

		## Devargs
                ## device specific init args
                ## Default is NULL
		# devargs safe-mode-support=1,pipeline-mode-support=1
	# }}

	## Whitelist specific interface by specifying PCI address
	# dev 0000:02:00.0

	## Blacklist specific device type by specifying PCI vendor:device
        ## Whitelist entries take precedence
	# blacklist 8086:10fb

	## Set interface name
	# dev 0000:02:00.1 {{
	#	name eth0
	# }}

	## Whitelist specific interface by specifying PCI address and in
	## addition specify custom parameters for this interface
	# dev 0000:02:00.1 {{
	#	num-rx-queues 2
	# }}

	## Change UIO driver used by VPP, Options are: igb_uio, vfio-pci,
	## uio_pci_generic or auto (default)
	# uio-driver vfio-pci

	## Disable multi-segment buffers, improves performance but
	## disables Jumbo MTU support
	# no-multi-seg

	## Change hugepages allocation per-socket, needed only if there is need for
	## larger number of mbufs. Default is 256M on each detected CPU socket
	# socket-mem 2048,2048

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

	## Enable UDP / TCP TX checksum offload
	## This is the reversed option of 'no-tx-checksum-offload'
	# enable-tcp-udp-checksum

        ## Enable outer UDP / IPv4 checksum offload
        ## This is only enabled when tunnels offload are available
        # enable-outer-checksum-offload
}}

## node variant defaults
#node {{

## specify the preferred default variant
#	default	{{ variant icl }}

## specify the preferred variant, for a given node
#	ip4-rewrite {{ variant skx }}

#}}


# plugins {{
	## Adjusting the plugin path depending on where the VPP plugins are
	#	path /ws/vpp/build-root/install-vpp-native/vpp/lib/vpp_plugins

	## Disable all plugins by default and then selectively enable specific plugins
	# plugin default {{ disable }}
	# plugin dpdk_plugin.so {{ enable }}
	# plugin acl_plugin.so {{ enable }}

	## Enable all plugins by default and then selectively disable specific plugins
	# plugin dpdk_plugin.so {{ disable }}
	# plugin acl_plugin.so {{ disable }}
# }}

## Statistics Segment
# statseg {{
    # socket-name <filename>, name of the stats segment socket
    #     defaults to /run/vpp/stats.sock
    # size <nnn>[KMG], size of the stats segment, defaults to 32mb
    # per-node-counters on | off, defaults to none
    # update-interval <f64-seconds>, sets the segment scrape / update interval
# }}

{tcp}
