diff options
Diffstat (limited to 'src/vcl')
-rw-r--r-- | src/vcl/CMakeLists.txt | 9 | ||||
-rw-r--r-- | src/vcl/vcl_private.h | 4 | ||||
-rw-r--r-- | src/vcl/vppcom.c | 17 |
3 files changed, 19 insertions, 11 deletions
diff --git a/src/vcl/CMakeLists.txt b/src/vcl/CMakeLists.txt index 2f738f39d1a..c8835e771c1 100644 --- a/src/vcl/CMakeLists.txt +++ b/src/vcl/CMakeLists.txt @@ -11,11 +11,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") - message(WARNING "-- vppcom is currently only support on Linux - disabled") - return() -endif() - ############################################################################## # vppcom shared library ############################################################################## @@ -40,6 +35,9 @@ if (LDP_HAS_GNU_SOURCE) add_compile_definitions(HAVE_GNU_SOURCE) endif(LDP_HAS_GNU_SOURCE) +if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") + message("WARNING: vcl_ldpreload isn't supported on FreeBSD - disabled") +else() add_vpp_library(vcl_ldpreload SOURCES ldp_socket_wrapper.c @@ -48,6 +46,7 @@ add_vpp_library(vcl_ldpreload LINK_LIBRARIES vppinfra svm vlibmemoryclient rt pthread vppcom dl ) +endif() add_vpp_headers(vcl ldp.h diff --git a/src/vcl/vcl_private.h b/src/vcl/vcl_private.h index 41a11b7123f..b89052f96af 100644 --- a/src/vcl/vcl_private.h +++ b/src/vcl/vcl_private.h @@ -159,8 +159,8 @@ typedef struct vcl_session_ svm_fifo_t *ct_tx_fifo; vcl_session_msg_t *accept_evts_fifo; - u64 vpp_handle; - u64 parent_handle; + session_handle_t vpp_handle; + session_handle_t parent_handle; u32 listener_index; /**< index of parent listener (if any) */ int n_accepted_sessions; /**< sessions accepted by this listener */ vppcom_epoll_t vep; diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index a0bbae170f8..a557093e897 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -1266,7 +1266,7 @@ vppcom_session_unbind (u32 session_handle) session->vpp_handle); vcl_evt (VCL_EVT_UNBIND, session); - session->vpp_handle = ~0; + session->vpp_handle = SESSION_INVALID_HANDLE; session->session_state = VCL_STATE_DISCONNECT; return VPPCOM_OK; @@ -1471,7 +1471,7 @@ vppcom_session_create (u8 proto, u8 is_nonblocking) session->session_type = proto; session->session_state = VCL_STATE_CLOSED; - session->vpp_handle = ~0; + session->vpp_handle = SESSION_INVALID_HANDLE; session->is_dgram = vcl_proto_is_dgram (proto); session->vpp_error = SESSION_E_NONE; @@ -2087,7 +2087,16 @@ read_again: ASSERT (rv >= 0); if (peek) - return rv; + { + /* Request new notifications if more data enqueued */ + if (rv < n || rv == svm_fifo_max_dequeue_cons (rx_fifo)) + { + if (is_ct) + svm_fifo_unset_event (s->rx_fifo); + svm_fifo_unset_event (rx_fifo); + } + return rv; + } n_read += rv; @@ -2818,7 +2827,7 @@ vppcom_epoll_create (void) vep_session->vep.vep_sh = ~0; vep_session->vep.next_sh = ~0; vep_session->vep.prev_sh = ~0; - vep_session->vpp_handle = ~0; + vep_session->vpp_handle = SESSION_INVALID_HANDLE; vcl_evt (VCL_EVT_EPOLL_CREATE, vep_session, vep_session->session_index); VDBG (0, "Created vep_idx %u", vep_session->session_index); |