@@ -110,7 +110,7 @@ void listener_thread_func(uccl_conn_t* conn) {
110110
111111 uint64_t mr_id = 0 ;
112112 switch (md.op ) {
113- case UCCL_READ : {
113+ case UCCL_RW_RC : {
114114 tx_msg_t tx_data = md.data .tx_data ;
115115 auto local_mem_iter = mem_reg_info.find (tx_data.data_ptr );
116116 if (local_mem_iter == mem_reg_info.end ()) {
@@ -188,7 +188,7 @@ void listener_thread_func(uccl_conn_t* conn) {
188188#endif
189189 break ;
190190 }
191- case UCCL_VECTOR_READ : {
191+ case UCCL_VECTOR_RW_RC : {
192192 size_t count = md.data .vector_data .count ;
193193
194194 tx_msg_t * tx_data_array = new tx_msg_t [count];
@@ -468,6 +468,21 @@ int uccl_engine_write(uccl_conn_t* conn, uccl_mr_t* mr, void const* data,
468468 : -1 ;
469469}
470470
471+ int uccl_engine_write_rc (uccl_conn_t * conn, uccl_mr_t * mr, void const * data,
472+ size_t size, void * slot_item_ptr,
473+ uint64_t * transfer_id) {
474+ if (!conn || !mr || !data) return -1 ;
475+
476+ FifoItem slot_item;
477+ slot_item = *static_cast <FifoItem*>(slot_item_ptr);
478+
479+ return conn->engine ->endpoint ->write_async (conn->conn_id , mr->mr_id ,
480+ const_cast <void *>(data), size,
481+ slot_item, transfer_id)
482+ ? 0
483+ : -1 ;
484+ }
485+
471486int uccl_engine_recv (uccl_conn_t * conn, uccl_mr_t * mr, void * data,
472487 size_t data_size) {
473488 if (!conn || !mr || !data) return -1 ;
@@ -584,10 +599,16 @@ int uccl_engine_send_tx_md_vector(uccl_conn_t* conn, md_t* md_array,
584599 size_t count) {
585600 if (!conn || !md_array || count == 0 ) return -1 ;
586601
602+ // Check UCCL_RCMODE environment variable
603+ bool rc_mode = false ;
604+ char const * rc_mode_env = getenv (" UCCL_RCMODE" );
605+ if (rc_mode_env != nullptr ) {
606+ rc_mode = (std::strcmp (rc_mode_env, " 1" ) == 0 );
607+ }
587608 // Determine the operation type based on the first item
588- uccl_msg_type op_type =
589- (md_array[ 0 ]. op == UCCL_READ) ? UCCL_VECTOR_READ : UCCL_VECTOR_WRITE;
590-
609+ uccl_msg_type op_type = (rc_mode || md_array[ 0 ]. op == UCCL_RW_RC)
610+ ? UCCL_VECTOR_RW_RC
611+ : UCCL_VECTOR_WRITE;
591612 md_t vector_md;
592613 vector_md.op = op_type;
593614 vector_md.data .vector_data .count = count;
0 commit comments