+ pattern = re.compile("^[0-9A-Fa-f]{4}:[0-9A-Fa-f]{2}:"
+ "[0-9A-Fa-f]{2}\\.[0-9A-Fa-f]$")
+ for device in devices:
+ if not pattern.match(device):
+ raise ValueError('PCI address {} to be added to host {} '
+ 'is not in valid format xxxx:xx:xx.x'.
+ format(device, self._hostname))
+ path = ['dpdk', 'dev {0}'.format(device)]
+ self.add_config_item(self._nodeconfig, '', path)
+
+ def add_dpdk_cryptodev(self, count):
+ """Add DPDK Crypto PCI device configuration.
+
+ :param count: Number of HW crypto devices to add.
+ :type count: int
+ """
+ cryptodev = Topology.get_cryptodev(self._node)
+ for i in range(count):
+ cryptodev_config = 'dev {0}'.format(
+ re.sub(r'\d.\d$', '1.'+str(i), cryptodev))
+ path = ['dpdk', cryptodev_config]
+ self.add_config_item(self._nodeconfig, '', path)
+ self.add_dpdk_uio_driver('igb_uio')
+
+ def add_dpdk_sw_cryptodev(self, sw_pmd_type, socket_id, count):
+ """Add DPDK SW Crypto device configuration.
+
+ :param sw_pmd_type: Type of SW crypto device PMD to add.
+ :param socket_id: Socket ID.
+ :param count: Number of SW crypto devices to add.
+ :type sw_pmd_type: str
+ :type socket_id: int
+ :type count: int
+ """
+ for _ in range(count):
+ cryptodev_config = 'vdev cryptodev_{0}_pmd,socket_id={1}'.\
+ format(sw_pmd_type, str(socket_id))
+ path = ['dpdk', cryptodev_config]
+ self.add_config_item(self._nodeconfig, '', path)
+
+ def add_dpdk_dev_default_rxq(self, value):
+ """Add DPDK dev default rxq configuration.
+
+ :param value: Default number of rxqs.
+ :type value: str
+ """
+ path = ['dpdk', 'dev default', 'num-rx-queues']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_dpdk_dev_default_txq(self, value):
+ """Add DPDK dev default txq configuration.
+
+ :param value: Default number of txqs.
+ :type value: str
+ """
+ path = ['dpdk', 'dev default', 'num-tx-queues']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_dpdk_dev_default_rxd(self, value):
+ """Add DPDK dev default rxd configuration.
+
+ :param value: Default number of rxds.
+ :type value: str
+ """
+ path = ['dpdk', 'dev default', 'num-rx-desc']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_dpdk_dev_default_txd(self, value):
+ """Add DPDK dev default txd configuration.
+
+ :param value: Default number of txds.
+ :type value: str
+ """
+ path = ['dpdk', 'dev default', 'num-tx-desc']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_dpdk_socketmem(self, value):
+ """Add DPDK socket memory configuration.
+
+ :param value: Socket memory size.
+ :type value: str
+ """
+ path = ['dpdk', 'socket-mem']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_dpdk_uio_driver(self, value):
+ """Add DPDK uio-driver configuration.
+
+ :param value: DPDK uio-driver configuration.
+ :type value: str
+ """
+ path = ['dpdk', 'uio-driver']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_cpu_main_core(self, value):
+ """Add CPU main core configuration.
+
+ :param value: Main core option.
+ :type value: str
+ """
+ path = ['cpu', 'main-core']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_cpu_corelist_workers(self, value):
+ """Add CPU corelist-workers configuration.
+
+ :param value: Corelist-workers option.
+ :type value: str
+ """
+ path = ['cpu', 'corelist-workers']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_heapsize(self, value):
+ """Add Heapsize configuration.
+
+ :param value: Amount of heapsize.
+ :type value: str
+ """
+ path = ['heapsize']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_api_trace(self):
+ """Add API trace configuration."""
+ path = ['api-trace', 'on']
+ self.add_config_item(self._nodeconfig, '', path)
+
+ def add_ip6_hash_buckets(self, value):
+ """Add IP6 hash buckets configuration.
+
+ :param value: Number of IP6 hash buckets.
+ :type value: str
+ """
+ path = ['ip6', 'hash-buckets']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_ip6_heap_size(self, value):
+ """Add IP6 heap-size configuration.
+
+ :param value: IP6 Heapsize amount.
+ :type value: str
+ """
+ path = ['ip6', 'heap-size']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_ip_heap_size(self, value):
+ """Add IP heap-size configuration.
+
+ :param value: IP Heapsize amount.
+ :type value: str
+ """
+ path = ['ip', 'heap-size']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_plugin_disable(self, *plugins):
+ """Add plugin disable for specific plugin.
+
+ :param plugins: Plugin(s) to disable.
+ :type plugins: list
+ """
+ for plugin in plugins:
+ path = ['plugins', 'plugin {0}'.format(plugin), 'disable']
+ self.add_config_item(self._nodeconfig, ' ', path)
+
+ def add_dpdk_no_multi_seg(self):
+ """Add DPDK no-multi-seg configuration."""
+ path = ['dpdk', 'no-multi-seg']
+ self.add_config_item(self._nodeconfig, '', path)
+
+ def add_nat(self, value='deterministic'):
+ """Add NAT configuration.
+
+ :param value: NAT mode.
+ :type value: str
+ """
+ path = ['nat']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_tcp_preallocated_connections(self, value):
+ """Add TCP pre-allocated connections.
+
+ :param value: The number of pre-allocated connections.
+ :type value: int
+ """
+ path = ['tcp', 'preallocated-connections']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_tcp_preallocated_half_open_connections(self, value):
+ """Add TCP pre-allocated half open connections.
+
+ :param value: The number of pre-allocated half open connections.
+ :type value: int
+ """
+ path = ['tcp', 'preallocated-half-open-connections']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_session_event_queue_length(self, value):
+ """Add session event queue length.
+
+ :param value: Session event queue length.
+ :type value: int
+ """
+ path = ['session', 'event-queue-length']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_session_preallocated_sessions(self, value):
+ """Add the number of pre-allocated sessions.
+
+ :param value: Number of pre-allocated sessions.
+ :type value: int
+ """
+ path = ['session', 'preallocated-sessions']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_session_v4_session_table_buckets(self, value):
+ """Add number of v4 session table buckets to the config.
+
+ :param value: Number of v4 session table buckets.
+ :type value: int
+ """
+ path = ['session', 'v4-session-table-buckets']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_session_v4_session_table_memory(self, value):
+ """Add the size of v4 session table memory.
+
+ :param value: Size of v4 session table memory.
+ :type value: str
+ """
+ path = ['session', 'v4-session-table-memory']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_session_v4_halfopen_table_buckets(self, value):
+ """Add the number of v4 halfopen table buckets.
+
+ :param value: Number of v4 halfopen table buckets.
+ :type value: int
+ """
+ path = ['session', 'v4-halfopen-table-buckets']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_session_v4_halfopen_table_memory(self, value):
+ """Add the size of v4 halfopen table memory.
+
+ :param value: Size of v4 halfopen table memory.
+ :type value: str
+ """
+ path = ['session', 'v4-halfopen-table-memory']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_session_local_endpoints_table_buckets(self, value):
+ """Add the number of local endpoints table buckets.
+
+ :param value: Number of local endpoints table buckets.
+ :type value: int
+ """
+ path = ['session', 'local-endpoints-table-buckets']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_session_local_endpoints_table_memory(self, value):
+ """Add the size of local endpoints table memory.
+
+ :param value: Size of local endpoints table memory.
+ :type value: str
+ """
+ path = ['session', 'local-endpoints-table-memory']
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def apply_config(self, filename=None, waittime=5,
+ retries=12, restart_vpp=True):