/* dccp_feat_finalise_settings - Finalise settings before starting negotiation @dp: client or listening socket (settings will be inherited) This is called after all registrations (socket initialisation, sysctls, and sockopt calls), and before sending the first packet containing Change options (ie. client-Request or server-Response), to ensure internal consistency.  */
int dccp_feat_finalise_settings(struct dccp_sock *dp)
/* dccp_feat_finalise_settings - Finalise settings before starting negotiation @dp: client or listening socket (settings will be inherited) This is called after all registrations (socket initialisation, sysctls, and sockopt calls), and before sending the first packet containing Change options (ie. client-Request or server-Response), to ensure internal consistency.  */
int dccp_feat_finalise_settings(struct dccp_sock *dp)
{
	struct list_head *fn = &dp->dccps_featneg;
	struct dccp_feat_entry *entry;
	int i = 2, ccids[2] = { -1, -1 };
	list_for_each_entry(entry, fn, node)
		if (entry->feat_num == DCCPF_CCID && entry->val.sp.len == 1)
			ccids[entry->is_local] = entry->val.sp.vec[0];
	while (i--)
		if (ccids[i] > 0 && dccp_feat_propagate_ccid(fn, ccids[i], i))
			return -1;
	dccp_feat_print_fnlist(fn);
	return 0;
}