* [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.