All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 12/31] [DCCP]: Make `before' relation unambiguous
@ 2007-03-20 23:07 Gerrit Renker
  0 siblings, 0 replies; only message in thread
From: Gerrit Renker @ 2007-03-20 23:07 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev

Problem:
--------
 before48(a, b) returns the same as before48(b, a) for all a, b which
 are 2^47 apart (modulo-2^48). The reason is that the difference a-b is used
 and `true' is returned whenever 2^47 <= a-b <= 2^48-1. This has the
 disadvantage that a positive difference a-b = 2^47 can not be distinguished
 from a negative difference b-a = 2^47. As a result, an ambiguity arises in
 2^47 cases.

Fix:
----
 The fix is the same as the one suggested for TCP: define a `before' b
 whenever 1 <= b-a <= 2^47-1 (positive signed 48-bit numbers). As a result,
 the ambiguity disappears. (Note: we could have used dccp_delta_seqno, but
 Arnaldo's concept of using shift and subtraction requires fewer operations).

The patch further defines after48 as a macro, since it is in actual fact just
before48 with the parameters swapped (this mirrors the TCP solution).

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

diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h
index e6c95e9..287a040 100644
--- a/net/dccp/dccp.h
+++ b/net/dccp/dccp.h
@@ -124,14 +124,11 @@ static inline s64 dccp_delta_seqno(const u64 seqno1, const u64 seqno2)
 /* is seq1 < seq2 ? */
 static inline int before48(const u64 seq1, const u64 seq2)
 {
-	return (s64)((seq1 << 16) - (seq2 << 16)) < 0;
+	return (s64)((seq2 << 16) - (seq1 << 16)) > 0;
 }
 
 /* is seq1 > seq2 ? */
-static inline int after48(const u64 seq1, const u64 seq2)
-{
-	return (s64)((seq2 << 16) - (seq1 << 16)) < 0;
-}
+#define after48(seq1, seq2)	before48(seq2, seq1)
 
 /* is seq2 <= seq1 <= seq3 ? */
 static inline int between48(const u64 seq1, const u64 seq2, const u64 seq3)
-- 
1.5.0.3


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2007-03-20 23:07 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-03-20 23:07 [PATCH 12/31] [DCCP]: Make `before' relation unambiguous Gerrit Renker

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.