# Copyright 2015 Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# ############################
# VNF configuration
# ############################
VNF_DIR = 'vnfs/'
VNF = 'QemuDpdkVhostUser'

# ############################
# Guest configuration
# ############################

# directory which is shared to QEMU guests. Useful for exchanging files
# between host and guest, VNF specific share will be created
# For 2 VNFs you may use ['/tmp/qemu0_share', '/tmp/qemu1_share']
GUEST_SHARE_DIR = ['/tmp/qemu0_share', '/tmp/qemu1_share', \
                   '/tmp/qemu2_share', '/tmp/qemu3_share', \
                   '/tmp/qemu4_share', '/tmp/qemu5_share']

# location of guest disk image
# For 2 VNFs you may use ['guest1.img', 'guest2.img']
GUEST_IMAGE = ['', '', '', '', '', '']

# guarding timer for VM start up
# For 2 VNFs you may use [180, 180]
GUEST_TIMEOUT = [180, 180, 180, 180, 180, 180]

# packet forwarding mode supported by testpmd; Please see DPDK documentation
# for comprehensive list of modes supported by your version.
# e.g. io|mac|mac_retry|macswap|flowgen|rxonly|txonly|csum|icmpecho|...
# Note: Option "mac_retry" has been changed to "mac retry" since DPDK v16.07
GUEST_TESTPMD_FWD_MODE = 'csum'

# guest loopback application method; supported options are:
#       'testpmd'       - testpmd from dpdk will be built and used
#       'l2fwd'         - l2fwd module provided by Huawei will be built and used
#       'linux_bridge'  - linux bridge will be configured
#       'buildin'       - nothing will be configured by vsperf; VM image must
#                         ensure traffic forwarding between its interfaces
# This configuration option can be overridden by CLI SCALAR option
# guest_loopback, e.g. --test-params "guest_loopback=l2fwd"
# For 2 VNFs you may use ['testpmd', 'l2fwd']
GUEST_LOOPBACK = ['testpmd', 'testpmd', \
                  'testpmd', 'testpmd', \
                  'testpmd', 'testpmd']

# username for guest image
GUEST_USERNAME = 'root'

# password for guest image
GUEST_PASSWORD = 'root'

# login username prompt for guest image
GUEST_PROMPT_LOGIN = '.* login:'

# login password prompt for guest image
GUEST_PROMPT_PASSWORD = 'Password: '

# standard prompt for guest image
GUEST_PROMPT = 'root.*#'

# log file for qemu
LOG_FILE_QEMU = 'qemu.log'

# log file for all commands executed on guest(s)
# multiple guests will result in log files with the guest number appended
LOG_FILE_GUEST_CMDS = 'guest-cmds.log'

# ############################
# Executables
# ############################

QEMU_BIN = os.path.join(QEMU_DIR, 'x86_64-softmmu/qemu-system-x86_64')

# For 2 VNFs you may use ['eth0', 'eth2']
GUEST_NIC1_NAME = ['eth0', 'eth0', 'eth0', 'eth0', 'eth0', 'eth0']
GUEST_NIC2_NAME = ['eth1', 'eth1', 'eth1', 'eth1', 'eth1', 'eth1']

# For 2 VNFs you may use ['00:00:00:00:00:01', '00:00:00:00:00:03']
GUEST_NET1_MAC = ['00:00:00:00:00:01', '00:00:00:00:00:03', \
                  '00:00:00:00:00:05', '00:00:00:00:00:07', \
                  '00:00:00:00:00:09', '00:00:00:00:00:0b']
GUEST_NET2_MAC = ['00:00:00:00:00:02', '00:00:00:00:00:04', \
                  '00:00:00:00:00:06', '00:00:00:00:00:08', \
                  '00:00:00:00:00:0a', '00:00:00:00:00:0c']

# For 2 VNFs you may use ['00:04.0', '00:04.0']
GUEST_NET1_PCI_ADDRESS = ['00:04.0', '00:04.0', \
                          '00:04.0', '00:04.0', \
                          '00:04.0', '00:04.0']
GUEST_NET2_PCI_ADDRESS = ['00:05.0', '00:05.0', \
                          '00:05.0', '00:05.0', \
                          '00:05.0', '00:05.0']

GUEST_MEMORY = ['4096', '4096', '2048', '2048', '2048', '2048']

# test-pmd requires 2 VM cores
GUEST_SMP = ['2', '2', '2', '2', '2', '2']

# Host cores to use to affinitize the SMP cores of a QEMU instance
# For 2 VNFs you may use [(4,5), (6, 7)]
GUEST_CORE_BINDING = [(6, 7), (9, 10), (11, 12), (13, 14), (15, 16), (17, 18)]

# Queues per NIC inside guest for multi-queue configuration, requires switch
# multi-queue to be enabled. Set to 0 for disabled.
GUEST_NIC_QUEUES = 0

GUEST_START_TIMEOUT = 120
GUEST_OVS_DPDK_DIR = '/root/ovs_dpdk'
OVS_DPDK_SHARE = '/mnt/ovs_dpdk_share'

# Set the CPU mask for testpmd loopback. To bind to specific guest CPUs use -l
# GUEST_TESTPMD_CPU_MASK = '-l 0,1'
GUEST_TESTPMD_CPU_MASK = '-c 0x3'

# Testpmd multi-core config. Leave at 0's for disabled. Will not enable unless
# GUEST_NIC_QUEUES are > 0. For bi directional traffic NB_CORES must be equal
# to (RXQ + TXQ).
GUEST_TESTPMD_NB_CORES = 0
GUEST_TESTPMD_TXQ = 0
GUEST_TESTPMD_RXQ = 0

# IP addresses to use for Vanilla OVS PVP testing
# Consider using RFC 2544/3330 recommended IP addresses for benchmark testing.
# Network: 198.18.0.0/15
# Netmask: 255.254.0.0
# Broadcast: 198.19.255.255
# First IP: 198.18.0.1
# Last IP: 198.19.255.254
# Hosts: 131070
#

# ARP entries for the IXIA ports and the bridge you are using:
VANILLA_TGEN_PORT1_IP = '1.1.1.10'
VANILLA_TGEN_PORT1_MAC = 'AA:BB:CC:DD:EE:FF'

VANILLA_TGEN_PORT2_IP = '1.1.2.10'
VANILLA_TGEN_PORT2_MAC = 'AA:BB:CC:DD:EE:F0'

VANILLA_BRIDGE_IP = ['1.1.1.5/16', '1.1.1.6/16', \
                     '1.1.1.7/16', '1.1.1.8/16', \
                     '1.1.1.9/16', '1.1.1.10/16']

VANILLA_NIC1_IP_CIDR = ['192.168.1.2/24', '192.168.1.4/24', \
                        '192.168.1.6/24', '192.168.1.8/24', \
                        '192.168.1.10/24', '192.168.1.12/24']
VANILLA_NIC2_IP_CIDR = ['192.168.1.3/24', '192.168.1.5/24', \
                        '192.168.1.7/24', '192.168.1.9/24', \
                        '192.168.1.11/24', '192.168.1.13/24']

VNF_AFFINITIZATION_ON = True