int prod_retrans_abort_entry (ACQ_TABLE *p_acqtable, long prod_seqno, int err_cause) { static char FNAME[]="retrans_abort_entry"; int index_value; /* index for prod_seqno */ int retrans_table_typ; /* retrans table type */ PROD_RETRANS_ENTRY *p_retrans_entry; PROD_RETRANS_ENTRY_INFO *p_retrans_entry_info; if(prod_retrans_get_addr(p_acqtable->proc_base_channel_type_last, p_prod_retrans_table, &p_retrans_entry_info, &p_retrans_entry, &retrans_table_typ) < 0){ uerror("%s ignore abort \n",FNAME); return(ERROR); } /* Now get the index value */ index_value = prod_seqno % p_retrans_entry_info->numb_entries; if(index_value < 0) { index_value = -index_value; } if(index_value >= p_retrans_entry_info->numb_entries) { index_value = 0; } if(ulogIsVerbose ()){ uinfo("%s ok abort %s tbl[%d]=%ld\n",FNAME, GET_SBN_TYP_NAME(p_acqtable->proc_base_channel_type_last), index_value, p_retrans_entry[index_value].prod_seqno); } prod_retrans_update_entry(p_acqtable, (BUFF_HDR *)NULL, p_retrans_entry_info, &p_retrans_entry[index_value], index_value, prod_seqno, p_acqtable->proc_prod_run_id, RETRANS_ENTRY_FLAG_AVAIL, err_cause); return(0); }
int generate_retrans_rqst(ACQ_TABLE *p_acqtable, long first_prod_seqno, long last_prod_seqno, int rqst_cause) { static char FNAME[] = "generate_retrans_rqst"; static ulong request_numb; int prod_lost; PIPE_RETRANSMIT_HDR pipe_request_hdr; PIPE_RETRANSMIT_HDR *p_pipe_requesthdr; size_t bytes_written; time_t tmp_time; request_numb++; prod_lost = (last_prod_seqno - first_prod_seqno) + 1; if(prod_lost < 0) prod_lost = 0; p_acqtable->proc_tot_prods_retrans_rqstd += prod_lost; time(&p_acqtable->proc_last_retrans_rqst); if(global_retransmitpipe_fd <= 0){ /* Unable to open/write to pipe */ log_error("Unable to open or write to pipe %s \n",DEFAULT_RETRANSMIT_PIPENAME); return (0); } p_pipe_requesthdr = &pipe_request_hdr; p_pipe_requesthdr->pipe_ctl_flag = 0; if(p_acqtable->proc_retransmit_ctl_flag & ENABLE_RETRANS_XMIT_RQST){ p_pipe_requesthdr->pipe_ctl_flag |= ENABLE_RETRANS_XMIT_RQST; } p_pipe_requesthdr->pipe_request_numb = request_numb; p_pipe_requesthdr->pipe_link_id = p_acqtable->link_id; p_pipe_requesthdr->pipe_channel_type = p_acqtable->proc_base_channel_type_last; p_pipe_requesthdr->pipe_first_prod_seqno = (int)first_prod_seqno; p_pipe_requesthdr->pipe_last_prod_seqno = (int)last_prod_seqno; p_pipe_requesthdr->pipe_run_numb = (int) p_acqtable->proc_prod_run_id; p_pipe_requesthdr->pipe_cpio_addr = (int) global_cpio_addr; time(&tmp_time); p_pipe_requesthdr->pipe_request_time = (int) tmp_time; p_pipe_requesthdr->pipe_delay_send = p_acqtable->proc_retransmit_delay_send; p_pipe_requesthdr->pipe_request_cause = RETRANS_RQST_CAUSE_RCV_ERR; log_debug("pipe_request_numb = %ld | ctl_flag = %d | link_id = %d | channel_type = %d | rqst cause = %d \n", p_pipe_requesthdr->pipe_request_numb,p_pipe_requesthdr->pipe_ctl_flag,p_pipe_requesthdr->pipe_link_id, p_pipe_requesthdr->pipe_channel_type,p_pipe_requesthdr->pipe_request_cause); log_debug("cpio addr = %ld | rqst time = %ld | first prod seqno = [%d-%ld] | last prod seqno = %ld | run number = %d | delay_send = %d \n", p_pipe_requesthdr->pipe_cpio_addr, p_pipe_requesthdr->pipe_request_time,p_pipe_requesthdr->pipe_first_prod_seqno,first_prod_seqno, p_pipe_requesthdr->pipe_last_prod_seqno,p_pipe_requesthdr->pipe_run_numb,p_pipe_requesthdr->pipe_delay_send); /* Now write to pipe */ if((bytes_written = write(global_retransmitpipe_fd, p_pipe_requesthdr, sizeof(PIPE_RETRANSMIT_HDR))) != sizeof(PIPE_RETRANSMIT_HDR)) { log_error("FAIL write#%ld pipe[%d] tot(%ld) %s link[%d] prod(%ld-%ld)\n", p_pipe_requesthdr->pipe_request_numb, global_retransmitpipe_fd, p_acqtable->proc_tot_prods_retrans_rqstd, GET_SBN_TYP_NAME(p_pipe_requesthdr->pipe_channel_type), p_pipe_requesthdr->pipe_link_id, first_prod_seqno, last_prod_seqno); } else { if(first_prod_seqno != last_prod_seqno) { log_info("OK rqst#%ld tot(%ld) %s link[%d] prod(%ld-%ld)\n", request_numb, p_acqtable->proc_tot_prods_retrans_rqstd, GET_SBN_TYP_NAME(p_pipe_requesthdr->pipe_channel_type), p_pipe_requesthdr->pipe_link_id, first_prod_seqno, last_prod_seqno); } else { log_info("OK rqst#%ld tot(%ld) %s link[%d] prod(%ld)\n", request_numb, p_acqtable->proc_tot_prods_retrans_rqstd, GET_SBN_TYP_NAME(p_pipe_requesthdr->pipe_channel_type), p_pipe_requesthdr->pipe_link_id, last_prod_seqno); } } return(0); }