Skip to contentSkip to conversation

: Revert changes which disallow bidirectional communication

PATCH Superseded Gerrit Renker 2 participants 2 messages Mar 7, 2007 Networking

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 : Revert changes which disallow bidirectional communication

Arnaldo, can you please consider this patch instead of the one sent yesterday. It fully restores bidirectional communication, the one yesterday will not help.
Gerrit

----------------------------> Patch v2 <-------------------------------------- [DCCP]: Revert patch which disables bidirectional mode

This reverts an earlier patch which disabled bidirectional mode, meaning that a listening (passive) socket was not allowed to write to the other (active) end of the connection.

This mode had been disabled when there were problems with CCID3, but it imposes a constraint on socket programming and thus hinders deployment.

A change is included to ignore RX feedback received by the TX CCID3 module.

Many thanks to Andre Noll for pointing out this bug.

---
 net/dccp/ccids/ccid3.c |    7 +------
 net/dccp/input.c       |   21 ++++-----------------
 2 files changed, 5 insertions(+), 23 deletions(-)
net/dccp/input.c +4 -17
@@ -250,18 +250,8 @@ int dccp_rcv_established(struct sock *sk
 			    DCCP_ACKVEC_STATE_RECEIVED))
 		goto discard;
 
-	/*
-	 * Deliver to the CCID module in charge.
-	 * FIXME: Currently DCCP operates one-directional only, i.e. a listening
-	 *        server is not at the same time a connecting client. There is
-	 *        not much sense in delivering to both rx/tx sides at the moment
-	 *        (only one is active at a time); when moving to bidirectional
-	 *        service, this needs to be revised.
-	 */
-	if (dccp_sk(sk)->dccps_role = DCCP_ROLE_SERVER)
-		ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb);
-	else
-		ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb);
+	ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb);
+	ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb);
 
 	return __dccp_rcv_established(sk, skb, dh, len);
 discard:
@@ -504,11 +494,8 @@ int dccp_rcv_state_process(struct sock *
 				    DCCP_ACKVEC_STATE_RECEIVED))
 			goto discard;
 
-		/* XXX see the comments in dccp_rcv_established about this */
-		if (dccp_sk(sk)->dccps_role = DCCP_ROLE_SERVER)
-			ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb);
-		else
-			ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb);
+		ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb);
+		ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb);
 	}
 
 	/*
net/dccp/ccids/ccid3.c +1 -6
@@ -554,12 +554,7 @@ static void ccid3_hc_tx_packet_recv(stru
 		/* set idle flag */
 		hctx->ccid3hctx_idle = 1;
 		break;
-	case TFRC_SSTATE_NO_SENT:
-		/*
-		 * XXX when implementing bidirectional rx/tx check this again
-		 */
-		DCCP_WARN("Illegal ACK received - no packet sent\n");
-		/* fall through */
+	case TFRC_SSTATE_NO_SENT:	/* fall through */
 	case TFRC_SSTATE_TERM:		/* ignore feedback when closing */
 		break;
 	}
maintainer
#1 lore raw

Re: [PATCHv2] [DCCP]: Revert changes which disallow bidirectional

From: Gerrit Renker <[email protected]>
Date: Wed, 7 Mar 2007 07:23:34 +0000

Quoted 3 lines

Arnaldo, can you please consider this patch instead of the one sent yesterday. It fully restores bidirectional communication, the one yesterday will not help.

The one you sent the other day is already in Linus's tree, so you'll need to provide something relative to fix this up properly.

Thanks.