dccp_update_gsr(sk, DCCP_SKB_CB(skb)->dccpd_seq); 
dccp_update_gsr(sk, dp->dccps_isr); /* * SWL and AWL are initially adjusted so that they are not less than * the initial Sequence Numbers received and sent, respectively: *	SWL := max(GSR + 1 - floor(W/4), ISR), *	AWL := max(GSS - W' + 1, ISS). * These adjustments MUST be applied only at the beginning of the * connection. * * AWL was adjusted in dccp_v4_connect -acme */ dccp_set_seqno(&dp->dccps_swl, max48(dp->dccps_swl, dp->dccps_isr)); 
static int dccp_rcv_request_sent_state_process(struct sock *sk,					       struct sk_buff *skb,					       const struct dccp_hdr *dh,					       const unsigned len){	/* 	 *  Step 4: Prepare sequence numbers in REQUEST	 *     If S.state == REQUEST,	 *	  If (P.type == Response or P.type == Reset)	 *		and S.AWL <= P.ackno <= S.AWH,	 *	     / * Set sequence number variables corresponding to the	 *		other endpoint, so P will pass the tests in Step 6 * /	 *	     Set S.GSR, S.ISR, S.SWL, S.SWH	 *	     / * Response processing continues in Step 10; Reset	 *		processing continues in Step 9 * /	*/	if (dh->dccph_type == DCCP_PKT_RESPONSE) {		const struct inet_connection_sock *icsk = inet_csk(sk);		struct dccp_sock *dp = dccp_sk(sk);		/* Stop the REQUEST timer */		inet_csk_clear_xmit_timer(sk, ICSK_TIME_RETRANS);		BUG_TRAP(sk->sk_send_head != NULL);		__kfree_skb(sk->sk_send_head);		sk->sk_send_head = NULL;		if (!between48(DCCP_SKB_CB(skb)->dccpd_ack_seq,			       dp->dccps_awl, dp->dccps_awh)) {			dccp_pr_debug("invalid ackno: S.AWL=%llu, "				      "P.ackno=%llu, S.AWH=%llu \n",				      (unsigned long long)dp->dccps_awl,			   (unsigned long long)DCCP_SKB_CB(skb)->dccpd_ack_seq,				      (unsigned long long)dp->dccps_awh);			goto out_invalid_packet;		}		dp->dccps_isr = DCCP_SKB_CB(skb)->dccpd_seq;		dccp_update_gsr(sk, DCCP_SKB_CB(skb)->dccpd_seq);		if (ccid_hc_rx_init(dp->dccps_hc_rx_ccid, sk) != 0 ||		    ccid_hc_tx_init(dp->dccps_hc_tx_ccid, sk) != 0) {			ccid_hc_rx_exit(dp->dccps_hc_rx_ccid, sk);			ccid_hc_tx_exit(dp->dccps_hc_tx_ccid, sk);			/* FIXME: send appropriate RESET code */			goto out_invalid_packet;		}		dccp_sync_mss(sk, dp->dccps_pmtu_cookie);		/*		 *    Step 10: Process REQUEST state (second part)		 *       If S.state == REQUEST,		 *	  / * If we get here, P is a valid Response from the		 *	      server (see Step 4), and we should move to		 *	      PARTOPEN state. PARTOPEN means send an Ack,		 *	      don't send Data packets, retransmit Acks		 *	      periodically, and always include any Init Cookie		 *	      from the Response * /		 *	  S.state := PARTOPEN		 *	  Set PARTOPEN timer		 * 	  Continue with S.state == PARTOPEN		 *	  / * Step 12 will send the Ack completing the		 *	      three-way handshake * /		 */		dccp_set_state(sk, DCCP_PARTOPEN);		/* Make sure socket is routed, for correct metrics. */		inet_sk_rebuild_header(sk);		if (!sock_flag(sk, SOCK_DEAD)) {			sk->sk_state_change(sk);			sk_wake_async(sk, 0, POLL_OUT);		}		if (sk->sk_write_pending || icsk->icsk_ack.pingpong ||		    icsk->icsk_accept_queue.rskq_defer_accept) {			/* Save one ACK. Data will be ready after			 * several ticks, if write_pending is set.			 *			 * It may be deleted, but with this feature tcpdumps			 * look so _wonderfully_ clever, that I was not able			 * to stand against the temptation 8)     --ANK			 */			/*			 * OK, in DCCP we can as well do a similar trick, its			 * even in the draft, but there is no need for us to			 * schedule an ack here, as dccp_sendmsg does this for			 * us, also stated in the draft. -acme			 */			__kfree_skb(skb);			return 0;		} 		dccp_send_ack(sk);		return -1;	}out_invalid_packet:	return 1; /* dccp_v4_do_rcv will send a reset, but...		     FIXME: the reset code should be			    DCCP_RESET_CODE_PACKET_ERROR */}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/03ace394ac9bcad38043a381ae5f4860b9c9fa1c/input.c/buggy/net/dccp/input.c