
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

		## VLAN strip offload mode for interface
		## Default is off
		# vlan-strip-offload on

		## 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
}}

## 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}
