Exemplo n.º 1
0
ssize_t socket_fd_api::rx_os(const rx_call_t call_type, iovec* p_iov,
			     ssize_t sz_iov, int* p_flags, sockaddr *__from,
			     socklen_t *__fromlen, struct msghdr *__msg)
{
	errno = 0;
	switch (call_type) {
	case RX_READ:
		__log_info_func("calling os receive with orig read");
		return orig_os_api.read(m_fd, p_iov[0].iov_base, p_iov[0].iov_len);

	case RX_READV:
		__log_info_func("calling os receive with orig readv");
		return orig_os_api.readv(m_fd, p_iov, sz_iov);

	case RX_RECV:
		__log_info_func("calling os receive with orig recv");
		return orig_os_api.recv(m_fd, p_iov[0].iov_base, p_iov[0].iov_len,
		                        *p_flags);

	case RX_RECVFROM:
		__log_info_func("calling os receive with orig recvfrom");
		return orig_os_api.recvfrom(m_fd, p_iov[0].iov_base, p_iov[0].iov_len,
		                            *p_flags, __from, __fromlen);

	case RX_RECVMSG: {
		__log_info_func("calling os receive with orig recvmsg");
		return orig_os_api.recvmsg(m_fd, __msg, *p_flags);
		}
	}
	return (ssize_t) -1;
}
Exemplo n.º 2
0
buffer_pool::buffer_pool(size_t buffer_count, size_t buf_size, ib_ctx_handler *p_ib_ctx_h, mem_buf_desc_owner *owner, pbuf_free_custom_fn custom_free_function) :
			m_lock_spin("buffer_pool"),
			m_n_buffers(0),
			m_n_buffers_created(buffer_count),
			m_p_head(NULL)
{
	size_t sz_aligned_element = 0;
	uint8_t *ptr_buff, *ptr_desc;

	__log_info_func("count = %d", buffer_count);

	m_p_bpool_stat = &m_bpool_stat_static;
	memset(m_p_bpool_stat , 0, sizeof(*m_p_bpool_stat));
	vma_stats_instance_create_bpool_block(m_p_bpool_stat);

	size_t size;
	if (buffer_count) {
		sz_aligned_element = (buf_size + MCE_ALIGNMENT) & (~MCE_ALIGNMENT);
		size = (sizeof(mem_buf_desc_t) + sz_aligned_element) * buffer_count + MCE_ALIGNMENT;
	} else {
		size = buf_size;
	}
	void *data_block = m_allocator.alloc_and_reg_mr(size, p_ib_ctx_h);


	if (!buffer_count) return;

	// Align pointers
	ptr_buff = (uint8_t *)((unsigned long)((char*)data_block + MCE_ALIGNMENT) & (~MCE_ALIGNMENT));
	ptr_desc = ptr_buff + sz_aligned_element * buffer_count;

	// Split the block to buffers
	for (size_t i = 0; i < buffer_count; ++i) {

		mem_buf_desc_t* ptr_desc_mbdt = (mem_buf_desc_t*)ptr_desc;
		memset(ptr_desc_mbdt, 0, sizeof (*ptr_desc_mbdt));
		mem_buf_desc_t *desc = new (ptr_desc) mem_buf_desc_t(ptr_buff, buf_size);
		desc->p_desc_owner = owner;
		desc->lwip_pbuf.custom_free_function = custom_free_function;
		put_buffer_helper(desc);
#ifdef DEFINED_VMAPOLL
		desc->rx.vma_polled = false;
#endif		

		ptr_buff += sz_aligned_element;
		ptr_desc += sizeof(mem_buf_desc_t);
	}

	__log_info_func("done");
}
Exemplo n.º 3
0
void buffer_pool::free_bpool_resources()
{
	if (m_n_buffers == m_n_buffers_created) {
		__log_info_func("count %lu, missing %lu", m_n_buffers,
				m_n_buffers_created-m_n_buffers);
	}
	else {
		__log_info_dbg("count %lu, missing %lu", m_n_buffers,
				m_n_buffers_created - m_n_buffers);
	}

	vma_stats_instance_remove_bpool_block(m_p_bpool_stat);

	__log_info_func("done");
}
Exemplo n.º 4
0
int socket_fd_api::accept(struct sockaddr *__addr, socklen_t *__addrlen)
{
       __log_info_func("");
       int ret = orig_os_api.accept(m_fd, __addr, __addrlen);
       if (ret < 0) {
               __log_info_dbg("accept failed (ret=%d %m)", ret);
       }
       return ret;
}
Exemplo n.º 5
0
int socket_fd_api::connect(const sockaddr *__to, socklen_t __tolen)
{
	__log_info_func("");
	int ret = orig_os_api.connect(m_fd, __to, __tolen);
	if (ret) {
		__log_info_dbg("connect failed (ret=%d %m)", ret);
	}
	return ret;
}
Exemplo n.º 6
0
int socket_fd_api::bind(const sockaddr *__addr, socklen_t __addrlen)
{
	__log_info_func("");
	int ret = orig_os_api.bind(m_fd, __addr, __addrlen);
	if (ret) {
		__log_info_dbg("bind failed (ret=%d %m)", ret);
	}
	return ret;
}
Exemplo n.º 7
0
int socket_fd_api::shutdown(int __how)
{
	__log_info_func("");
	int ret = orig_os_api.shutdown(m_fd, __how);
	if (ret) {
		__log_info_dbg("shutdown failed (ret=%d %m)", ret);
	}
	return ret;
}
Exemplo n.º 8
0
int socket_fd_api::getpeername(sockaddr *__name, socklen_t *__namelen)
{
	__log_info_func("");
	int ret = orig_os_api.getpeername(m_fd, __name, __namelen);
	if (ret) {
		__log_info_dbg("getpeername failed (ret=%d %m)", ret);
	}
	return ret;
}
Exemplo n.º 9
0
int socket_fd_api::listen(int backlog)
{
       __log_info_func("");
       int ret = orig_os_api.listen(m_fd, backlog);
       if (ret < 0) {
               __log_info_dbg("listen failed (ret=%d %m)", ret);
       }
       return ret;
}
Exemplo n.º 10
0
int socket_fd_api::getsockopt(int __level, int __optname, void *__optval,
			      socklen_t *__optlen) throw (vma_error)
{
	__log_info_func("");
	int ret = orig_os_api.getsockopt(m_fd, __level, __optname, __optval, __optlen);
	if (ret) {
		__log_info_dbg("getsockopt failed (ret=%d %m)", ret);
	}
	return ret;
}
Exemplo n.º 11
0
buffer_pool::buffer_pool(size_t buffer_count, size_t buf_size, pbuf_free_custom_fn custom_free_function) :
			m_lock_spin("buffer_pool"),
			m_n_buffers(0),
			m_n_buffers_created(buffer_count),
			m_p_head(NULL)
{
	size_t sz_aligned_element = 0;
	uint8_t *ptr_buff, *ptr_desc;

	__log_info_func("count = %d", buffer_count);

	m_p_bpool_stat = &m_bpool_stat_static;
	memset(m_p_bpool_stat , 0, sizeof(*m_p_bpool_stat));
	vma_stats_instance_create_bpool_block(m_p_bpool_stat);

	if (buffer_count) {
		sz_aligned_element = (buf_size + MCE_ALIGNMENT) & (~MCE_ALIGNMENT);
		m_size = (sizeof(mem_buf_desc_t) + sz_aligned_element) * buffer_count + MCE_ALIGNMENT;
	} else {
		m_size = buf_size;
	}
	void *data_block = m_allocator.alloc_and_reg_mr(m_size, NULL);


	if (!buffer_count) return;

	// Align pointers
	ptr_buff = (uint8_t *)((unsigned long)((char*)data_block + MCE_ALIGNMENT) & (~MCE_ALIGNMENT));
	ptr_desc = ptr_buff + sz_aligned_element * buffer_count;

	// Split the block to buffers
	for (size_t i = 0; i < buffer_count; ++i) {
		mem_buf_desc_t *desc = new (ptr_desc) mem_buf_desc_t(ptr_buff, buf_size, custom_free_function);
		put_buffer_helper(desc);

		ptr_buff += sz_aligned_element;
		ptr_desc += sizeof(mem_buf_desc_t);
	}

	__log_info_func("done");
}
Exemplo n.º 12
0
ssize_t socket_fd_api::tx_os(const tx_call_t call_type,
			     const iovec* p_iov, const ssize_t sz_iov,
			     const int __flags, const sockaddr *__to,
			     const socklen_t __tolen)
{
	errno = 0;
	switch (call_type) {
	case TX_WRITE:
		__log_info_func("calling os transmit with orig write");
		return orig_os_api.write(m_fd, p_iov[0].iov_base, p_iov[0].iov_len);

	case TX_WRITEV:
		__log_info_func("calling os transmit with orig writev");
		return orig_os_api.writev(m_fd, p_iov, sz_iov);

	case TX_SEND:
		__log_info_func("calling os transmit with orig send");
		return orig_os_api.send(m_fd, p_iov[0].iov_base, p_iov[0].iov_len,
		                        __flags);

	case TX_SENDTO:
		__log_info_func("calling os transmit with orig sendto");
		return orig_os_api.sendto(m_fd, p_iov[0].iov_base, p_iov[0].iov_len,
		                          __flags, __to, __tolen);

	case TX_SENDMSG: {
		msghdr __message;
		memset(&__message, 0, sizeof(__message));
		__message.msg_iov = (iovec*) p_iov;
		__message.msg_iovlen = sz_iov;
		__message.msg_name = (void*) __to;
		__message.msg_namelen = __tolen;

		__log_info_func("calling os transmit with orig sendmsg");
		return orig_os_api.sendmsg(m_fd, &__message, __flags);
		}
	default:
		__log_info_func("calling undefined os call type!");
		break;
	}
	return (ssize_t) -1;
}