void ci_tcp_listenq_drop(ci_netif* ni, ci_tcp_socket_listen* tls, ci_tcp_state_synrecv* tsr) { /* ACKED means that the connection is in ESTABLISHED state. * We should reset it when dropping. */ if( tsr->retries & CI_FLAG_TSR_RETRIES_ACKED ) { ci_ip_pkt_fmt* pkt = ci_netif_pkt_alloc(ni); if( pkt != NULL ) ci_tcp_synrecv_send(ni, tls, tsr, pkt, CI_TCP_FLAG_RST | CI_TCP_FLAG_ACK, NULL); } ci_tcp_listenq_remove(ni, tls, tsr); }
static void efab_ip_queue_copy(ci_netif *ni_to, ci_ip_pkt_queue *q_to, ci_netif *ni_from, ci_ip_pkt_queue *q_from) { ci_ip_pkt_fmt *pkt_to, *pkt_from; oo_pkt_p pp; ci_ip_queue_init(q_to); if( q_from->num == 0 ) return; ci_assert( OO_PP_NOT_NULL(q_from->head) ); pp = q_from->head; do { pkt_from = PKT_CHK(ni_from, pp); pkt_to = ci_netif_pkt_alloc(ni_to); memcpy(&pkt_to->pay_len, &pkt_from->pay_len, CI_CFG_PKT_BUF_SIZE - CI_MEMBER_OFFSET(ci_ip_pkt_fmt, pay_len)); ci_ip_queue_enqueue(ni_to, q_to, pkt_to); if( pp == q_from->tail ) break; pp = pkt_from->next; } while(1); }