55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
From: Vlad Yasevich <vladislav.yasevich@hp.com>
|
|
Date: Sat, 30 Sep 2006 00:10:03 +0000 (-0700)
|
|
Subject: [SCTP]: Do not timestamp every SCTP packet.
|
|
X-Git-Tag: v2.6.19-rc1
|
|
X-Git-Url: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=f236218b7292bccb0f8754a0feb5d9e9a06fe5a2
|
|
|
|
[SCTP]: Do not timestamp every SCTP packet.
|
|
|
|
We only need the timestamp on COOKIE-ECHO chunks, so instead of always
|
|
timestamping every SCTP packet, let common code timestamp if the socket
|
|
option is set. For COOKIE-ECHO, simply get the time of day if we don't
|
|
have a timestamp. This introduces a small possibility that the cookie
|
|
may be considered expired, but it will be renegotiated.
|
|
|
|
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
|
|
Signed-off-by: Sridhar Samudrala <sri@us.ibm.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
|
|
--- a/net/sctp/input.c
|
|
+++ b/net/sctp/input.c
|
|
@@ -218,12 +218,6 @@ int sctp_rcv(struct sk_buff *skb)
|
|
}
|
|
}
|
|
|
|
- /* SCTP seems to always need a timestamp right now (FIXME) */
|
|
- if (skb->tstamp.off_sec == 0) {
|
|
- __net_timestamp(skb);
|
|
- sock_enable_timestamp(sk);
|
|
- }
|
|
-
|
|
if (!xfrm_policy_check(sk, XFRM_POLICY_IN, skb, family))
|
|
goto discard_release;
|
|
nf_reset(skb);
|
|
--- a/net/sctp/sm_make_chunk.c
|
|
+++ b/net/sctp/sm_make_chunk.c
|
|
@@ -1447,8 +1447,16 @@ no_hmac:
|
|
/* Check to see if the cookie is stale. If there is already
|
|
* an association, there is no need to check cookie's expiration
|
|
* for init collision case of lost COOKIE ACK.
|
|
+ * If skb has been timestamped, then use the stamp, otherwise
|
|
+ * use current time. This introduces a small possibility that
|
|
+ * that a cookie may be considered expired, but his would only slow
|
|
+ * down the new association establishment instead of every packet.
|
|
*/
|
|
- skb_get_timestamp(skb, &tv);
|
|
+ if (sock_flag(ep->base.sk, SOCK_TIMESTAMP))
|
|
+ skb_get_timestamp(skb, &tv);
|
|
+ else
|
|
+ do_gettimeofday(&tv);
|
|
+
|
|
if (!asoc && tv_lt(bear_cookie->expiration, tv)) {
|
|
__u16 len;
|
|
/*
|