{%- from "opencontrail/map.jinja" import common,compute with context %}
#
# Vnswad configuration options
#

[CONTROL-NODE]
# List of IPAdress:Port of control-node's separated by space.(Mandatory)
# servers=10.0.0.1:5269 10.0.0.2:5260 10.0.0.3:5260
{%- set control_members = [] %}
{%- for member in compute.control.members %}
{%-   if member not in control_members %}
{%-     do control_members.append(member) %}
{%-   endif %}
{%- endfor %}
servers={% for member in control_members %}{{ member.host }}:5269{% if not loop.last %} {% endif %}{% endfor %}

[DEFAULT]
# Everything in this section is optional

# IP address and port to be used to connect to collector.
# Multiple IP:port strings separated by space can be provided
{%- set collector_members = [] %}
{%- for member in compute.collector.members %}
{%-   if member not in collector_members %}
{%-     do collector_members.append(member) %}
{%-   endif %}
{%- endfor %}
collectors = {% for member in collector_members %}{{ member.host }}:8086{% if not loop.last %} {% endif %}{% endfor %}

# Agent mode : can be vrouter / tsn / tor (default is vrouter)
# agent_mode=
{%- if compute.get('tor', {}).get('enabled', False) %}
agent_mode = tsn
{%- endif %}

# Enable/disable debug logging. Possible values are 0 (disable) and 1 (enable)
# debug=0

# Aging time for flow-records in seconds
# flow_cache_timeout=0
{%- if compute.flow_cache_timeout is defined %}
flow_cache_timeout={{ compute.flow_cache_timeout }}
{%- endif %}

{%- if compute.dpdk.enabled %}

# DPDK or legacy work mode
platform=dpdk

# Physical address of PCI used by dpdk
#physical_interface_address=0000:81:00.1
physical_interface_address={{ compute.interface.pci }}

# MAC address of device used by dpdk
physical_interface_mac={{ compute.interface.mac_address }}

{%- endif %}
# hostname= # Retrieved from gethostname() or `hostname -s` equivalent
{%- if compute.hostname is defined %}
hostname={{ compute.hostname }}
{%- endif %}

# Http server port for inspecting vnswad state (useful for debugging)
# http_server_port=8085

# Category for logging. Default value is '*'
# log_category=

# Number of tx-buffers on pkt0 interface
# pkt0_tx_buffers=1000
#
# Measure delays in different queues
# measure_queue_delay=0

# Local log file name
log_file=/var/log/contrail/contrail-vrouter-agent.log

# Log severity levels. Possible values are SYS_EMERG, SYS_ALERT, SYS_CRIT,
# SYS_ERR, SYS_WARN, SYS_NOTICE, SYS_INFO and SYS_DEBUG. Default is SYS_DEBUG
log_level=SYS_NOTICE

# Enable/Disable local file logging. Possible values are 0 (disable) and 1 (enable)
log_local=1

# Enable/Disable local flow message logging. Possible values are 0 (disable) and 1 (enable)
# log_flow=0

# Encapsulation type for tunnel. Possible values are MPLSoGRE, MPLSoUDP, VXLAN
# tunnel_type=

# Enable/Disable headless mode for agent. In headless mode agent retains last
# known good configuration from control node when all control nodes are lost.
# Possible values are true(enable) and false(disable)
# headless_mode=
headless_mode=true

# DHCP relay mode (true or false) to determine if a DHCP request in fabric
# interface with an unconfigured IP should be relayed or not
# dhcp_relay_mode=

# Sandesh send rate limit can be used to throttle system logs transmitted per
# second. System logs are dropped if the sending rate is exceeded
# sandesh_send_rate_limit=
{%- if compute.get('sandesh_send_rate_limits', {}).get('agent') %}
sandesh_send_rate_limit={{ compute.sandesh_send_rate_limits.agent }}
{%- elif compute.get('sandesh_send_rate_limits', {}).get('global') %}
sandesh_send_rate_limit={{ compute.sandesh_send_rate_limits.global }}
{%- endif %}

# Enable/Disable SSL based XMPP Authentication
{%- if compute.xmpp.tls.enabled %}
xmpp_auth_enable = {{ compute.xmpp.tls.auth.enabled }}
xmpp_server_cert = {{ compute.xmpp.tls.cert_file }}
xmpp_server_key = {{ compute.xmpp.tls.key_file }}
xmpp_ca_cert = {{ compute.xmpp.tls.ca_cert_file }}
{%- endif %}
# Gateway mode : can be server/ vcpe (default is none)
# gateway_mode=
{%- if compute.gateway_mode is defined %}
gateway_mode={{ compute.gateway_mode }}
{%- endif %}

[SANDESH]
# sandesh_ssl_enable=false
# introspect_ssl_enable=false
# sandesh_keyfile=/etc/contrail/ssl/private/server-privkey.pem
# sandesh_certfile=/etc/contrail/ssl/certs/server.pem
# sandesh_ca_cert=/etc/contrail/ssl/certs/ca-cert.pem

[RESTART]
# Enable/Disable backup of config and resource files
# backup_enable=true
#
# Directory containing backup of config and resource files
# backup_dir=/var/lib/contrail/backup
#
# Number of backup files
# backup_file_count=3
#
# Agent avoids generating backup file if change is detected within time
# configured below (in milli-sec)
# backup_idle_timeout=10000
#
# Restore config/resource definitions from file
# restore_enable=true
#
# Audit time for config/resource read from file
# restore_audit_timeout=15000

[DNS]
# Client port used by vrouter-agent while connecting to contrail-named
# dns_client_port=

# List of IPAdress:Port of DNS Servers separated by space.
# servers=10.0.0.1:53 10.0.0.2:53 10.0.0.3:53
servers={% for member in control_members %}{{ member.host }}:53{% if not loop.last %} {% endif %}{% endfor %}

# Timeout for DNS server queries in milli-seconds
# dns_timeout=

# Maximum retries for DNS server queries
# dns_max_retries=

# Absolute path for custom nameserver file for default-dns method
# If none specified, /etc/resolv.conf will be used instead
# resolv_conf_file =
{%- if compute.get('dns', {}).get('forwarders', False) %}
resolv_conf_file=/etc/contrail/resolv.conf
{%- endif %}

[HYPERVISOR]
# Everything in this section is optional

# Hypervisor type. Possible values are kvm, xen and vmware
type=kvm

# Link-local IP address and prefix in ip/prefix_len format (for xen)
# xen_ll_ip=

# Link-local interface name when hypervisor type is Xen
# xen_ll_interface=

# Physical interface name when hypervisor type is vmware
# vmware_physical_interface=

# Mode of operation for VMWare. Possible values esxi_neutron, vcenter
# default is esxi_neutron
# vmware_mode=

[FLOWS]
# Everything in this section is optional

# Number of threads for flow setup
# thread_count = 4
#
# Maximum flows allowed per VM (given as % of maximum system flows)
# max_vm_flows=
{%- if compute.max_vm_flows is defined %}
max_vm_flows={{ compute.max_vm_flows }}
{%- endif %}

# Maximum number of link-local flows allowed across all VMs
# max_system_linklocal_flows=4096

# Maximum number of link-local flows allowed per VM
# max_vm_linklocal_flows=1024

# Number of Index state-machine events to log
# index_sm_log_count=0

# Enable/Disable tracing of flow messages. Introspect can over-ride this value
# trace_enable=false
#
# Number of add-tokens
# add_tokens=100
# Number of ksync-tokens
# ksync_tokens=50
# Number of del-tokens
# del_tokens=50
# Number of update-tokens
# update_tokens=50

[METADATA]
# Shared secret for metadata proxy service (Optional)
# metadata_proxy_secret=contrail
{%- if compute.metadata is defined %}
metadata_proxy_secret={{ compute.metadata.secret }}
{%- endif %}

# Metadata proxy port on which agent listens (Optional)
# metadata_proxy_port=

# Enable(true) ssl support for metadata proxy service
# metadata_use_ssl=

# Path for Metadata Agent client certificate
# metadata_client_cert=

# Metadata Agent client certificate type(default=PEM)
# metdata_client_cert_type=

# Path for Metadata Agent client private key
# metadata_client_key=

# Path for CA certificate
# metadata_ca_cert=

[NETWORKS]
# control-channel IP address used by WEB-UI to connect to vnswad to fetch
# required information (Optional)
{%- if compute.bind is defined %}
control_network_ip={{ compute.bind.address }}
{%- else %}
control_network_ip={{ compute.interface.address }}
{%- endif %}

[VIRTUAL-HOST-INTERFACE]
# Everything in this section is mandatory

# name of virtual host interface
name=vhost0

# IP address and prefix in ip/prefix_len format
ip={{ compute.interface.address }}/{{ compute.interface.mask }}

# Gateway IP address for virtual host
gateway={{ compute.interface.gateway }}

# Flag to indicate if hosts in vhost subnet can be resolved by ARP
# If set to 1 host in subnet would be resolved by ARP, if set to 0
# all the traffic destined to hosts within subnet also go via
# default gateway
# subnet_hosts_resolvable=0

# Physical interface name to which virtual host interface maps to
physical_interface={{ compute.interface.dev }}

# List of IP addresses assigned for the compute node other than vhost. Specify
# this only if vhost interface is un-numbered in host-os. Agent will use one
# of the compute_node_address to run services that need IP Address in host-os
# (like metadata...)
#compute_node_address = 10.204.216.28

# We can have multiple gateway sections with different indices in the
# following format
[GATEWAY-0]
# Name of the routing_instance for which the gateway is being configured
# routing_instance=default-domain:admin:public:public

# Gateway interface name
# interface=vgw

# Virtual network ip blocks for which gateway service is required. Each IP
# block is represented as ip/prefix. Multiple IP blocks are represented by
# separating each with a space
# ip_blocks=1.1.1.1/24

[GATEWAY-1]
# Name of the routing_instance for which the gateway is being configured
# routing_instance=default-domain:admin:public1:public1

# Gateway interface name
# interface=vgw1

# Virtual network ip blocks for which gateway service is required. Each IP
# block is represented as ip/prefix. Multiple IP blocks are represented by
# separating each with a space
# ip_blocks=2.2.1.0/24 2.2.2.0/24

# Routes to be exported in routing_instance. Each route is represented as
# ip/prefix. Multiple routes are represented by separating each with a space
# routes=10.10.10.1/24 11.11.11.1/24

[SERVICE-INSTANCE]
# Path to the script which handles the netns commands
netns_command=/usr/bin/opencontrail-vrouter-netns
docker_command=/usr/bin/opencontrail-vrouter-docker

# Number of workers that will be used to start netns commands
#netns_workers=1

# Timeout for each netns command, when the timeout is reached, the netns
# command is killed.
#netns_timeout=30

[TASK]
# Number of threads used by TBB
# thread_count = 8
# Log message if time taken to execute task exceeds a threshold (in msec)
# log_exec_threshold = 10
#
# Log message if time taken to schedule task exceeds a threshold (in msec)
# log_schedule_threshold = 25
#
# TBB Keepawake timer interval in msec
# tbb_keepawake_timeout = 20
#
# Timeout for task monitor in msec
# task_monitor_timeout = 50000
#
# Policy to pin the ksync netlink io thread to CPU. By default, CPU pinning
# is disabled. Other values for policy are,
# "last" - Last CPUID
# "<num>" - CPU-ID to pin (in decimal)
# ksync_thread_cpu_pin_policy=last

[SERVICES]
# bgp_as_a_service_port_range - reserving set of ports to be used.
# bgp_as_a_service_port_range=30000-35000

# [QOS]
#
# #Knob to configure priority tagging when in DCB mode. Default value is true
# priority_tagging = false
#
# [QUEUE-1]
# Logical nic queues for qos config
# logical_queue=

# [QUEUE-2]
# Logical nic queues for qos config
# logical_queue=

# [QUEUE-3]
# This is the default hardware queue
# default_hw_queue= true

# Logical nic queues for qos config
# logical_queue=

# [QOS-NIANTIC]
# [PG-1]
# Scheduling algorithm for priority group (strict/rr)
# scheduling=

# Total hardware queue bandwidth used by priority group
# bandwidth=

# [PG-2]
# Scheduling algorithm for priority group (strict/rr)
# scheduling=

# Total hardware queue bandwidth used by priority group
# bandwidth=

# [PG-3]
# Scheduling algorithm for priority group (strict/rr)
# scheduling=

# Total hardware queue bandwidth used by priority group
# bandwidth=

[LLGR]
# Note: All time values are in seconds.

# End of Rib Rx(received from CN)
# Fallback time in seconds to age out stale entries on CN becoming
# active this is used only when end-of-rib is not seen from CN.
# end_of_rib_rx_fallback_time=

# End of Rib Tx(to be sent to CN)
# Fallback time in seconds to send EOR to CN. Agent waits for inactivity to
# send the same however it may so happen that activity never dies down,
# so use fallback.
# Inactivity time is the time agent waits to conclude EOC. During this interval
# no config will be seen.
# end_of_rib_tx_fallback_time=
# end_of_rib_tx_inactivity_time=

# Config cleanup time
# Once end of config is determined this time is used to start stale cleanup
# of config.
# stale_config_cleanup_time=

# End of config determination time
# Inactivity time is the time agent waits to conclude EOC. During this interval
# no config will be seen.
# Fallback time in seconds to find EOC in case config inactivity is not seen.
# config_fallback_time=
# config_inactivity_time=
