[DCCP]: Remove ambiguity in the way before48 is used
This removes two ambiguities in employing the new definition of before48, following the analysis on http://www.mail-archive.com/dccp@vger.kernel.org/msg01295.html (1) Updating GSR when P.seqno >= S.SWL With the old definition we did not update when P.seqno and S.SWL are 2^47 apart. To ensure the same behaviour as with the old definition, this is replaced with the equivalent condition dccp_delta_seqno(S.SWL, P.seqno) >= 0 (2) Sending SYNC when P.seqno >= S.OSR Here it is debatable whether the new definition causes an ambiguity: the case is similar to (1); and to have consistency with the case (1), we use the equivalent condition dccp_delta_seqno(S.OSR, P.seqno) >= 0 Detailed Justification
This commit is contained in:
committed by
David S. Miller
parent
b16be51b5e
commit
8d13bf9a0b
@@ -86,7 +86,8 @@ static int dccp_check_seqno(struct sock *sk, struct sk_buff *skb)
|
|||||||
dh->dccph_type == DCCP_PKT_SYNCACK) {
|
dh->dccph_type == DCCP_PKT_SYNCACK) {
|
||||||
if (between48(DCCP_SKB_CB(skb)->dccpd_ack_seq,
|
if (between48(DCCP_SKB_CB(skb)->dccpd_ack_seq,
|
||||||
dp->dccps_awl, dp->dccps_awh) &&
|
dp->dccps_awl, dp->dccps_awh) &&
|
||||||
!before48(DCCP_SKB_CB(skb)->dccpd_seq, dp->dccps_swl))
|
dccp_delta_seqno(dp->dccps_swl,
|
||||||
|
DCCP_SKB_CB(skb)->dccpd_seq) >= 0)
|
||||||
dccp_update_gsr(sk, DCCP_SKB_CB(skb)->dccpd_seq);
|
dccp_update_gsr(sk, DCCP_SKB_CB(skb)->dccpd_seq);
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
@@ -203,7 +204,8 @@ static int __dccp_rcv_established(struct sock *sk, struct sk_buff *skb,
|
|||||||
if (dp->dccps_role != DCCP_ROLE_CLIENT)
|
if (dp->dccps_role != DCCP_ROLE_CLIENT)
|
||||||
goto send_sync;
|
goto send_sync;
|
||||||
check_seq:
|
check_seq:
|
||||||
if (!before48(DCCP_SKB_CB(skb)->dccpd_seq, dp->dccps_osr)) {
|
if (dccp_delta_seqno(dp->dccps_osr,
|
||||||
|
DCCP_SKB_CB(skb)->dccpd_seq) >= 0) {
|
||||||
send_sync:
|
send_sync:
|
||||||
dccp_send_sync(sk, DCCP_SKB_CB(skb)->dccpd_seq,
|
dccp_send_sync(sk, DCCP_SKB_CB(skb)->dccpd_seq,
|
||||||
DCCP_PKT_SYNC);
|
DCCP_PKT_SYNC);
|
||||||
|
Reference in New Issue
Block a user