LIMIT_NETDEBUG(pr_info("DCCP: acknowledgeable packets buffer full!\n")); 
LIMIT_NETDEBUG(KERN_INFO "DCCP: acknowledgeable packets buffer full!\n"); 
int dccp_rcv_established(struct sock *sk, struct sk_buff *skb,			 const struct dccp_hdr *dh, const unsigned len){	struct dccp_sock *dp = dccp_sk(sk);	if (dccp_check_seqno(sk, skb))		goto discard;	if (dccp_parse_options(sk, skb))		goto discard;	if (DCCP_SKB_CB(skb)->dccpd_ack_seq != DCCP_PKT_WITHOUT_ACK_SEQ)		dccp_event_ack_recv(sk, skb);	/*	 * FIXME: check ECN to see if we should use	 * DCCP_ACKPKTS_STATE_ECN_MARKED	 */	if (dp->dccps_options.dccpo_send_ack_vector) {		struct dccp_ackpkts *ap = dp->dccps_hc_rx_ackpkts;		if (dccp_ackpkts_add(dp->dccps_hc_rx_ackpkts,				     DCCP_SKB_CB(skb)->dccpd_seq,				     DCCP_ACKPKTS_STATE_RECEIVED)) {			LIMIT_NETDEBUG(pr_info("DCCP: acknowledgeable packets buffer full!\n"));			ap->dccpap_ack_seqno = DCCP_MAX_SEQNO + 1;			inet_csk_schedule_ack(sk);			inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK, TCP_DELACK_MIN, TCP_RTO_MAX);			goto discard;		}		/*		 * FIXME: this activation is probably wrong, have to study more		 * TCP delack machinery and how it fits into DCCP draft, but		 * for now it kinda "works" 8)		 */		if (!inet_csk_ack_scheduled(sk)) {			inet_csk_schedule_ack(sk);			inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK, 5 * HZ, TCP_RTO_MAX);		}	}	ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb);	ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb);	switch (dccp_hdr(skb)->dccph_type) {	case DCCP_PKT_DATAACK:	case DCCP_PKT_DATA:		/*		 * FIXME: check if sk_receive_queue is full, schedule DATA_DROPPED option		 * if it is.		 */		__skb_pull(skb, dh->dccph_doff * 4);		__skb_queue_tail(&sk->sk_receive_queue, skb);		skb_set_owner_r(skb, sk);		sk->sk_data_ready(sk, 0);		return 0;	case DCCP_PKT_ACK:		goto discard;	case DCCP_PKT_RESET:		/*		 *  Step 9: Process Reset		 *	If P.type == Reset,		 *		Tear down connection		 *		S.state := TIMEWAIT		 *		Set TIMEWAIT timer		 *		Drop packet and return		*/		dccp_fin(sk, skb);		dccp_time_wait(sk, DCCP_TIME_WAIT, 0);		return 0;	case DCCP_PKT_CLOSEREQ:		dccp_rcv_closereq(sk, skb);		goto discard;	case DCCP_PKT_CLOSE:		dccp_rcv_close(sk, skb);		return 0;	case DCCP_PKT_REQUEST:		/* Step 7             	 *   or (S.is_server and P.type == Response)		 *   or (S.is_client and P.type == Request)		 *   or (S.state >= OPEN and P.type == Request		 *	and P.seqno >= S.OSR)		 *    or (S.state >= OPEN and P.type == Response		 *	and P.seqno >= S.OSR)		 *    or (S.state == RESPOND and P.type == Data),		 *  Send Sync packet acknowledging P.seqno		 *  Drop packet and return		 */		if (dp->dccps_role != DCCP_ROLE_LISTEN)			goto send_sync;		goto check_seq;	case DCCP_PKT_RESPONSE:		if (dp->dccps_role != DCCP_ROLE_CLIENT)			goto send_sync;check_seq:		if (!before48(DCCP_SKB_CB(skb)->dccpd_seq, dp->dccps_osr)) {send_sync:			dccp_send_sync(sk, DCCP_SKB_CB(skb)->dccpd_seq);		}		break;	}	DCCP_INC_STATS_BH(DCCP_MIB_INERRS);discard:	__kfree_skb(skb);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/64ce207306debd7157f47282be94770407bec01c/input.c/buggy/net/dccp/input.c