tree d58ab81e5a82d53e58596dda2dc6a9dab88fd0b4
parent 27ae543e6f116df66e2b19ff0a3aa1053e4784d8
author Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> Fri, 09 Sep 2005 08:32:01 
-0300
committer Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> Fri, 09 Sep 2005 
08:32:01 -0300

[DCCP] Give precedence to the biggest ELAPSED_TIME

We can get this value in an TIMESTAMP_ECHO and/or in an ELAPSED_TIME option, if
receiving both give precendence to the biggest one.

In my tests they are very close if not equal at all times, so we may well think
about removing the code in CCID3 that inserts this option and leaving this to
the core, and perhaps even use just TIMESTAMP_ECHO including the elapsed time.

Signed-off-by: Arnaldo Carvalho de Melo <[EMAIL PROTECTED]>

 net/dccp/options.c |   34 ++++++++++++++++++----------------
 1 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/net/dccp/options.c b/net/dccp/options.c
--- a/net/dccp/options.c
+++ b/net/dccp/options.c
@@ -72,6 +72,7 @@ int dccp_parse_options(struct sock *sk, 
        struct dccp_options_received *opt_recv = &dp->dccps_options_received;
        unsigned char opt, len;
        unsigned char *value;
+       u32 elapsed_time;
 
        memset(opt_recv, 0, sizeof(*opt_recv));
 
@@ -159,18 +160,18 @@ int dccp_parse_options(struct sock *sk, 
                                      (unsigned long long)
                                      DCCP_SKB_CB(skb)->dccpd_ack_seq);
 
-                       if (len > 4) {
-                               if (len == 6)
-                                       opt_recv->dccpor_elapsed_time =
-                                                ntohs(*(u16 *)(value + 4));
-                               else
-                                       opt_recv->dccpor_elapsed_time =
-                                                ntohl(*(u32 *)(value + 4));
 
-                               dccp_pr_debug("%sTIMESTAMP_ECHO 
ELAPSED_TIME=%d\n",
-                                     debug_prefix,
-                                     opt_recv->dccpor_elapsed_time);
-                       }
+                       if (len == 4)
+                               break;
+
+                       if (len == 6)
+                               elapsed_time = ntohs(*(u16 *)(value + 4));
+                       else
+                               elapsed_time = ntohl(*(u32 *)(value + 4));
+
+                       /* Give precedence to the biggest ELAPSED_TIME */
+                       if (elapsed_time > opt_recv->dccpor_elapsed_time)
+                               opt_recv->dccpor_elapsed_time = elapsed_time;
                        break;
                case DCCPO_ELAPSED_TIME:
                        if (len != 2 && len != 4)
@@ -180,14 +181,15 @@ int dccp_parse_options(struct sock *sk, 
                                continue;
 
                        if (len == 2)
-                               opt_recv->dccpor_elapsed_time =
-                                                       ntohs(*(u16 *)value);
+                               elapsed_time = ntohs(*(u16 *)value);
                        else
-                               opt_recv->dccpor_elapsed_time =
-                                                       ntohl(*(u32 *)value);
+                               elapsed_time = ntohl(*(u32 *)value);
+
+                       if (elapsed_time > opt_recv->dccpor_elapsed_time)
+                               opt_recv->dccpor_elapsed_time = elapsed_time;
 
                        dccp_pr_debug("%sELAPSED_TIME=%d\n", debug_prefix,
-                                     opt_recv->dccpor_elapsed_time);
+                                     elapsed_time);
                        break;
                        /*
                         * From draft-ietf-dccp-spec-11.txt:
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to