1#ifndef _DCCP_FEAT_H 2#define _DCCP_FEAT_H 3/* 4 * net/dccp/feat.h 5 * 6 * An implementation of the DCCP protocol 7 * Copyright (c) 2005 Andrea Bittau <a.bittau@cs.ucl.ac.uk> 8 * 9 * This program is free software; you can redistribute it and/or modify it 10 * under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 */ 13 14#include <linux/types.h> 15#include "dccp.h" 16 17static inline int dccp_feat_is_valid_length(u8 type, u8 feature, u8 len) 18{ 19 /* sec. 6.1: Confirm has at least length 3, 20 * sec. 6.2: Change has at least length 4 */ 21 if (len < 3) 22 return 1; 23 if (len < 4 && (type == DCCPO_CHANGE_L || type == DCCPO_CHANGE_R)) 24 return 1; 25 return 0; 26} 27 28static inline int dccp_feat_is_reserved(const u8 feat) 29{ 30 return (feat > DCCPF_DATA_CHECKSUM && 31 feat < DCCPF_MIN_CCID_SPECIFIC) || 32 feat == DCCPF_RESERVED; 33} 34 35/* feature negotiation knows only these four option types (RFC 4340, sec. 6) */ 36static inline int dccp_feat_is_valid_type(const u8 optnum) 37{ 38 return optnum >= DCCPO_CHANGE_L && optnum <= DCCPO_CONFIRM_R; 39 40} 41 42#ifdef CONFIG_IP_DCCP_DEBUG 43extern const char *dccp_feat_typename(const u8 type); 44extern const char *dccp_feat_name(const u8 feat); 45 46static inline void dccp_feat_debug(const u8 type, const u8 feat, const u8 val) 47{ 48 dccp_pr_debug("%s(%s (%d), %d)\n", dccp_feat_typename(type), 49 dccp_feat_name(feat), feat, val); 50} 51#else 52#define dccp_feat_debug(type, feat, val) 53#endif /* CONFIG_IP_DCCP_DEBUG */ 54 55extern int dccp_feat_change(struct dccp_minisock *dmsk, u8 type, u8 feature, 56 u8 *val, u8 len, gfp_t gfp); 57extern int dccp_feat_change_recv(struct sock *sk, u8 type, u8 feature, 58 u8 *val, u8 len); 59extern int dccp_feat_confirm_recv(struct sock *sk, u8 type, u8 feature, 60 u8 *val, u8 len); 61extern void dccp_feat_clean(struct dccp_minisock *dmsk); 62extern int dccp_feat_clone(struct sock *oldsk, struct sock *newsk); 63extern int dccp_feat_init(struct dccp_minisock *dmsk); 64 65#endif /* _DCCP_FEAT_H */ 66