typedef struct vcl_session_msg
{
- u32 next;
union
{
session_accepted_msg_t accepted_msg;
#define VCL_SESS_ATTR_TEST(ATTR, VAL) \
((ATTR) & (1 << (VAL)) ? 1 : 0)
+typedef enum vcl_session_flags_
+{
+ VCL_SESSION_F_CONNECTED,
+} __clib_packed vcl_session_flags_t;
+
typedef struct
{
CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
/* Socket configuration state */
u8 is_vep;
u8 is_vep_session;
+ vcl_session_flags_t flags;
/* VCL session index of the listening session (if any) */
u32 listener_index;
/* Accepted sessions on this listener */
u32 max_workers;
u32 vpp_api_q_length;
uword segment_baseva;
- u32 segment_size;
- u32 add_segment_size;
+ uword segment_size;
+ uword add_segment_size;
u32 preallocated_fifo_pairs;
u32 rx_fifo_size;
u32 tx_fifo_size;
static inline void
vcl_session_free (vcl_worker_t * wrk, vcl_session_t * s)
{
- VDBG (0, "session %u [0x%llx] removed", s->session_index, s->vpp_handle);
+ /* Debug level set to 1 to avoid debug messages while ldp is cleaning up */
+ VDBG (1, "session %u [0x%llx] removed", s->session_index, s->vpp_handle);
pool_put (wrk->sessions, s);
}
static inline int
vcl_session_closing_error (vcl_session_t * s)
{
- return s->session_state == STATE_DISCONNECT
- ? VPPCOM_ECONNRESET : VPPCOM_ECONNABORTED;
+ /* Return 0 on closing sockets */
+ return s->session_state == STATE_DISCONNECT ? VPPCOM_ECONNRESET : 0;
}
static inline int
? VPPCOM_ECONNRESET : VPPCOM_ENOTCONN;
}
+static inline void
+vcl_ip_copy_from_ep (ip46_address_t * ip, vppcom_endpt_t * ep)
+{
+ if (ep->is_ip4)
+ clib_memcpy_fast (&ip->ip4, ep->ip, sizeof (ip4_address_t));
+ else
+ clib_memcpy_fast (&ip->ip6, ep->ip, sizeof (ip6_address_t));
+}
+
+static inline void
+vcl_ip_copy_to_ep (ip46_address_t * ip, vppcom_endpt_t * ep, u8 is_ip4)
+{
+ ep->is_ip4 = is_ip4;
+ if (is_ip4)
+ clib_memcpy_fast (ep->ip, &ip->ip4, sizeof (ip4_address_t));
+ else
+ clib_memcpy_fast (ep->ip, &ip->ip6, sizeof (ip6_address_t));
+}
+
/*
* Helpers
*/