int sockinfo::ioctl(unsigned long int __request, unsigned long int __arg) throw (vma_error) { int *p_arg = (int *)__arg; switch (__request) { case FIONBIO: { si_logdbg("request=FIONBIO, arg=%d", *p_arg); if (*p_arg) set_blocking(false); else set_blocking(true); } break; default: char buf[128]; snprintf(buf, sizeof(buf), "unimplemented ioctl request=%#x, flags=%#x", (unsigned)__request, (unsigned)__arg); buf[ sizeof(buf)-1 ] = '\0'; VLOG_PRINTF_INFO(safe_mce_sys().exception_handling.get_log_severity(), "%s", buf); int rc = handle_exception_flow(); switch (rc) { case -1: return rc; case -2: vma_throw_object_with_msg(vma_unsupported_api, buf); } break; } si_logdbg("going to OS for ioctl request=%d, flags=%x", __request, __arg); return orig_os_api.ioctl(m_fd, __request, __arg); }
mem_buf_desc_t *buffer_pool::get_buffers(size_t count, uint32_t lkey) { mem_buf_desc_t *next, *head; __log_info_funcall("requested %lu, present %lu, created %lu", count, m_n_buffers, m_n_buffers_created); if (unlikely(m_n_buffers < count)) { static vlog_levels_t log_severity = VLOG_DEBUG; // DEBUG severity will be used only once - at the 1st time VLOG_PRINTF_INFO(log_severity, "ERROR! not enough buffers in the pool (requested: %lu, have: %lu, created: %lu, Buffer pool type: %s)", count, m_n_buffers, m_n_buffers_created, m_p_bpool_stat->is_rx ? "Rx" : "Tx"); log_severity = VLOG_FUNC; // for all times but the 1st one m_p_bpool_stat->n_buffer_pool_no_bufs++; return NULL; } // pop buffers from the list head = NULL; m_n_buffers -= count; m_p_bpool_stat->n_buffer_pool_size -= count; while (count > 0) { next = m_p_head->p_next_desc; m_p_head->p_next_desc = head; head = m_p_head; m_p_head = next; head->lkey = lkey; --count; } return head; }
int sockinfo::fcntl(int __cmd, unsigned long int __arg) { switch (__cmd) { case F_SETFL: { si_logdbg("cmd=F_SETFL, arg=%#x", __arg); if (__arg & O_NONBLOCK) set_blocking(false); else set_blocking(true); } break; case F_GETFL: /* Get file status flags. */ si_logfunc("cmd=F_GETFL, arg=%#x", __arg); break; case F_GETFD: /* Get file descriptor flags. */ si_logfunc("cmd=F_GETFD, arg=%#x", __arg); break; case F_SETFD: /* Set file descriptor flags. */ si_logfunc("cmd=F_SETFD, arg=%#x", __arg); break; default: char buf[128]; snprintf(buf, sizeof(buf), "unimplemented fcntl cmd=%#x, arg=%#x", (unsigned)__cmd, (unsigned)__arg); buf[ sizeof(buf)-1 ] = '\0'; VLOG_PRINTF_INFO(safe_mce_sys().exception_handling.get_log_severity(), "%s", buf); int rc = handle_exception_flow(); switch (rc) { case -1: return rc; case -2: vma_throw_object_with_msg(vma_unsupported_api, buf); } break; } si_logdbg("going to OS for fcntl cmd=%d, arg=%#x", __cmd, __arg); return orig_os_api.fcntl(m_fd, __cmd, __arg); }