#define VEP_DEFAULT_ET_MASK (EPOLLIN|EPOLLOUT)
#define VEP_UNSUPPORTED_EVENTS (EPOLLONESHOT|EPOLLEXCLUSIVE)
u32 et_mask;
+ u32 lt_next;
+ u32 lt_prev;
} vppcom_epoll_t;
/* Select uses the vcl_si_set as if a clib_bitmap. Make sure they are the
VCL_SESS_ATTR_TCP_NODELAY, // SOL_TCP,TCP_NODELAY
VCL_SESS_ATTR_TCP_KEEPIDLE, // SOL_TCP,TCP_KEEPIDLE
VCL_SESS_ATTR_TCP_KEEPINTVL, // SOL_TCP,TCP_KEEPINTVL
- VCL_SESS_ATTR_SHUT_RD,
- VCL_SESS_ATTR_SHUT_WR,
VCL_SESS_ATTR_MAX
} vppcom_session_attr_t;
VCL_SESSION_F_IS_VEP = 1 << 1,
VCL_SESSION_F_IS_VEP_SESSION = 1 << 2,
VCL_SESSION_F_HAS_RX_EVT = 1 << 3,
- VCL_SESSION_F_SHUTDOWN = 1 << 4,
+ VCL_SESSION_F_RD_SHUTDOWN = 1 << 4,
+ VCL_SESSION_F_WR_SHUTDOWN = 1 << 5,
} __clib_packed vcl_session_flags_t;
typedef struct vcl_session_
/** Per worker buffer for receiving mq epoll events */
struct epoll_event *mq_events;
+ /** Next session to be lt polled */
+ u32 ep_lt_current;
+
/** Hash table for disconnect processing */
uword *session_index_by_vpp_handles;
return 0;
}
+ if (s->session_state == VCL_STATE_DISCONNECT)
+ {
+ VDBG (0, "listen session [0x%llx] is closing", s->vpp_handle);
+ return 0;
+ }
+
ASSERT (s->session_state == VCL_STATE_LISTEN
|| s->session_state == VCL_STATE_LISTEN_NO_MQ
|| vcl_session_is_connectable_listener (wrk, s));
static inline int
vcl_proto_is_dgram (uint8_t proto)
{
- return proto == VPPCOM_PROTO_UDP || proto == VPPCOM_PROTO_DTLS;
+ return proto == VPPCOM_PROTO_UDP || proto == VPPCOM_PROTO_DTLS ||
+ proto == VPPCOM_PROTO_SRTP;
}
static inline u8
svm_fifo_chunk_t *vcl_segment_alloc_chunk (uword segment_handle,
u32 slice_index, u32 size,
uword *offset);
+int vcl_session_share_fifos (vcl_session_t *s, svm_fifo_t *rxf,
+ svm_fifo_t *txf);
/*
* VCL Binary API