|
@@ -350,6 +350,7 @@ static int __dccp_feat_activate(struct sock *sk, const int idx,
|
|
* @feat_num: feature to activate, one of %dccp_feature_numbers
|
|
* @feat_num: feature to activate, one of %dccp_feature_numbers
|
|
* @local: whether local (1) or remote (0) @feat_num is meant
|
|
* @local: whether local (1) or remote (0) @feat_num is meant
|
|
* @fval: the value (SP or NN) to activate, or NULL to use the default value
|
|
* @fval: the value (SP or NN) to activate, or NULL to use the default value
|
|
|
|
+ *
|
|
* For general use this function is preferable over __dccp_feat_activate().
|
|
* For general use this function is preferable over __dccp_feat_activate().
|
|
*/
|
|
*/
|
|
static int dccp_feat_activate(struct sock *sk, u8 feat_num, bool local,
|
|
static int dccp_feat_activate(struct sock *sk, u8 feat_num, bool local,
|
|
@@ -446,6 +447,7 @@ static struct dccp_feat_entry *dccp_feat_list_lookup(struct list_head *fn_list,
|
|
* @head: list to add to
|
|
* @head: list to add to
|
|
* @feat: feature number
|
|
* @feat: feature number
|
|
* @local: whether the local (1) or remote feature with number @feat is meant
|
|
* @local: whether the local (1) or remote feature with number @feat is meant
|
|
|
|
+ *
|
|
* This is the only constructor and serves to ensure the above invariants.
|
|
* This is the only constructor and serves to ensure the above invariants.
|
|
*/
|
|
*/
|
|
static struct dccp_feat_entry *
|
|
static struct dccp_feat_entry *
|
|
@@ -504,6 +506,7 @@ static int dccp_feat_push_change(struct list_head *fn_list, u8 feat, u8 local,
|
|
* @feat: one of %dccp_feature_numbers
|
|
* @feat: one of %dccp_feature_numbers
|
|
* @local: whether local (1) or remote (0) @feat_num is being confirmed
|
|
* @local: whether local (1) or remote (0) @feat_num is being confirmed
|
|
* @fval: pointer to NN/SP value to be inserted or NULL
|
|
* @fval: pointer to NN/SP value to be inserted or NULL
|
|
|
|
+ *
|
|
* Returns 0 on success, a Reset code for further processing otherwise.
|
|
* Returns 0 on success, a Reset code for further processing otherwise.
|
|
*/
|
|
*/
|
|
static int dccp_feat_push_confirm(struct list_head *fn_list, u8 feat, u8 local,
|
|
static int dccp_feat_push_confirm(struct list_head *fn_list, u8 feat, u8 local,
|
|
@@ -691,6 +694,7 @@ int dccp_feat_insert_opts(struct dccp_sock *dp, struct dccp_request_sock *dreq,
|
|
* @feat: an NN feature from %dccp_feature_numbers
|
|
* @feat: an NN feature from %dccp_feature_numbers
|
|
* @mandatory: use Mandatory option if 1
|
|
* @mandatory: use Mandatory option if 1
|
|
* @nn_val: value to register (restricted to 4 bytes)
|
|
* @nn_val: value to register (restricted to 4 bytes)
|
|
|
|
+ *
|
|
* Note that NN features are local by definition (RFC 4340, 6.3.2).
|
|
* Note that NN features are local by definition (RFC 4340, 6.3.2).
|
|
*/
|
|
*/
|
|
static int __feat_register_nn(struct list_head *fn, u8 feat,
|
|
static int __feat_register_nn(struct list_head *fn, u8 feat,
|
|
@@ -760,6 +764,7 @@ int dccp_feat_register_sp(struct sock *sk, u8 feat, u8 is_local,
|
|
* dccp_feat_nn_get - Query current/pending value of NN feature
|
|
* dccp_feat_nn_get - Query current/pending value of NN feature
|
|
* @sk: DCCP socket of an established connection
|
|
* @sk: DCCP socket of an established connection
|
|
* @feat: NN feature number from %dccp_feature_numbers
|
|
* @feat: NN feature number from %dccp_feature_numbers
|
|
|
|
+ *
|
|
* For a known NN feature, returns value currently being negotiated, or
|
|
* For a known NN feature, returns value currently being negotiated, or
|
|
* current (confirmed) value if no negotiation is going on.
|
|
* current (confirmed) value if no negotiation is going on.
|
|
*/
|
|
*/
|
|
@@ -790,6 +795,7 @@ EXPORT_SYMBOL_GPL(dccp_feat_nn_get);
|
|
* @sk: DCCP socket of an established connection
|
|
* @sk: DCCP socket of an established connection
|
|
* @feat: NN feature number from %dccp_feature_numbers
|
|
* @feat: NN feature number from %dccp_feature_numbers
|
|
* @nn_val: the new value to use
|
|
* @nn_val: the new value to use
|
|
|
|
+ *
|
|
* This function is used to communicate NN updates out-of-band.
|
|
* This function is used to communicate NN updates out-of-band.
|
|
*/
|
|
*/
|
|
int dccp_feat_signal_nn_change(struct sock *sk, u8 feat, u64 nn_val)
|
|
int dccp_feat_signal_nn_change(struct sock *sk, u8 feat, u64 nn_val)
|
|
@@ -930,6 +936,7 @@ static const struct ccid_dependency *dccp_feat_ccid_deps(u8 ccid, bool is_local)
|
|
* @fn: feature-negotiation list to update
|
|
* @fn: feature-negotiation list to update
|
|
* @id: CCID number to track
|
|
* @id: CCID number to track
|
|
* @is_local: whether TX CCID (1) or RX CCID (0) is meant
|
|
* @is_local: whether TX CCID (1) or RX CCID (0) is meant
|
|
|
|
+ *
|
|
* This function needs to be called after registering all other features.
|
|
* This function needs to be called after registering all other features.
|
|
*/
|
|
*/
|
|
static int dccp_feat_propagate_ccid(struct list_head *fn, u8 id, bool is_local)
|
|
static int dccp_feat_propagate_ccid(struct list_head *fn, u8 id, bool is_local)
|
|
@@ -953,6 +960,7 @@ static int dccp_feat_propagate_ccid(struct list_head *fn, u8 id, bool is_local)
|
|
/**
|
|
/**
|
|
* dccp_feat_finalise_settings - Finalise settings before starting negotiation
|
|
* dccp_feat_finalise_settings - Finalise settings before starting negotiation
|
|
* @dp: client or listening socket (settings will be inherited)
|
|
* @dp: client or listening socket (settings will be inherited)
|
|
|
|
+ *
|
|
* This is called after all registrations (socket initialisation, sysctls, and
|
|
* This is called after all registrations (socket initialisation, sysctls, and
|
|
* sockopt calls), and before sending the first packet containing Change options
|
|
* sockopt calls), and before sending the first packet containing Change options
|
|
* (ie. client-Request or server-Response), to ensure internal consistency.
|
|
* (ie. client-Request or server-Response), to ensure internal consistency.
|
|
@@ -1284,6 +1292,7 @@ confirmation_failed:
|
|
* @feat: NN number, one of %dccp_feature_numbers
|
|
* @feat: NN number, one of %dccp_feature_numbers
|
|
* @val: NN value
|
|
* @val: NN value
|
|
* @len: length of @val in bytes
|
|
* @len: length of @val in bytes
|
|
|
|
+ *
|
|
* This function combines the functionality of change_recv/confirm_recv, with
|
|
* This function combines the functionality of change_recv/confirm_recv, with
|
|
* the following differences (reset codes are the same):
|
|
* the following differences (reset codes are the same):
|
|
* - cleanup after receiving the Confirm;
|
|
* - cleanup after receiving the Confirm;
|
|
@@ -1379,6 +1388,7 @@ fast_path_failed:
|
|
* @feat: one of %dccp_feature_numbers
|
|
* @feat: one of %dccp_feature_numbers
|
|
* @val: value contents of @opt
|
|
* @val: value contents of @opt
|
|
* @len: length of @val in bytes
|
|
* @len: length of @val in bytes
|
|
|
|
+ *
|
|
* Returns 0 on success, a Reset code for ending the connection otherwise.
|
|
* Returns 0 on success, a Reset code for ending the connection otherwise.
|
|
*/
|
|
*/
|
|
int dccp_feat_parse_options(struct sock *sk, struct dccp_request_sock *dreq,
|
|
int dccp_feat_parse_options(struct sock *sk, struct dccp_request_sock *dreq,
|