Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d46861b authored by Gerrit Renker's avatar Gerrit Renker Committed by David S. Miller
Browse files

[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: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1e51f951
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -256,10 +256,10 @@ int dccp_rcv_established(struct sock *sk, struct sk_buff *skb,
	 *        (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
	if (dccp_sk(sk)->dccps_role == DCCP_ROLE_CLIENT)
		ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb);
	else	/* listening or connected server */
		ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb);

	return __dccp_rcv_established(sk, skb, dh, len);
discard:
@@ -495,10 +495,10 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
			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
		if (dccp_sk(sk)->dccps_role == DCCP_ROLE_CLIENT)
			ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb);
		else
			ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb);
	}

	/*