Lines Matching defs:feat_num
129 u8 feat_num; /* DCCPF_xxx */
168 * @feat_num: feature to hash, one of %dccp_feature_numbers
172 static int dccp_feat_index(u8 feat_num)
175 if (feat_num > DCCPF_RESERVED && feat_num <= DCCPF_DATA_CHECKSUM)
176 return feat_num - 1;
182 switch (feat_num) {
189 static u8 dccp_feat_type(u8 feat_num)
191 int idx = dccp_feat_index(feat_num);
198 static int dccp_feat_default_value(u8 feat_num)
200 int idx = dccp_feat_index(feat_num);
254 static void dccp_feat_printval(u8 feat_num, dccp_feat_val const *val)
256 u8 i, type = dccp_feat_type(feat_num);
269 static void dccp_feat_printvals(u8 feat_num, u8 *list, u8 len)
271 u8 type = dccp_feat_type(feat_num);
276 dccp_feat_printval(feat_num, &fval);
282 dccp_feat_fname(entry->feat_num));
283 dccp_feat_printval(entry->feat_num, &entry->val);
338 dccp_feat_fname(dccp_feat_table[idx].feat_num),
347 * @feat_num: feature to activate, one of %dccp_feature_numbers
348 * @local: whether local (1) or remote (0) @feat_num is meant
353 static int dccp_feat_activate(struct sock *sk, u8 feat_num, bool local,
356 return __dccp_feat_activate(sk, dccp_feat_index(feat_num), local, fval);
360 static inline int dccp_feat_must_be_understood(u8 feat_num)
362 return feat_num == DCCPF_CCID || feat_num == DCCPF_SHORT_SEQNOS ||
363 feat_num == DCCPF_SEQUENCE_WINDOW;
380 static void dccp_feat_val_destructor(u8 feat_num, dccp_feat_val *val)
384 if (dccp_feat_type(feat_num) == FEAT_SP)
393 u8 type = dccp_feat_type(original->feat_num);
414 dccp_feat_val_destructor(entry->feat_num, &entry->val);
423 * - each feat_num in the list is known, i.e. we know its type and default value
424 * - each feat_num/is_local combination is unique (old entries are overwritten)
429 u8 feat_num, bool is_local)
434 if (entry->feat_num == feat_num && entry->is_local == is_local)
436 else if (entry->feat_num > feat_num)
456 if (entry->feat_num == feat && entry->is_local == local) {
457 dccp_feat_val_destructor(entry->feat_num, &entry->val);
459 } else if (entry->feat_num > feat) {
466 entry->feat_num = feat;
477 * @local: whether local (1) or remote (0) @feat_num is meant
489 new->feat_num = feat;
504 * @local: whether local (1) or remote (0) @feat_num is being confirmed
517 new->feat_num = feat;
572 * @feat_num: feature to return length of, one of %dccp_feature_numbers
577 static u8 dccp_feat_valid_nn_length(u8 feat_num)
579 if (feat_num == DCCPF_ACK_RATIO) /* RFC 4340, 11.3 and 6.6.8 */
581 if (feat_num == DCCPF_SEQUENCE_WINDOW) /* RFC 4340, 7.5.2 and 6.5 */
586 static u8 dccp_feat_is_valid_nn_val(u8 feat_num, u64 val)
588 switch (feat_num) {
598 static u8 dccp_feat_is_valid_sp_val(u8 feat_num, u8 val)
600 switch (feat_num) {
617 static u8 dccp_feat_sp_list_ok(u8 feat_num, u8 const *sp_list, u8 sp_len)
622 if (!dccp_feat_is_valid_sp_val(feat_num, *sp_list++))
644 type = dccp_feat_type(pos->feat_num);
656 len = dccp_feat_valid_nn_length(pos->feat_num);
660 DCCP_BUG("unknown feature %u", pos->feat_num);
664 dccp_feat_print_opt(opt, pos->feat_num, ptr, len, 0);
666 if (dccp_insert_fn_opt(skb, opt, pos->feat_num, ptr, len, rpt))
988 if (entry->feat_num == DCCPF_CCID && entry->val.sp.len == 1)
1528 idx = dccp_feat_index(cur->feat_num);
1530 DCCP_BUG("Unknown feature %u", cur->feat_num);
1536 dccp_feat_fname(cur->feat_num),