summaryrefslogtreecommitdiffstats
path: root/net/dccp/ccids/ccid2.h
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2008-09-04 07:30:19 +0200
committerGerrit Renker <gerrit@erg.abdn.ac.uk>2008-09-04 07:45:37 +0200
commitc8bf462bc567c3dcb083ff95cc13060dd06f138c (patch)
treec612129b23db7bb8613fff4c6e2d51301bc77f65 /net/dccp/ccids/ccid2.h
parent5a577b488f687f339dea62e7bb4f4c5793ad523f (diff)
downloadop-kernel-dev-c8bf462bc567c3dcb083ff95cc13060dd06f138c.zip
op-kernel-dev-c8bf462bc567c3dcb083ff95cc13060dd06f138c.tar.gz
dccp ccid-2: Separate option parsing from CCID processing
This patch replaces an almost identical replication of code: large parts of dccp_parse_options() re-appeared as ccid2_ackvector() in ccid2.c. Apart from the duplication, this caused two more problems: 1. CCIDs should not need to be concerned with parsing header options; 2. one can not assume that Ack Vectors appear as a contiguous area within an skb, it is legal to insert other options and/or padding in between. The current code would throw an error and stop reading in such a case. The patch provides a new data structure and associated list housekeeping. Only small changes were necessary to integrate with CCID-2: data structure initialisation, adapt list traversal routine, and add call to the provided cleanup routine. The latter also lead to fixing the following BUG: CCID-2 so far ignored Ack Vectors on all packets other than Ack/DataAck, which is incorrect, since Ack Vectors can be present on any packet that has an Ack field. Details: -------- * received Ack Vectors are parsed by dccp_parse_options() alone, which passes the result on to the CCID-specific routine ccid_hc_tx_parse_options(); * CCIDs interested in using/decoding Ack Vector information will add code to fetch parsed Ack Vectors via this interface; * a data structure, `struct dccp_ackvec_parsed' is provided as interface; * this structure arranges Ack Vectors of the same skb into a FIFO order; * a doubly-linked list is used to keep the required FIFO code small. Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Diffstat (limited to 'net/dccp/ccids/ccid2.h')
-rw-r--r--net/dccp/ccids/ccid2.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/net/dccp/ccids/ccid2.h b/net/dccp/ccids/ccid2.h
index d781580..907deed 100644
--- a/net/dccp/ccids/ccid2.h
+++ b/net/dccp/ccids/ccid2.h
@@ -47,6 +47,7 @@ struct ccid2_seq {
* @lastrtt: time RTT was last measured
* @rpseq: last consecutive seqno
* @rpdupack: dupacks since rpseq
+ * @av_chunks: list of Ack Vectors received on current skb
*/
struct ccid2_hc_tx_sock {
u32 cwnd;
@@ -66,6 +67,7 @@ struct ccid2_hc_tx_sock {
int rpdupack;
unsigned long last_cong;
u64 high_ack;
+ struct list_head av_chunks;
};
struct ccid2_hc_rx_sock {
OpenPOWER on IntegriCloud