netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@redhat.com>
To: "David S. Miller" <davem@davemloft.net>
Cc: netdev@vger.kernel.org, dccp@vger.kernel.org,
	Gerrit Renker <gerrit@erg.abdn.ac.uk>,
	Ian McDonald <ian.mcdonald@jandi.co.nz>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 09/12] [DCCP]: Support inserting options during the 3-way handshake
Date: Thu, 13 Dec 2007 13:06:02 -0200	[thread overview]
Message-ID: <1197558365-31134-10-git-send-email-acme@redhat.com> (raw)
In-Reply-To: <1197558365-31134-9-git-send-email-acme@redhat.com>

From: Gerrit Renker <gerrit@erg.abdn.ac.uk>

This provides a separate routine to insert options during the initial handshake.
The main purpose is to conduct feature negotiation, for the moment the only user
is the timestamp echo needed for the (CCID3) handshake RTT sample.

Padding of options has been put into a small separate routine, to be shared among
the two functions. This could also be used as a generic routine to finish inserting
options.

Also removed an `XXX' comment since its content was obvious.

Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: Ian McDonald <ian.mcdonald@jandi.co.nz>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 net/dccp/dccp.h    |    1 +
 net/dccp/options.c |   32 ++++++++++++++++++++++----------
 net/dccp/output.c  |    2 +-
 3 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h
index 3af3320..b138e20 100644
--- a/net/dccp/dccp.h
+++ b/net/dccp/dccp.h
@@ -428,6 +428,7 @@ static inline int dccp_ack_pending(const struct sock *sk)
 }
 
 extern int dccp_insert_options(struct sock *sk, struct sk_buff *skb);
+extern int dccp_insert_options_rsk(struct dccp_request_sock*, struct sk_buff*);
 extern int dccp_insert_option_elapsed_time(struct sock *sk,
 					    struct sk_buff *skb,
 					    u32 elapsed_time);
diff --git a/net/dccp/options.c b/net/dccp/options.c
index 0c996d8..bedb5da 100644
--- a/net/dccp/options.c
+++ b/net/dccp/options.c
@@ -537,6 +537,18 @@ static int dccp_insert_options_feat(struct sock *sk, struct sk_buff *skb)
 	return 0;
 }
 
+/* The length of all options needs to be a multiple of 4 (5.8) */
+static void dccp_insert_option_padding(struct sk_buff *skb)
+{
+	int padding = DCCP_SKB_CB(skb)->dccpd_opt_len % 4;
+
+	if (padding != 0) {
+		padding = 4 - padding;
+		memset(skb_push(skb, padding), 0, padding);
+		DCCP_SKB_CB(skb)->dccpd_opt_len += padding;
+	}
+}
+
 int dccp_insert_options(struct sock *sk, struct sk_buff *skb)
 {
 	struct dccp_sock *dp = dccp_sk(sk);
@@ -580,18 +592,18 @@ int dccp_insert_options(struct sock *sk, struct sk_buff *skb)
 	    dccp_insert_option_timestamp_echo(dp, NULL, skb))
 		return -1;
 
-	/* XXX: insert other options when appropriate */
+	dccp_insert_option_padding(skb);
+	return 0;
+}
 
-	if (DCCP_SKB_CB(skb)->dccpd_opt_len != 0) {
-		/* The length of all options has to be a multiple of 4 */
-		int padding = DCCP_SKB_CB(skb)->dccpd_opt_len % 4;
+int dccp_insert_options_rsk(struct dccp_request_sock *dreq, struct sk_buff *skb)
+{
+	DCCP_SKB_CB(skb)->dccpd_opt_len = 0;
 
-		if (padding != 0) {
-			padding = 4 - padding;
-			memset(skb_push(skb, padding), 0, padding);
-			DCCP_SKB_CB(skb)->dccpd_opt_len += padding;
-		}
-	}
+	if (dreq->dreq_timestamp_echo != 0 &&
+	    dccp_insert_option_timestamp_echo(NULL, dreq, skb))
+		return -1;
 
+	dccp_insert_option_padding(skb);
 	return 0;
 }
diff --git a/net/dccp/output.c b/net/dccp/output.c
index b2e1791..5589a5e 100644
--- a/net/dccp/output.c
+++ b/net/dccp/output.c
@@ -303,7 +303,7 @@ struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
 	DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_RESPONSE;
 	DCCP_SKB_CB(skb)->dccpd_seq  = dreq->dreq_iss;
 
-	if (dccp_insert_options(sk, skb)) {
+	if (dccp_insert_options_rsk(dreq, skb)) {
 		kfree_skb(skb);
 		return NULL;
 	}
-- 
1.5.3.4


  reply	other threads:[~2007-12-13 15:06 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-13 15:05 [PATCHES 0/12]: DCCP patches for 2.6.25 Arnaldo Carvalho de Melo
2007-12-13 15:05 ` [PATCH 01/12] [DCCP]: Perform SHUT_RD and SHUT_WR on receiving close Arnaldo Carvalho de Melo
2007-12-13 15:05   ` [PATCH 02/12] [DCCP]: Shift the retransmit timer for active-close into output.c Arnaldo Carvalho de Melo
2007-12-13 15:05     ` [PATCH 03/12] [DCCP]: Use maximum-RTO backoff from DCCP spec Arnaldo Carvalho de Melo
2007-12-13 15:05       ` [PATCH 04/12] [DCCP]: Support for server holding timewait state Arnaldo Carvalho de Melo
2007-12-13 15:05         ` [PATCH 05/12] [DCCP]: Collapse repeated `len' statements into one Arnaldo Carvalho de Melo
2007-12-13 15:05           ` [PATCH 06/12] [DCCP]: Allow to parse options on Request Sockets Arnaldo Carvalho de Melo
2007-12-13 15:06             ` [PATCH 07/12] [DCCP]: Add (missing) option parsing to request_sock processing Arnaldo Carvalho de Melo
2007-12-13 15:06               ` [PATCH 08/12] [DCCP]: Handle timestamps on Request/Response exchange separately Arnaldo Carvalho de Melo
2007-12-13 15:06                 ` Arnaldo Carvalho de Melo [this message]
2007-12-13 15:06                   ` [PATCH 10/12] [DCCP]: Remove unused and redundant validation functions Arnaldo Carvalho de Melo
2007-12-13 15:06                     ` [PATCH 11/12] [DCCP]: Make code assumptions explicit Arnaldo Carvalho de Melo
2007-12-13 15:06                       ` [PATCH 12/12] [DCCP]: Ignore feature negotiation on Data packets Arnaldo Carvalho de Melo
2007-12-13 17:43 ` [PATCHES 0/12]: DCCP patches for 2.6.25 David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1197558365-31134-10-git-send-email-acme@redhat.com \
    --to=acme@redhat.com \
    --cc=davem@davemloft.net \
    --cc=dccp@vger.kernel.org \
    --cc=gerrit@erg.abdn.ac.uk \
    --cc=ian.mcdonald@jandi.co.nz \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).