Blame src/vma/util/sys_vars.h

Packit 6d2c1b
/*
Packit 6d2c1b
 * Copyright (c) 2001-2020 Mellanox Technologies, Ltd. All rights reserved.
Packit 6d2c1b
 *
Packit 6d2c1b
 * This software is available to you under a choice of one of two
Packit 6d2c1b
 * licenses.  You may choose to be licensed under the terms of the GNU
Packit 6d2c1b
 * General Public License (GPL) Version 2, available from the file
Packit 6d2c1b
 * COPYING in the main directory of this source tree, or the
Packit 6d2c1b
 * BSD license below:
Packit 6d2c1b
 *
Packit 6d2c1b
 *     Redistribution and use in source and binary forms, with or
Packit 6d2c1b
 *     without modification, are permitted provided that the following
Packit 6d2c1b
 *     conditions are met:
Packit 6d2c1b
 *
Packit 6d2c1b
 *      - Redistributions of source code must retain the above
Packit 6d2c1b
 *        copyright notice, this list of conditions and the following
Packit 6d2c1b
 *        disclaimer.
Packit 6d2c1b
 *
Packit 6d2c1b
 *      - Redistributions in binary form must reproduce the above
Packit 6d2c1b
 *        copyright notice, this list of conditions and the following
Packit 6d2c1b
 *        disclaimer in the documentation and/or other materials
Packit 6d2c1b
 *        provided with the distribution.
Packit 6d2c1b
 *
Packit 6d2c1b
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Packit 6d2c1b
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Packit 6d2c1b
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Packit 6d2c1b
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
Packit 6d2c1b
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
Packit 6d2c1b
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
Packit 6d2c1b
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Packit 6d2c1b
 * SOFTWARE.
Packit 6d2c1b
 */
Packit 6d2c1b
Packit 6d2c1b
Packit 6d2c1b
#ifndef SYS_VARS_H
Packit 6d2c1b
#define SYS_VARS_H
Packit 6d2c1b
Packit 6d2c1b
#include <stdio.h>
Packit 6d2c1b
#include <sched.h>
Packit 6d2c1b
#include <string>
Packit 6d2c1b
#include <netinet/in.h>
Packit 6d2c1b
Packit 6d2c1b
#include "vtypes.h"
Packit 6d2c1b
#include "config.h"
Packit 6d2c1b
Packit 6d2c1b
#include "vma/ib/base/verbs_extra.h"
Packit 6d2c1b
#include "vma/util/sysctl_reader.h"
Packit 6d2c1b
#include "vma/vma_extra.h"
Packit 6d2c1b
Packit 6d2c1b
typedef enum {
Packit 6d2c1b
	MCE_SPEC_NONE = 0,
Packit 6d2c1b
	MCE_SPEC_SOCKPERF_ULTRA_LATENCY_10,
Packit 6d2c1b
	MCE_SPEC_SOCKPERF_LATENCY_15,
Packit 6d2c1b
	MCE_SPEC_29WEST_LBM_29,
Packit 6d2c1b
	MCE_SPEC_WOMBAT_FH_LBM_554,
Packit 6d2c1b
	MCE_SPEC_MCD_623,
Packit 6d2c1b
	MCE_SPEC_MCD_IRQ_624,
Packit 6d2c1b
	MCE_SPEC_RTI_784,
Packit 6d2c1b
	MCE_SPEC_LL_7750,
Packit 6d2c1b
	MCE_SPEC_LL_MULTI_RING,
Packit 6d2c1b
Packit 6d2c1b
	MCE_VMA__ALL /* last element */
Packit 6d2c1b
} vma_spec_t;
Packit 6d2c1b
Packit 6d2c1b
typedef enum {
Packit 6d2c1b
	ALLOC_TYPE_ANON = 0,
Packit 6d2c1b
	ALLOC_TYPE_CONTIG,
Packit 6d2c1b
	ALLOC_TYPE_HUGEPAGES,
Packit 6d2c1b
	ALLOC_TYPE_LAST_ALLOWED_TO_USE,
Packit 6d2c1b
	ALLOC_TYPE_EXTERNAL, /* not allowed as a global parameter */
Packit 6d2c1b
} alloc_mode_t;
Packit 6d2c1b
Packit 6d2c1b
typedef enum {
Packit 6d2c1b
	TS_CONVERSION_MODE_DISABLE = 0, // TS_CONVERSION_MODE_DISABLE must be the first enum
Packit 6d2c1b
	TS_CONVERSION_MODE_RAW,
Packit 6d2c1b
	TS_CONVERSION_MODE_BEST_POSSIBLE,
Packit 6d2c1b
	TS_CONVERSION_MODE_SYNC,
Packit 6d2c1b
	TS_CONVERSION_MODE_PTP,
Packit 6d2c1b
	TS_CONVERSION_MODE_LAST
Packit 6d2c1b
} ts_conversion_mode_t;
Packit 6d2c1b
Packit 6d2c1b
static inline bool is_ring_logic_valid(ring_logic_t logic)
Packit 6d2c1b
{
Packit 6d2c1b
	switch (logic) {
Packit 6d2c1b
	case RING_LOGIC_PER_INTERFACE:
Packit 6d2c1b
	case RING_LOGIC_PER_IP:
Packit 6d2c1b
	case RING_LOGIC_PER_SOCKET:
Packit 6d2c1b
	case RING_LOGIC_PER_THREAD:
Packit 6d2c1b
	case RING_LOGIC_PER_CORE:
Packit 6d2c1b
	case RING_LOGIC_PER_CORE_ATTACH_THREADS:
Packit 6d2c1b
		return true;
Packit 6d2c1b
	default:
Packit 6d2c1b
		return false;
Packit 6d2c1b
	}
Packit 6d2c1b
}
Packit 6d2c1b
Packit 6d2c1b
static inline const char* ring_logic_str(ring_logic_t logic)
Packit 6d2c1b
{
Packit 6d2c1b
	switch (logic) {
Packit 6d2c1b
	case RING_LOGIC_PER_INTERFACE:		return "(Ring per interface)";
Packit 6d2c1b
	case RING_LOGIC_PER_IP:			return "(Ring per ip)";
Packit 6d2c1b
	case RING_LOGIC_PER_SOCKET:		return "(Ring per socket)";
Packit 6d2c1b
	case RING_LOGIC_PER_THREAD:		return "(Ring per thread)";
Packit 6d2c1b
	case RING_LOGIC_PER_CORE:		return "(Ring per core)";
Packit 6d2c1b
	case RING_LOGIC_PER_CORE_ATTACH_THREADS: return "(Ring per core - attach threads)";
Packit 6d2c1b
	default:				break;
Packit 6d2c1b
	}
Packit 6d2c1b
	return "unsupported";
Packit 6d2c1b
}
Packit 6d2c1b
Packit 6d2c1b
typedef enum {
Packit 6d2c1b
	THREAD_MODE_SINGLE = 0,
Packit 6d2c1b
	THREAD_MODE_MULTI,
Packit 6d2c1b
	THREAD_MODE_MUTEX,
Packit 6d2c1b
	THREAD_MODE_PLENTY,
Packit 6d2c1b
	THREAD_MODE_LAST
Packit 6d2c1b
} thread_mode_t;
Packit 6d2c1b
Packit 6d2c1b
typedef enum {
Packit 6d2c1b
	BUFFER_BATCHING_NONE = 0,
Packit 6d2c1b
	BUFFER_BATCHING_WITH_RECLAIM,
Packit 6d2c1b
	BUFFER_BATCHING_NO_RECLAIM,
Packit 6d2c1b
	BUFFER_BATCHING_LAST,
Packit 6d2c1b
} buffer_batching_mode_t;
Packit 6d2c1b
Packit 6d2c1b
// See ibv_transport_type for general verbs transport types
Packit 6d2c1b
typedef enum {
Packit 6d2c1b
	VMA_TRANSPORT_UNKNOWN	= -1,
Packit 6d2c1b
	VMA_TRANSPORT_IB	= 0,
Packit 6d2c1b
	VMA_TRANSPORT_ETH
Packit 6d2c1b
} transport_type_t;
Packit 6d2c1b
Packit 6d2c1b
static inline const char* priv_vma_transport_type_str(transport_type_t transport_type)
Packit 6d2c1b
{
Packit 6d2c1b
	BULLSEYE_EXCLUDE_BLOCK_START
Packit 6d2c1b
	switch (transport_type) {
Packit 6d2c1b
	case VMA_TRANSPORT_IB: 			return "IB";
Packit 6d2c1b
	case VMA_TRANSPORT_ETH: 		return "ETH";
Packit 6d2c1b
	case VMA_TRANSPORT_UNKNOWN:
Packit 6d2c1b
	default:				break;
Packit 6d2c1b
	}
Packit 6d2c1b
	return "UNKNOWN";
Packit 6d2c1b
	BULLSEYE_EXCLUDE_BLOCK_END
Packit 6d2c1b
}
Packit 6d2c1b
Packit 6d2c1b
typedef enum {
Packit 6d2c1b
	MSS_FOLLOW_MTU = 0
Packit 6d2c1b
} mss_mode_t;
Packit 6d2c1b
Packit 6d2c1b
typedef enum {
Packit 6d2c1b
	MTU_FOLLOW_INTERFACE = 0
Packit 6d2c1b
} mtu_mode_t;
Packit 6d2c1b
Packit 6d2c1b
typedef enum {
Packit 6d2c1b
	CTL_THREAD_DISABLE = 0,
Packit 6d2c1b
	CTL_THREAD_WITH_WAKEUP,
Packit 6d2c1b
	CTL_THREAD_NO_WAKEUP,
Packit 6d2c1b
	CTL_THREAD_LAST
Packit 6d2c1b
} tcp_ctl_thread_t;
Packit 6d2c1b
Packit 6d2c1b
typedef enum {
Packit 6d2c1b
	TCP_TS_OPTION_DISABLE = 0, // TCP_TS_OPTION_DISABLE must be the first enum
Packit 6d2c1b
	TCP_TS_OPTION_ENABLE,
Packit 6d2c1b
	TCP_TS_OPTION_FOLLOW_OS,
Packit 6d2c1b
	TCP_TS_OPTION_LAST
Packit 6d2c1b
} tcp_ts_opt_t;
Packit 6d2c1b
Packit 6d2c1b
static inline const char* ctl_thread_str(tcp_ctl_thread_t logic)
Packit 6d2c1b
{
Packit 6d2c1b
	switch (logic) {
Packit 6d2c1b
	case CTL_THREAD_DISABLE:		return "(Disabled)";
Packit 6d2c1b
	case CTL_THREAD_WITH_WAKEUP:		return "(Enabled - with wakeup)";
Packit 6d2c1b
	case CTL_THREAD_NO_WAKEUP:		return "(Enabled - no wakeup)";
Packit 6d2c1b
	default:				break;
Packit 6d2c1b
	}
Packit 6d2c1b
	return "unsupported";
Packit 6d2c1b
}
Packit 6d2c1b
Packit 6d2c1b
typedef enum {
Packit 6d2c1b
	INTERNAL_THREAD_TCP_TIMER_HANDLING_DEFERRED = 0,
Packit 6d2c1b
	INTERNAL_THREAD_TCP_TIMER_HANDLING_IMMEDIATE
Packit 6d2c1b
} internal_thread_tcp_timer_handling_t;
Packit 6d2c1b
Packit 6d2c1b
static inline const char* internal_thread_tcp_timer_handling_str(internal_thread_tcp_timer_handling_t handling)
Packit 6d2c1b
{
Packit 6d2c1b
	switch (handling) { 
Packit 6d2c1b
	case INTERNAL_THREAD_TCP_TIMER_HANDLING_DEFERRED: return "(deferred)";
Packit 6d2c1b
	case INTERNAL_THREAD_TCP_TIMER_HANDLING_IMMEDIATE: return "(immediate)";
Packit 6d2c1b
	default:					break;
Packit 6d2c1b
	}
Packit 6d2c1b
	return "unsupported";
Packit 6d2c1b
}
Packit 6d2c1b
Packit 6d2c1b
namespace vma_spec {
Packit 6d2c1b
	// convert str to vVMA_spec_t; upon error - returns the given 'def_value'
Packit 6d2c1b
	vma_spec_t from_str(const char* str, vma_spec_t def_value = MCE_SPEC_NONE);
Packit 6d2c1b
Packit 6d2c1b
	// convert int to vVMA_spec_t; upon error - returns the given 'def_value'
Packit 6d2c1b
	vma_spec_t from_int(const int int_spec, vma_spec_t def_value = MCE_SPEC_NONE);
Packit 6d2c1b
Packit 6d2c1b
	const char * to_str(vma_spec_t level);
Packit 6d2c1b
}
Packit 6d2c1b
Packit 6d2c1b
////////////////////////////////////////////////////////////////////////////////
Packit 6d2c1b
class vma_exception_handling
Packit 6d2c1b
{
Packit 6d2c1b
public:
Packit 6d2c1b
Packit 6d2c1b
	static const char *getName() {
Packit 6d2c1b
		return "Exception handling mode";
Packit 6d2c1b
	}
Packit 6d2c1b
Packit 6d2c1b
	static const char *getSysVar() {
Packit 6d2c1b
		return "VMA_EXCEPTION_HANDLING";
Packit 6d2c1b
	}
Packit 6d2c1b
Packit 6d2c1b
	typedef enum {
Packit 6d2c1b
		MODE_FIRST = -3,
Packit 6d2c1b
		MODE_EXIT = -2,
Packit 6d2c1b
		MODE_DEBUG = -1,
Packit 6d2c1b
		MODE_UNOFFLOAD = 0,
Packit 6d2c1b
		MODE_LOG_ERROR,
Packit 6d2c1b
		MODE_RETURN_ERROR,
Packit 6d2c1b
		MODE_ABORT,
Packit 6d2c1b
		MODE_LAST,
Packit 6d2c1b
Packit 6d2c1b
		MODE_DEFAULT = MODE_DEBUG
Packit 6d2c1b
	} mode;
Packit 6d2c1b
Packit 6d2c1b
	const char* to_str()
Packit 6d2c1b
	{
Packit 6d2c1b
		switch (m_mode) {
Packit 6d2c1b
		case MODE_EXIT:         return "(exit on failed startup)";
Packit 6d2c1b
		case MODE_DEBUG:        return "(just log debug message)";
Packit 6d2c1b
		case MODE_UNOFFLOAD:    return "(log debug and un-offload)";
Packit 6d2c1b
		case MODE_LOG_ERROR:    return "(log error and un-offload)";
Packit 6d2c1b
		case MODE_RETURN_ERROR: return "(Log Error and return error)";
Packit 6d2c1b
		case MODE_ABORT:        return "(Log error and Abort!)";
Packit 6d2c1b
		default:				break;
Packit 6d2c1b
		}
Packit 6d2c1b
		return "unsupported";
Packit 6d2c1b
	}
Packit 6d2c1b
Packit 6d2c1b
	bool is_suit_un_offloading() {
Packit 6d2c1b
		return m_mode ==  MODE_UNOFFLOAD || m_mode == MODE_LOG_ERROR;
Packit 6d2c1b
	}
Packit 6d2c1b
Packit 6d2c1b
	vlog_levels_t get_log_severity() {
Packit 6d2c1b
		switch (m_mode) {
Packit 6d2c1b
		case MODE_EXIT:
Packit 6d2c1b
		case MODE_DEBUG:
Packit 6d2c1b
		case MODE_UNOFFLOAD:
Packit 6d2c1b
			return VLOG_DEBUG;
Packit 6d2c1b
		case MODE_LOG_ERROR:
Packit 6d2c1b
		case MODE_RETURN_ERROR:
Packit 6d2c1b
		case MODE_ABORT:
Packit 6d2c1b
		default:
Packit 6d2c1b
			return VLOG_ERROR;
Packit 6d2c1b
		}
Packit 6d2c1b
	}
Packit 6d2c1b
Packit 6d2c1b
	//
Packit 6d2c1b
	// cast constructors and cast operators
Packit 6d2c1b
	//
Packit 6d2c1b
Packit 6d2c1b
	vma_exception_handling(mode _mode = MODE_DEFAULT) : m_mode(_mode) {
Packit 6d2c1b
		if (m_mode >= MODE_LAST || m_mode <= MODE_FIRST)
Packit 6d2c1b
			m_mode = MODE_DEFAULT;
Packit 6d2c1b
	}
Packit 6d2c1b
Packit 6d2c1b
	explicit vma_exception_handling(int _mode) : m_mode((mode)_mode) {
Packit 6d2c1b
		if (m_mode >= MODE_LAST || m_mode <= MODE_FIRST)
Packit 6d2c1b
			m_mode = MODE_DEFAULT;
Packit 6d2c1b
	}
Packit 6d2c1b
Packit 6d2c1b
	operator mode() const {
Packit 6d2c1b
		return m_mode;
Packit 6d2c1b
	}
Packit 6d2c1b
Packit 6d2c1b
private:
Packit 6d2c1b
	mode m_mode;
Packit 6d2c1b
};
Packit 6d2c1b
Packit 6d2c1b
////////////////////////////////////////////////////////////////////////////////
Packit 6d2c1b
struct mce_sys_var {
Packit 6d2c1b
	static mce_sys_var & instance() {
Packit 6d2c1b
		static mce_sys_var the_instance; //singelton
Packit 6d2c1b
		return the_instance;
Packit 6d2c1b
	}
Packit 6d2c1b
Packit 6d2c1b
public:
Packit 6d2c1b
	enum hyper_t {
Packit 6d2c1b
		HYPER_NONE	= 0,
Packit 6d2c1b
		HYPER_XEN,
Packit 6d2c1b
		HYPER_KVM,
Packit 6d2c1b
		HYPER_MSHV,
Packit 6d2c1b
		HYPER_VMWARE
Packit 6d2c1b
	};
Packit 6d2c1b
Packit 6d2c1b
public:
Packit 6d2c1b
	void		get_env_params();
Packit 6d2c1b
Packit 6d2c1b
	char 		*app_name;
Packit 6d2c1b
	char 		app_id[MAX_APP_ID_LENGHT];
Packit 6d2c1b
Packit 6d2c1b
	uint32_t 	mce_spec;
Packit 6d2c1b
	uint32_t 	mce_spec_param1;
Packit 6d2c1b
	uint32_t 	mce_spec_param2;
Packit 6d2c1b
Packit 6d2c1b
	vlog_levels_t 	log_level;
Packit 6d2c1b
	uint32_t	log_details;
Packit 6d2c1b
	char 		log_filename[PATH_MAX];
Packit 6d2c1b
	char		stats_filename[PATH_MAX];
Packit 6d2c1b
	char		stats_shmem_dirname[PATH_MAX];
Packit 6d2c1b
	char 		conf_filename[PATH_MAX];
Packit 6d2c1b
	char		vmad_notify_dir[PATH_MAX];
Packit 6d2c1b
	bool		log_colors;
Packit 6d2c1b
	bool 		handle_sigintr;
Packit 6d2c1b
	bool		handle_segfault;
Packit 6d2c1b
	uint32_t	stats_fd_num_max;
Packit 6d2c1b
Packit 6d2c1b
	ring_logic_t	ring_allocation_logic_tx;
Packit 6d2c1b
	ring_logic_t	ring_allocation_logic_rx;
Packit 6d2c1b
	int		ring_migration_ratio_tx;
Packit 6d2c1b
	int		ring_migration_ratio_rx;
Packit 6d2c1b
	int		ring_limit_per_interface;
Packit 6d2c1b
	int		ring_dev_mem_tx;
Packit 6d2c1b
	int		tcp_max_syn_rate;
Packit 6d2c1b
Packit 6d2c1b
	uint32_t 	tx_num_segs_tcp;
Packit 6d2c1b
	uint32_t 	tx_num_bufs;
Packit 6d2c1b
#ifdef DEFINED_TSO
Packit 6d2c1b
	uint32_t 	tx_buf_size;
Packit 6d2c1b
#endif /* DEFINED_TSO */
Packit 6d2c1b
	uint32_t 	tx_num_wr;
Packit 6d2c1b
	uint32_t	tx_num_wr_to_signal;
Packit 6d2c1b
	uint32_t 	tx_max_inline;
Packit 6d2c1b
	bool 		tx_mc_loopback_default;
Packit 6d2c1b
	bool		tx_nonblocked_eagains;
Packit 6d2c1b
	uint32_t	tx_prefetch_bytes;
Packit 6d2c1b
	uint32_t        tx_bufs_batch_udp;
Packit 6d2c1b
	uint32_t        tx_bufs_batch_tcp;
Packit 6d2c1b
Packit 6d2c1b
	uint32_t 	rx_num_bufs;
Packit 6d2c1b
	uint32_t        rx_bufs_batch;
Packit 6d2c1b
	uint32_t 	rx_num_wr;
Packit 6d2c1b
	uint32_t	rx_num_wr_to_post_recv;
Packit 6d2c1b
	int32_t		rx_poll_num;
Packit 6d2c1b
	int32_t		rx_poll_num_init;
Packit 6d2c1b
	uint32_t 	rx_udp_poll_os_ratio;
Packit 6d2c1b
	ts_conversion_mode_t	hw_ts_conversion_mode;
Packit 6d2c1b
	uint32_t 	rx_poll_yield_loops;
Packit 6d2c1b
	uint32_t 	rx_ready_byte_min_limit;
Packit 6d2c1b
	uint32_t 	rx_prefetch_bytes;
Packit 6d2c1b
	uint32_t 	rx_prefetch_bytes_before_poll;
Packit 6d2c1b
	uint32_t	rx_cq_drain_rate_nsec;	// If enabled this will cause the Rx to drain all wce in CQ before returning to user, 
Packit 6d2c1b
						// Else (Default: Disbaled) it will return when first ready packet is in socket queue
Packit 6d2c1b
	uint32_t	rx_delta_tsc_between_cq_polls;
Packit 6d2c1b
Packit 6d2c1b
	uint32_t	gro_streams_max;
Packit 6d2c1b
Packit 6d2c1b
	bool		tcp_3t_rules;
Packit 6d2c1b
	bool		eth_mc_l2_only_rules;
Packit 6d2c1b
	bool		mc_force_flowtag;
Packit 6d2c1b
Packit 6d2c1b
	int32_t		select_poll_num;
Packit 6d2c1b
	bool		select_poll_os_force;
Packit 6d2c1b
	uint32_t	select_poll_os_ratio;
Packit 6d2c1b
	uint32_t 	select_skip_os_fd_check;
Packit 6d2c1b
	bool            select_handle_cpu_usage_stats;
Packit 6d2c1b
Packit 6d2c1b
	bool		cq_moderation_enable;
Packit 6d2c1b
	uint32_t	cq_moderation_count;
Packit 6d2c1b
	uint32_t	cq_moderation_period_usec;
Packit 6d2c1b
	uint32_t	cq_aim_max_count;
Packit 6d2c1b
	uint32_t	cq_aim_max_period_usec;
Packit 6d2c1b
	uint32_t	cq_aim_interval_msec;
Packit 6d2c1b
	uint32_t	cq_aim_interrupts_rate_per_sec;
Packit 6d2c1b
Packit 6d2c1b
Packit 6d2c1b
	uint32_t	cq_poll_batch_max;
Packit 6d2c1b
	uint32_t	progress_engine_interval_msec;
Packit 6d2c1b
	uint32_t	progress_engine_wce_max;
Packit 6d2c1b
	bool		cq_keep_qp_full;
Packit 6d2c1b
	uint32_t	qp_compensation_level;
Packit 6d2c1b
Packit 6d2c1b
	bool		offloaded_sockets;
Packit 6d2c1b
	uint32_t	timer_resolution_msec;
Packit 6d2c1b
	uint32_t	tcp_timer_resolution_msec;
Packit 6d2c1b
	tcp_ctl_thread_t tcp_ctl_thread;
Packit 6d2c1b
	tcp_ts_opt_t	tcp_ts_opt;
Packit 6d2c1b
	bool		tcp_nodelay;
Packit 6d2c1b
	bool		tcp_quickack;
Packit 6d2c1b
	vma_exception_handling exception_handling;
Packit 6d2c1b
	bool		avoid_sys_calls_on_tcp_fd;
Packit 6d2c1b
	bool		allow_privileged_sock_opt;
Packit 6d2c1b
	uint32_t	wait_after_join_msec;
Packit 6d2c1b
	thread_mode_t	thread_mode;
Packit 6d2c1b
	buffer_batching_mode_t buffer_batching_mode;
Packit 6d2c1b
	alloc_mode_t	mem_alloc_type;
Packit 6d2c1b
	bool		handle_fork;
Packit 6d2c1b
	bool		close_on_dup2;
Packit 6d2c1b
	uint32_t 	mtu;     /* effective MTU. If mtu==0 then auto calculate the MTU */
Packit 6d2c1b
	uint32_t	lwip_cc_algo_mod;
Packit 6d2c1b
	uint32_t 	lwip_mss;
Packit 6d2c1b
	char		internal_thread_cpuset[FILENAME_MAX];
Packit 6d2c1b
	char		internal_thread_affinity_str[FILENAME_MAX];
Packit 6d2c1b
	cpu_set_t	internal_thread_affinity;
Packit 6d2c1b
	bool		internal_thread_arm_cq_enabled;
Packit 6d2c1b
	internal_thread_tcp_timer_handling_t internal_thread_tcp_timer_handling;	
Packit 6d2c1b
	bool 		handle_bf;
Packit 6d2c1b
Packit 6d2c1b
	bool 		enable_ipoib;
Packit 6d2c1b
	bool 		enable_socketxtreme;
Packit 6d2c1b
#ifdef DEFINED_TSO
Packit 6d2c1b
	bool 		enable_tso;
Packit 6d2c1b
#endif /* DEFINED_TSO */
Packit 6d2c1b
	uint32_t	timer_netlink_update_msec;
Packit 6d2c1b
Packit 6d2c1b
	//Neigh parameters
Packit 6d2c1b
	uint32_t 	neigh_uc_arp_quata;
Packit 6d2c1b
	uint32_t	neigh_wait_till_send_arp_msec;
Packit 6d2c1b
	uint32_t	neigh_num_err_retries;
Packit 6d2c1b
Packit 6d2c1b
	uint32_t 	vma_time_measure_num_samples;
Packit 6d2c1b
	char 		vma_time_measure_filename[PATH_MAX];
Packit 6d2c1b
	sysctl_reader_t & sysctl_reader;
Packit 6d2c1b
	bool		rx_poll_on_tx_tcp;
Packit 6d2c1b
	hyper_t		hypervisor;
Packit 6d2c1b
	bool		trigger_dummy_send_getsockname;
Packit 6d2c1b
private:
Packit 6d2c1b
	void print_vma_load_failure_msg();
Packit 6d2c1b
	int list_to_cpuset(char *cpulist, cpu_set_t *cpu_set);
Packit 6d2c1b
	int hex_to_cpuset(char *start, cpu_set_t *cpu_set);
Packit 6d2c1b
	int env_to_cpuset(char *orig_start, cpu_set_t *cpu_set);
Packit 6d2c1b
	void read_env_variable_with_pid(char* mce_sys_name, size_t mce_sys_max_size, char* env_ptr);
Packit 6d2c1b
	bool check_cpuinfo_flag(const char* flag);
Packit 6d2c1b
	bool cpuid_hv();
Packit 6d2c1b
	const char* cpuid_hv_vendor();
Packit 6d2c1b
	void read_hv();
Packit 6d2c1b
Packit 6d2c1b
	// prevent unautothrized creation of objects
Packit 6d2c1b
	mce_sys_var () : sysctl_reader(sysctl_reader_t::instance()){
Packit 6d2c1b
		// coverity[uninit_member]
Packit 6d2c1b
		get_env_params();
Packit 6d2c1b
	}
Packit 6d2c1b
	mce_sys_var (const mce_sys_var &);
Packit 6d2c1b
	mce_sys_var & operator= (const mce_sys_var &);
Packit 6d2c1b
Packit 6d2c1b
Packit 6d2c1b
};
Packit 6d2c1b
 
Packit 6d2c1b
extern mce_sys_var & safe_mce_sys();
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_LOG_LEVEL				"VMA_TRACELEVEL"
Packit 6d2c1b
#define SYS_VAR_LOG_DETAILS				"VMA_LOG_DETAILS"
Packit 6d2c1b
#define SYS_VAR_LOG_FILENAME				"VMA_LOG_FILE"
Packit 6d2c1b
#define SYS_VAR_STATS_FILENAME				"VMA_STATS_FILE"
Packit 6d2c1b
#define SYS_VAR_VMAD_DIR				"VMA_VMAD_NOTIFY_DIR"
Packit 6d2c1b
#define SYS_VAR_STATS_SHMEM_DIRNAME			"VMA_STATS_SHMEM_DIR"
Packit 6d2c1b
#define SYS_VAR_CONF_FILENAME				"VMA_CONFIG_FILE"
Packit 6d2c1b
#define SYS_VAR_LOG_COLORS				"VMA_LOG_COLORS"
Packit 6d2c1b
#define SYS_VAR_APPLICATION_ID				"VMA_APPLICATION_ID"
Packit 6d2c1b
#define SYS_VAR_HANDLE_SIGINTR				"VMA_HANDLE_SIGINTR"
Packit 6d2c1b
#define SYS_VAR_HANDLE_SIGSEGV				"VMA_HANDLE_SIGSEGV"
Packit 6d2c1b
#define SYS_VAR_STATS_FD_NUM				"VMA_STATS_FD_NUM"
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_RING_ALLOCATION_LOGIC_TX                "VMA_RING_ALLOCATION_LOGIC_TX"
Packit 6d2c1b
#define SYS_VAR_RING_ALLOCATION_LOGIC_RX                "VMA_RING_ALLOCATION_LOGIC_RX"
Packit 6d2c1b
#define SYS_VAR_RING_MIGRATION_RATIO_TX                 "VMA_RING_MIGRATION_RATIO_TX"
Packit 6d2c1b
#define SYS_VAR_RING_MIGRATION_RATIO_RX                 "VMA_RING_MIGRATION_RATIO_RX"
Packit 6d2c1b
#define SYS_VAR_RING_LIMIT_PER_INTERFACE                "VMA_RING_LIMIT_PER_INTERFACE"
Packit 6d2c1b
#define SYS_VAR_RING_DEV_MEM_TX                         "VMA_RING_DEV_MEM_TX"
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_TX_NUM_SEGS_TCP				"VMA_TX_SEGS_TCP"
Packit 6d2c1b
#define SYS_VAR_TX_NUM_BUFS				"VMA_TX_BUFS"
Packit 6d2c1b
#ifdef DEFINED_TSO
Packit 6d2c1b
#define SYS_VAR_TX_BUF_SIZE				"VMA_TX_BUF_SIZE"
Packit 6d2c1b
#endif /* DEFINED_TSO */
Packit 6d2c1b
#define SYS_VAR_TX_NUM_WRE				"VMA_TX_WRE"
Packit 6d2c1b
#define SYS_VAR_TX_NUM_WRE_TO_SIGNAL			"VMA_TX_WRE_BATCHING"
Packit 6d2c1b
#define SYS_VAR_TX_MAX_INLINE				"VMA_TX_MAX_INLINE"
Packit 6d2c1b
#define SYS_VAR_TX_MC_LOOPBACK				"VMA_TX_MC_LOOPBACK"
Packit 6d2c1b
#define SYS_VAR_TX_NONBLOCKED_EAGAINS			"VMA_TX_NONBLOCKED_EAGAINS"
Packit 6d2c1b
#define SYS_VAR_TX_PREFETCH_BYTES			"VMA_TX_PREFETCH_BYTES"
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_RX_NUM_BUFS				"VMA_RX_BUFS"
Packit 6d2c1b
#define SYS_VAR_RX_NUM_WRE				"VMA_RX_WRE"
Packit 6d2c1b
#define SYS_VAR_RX_NUM_WRE_TO_POST_RECV			"VMA_RX_WRE_BATCHING"
Packit 6d2c1b
#define SYS_VAR_RX_NUM_POLLS				"VMA_RX_POLL"
Packit 6d2c1b
#define SYS_VAR_RX_NUM_POLLS_INIT			"VMA_RX_POLL_INIT"
Packit 6d2c1b
#define SYS_VAR_RX_UDP_POLL_OS_RATIO			"VMA_RX_UDP_POLL_OS_RATIO"
Packit 6d2c1b
#define SYS_VAR_HW_TS_CONVERSION_MODE			"VMA_HW_TS_CONVERSION"
Packit 6d2c1b
// The following 2 params were replaced by VMA_RX_UDP_POLL_OS_RATIO
Packit 6d2c1b
#define SYS_VAR_RX_POLL_OS_RATIO			"VMA_RX_POLL_OS_RATIO"
Packit 6d2c1b
#define SYS_VAR_RX_SKIP_OS				"VMA_RX_SKIP_OS"
Packit 6d2c1b
#define SYS_VAR_RX_POLL_YIELD				"VMA_RX_POLL_YIELD"
Packit 6d2c1b
#define SYS_VAR_RX_BYTE_MIN_LIMIT			"VMA_RX_BYTES_MIN"
Packit 6d2c1b
#define SYS_VAR_RX_PREFETCH_BYTES			"VMA_RX_PREFETCH_BYTES"
Packit 6d2c1b
#define SYS_VAR_RX_PREFETCH_BYTES_BEFORE_POLL		"VMA_RX_PREFETCH_BYTES_BEFORE_POLL"
Packit 6d2c1b
#define SYS_VAR_RX_CQ_DRAIN_RATE_NSEC			"VMA_RX_CQ_DRAIN_RATE_NSEC"
Packit 6d2c1b
#define SYS_VAR_GRO_STREAMS_MAX				"VMA_GRO_STREAMS_MAX"
Packit 6d2c1b
#define SYS_VAR_TCP_3T_RULES				"VMA_TCP_3T_RULES"
Packit 6d2c1b
#define SYS_VAR_ETH_MC_L2_ONLY_RULES			"VMA_ETH_MC_L2_ONLY_RULES"
Packit 6d2c1b
#define SYS_VAR_MC_FORCE_FLOWTAG			"VMA_MC_FORCE_FLOWTAG"
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_SELECT_CPU_USAGE_STATS			"VMA_CPU_USAGE_STATS"
Packit 6d2c1b
#define SYS_VAR_SELECT_NUM_POLLS			"VMA_SELECT_POLL"
Packit 6d2c1b
#define SYS_VAR_SELECT_POLL_OS_FORCE			"VMA_SELECT_POLL_OS_FORCE"
Packit 6d2c1b
#define SYS_VAR_SELECT_POLL_OS_RATIO			"VMA_SELECT_POLL_OS_RATIO"
Packit 6d2c1b
#define SYS_VAR_SELECT_SKIP_OS				"VMA_SELECT_SKIP_OS"
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_CQ_MODERATION_ENABLE			"VMA_CQ_MODERATION_ENABLE"
Packit 6d2c1b
#define SYS_VAR_CQ_MODERATION_COUNT			"VMA_CQ_MODERATION_COUNT"
Packit 6d2c1b
#define SYS_VAR_CQ_MODERATION_PERIOD_USEC		"VMA_CQ_MODERATION_PERIOD_USEC"
Packit 6d2c1b
#define SYS_VAR_CQ_AIM_MAX_COUNT			"VMA_CQ_AIM_MAX_COUNT"
Packit 6d2c1b
#define SYS_VAR_CQ_AIM_MAX_PERIOD_USEC			"VMA_CQ_AIM_MAX_PERIOD_USEC"
Packit 6d2c1b
#define SYS_VAR_CQ_AIM_INTERVAL_MSEC			"VMA_CQ_AIM_INTERVAL_MSEC"
Packit 6d2c1b
#define SYS_VAR_CQ_AIM_INTERRUPTS_RATE_PER_SEC		"VMA_CQ_AIM_INTERRUPTS_RATE_PER_SEC"
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_CQ_POLL_BATCH_MAX			"VMA_CQ_POLL_BATCH_MAX"
Packit 6d2c1b
#define SYS_VAR_PROGRESS_ENGINE_INTERVAL		"VMA_PROGRESS_ENGINE_INTERVAL"
Packit 6d2c1b
#define SYS_VAR_PROGRESS_ENGINE_WCE_MAX			"VMA_PROGRESS_ENGINE_WCE_MAX"
Packit 6d2c1b
#define SYS_VAR_CQ_KEEP_QP_FULL				"VMA_CQ_KEEP_QP_FULL"
Packit 6d2c1b
#define SYS_VAR_QP_COMPENSATION_LEVEL			"VMA_QP_COMPENSATION_LEVEL"
Packit 6d2c1b
#define SYS_VAR_OFFLOADED_SOCKETS			"VMA_OFFLOADED_SOCKETS"
Packit 6d2c1b
#define SYS_VAR_TIMER_RESOLUTION_MSEC			"VMA_TIMER_RESOLUTION_MSEC"
Packit 6d2c1b
#define SYS_VAR_TCP_TIMER_RESOLUTION_MSEC		"VMA_TCP_TIMER_RESOLUTION_MSEC"
Packit 6d2c1b
#define SYS_VAR_TCP_CTL_THREAD				"VMA_TCP_CTL_THREAD"
Packit 6d2c1b
#define SYS_VAR_TCP_TIMESTAMP_OPTION			"VMA_TCP_TIMESTAMP_OPTION"
Packit 6d2c1b
#define SYS_VAR_TCP_NODELAY				"VMA_TCP_NODELAY"
Packit 6d2c1b
#define SYS_VAR_TCP_QUICKACK				"VMA_TCP_QUICKACK"
Packit 6d2c1b
#define SYS_VAR_VMA_EXCEPTION_HANDLING			(vma_exception_handling::getSysVar())
Packit 6d2c1b
#define SYS_VAR_AVOID_SYS_CALLS_ON_TCP_FD		"VMA_AVOID_SYS_CALLS_ON_TCP_FD"
Packit 6d2c1b
#define SYS_VAR_ALLOW_PRIVILEGED_SOCK_OPT		"VMA_ALLOW_PRIVILEGED_SOCK_OPT"
Packit 6d2c1b
#define SYS_VAR_WAIT_AFTER_JOIN_MSEC			"VMA_WAIT_AFTER_JOIN_MSEC"
Packit 6d2c1b
#define SYS_VAR_THREAD_MODE				"VMA_THREAD_MODE"
Packit 6d2c1b
#define SYS_VAR_BUFFER_BATCHING_MODE			"VMA_BUFFER_BATCHING_MODE"
Packit 6d2c1b
#define SYS_VAR_HUGETBL					"VMA_HUGETBL"
Packit 6d2c1b
#define SYS_VAR_MEM_ALLOC_TYPE				"VMA_MEM_ALLOC_TYPE"
Packit 6d2c1b
#define SYS_VAR_FORK					"VMA_FORK"
Packit 6d2c1b
#define SYS_VAR_BF					"VMA_BF"
Packit 6d2c1b
#define SYS_VAR_CLOSE_ON_DUP2				"VMA_CLOSE_ON_DUP2"
Packit 6d2c1b
#define SYS_VAR_MTU					"VMA_MTU"
Packit 6d2c1b
#define SYS_VAR_TCP_MAX_SYN_RATE			"VMA_TCP_MAX_SYN_RATE"
Packit 6d2c1b
#define SYS_VAR_MSS					"VMA_MSS"
Packit 6d2c1b
#define SYS_VAR_TCP_CC_ALGO				"VMA_TCP_CC_ALGO"
Packit 6d2c1b
#define SYS_VAR_SPEC					"VMA_SPEC"
Packit 6d2c1b
#define SYS_VAR_SPEC_PARAM1				"VMA_SPEC_PARAM1"
Packit 6d2c1b
#define SYS_VAR_SPEC_PARAM2				"VMA_SPEC_PARAM2"
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_IPOIB					"VMA_IPOIB"
Packit 6d2c1b
#define SYS_VAR_SOCKETXTREME				"VMA_SOCKETXTREME"
Packit 6d2c1b
#ifdef DEFINED_TSO
Packit 6d2c1b
#define SYS_VAR_TSO					"VMA_TSO"
Packit 6d2c1b
#endif /* DEFINED_TSO */
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_INTERNAL_THREAD_AFFINITY		"VMA_INTERNAL_THREAD_AFFINITY"
Packit 6d2c1b
#define SYS_VAR_INTERNAL_THREAD_CPUSET			"VMA_INTERNAL_THREAD_CPUSET"
Packit 6d2c1b
#define SYS_VAR_INTERNAL_THREAD_ARM_CQ			"VMA_INTERNAL_THREAD_ARM_CQ"
Packit 6d2c1b
#define SYS_VAR_INTERNAL_THREAD_TCP_TIMER_HANDLING	"VMA_INTERNAL_THREAD_TCP_TIMER_HANDLING"
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_NETLINK_TIMER_MSEC			"VMA_NETLINK_TIMER"
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_NEIGH_UC_ARP_QUATA			"VMA_NEIGH_UC_ARP_QUATA"
Packit 6d2c1b
#define SYS_VAR_NEIGH_UC_ARP_DELAY_MSEC			"VMA_NEIGH_UC_ARP_DELAY_MSEC"
Packit 6d2c1b
#define SYS_VAR_NEIGH_NUM_ERR_RETRIES			"VMA_NEIGH_NUM_ERR_RETRIES"
Packit 6d2c1b
Packit 6d2c1b
#define SYS_VAR_VMA_TIME_MEASURE_NUM_SAMPLES		"VMA_TIME_MEASURE_NUM_SAMPLES"
Packit 6d2c1b
#define SYS_VAR_VMA_TIME_MEASURE_DUMP_FILE		"VMA_TIME_MEASURE_DUMP_FILE"
Packit 6d2c1b
#define SYS_VAR_VMA_RX_POLL_ON_TX_TCP			"VMA_RX_POLL_ON_TX_TCP"
Packit 6d2c1b
#define SYS_VAR_VMA_TRIGGER_DUMMY_SEND_GETSOCKNAME	"VMA_TRIGGER_DUMMY_SEND_GETSOCKNAME"
Packit 6d2c1b
Packit 6d2c1b
#define MCE_DEFAULT_LOG_FILE				("")
Packit 6d2c1b
#define MCE_DEFAULT_CONF_FILE				("/etc/libvma.conf")
Packit 6d2c1b
#define MCE_DEFAULT_STATS_FILE				("")
Packit 6d2c1b
#define MCE_DEFAULT_VMAD_FOLDER			(VMA_AGENT_PATH)
Packit 6d2c1b
#define MCE_DEFAULT_STATS_SHMEM_DIR			("/tmp/")
Packit 6d2c1b
#define MCE_DEFAULT_LOG_DETAILS				(0)
Packit 6d2c1b
#define MCE_DEFAULT_LOG_COLORS				(true)
Packit 6d2c1b
#define MCE_DEFAULT_APP_ID				("VMA_DEFAULT_APPLICATION_ID")
Packit 6d2c1b
#define MCE_DEFAULT_HANDLE_SIGINTR			(false)
Packit 6d2c1b
#define MCE_DEFAULT_HANDLE_SIGFAULT			(false)
Packit 6d2c1b
#define MCE_DEFAULT_STATS_FD_NUM			100
Packit 6d2c1b
#define MCE_DEFAULT_RING_ALLOCATION_LOGIC_TX            (RING_LOGIC_PER_INTERFACE)
Packit 6d2c1b
#define MCE_DEFAULT_RING_ALLOCATION_LOGIC_RX            (RING_LOGIC_PER_INTERFACE)
Packit 6d2c1b
#define MCE_DEFAULT_RING_MIGRATION_RATIO_TX             (100)
Packit 6d2c1b
#define MCE_DEFAULT_RING_MIGRATION_RATIO_RX             (100)
Packit 6d2c1b
#define MCE_DEFAULT_RING_LIMIT_PER_INTERFACE            (0)
Packit 6d2c1b
#define MCE_DEFAULT_RING_DEV_MEM_TX                     (0)
Packit 6d2c1b
#define MCE_DEFAULT_TCP_MAX_SYN_RATE                	(0)
Packit 6d2c1b
#define MCE_DEFAULT_TX_NUM_SEGS_TCP			(1000000)
Packit 6d2c1b
#define MCE_DEFAULT_TX_NUM_BUFS				(200000)
Packit 6d2c1b
#ifdef DEFINED_TSO
Packit 6d2c1b
#define MCE_DEFAULT_TX_BUF_SIZE				(0)
Packit 6d2c1b
#endif /* DEFINED_TSO */
Packit 6d2c1b
#define MCE_DEFAULT_TX_NUM_WRE				(2048)
Packit 6d2c1b
#define MCE_DEFAULT_TX_NUM_WRE_TO_SIGNAL		(64)
Packit 6d2c1b
#define MCE_DEFAULT_TX_MAX_INLINE			(204) //+18(always inline ETH header) = 222
Packit 6d2c1b
#define MCE_DEFAULT_TX_BUILD_IP_CHKSUM			(true)
Packit 6d2c1b
#define MCE_DEFAULT_TX_MC_LOOPBACK			(true)
Packit 6d2c1b
#define MCE_DEFAULT_TX_NONBLOCKED_EAGAINS		(false)
Packit 6d2c1b
#define MCE_DEFAULT_TX_PREFETCH_BYTES			(256)
Packit 6d2c1b
#define MCE_DEFAULT_TX_BUFS_BATCH_UDP			(8)
Packit 6d2c1b
#define MCE_DEFAULT_TX_BUFS_BATCH_TCP			(16)
Packit 6d2c1b
#define MCE_DEFAULT_TX_NUM_SGE				(2)
Packit 6d2c1b
#define MCE_DEFAULT_RX_NUM_BUFS				(200000)
Packit 6d2c1b
#define MCE_DEFAULT_RX_BUFS_BATCH			(64)
Packit 6d2c1b
#define MCE_DEFAULT_RX_NUM_WRE				(16000)
Packit 6d2c1b
#define MCE_DEFAULT_RX_NUM_WRE_TO_POST_RECV		(64)
Packit 6d2c1b
#define MCE_DEFAULT_RX_NUM_SGE				(1)
Packit 6d2c1b
#define MCE_DEFAULT_RX_NUM_POLLS			(100000)
Packit 6d2c1b
#define MCE_DEFAULT_RX_NUM_POLLS_INIT			(0)
Packit 6d2c1b
#define MCE_DEFAULT_RX_UDP_POLL_OS_RATIO		(100)
Packit 6d2c1b
#define MCE_DEFAULT_HW_TS_CONVERSION_MODE		(TS_CONVERSION_MODE_SYNC)
Packit 6d2c1b
#define MCE_DEFAULT_RX_POLL_YIELD			(0)
Packit 6d2c1b
#define MCE_DEFAULT_RX_BYTE_MIN_LIMIT			(65536)
Packit 6d2c1b
#define MCE_DEFAULT_RX_PREFETCH_BYTES			(256)
Packit 6d2c1b
#define MCE_DEFAULT_RX_PREFETCH_BYTES_BEFORE_POLL	(0)
Packit 6d2c1b
#define MCE_DEFAULT_RX_CQ_DRAIN_RATE			(MCE_RX_CQ_DRAIN_RATE_DISABLED)
Packit 6d2c1b
#define MCE_DEFAULT_GRO_STREAMS_MAX			(32)
Packit 6d2c1b
#define MCE_DEFAULT_TCP_3T_RULES			(false)
Packit 6d2c1b
#define MCE_DEFAULT_ETH_MC_L2_ONLY_RULES		(false)
Packit 6d2c1b
#define MCE_DEFAULT_MC_FORCE_FLOWTAG			(false)
Packit 6d2c1b
#define MCE_DEFAULT_SELECT_NUM_POLLS			(100000)
Packit 6d2c1b
#define MCE_DEFAULT_SELECT_POLL_OS_FORCE		(0)
Packit 6d2c1b
#define MCE_DEFAULT_SELECT_POLL_OS_RATIO		(10)
Packit 6d2c1b
#define MCE_DEFAULT_SELECT_SKIP_OS			(4)
Packit 6d2c1b
#define MCE_DEFAULT_SELECT_CPU_USAGE_STATS		(false)
Packit 6d2c1b
Packit 6d2c1b
#ifdef DEFINED_IBV_CQ_ATTR_MODERATE
Packit 6d2c1b
#define MCE_DEFAULT_CQ_MODERATION_ENABLE               (true)
Packit 6d2c1b
#else
Packit 6d2c1b
#define MCE_DEFAULT_CQ_MODERATION_ENABLE               (false)
Packit 6d2c1b
#endif
Packit 6d2c1b
Packit 6d2c1b
#define MCE_DEFAULT_CQ_MODERATION_COUNT			(48)
Packit 6d2c1b
#define MCE_DEFAULT_CQ_MODERATION_PERIOD_USEC		(50)
Packit 6d2c1b
#define MCE_DEFAULT_CQ_AIM_MAX_COUNT			(560)
Packit 6d2c1b
#define MCE_DEFAULT_CQ_AIM_MAX_PERIOD_USEC		(250)
Packit 6d2c1b
#define MCE_DEFAULT_CQ_AIM_INTERVAL_MSEC		(250)
Packit 6d2c1b
#define MCE_DEFAULT_CQ_AIM_INTERRUPTS_RATE_PER_SEC	(5000)
Packit 6d2c1b
#define MCE_DEFAULT_CQ_POLL_BATCH			(16)
Packit 6d2c1b
#define MCE_DEFAULT_PROGRESS_ENGINE_INTERVAL_MSEC	(10)
Packit 6d2c1b
#define MCE_DEFAULT_PROGRESS_ENGINE_WCE_MAX		(10000)
Packit 6d2c1b
#define MCE_DEFAULT_CQ_KEEP_QP_FULL			(true)
Packit 6d2c1b
#define MCE_DEFAULT_QP_COMPENSATION_LEVEL		(256)
Packit 6d2c1b
#define MCE_DEFAULT_INTERNAL_THREAD_ARM_CQ_ENABLED	(false)
Packit 6d2c1b
#define MCE_DEFAULT_QP_FORCE_MC_ATTACH			(false)
Packit 6d2c1b
#define MCE_DEFAULT_OFFLOADED_SOCKETS			(true)
Packit 6d2c1b
#define MCE_DEFAULT_TIMER_RESOLUTION_MSEC		(10)
Packit 6d2c1b
#define MCE_DEFAULT_TCP_TIMER_RESOLUTION_MSEC		(100)
Packit 6d2c1b
#define MCE_DEFAULT_TCP_CTL_THREAD			(CTL_THREAD_DISABLE)
Packit 6d2c1b
#define MCE_DEFAULT_TCP_TIMESTAMP_OPTION		(TCP_TS_OPTION_DISABLE)
Packit 6d2c1b
#define MCE_DEFAULT_TCP_NODELAY 			(false)
Packit 6d2c1b
#define MCE_DEFAULT_TCP_QUICKACK			(false)
Packit 6d2c1b
#define MCE_DEFAULT_VMA_EXCEPTION_HANDLING	(vma_exception_handling::MODE_DEFAULT)
Packit 6d2c1b
#define MCE_DEFAULT_AVOID_SYS_CALLS_ON_TCP_FD		(false)
Packit 6d2c1b
#define MCE_DEFAULT_ALLOW_PRIVILEGED_SOCK_OPT		(true)
Packit 6d2c1b
#define MCE_DEFAULT_WAIT_AFTER_JOIN_MSEC		(0)
Packit 6d2c1b
#define MCE_DEFAULT_THREAD_MODE				(THREAD_MODE_MULTI)
Packit 6d2c1b
#define MCE_DEFAULT_BUFFER_BATCHING_MODE		(BUFFER_BATCHING_WITH_RECLAIM)
Packit 6d2c1b
#ifndef VMA_IBV_ACCESS_ALLOCATE_MR
Packit 6d2c1b
#define MCE_DEFAULT_MEM_ALLOC_TYPE			(ALLOC_TYPE_HUGEPAGES)
Packit 6d2c1b
#else
Packit 6d2c1b
#define MCE_DEFAULT_MEM_ALLOC_TYPE			(ALLOC_TYPE_CONTIG)
Packit 6d2c1b
#endif
Packit 6d2c1b
#define MCE_DEFAULT_FORK_SUPPORT			(true)
Packit 6d2c1b
#define MCE_DEFAULT_BF_FLAG				(true)
Packit 6d2c1b
#define MCE_DEFAULT_CLOSE_ON_DUP2			(true)
Packit 6d2c1b
#define MCE_DEFAULT_MTU					(0)
Packit 6d2c1b
#define MCE_DEFAULT_MSS					(0)
Packit 6d2c1b
#define MCE_DEFAULT_LWIP_CC_ALGO_MOD			(0)
Packit 6d2c1b
#define MCE_DEFAULT_INTERNAL_THREAD_AFFINITY		(-1)
Packit 6d2c1b
#define MCE_DEFAULT_INTERNAL_THREAD_AFFINITY_STR	("-1")
Packit 6d2c1b
#define MCE_DEFAULT_INTERNAL_THREAD_CPUSET		("")
Packit 6d2c1b
#define MCE_DEFAULT_INTERNAL_THREAD_TCP_TIMER_HANDLING	(INTERNAL_THREAD_TCP_TIMER_HANDLING_DEFERRED)
Packit 6d2c1b
#define MCE_DEFAULT_NETLINK_TIMER_MSEC			(10000)
Packit 6d2c1b
Packit 6d2c1b
#define MCE_DEFAULT_NEIGH_UC_ARP_QUATA			3
Packit 6d2c1b
#define MCE_DEFAULT_NEIGH_UC_ARP_DELAY_MSEC		10000
Packit 6d2c1b
#define MCE_DEFAULT_NEIGH_NUM_ERR_RETRIES		1
Packit 6d2c1b
Packit 6d2c1b
#define MCE_DEFAULT_TIME_MEASURE_NUM_SAMPLES		(10000)
Packit 6d2c1b
#define MCE_DEFAULT_TIME_MEASURE_DUMP_FILE		"/tmp/VMA_inst.dump"
Packit 6d2c1b
Packit 6d2c1b
#define MCE_MIN_NUM_SGE					(1)
Packit 6d2c1b
#define MCE_MAX_NUM_SGE					(32)
Packit 6d2c1b
#define MCE_MIN_RX_NUM_POLLS				(-1)
Packit 6d2c1b
#define MCE_MAX_RX_NUM_POLLS				(100000000)
Packit 6d2c1b
#define MCE_MIN_RX_PREFETCH_BYTES			(32) /* Just enough for headers (IPoIB+IP+UDP)*/
Packit 6d2c1b
#define MCE_MAX_RX_PREFETCH_BYTES			(2044)
Packit 6d2c1b
#define MCE_RX_CQ_DRAIN_RATE_DISABLED			(0)
Packit 6d2c1b
#define MCE_CQ_DRAIN_INTERVAL_DISABLED			(0)
Packit 6d2c1b
#define MCE_CQ_ADAPTIVE_MODERATION_DISABLED		(0)
Packit 6d2c1b
#define MCE_MIN_CQ_POLL_BATCH				(1)
Packit 6d2c1b
#define MCE_MAX_CQ_POLL_BATCH				(128)
Packit 6d2c1b
#define MCE_DEFAULT_IPOIB_FLAG				(1)
Packit 6d2c1b
#define MCE_DEFAULT_SOCKETXTREME			(false)
Packit 6d2c1b
#ifdef DEFINED_TSO
Packit 6d2c1b
#define MCE_DEFAULT_TSO					(true)
Packit 6d2c1b
#endif /* DEFINED_TSO */
Packit 6d2c1b
#define MCE_DEFAULT_RX_POLL_ON_TX_TCP			(false)
Packit 6d2c1b
#define MCE_DEFAULT_TRIGGER_DUMMY_SEND_GETSOCKNAME	(false)
Packit 6d2c1b
Packit 6d2c1b
#define MCE_ALIGNMENT					((unsigned long)63)
Packit 6d2c1b
#define RX_BUF_SIZE(mtu)				((mtu) + IPOIB_HDR_LEN + GRH_HDR_LEN) // RX buffers are larger in IB
Packit 6d2c1b
#define TX_BUF_SIZE(mtu)				((mtu) + 92) // Tx buffers are larger in Ethernet (they include L2 for RAW QP)
Packit 6d2c1b
#define NUM_TX_WRE_TO_SIGNAL_MAX			64
Packit 6d2c1b
#define NUM_RX_WRE_TO_POST_RECV_MAX			1024
Packit 6d2c1b
#define TCP_MAX_SYN_RATE_TOP_LIMIT			100000
Packit 6d2c1b
#define DEFAULT_MC_TTL					64
Packit 6d2c1b
#define IFTYPE_PARAM_FILE				"/sys/class/net/%s/type"
Packit 6d2c1b
#define IFADDR_MTU_PARAM_FILE				"/sys/class/net/%s/mtu"
Packit 6d2c1b
#define UMCAST_PARAM_FILE				"/sys/class/net/%s/umcast"
Packit 6d2c1b
#define IPOIB_MODE_PARAM_FILE				"/sys/class/net/%s/mode"
Packit 6d2c1b
#define VERBS_DEVICE_PORT_PARAM_FILE			"/sys/class/net/%s/dev_port"
Packit 6d2c1b
#define VERBS_DEVICE_ID_PARAM_FILE			"/sys/class/net/%s/dev_id"
Packit 6d2c1b
#define BONDING_MODE_PARAM_FILE				"/sys/class/net/%s/bonding/mode"
Packit 6d2c1b
#define BONDING_SLAVES_PARAM_FILE			"/sys/class/net/%s/bonding/slaves"
Packit 6d2c1b
#define BONDING_ACTIVE_SLAVE_PARAM_FILE			"/sys/class/net/%s/bonding/active_slave"
Packit 6d2c1b
#define BONDING_FAILOVER_MAC_PARAM_FILE			"/sys/class/net/%s/bonding/fail_over_mac"
Packit 6d2c1b
#define BONDING_XMIT_HASH_POLICY_PARAM_FILE		"/sys/class/net/%s/bonding/xmit_hash_policy"
Packit 6d2c1b
#define BONDING_ROCE_LAG_FILE				"/sys/class/net/%s/device/roce_lag_enable"
Packit 6d2c1b
/* BONDING_SLAVE_STATE_PARAM_FILE is for kernel  > 3.14 or RH7.2 and higher */
Packit 6d2c1b
#define BONDING_SLAVE_STATE_PARAM_FILE			"/sys/class/net/%s/bonding_slave/state"
Packit 6d2c1b
#define L2_ADDR_FILE_FMT                                "/sys/class/net/%.*s/address"
Packit 6d2c1b
#define L2_BR_ADDR_FILE_FMT                                   "/sys/class/net/%.*s/broadcast"
Packit 6d2c1b
#define OPER_STATE_PARAM_FILE				"/sys/class/net/%s/operstate"
Packit 6d2c1b
#define RAW_QP_PRIVLIGES_PARAM_FILE			"/sys/module/ib_uverbs/parameters/disable_raw_qp_enforcement"
Packit 6d2c1b
#define FLOW_STEERING_MGM_ENTRY_SIZE_PARAM_FILE		"/sys/module/mlx4_core/parameters/log_num_mgm_entry_size"
Packit 6d2c1b
#define VIRTUAL_DEVICE_FOLDER			"/sys/devices/virtual/net/%s/"
Packit 6d2c1b
#define BOND_DEVICE_FILE				"/proc/net/bonding/%s"
Packit 6d2c1b
Packit 6d2c1b
Packit 6d2c1b
#define NETVSC_DEVICE_CLASS_FILE		"/sys/class/net/%s/device/class_id"
Packit 6d2c1b
#define NETVSC_DEVICE_LOWER_FILE		"/sys/class/net/%s/lower_%s/ifindex"
Packit 6d2c1b
#define NETVSC_DEVICE_UPPER_FILE		"/sys/class/net/%s/upper_%s/ifindex"
Packit 6d2c1b
#define NETVSC_ID               		"{f8615163-df3e-46c5-913f-f2d2f965ed0e}\n"
Packit 6d2c1b
Packit 6d2c1b
#define MAX_STATS_FD_NUM				1024
Packit 6d2c1b
#define MAX_WINDOW_SCALING				14
Packit 6d2c1b
Packit 6d2c1b
#define VIRTUALIZATION_FLAG				"hypervisor"
Packit 6d2c1b
Packit 6d2c1b
extern bool g_b_exit;
Packit 6d2c1b
extern bool g_is_forked_child;
Packit 6d2c1b
extern bool g_init_global_ctors_done;
Packit 6d2c1b
Packit 6d2c1b
#endif