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

Commit 2faae558 authored by Gerrit Renker's avatar Gerrit Renker
Browse files

dccp ccid-2: Use feature-negotiation to report Ack Ratio changes



This uses the new feature-negotiation framework to signal Ack Ratio changes,
as required by RFC 4341, sec. 6.1.2.

This raises some problems for CCID-2 since it can at the moment not cope
gracefully with Ack Ratio of e.g. 2. A FIXME has thus been added which
reverts to the existing policy of bypassing the Ack Ratio sysctl.

Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
Acked-by: default avatarIan McDonald <ian.mcdonald@jandi.co.nz>
parent 4861a354
Loading
Loading
Loading
Loading
+12 −0
Original line number Original line Diff line number Diff line
@@ -74,6 +74,18 @@ static int dccp_hdlr_seq_win(struct sock *sk, u64 seq_win, bool rx)


static int dccp_hdlr_ack_ratio(struct sock *sk, u64 ratio, bool rx)
static int dccp_hdlr_ack_ratio(struct sock *sk, u64 ratio, bool rx)
{
{
#ifndef __CCID2_COPES_GRACEFULLY_WITH_DYNAMIC_ACK_RATIO_UPDATES__
	/*
	 * FIXME: This is required until several problems in the CCID-2 code are
	 * resolved. The CCID-2 code currently does not cope well; using dynamic
	 * Ack Ratios greater than 1 caused instabilities. These were manifest
	 * in hangups and long RTO timeouts (1...3 seconds). Until this has been
	 * stabilised, it is safer not to activate dynamic Ack Ratio changes.
	 */
	dccp_pr_debug("Not changing %s Ack Ratio from 1 to %u\n",
		      rx ? "RX" : "TX", (u16)ratio);
	ratio = 1;
#endif
	if (rx)
	if (rx)
		dccp_sk(sk)->dccps_r_ack_ratio = ratio;
		dccp_sk(sk)->dccps_r_ack_ratio = ratio;
	else
	else
+0 −1
Original line number Original line Diff line number Diff line
@@ -189,7 +189,6 @@ int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized)
	dp->dccps_rate_last	= jiffies;
	dp->dccps_rate_last	= jiffies;
	dp->dccps_role		= DCCP_ROLE_UNDEFINED;
	dp->dccps_role		= DCCP_ROLE_UNDEFINED;
	dp->dccps_service	= DCCP_SERVICE_CODE_IS_ABSENT;
	dp->dccps_service	= DCCP_SERVICE_CODE_IS_ABSENT;
	dp->dccps_l_ack_ratio	= dp->dccps_r_ack_ratio = 1;


	dccp_init_xmit_timers(sk);
	dccp_init_xmit_timers(sk);