2006-03-21 04:41:47 +03:00
/*
* Copyright ( c ) 2005 Andrea Bittau < a . bittau @ cs . ucl . ac . uk >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# ifndef _DCCP_CCID2_H_
# define _DCCP_CCID2_H_
2006-03-21 06:21:44 +03:00
# include <linux/dccp.h>
# include <linux/timer.h>
# include <linux/types.h>
# include "../ccid.h"
2007-11-25 03:04:35 +03:00
/* NUMDUPACK parameter from RFC 4341, p. 6 */
# define NUMDUPACK 3
2006-03-21 06:21:44 +03:00
struct sock ;
2006-03-21 04:41:47 +03:00
struct ccid2_seq {
u64 ccid2s_seq ;
unsigned long ccid2s_sent ;
int ccid2s_acked ;
struct ccid2_seq * ccid2s_prev ;
struct ccid2_seq * ccid2s_next ;
} ;
2006-11-26 06:07:50 +03:00
# define CCID2_SEQBUF_LEN 1024
2006-09-20 00:13:37 +04:00
# define CCID2_SEQBUF_MAX 128
2009-09-12 11:47:01 +04:00
/**
* struct ccid2_hc_tx_sock - CCID2 TX half connection
2007-11-25 03:06:52 +03:00
* @ ccid2hctx_ { cwnd , ssthresh , pipe } : as per RFC 4341 , section 5
2007-11-25 03:10:29 +03:00
* @ ccid2hctx_packets_acked - Ack counter for deriving cwnd growth ( RFC 3465 )
2006-03-21 04:41:47 +03:00
* @ ccid2hctx_lastrtt - time RTT was last measured
* @ ccid2hctx_rpseq - last consecutive seqno
* @ ccid2hctx_rpdupack - dupacks since rpseq
2009-09-12 11:47:01 +04:00
*/
2006-03-21 04:41:47 +03:00
struct ccid2_hc_tx_sock {
2007-10-05 01:41:55 +04:00
u32 ccid2hctx_cwnd ;
2007-11-25 03:05:51 +03:00
u32 ccid2hctx_ssthresh ;
2007-11-25 03:06:52 +03:00
u32 ccid2hctx_pipe ;
2007-11-25 03:10:29 +03:00
u32 ccid2hctx_packets_acked ;
2006-09-20 00:13:37 +04:00
struct ccid2_seq * ccid2hctx_seqbuf [ CCID2_SEQBUF_MAX ] ;
int ccid2hctx_seqbufc ;
2006-03-21 04:41:47 +03:00
struct ccid2_seq * ccid2hctx_seqh ;
struct ccid2_seq * ccid2hctx_seqt ;
long ccid2hctx_rto ;
long ccid2hctx_srtt ;
long ccid2hctx_rttvar ;
unsigned long ccid2hctx_lastrtt ;
struct timer_list ccid2hctx_rtotimer ;
u64 ccid2hctx_rpseq ;
int ccid2hctx_rpdupack ;
2006-09-20 00:14:43 +04:00
unsigned long ccid2hctx_last_cong ;
2006-11-16 19:28:40 +03:00
u64 ccid2hctx_high_ack ;
2006-03-21 04:41:47 +03:00
} ;
struct ccid2_hc_rx_sock {
int ccid2hcrx_data ;
} ;
2006-03-21 06:21:44 +03:00
static inline struct ccid2_hc_tx_sock * ccid2_hc_tx_sk ( const struct sock * sk )
{
return ccid_priv ( dccp_sk ( sk ) - > dccps_hc_tx_ccid ) ;
}
static inline struct ccid2_hc_rx_sock * ccid2_hc_rx_sk ( const struct sock * sk )
{
return ccid_priv ( dccp_sk ( sk ) - > dccps_hc_rx_ccid ) ;
}
2006-03-21 04:41:47 +03:00
# endif /* _DCCP_CCID2_H_ */