:type vnf: str
:type img: str
"""
- self._vhost_id = 0
+ self._nic_id = 0
self._node = node
self._arch = Topology.get_node_arch(self._node)
self._opt = dict()
def add_net_user(self):
"""Set managment port forwarding."""
self._params.add_with_value(
- u"netdev", f"user,id=mgmt,net=192.168.76.0/24,"
+ u"netdev", f"user,id=mgmt,net=172.16.255.0/24,"
f"hostfwd=tcp::{self._vm_info[u'port']}-:22"
)
self._params.add_with_value(
u"serial", f"file:{self._temp.get(u'log')}"
)
- def add_drive_cdrom(self, drive_file):
+ def add_drive_cdrom(self, drive_file, index=None):
"""Set CD-ROM drive.
:param drive_file: Path to drive image.
+ :param index: Drive index.
:type drive_file: str
+ :type index: int
"""
+ index = f"index={index}," if index else u""
self._params.add_with_value(
- u"drive", f"file={drive_file},media=cdrom"
+ u"drive", f"file={drive_file},{index}media=cdrom"
)
def add_drive(self, drive_file, drive_format):
:type csum: bool
:type gso: bool
"""
- self._vhost_id += 1
+ self._nic_id += 1
self._params.add_with_value(
- u"chardev", f"socket,id=char{self._vhost_id},"
+ u"chardev", f"socket,id=char{self._nic_id},"
f"path={socket}{u',server' if server is True else u''}"
)
self._params.add_with_value(
- u"netdev", f"vhost-user,id=vhost{self._vhost_id},"
- f"chardev=char{self._vhost_id},queues={queues}"
+ u"netdev", f"vhost-user,id=vhost{self._nic_id},"
+ f"chardev=char{self._nic_id},queues={queues}"
)
mac = f"52:54:00:00:{self._opt.get(u'qemu_id'):02x}:" \
- f"{self._vhost_id:02x}"
+ f"{self._nic_id:02x}"
queue_size = f"rx_queue_size={queue_size},tx_queue_size={queue_size}" \
if queue_size else u""
self._params.add_with_value(
- u"device", f"virtio-net-pci,netdev=vhost{self._vhost_id},mac={mac},"
- f"addr={self._vhost_id+5}.0,mq=on,vectors={2 * queues + 2},"
+ u"device", f"virtio-net-pci,netdev=vhost{self._nic_id},mac={mac},"
+ f"addr={self._nic_id+5}.0,mq=on,vectors={2 * queues + 2},"
f"csum={u'on' if csum else u'off'},gso={u'on' if gso else u'off'},"
f"guest_tso4=off,guest_tso6=off,guest_ecn=off,"
f"{queue_size}"
# Add interface MAC and socket to the node dict.
if_data = {u"mac_address": mac, u"socket": socket}
- if_name = f"vhost{self._vhost_id}"
+ if_name = f"vhost{self._nic_id}"
self._vm_info[u"interfaces"][if_name] = if_data
# Add socket to temporary file list.
self._temp[if_name] = socket
:param pci: PCI address of interface.
:type pci: str
"""
- self._params.add_with_value(u"device", f"vfio-pci,host={pci}")
+ self._nic_id += 1
+ self._params.add_with_value(
+ u"device", f"vfio-pci,host={pci},addr={self._nic_id+5}.0"
+ )
def create_kernelvm_config_vpp(self, **kwargs):
"""Create QEMU VPP config files.
vpp_config.add_unix_cli_listen()
vpp_config.add_unix_exec(running)
vpp_config.add_socksvr()
+ vpp_config.add_statseg_per_node_counters(value=u"on")
vpp_config.add_buffers_per_numa(107520)
+ vpp_config.add_heapsize(u"1G")
+ vpp_config.add_ip_heap_size(u"1G")
+ vpp_config.add_statseg_size(u"1G")
vpp_config.add_cpu_main_core(u"0")
if self._opt.get(u"smp") > 1:
vpp_config.add_cpu_corelist_workers(f"1-{self._opt.get(u'smp')-1}")
vpp_config.add_plugin(u"disable", u"default")
vpp_config.add_plugin(u"enable", u"ping_plugin.so")
- if "ipsec" in self._opt.get(u'vnf'):
- vpp_config.add_plugin(u"enable", u"crypto_native_plugin.so")
- vpp_config.add_plugin(u"enable", u"crypto_ipsecmb_plugin.so")
- vpp_config.add_plugin(u"enable", u"crypto_openssl_plugin.so")
if "2vfpt" in self._opt.get(u'vnf'):
vpp_config.add_plugin(u"enable", u"avf_plugin.so")
if "vhost" in self._opt.get(u'vnf'):
if not kwargs[u"jumbo_frames"]:
vpp_config.add_dpdk_no_multi_seg()
vpp_config.add_dpdk_no_tx_checksum_offload()
+ if "ipsec" in self._opt.get(u'vnf'):
+ vpp_config.add_plugin(u"enable", u"crypto_native_plugin.so")
+ vpp_config.add_plugin(u"enable", u"crypto_ipsecmb_plugin.so")
+ vpp_config.add_plugin(u"enable", u"crypto_openssl_plugin.so")
+ if "nat" in self._opt.get(u'vnf'):
+ vpp_config.add_nat(value=u"endpoint-dependent")
+ vpp_config.add_nat_max_translations_per_thread(value=655360)
+ vpp_config.add_plugin(u"enable", u"nat_plugin.so")
vpp_config.write_config(startup)
# Create VPP running configuration.
"""
if u"vpp" in self._opt.get(u"vnf"):
self.create_kernelvm_config_vpp(**kwargs)
+ self.create_kernelvm_init(vnf_bin=self._opt.get(u"vnf_bin"))
elif u"testpmd_io" in self._opt.get(u"vnf"):
self.create_kernelvm_config_testpmd_io(**kwargs)
+ self.create_kernelvm_init(vnf_bin=self._opt.get(u"vnf_bin"))
elif u"testpmd_mac" in self._opt.get(u"vnf"):
self.create_kernelvm_config_testpmd_mac(**kwargs)
+ self.create_kernelvm_init(vnf_bin=self._opt.get(u"vnf_bin"))
else:
raise RuntimeError(u"QEMU: Unsupported VNF!")
- self.create_kernelvm_init(vnf_bin=self._opt.get(u"vnf_bin"))
def get_qemu_pids(self):
"""Get QEMU CPU pids.