+ u32 fd_index, session_index;
+ ldp_fd_entry_t *fde;
+
+ if (!ldp_fd_is_sid (fd))
+ return INVALID_SESSION_ID;
+
+ fd_index = fd - ldp->sid_bit_val;
+ fde = ldp_fd_entry_get_w_lock (fd_index);
+ if (!fde)
+ {
+ LDBG (0, "unknown fd %d", fd);
+ clib_rwlock_reader_unlock (&ldp->fd_table_lock);
+ return INVALID_SESSION_ID;
+ }
+ session_index = fde->session_index;
+ clib_rwlock_reader_unlock (&ldp->fd_table_lock);
+
+ return vppcom_session_handle (session_index);
+}
+
+static void
+ldp_fd_free_w_sid (u32 sid)
+{
+ ldp_fd_entry_t *fde;
+ u32 fd_index;
+ int fd;
+
+ fd = ldp_fd_from_sid (sid);
+ if (!fd)
+ return;
+
+ fd_index = fd - ldp->sid_bit_val;
+ fde = ldp_fd_entry_get_w_lock (fd_index);
+ if (fde)
+ {
+ hash_unset (ldp->session_index_to_fd_table, fde->session_index);
+ pool_put (ldp->fd_pool, fde);
+ }
+ clib_rwlock_writer_unlock (&ldp->fd_table_lock);