dccp: send Confirm options only once
If a connection is in the OPEN state, remove feature negotiation Confirm options from the list of options after sending them once; as such options are NOT supposed to be retransmitted and are ONLY supposed to be sent in response to a Change option (RFC 4340 6.2). Signed-off-by: Samuel Jero <sj323707@ohio.edu> Acked-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
This commit is contained in:
parent
44e6fd9e67
commit
a6444f4237
@ -665,11 +665,22 @@ int dccp_feat_insert_opts(struct dccp_sock *dp, struct dccp_request_sock *dreq,
|
|||||||
return -1;
|
return -1;
|
||||||
if (pos->needs_mandatory && dccp_insert_option_mandatory(skb))
|
if (pos->needs_mandatory && dccp_insert_option_mandatory(skb))
|
||||||
return -1;
|
return -1;
|
||||||
/*
|
|
||||||
* Enter CHANGING after transmitting the Change option (6.6.2).
|
if (skb->sk->sk_state == DCCP_OPEN &&
|
||||||
*/
|
(opt == DCCPO_CONFIRM_R || opt == DCCPO_CONFIRM_L)) {
|
||||||
if (pos->state == FEAT_INITIALISING)
|
/*
|
||||||
pos->state = FEAT_CHANGING;
|
* Confirms don't get retransmitted (6.6.3) once the
|
||||||
|
* connection is in state OPEN
|
||||||
|
*/
|
||||||
|
dccp_feat_list_pop(pos);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Enter CHANGING after transmitting the Change
|
||||||
|
* option (6.6.2).
|
||||||
|
*/
|
||||||
|
if (pos->state == FEAT_INITIALISING)
|
||||||
|
pos->state = FEAT_CHANGING;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user