diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2007-03-06 17:24:18 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-03-06 17:24:18 -0500 |
commit | 4d46861be6196d0f1614724590968d8da26af82a (patch) | |
tree | d9c579064159f52edd5dbebed85214ae6a3468df | |
parent | 1e51f9513e6b021abcaefd7c76f9b5d682f83232 (diff) |
[DCCP]: Correctly split CCID half connections
This fixes a bug caused by a previous patch, which causes DCCP servers in
LISTEN state to not receive packets.
This patch changes the logic so that
* servers in either LISTEN or OPEN state get the RX half connection packets
* clients in OPEN state get the TX half connection packets
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/dccp/input.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/net/dccp/input.c b/net/dccp/input.c index 4dee462f00db..287099f7f042 100644 --- a/net/dccp/input.c +++ b/net/dccp/input.c | |||
@@ -256,10 +256,10 @@ int dccp_rcv_established(struct sock *sk, struct sk_buff *skb, | |||
256 | * (only one is active at a time); when moving to bidirectional | 256 | * (only one is active at a time); when moving to bidirectional |
257 | * service, this needs to be revised. | 257 | * service, this needs to be revised. |
258 | */ | 258 | */ |
259 | if (dccp_sk(sk)->dccps_role == DCCP_ROLE_SERVER) | 259 | if (dccp_sk(sk)->dccps_role == DCCP_ROLE_CLIENT) |
260 | ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb); | ||
261 | else | ||
262 | ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb); | 260 | ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb); |
261 | else /* listening or connected server */ | ||
262 | ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb); | ||
263 | 263 | ||
264 | return __dccp_rcv_established(sk, skb, dh, len); | 264 | return __dccp_rcv_established(sk, skb, dh, len); |
265 | discard: | 265 | discard: |
@@ -495,10 +495,10 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb, | |||
495 | goto discard; | 495 | goto discard; |
496 | 496 | ||
497 | /* XXX see the comments in dccp_rcv_established about this */ | 497 | /* XXX see the comments in dccp_rcv_established about this */ |
498 | if (dccp_sk(sk)->dccps_role == DCCP_ROLE_SERVER) | 498 | if (dccp_sk(sk)->dccps_role == DCCP_ROLE_CLIENT) |
499 | ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb); | ||
500 | else | ||
501 | ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb); | 499 | ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb); |
500 | else | ||
501 | ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb); | ||
502 | } | 502 | } |
503 | 503 | ||
504 | /* | 504 | /* |