aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp/feat.h
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2009-01-16 18:36:32 -0500
committerDavid S. Miller <davem@davemloft.net>2009-01-21 17:34:05 -0500
commit883ca833e5fb814fb03426c9d35e5489ce43e8da (patch)
treedcf361291b79e57195f8d89ca493c15c835b14cf /net/dccp/feat.h
parent792b48780e8b6435d017cef4b5c304876a48653e (diff)
dccp: Initialisation and type-checking of feature sysctls
This patch takes care of initialising and type-checking sysctls related to feature negotiation. Type checking is important since some of the sysctls now directly impact the feature-negotiation process. The sysctls are initialised with the known default values for each feature. For the type-checking the value constraints from RFC 4340 are used: * Sequence Window uses the specified Wmin=32, the maximum is ulong (4 bytes), tested and confirmed that it works up to 4294967295 - for Gbps speed; * Ack Ratio is between 0 .. 0xffff (2-byte unsigned integer); * CCIDs are between 0 .. 255; * request_retries, retries1, retries2 also between 0..255 for good measure; * tx_qlen is checked to be non-negative; * sync_ratelimit remains as before. Notes: ------ 1. Die s@sysctl_dccp_feat@sysctl_dccp@g since the sysctls are now in feat.c. 2. As pointed out by Arnaldo, the pattern of type-checking repeats itself in other places, sometimes with exactly the same kind of definitions (e.g. "static int zero;"). It may be a good idea (kernel janitors?) to consolidate type checking. For the sake of keeping the changeset small and in order not to affect other subsystems, I have not strived to generalise here. Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> Acked-by: Ian McDonald <ian.mcdonald@jandi.co.nz> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dccp/feat.h')
-rw-r--r--net/dccp/feat.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/net/dccp/feat.h b/net/dccp/feat.h
index 5e7b8481cd04..40aa7a10bd5f 100644
--- a/net/dccp/feat.h
+++ b/net/dccp/feat.h
@@ -100,6 +100,13 @@ struct ccid_dependency {
100 u8 val; 100 u8 val;
101}; 101};
102 102
103/*
104 * Sysctls to seed defaults for feature negotiation
105 */
106extern unsigned long sysctl_dccp_sequence_window;
107extern int sysctl_dccp_rx_ccid;
108extern int sysctl_dccp_tx_ccid;
109
103#ifdef CONFIG_IP_DCCP_DEBUG 110#ifdef CONFIG_IP_DCCP_DEBUG
104extern const char *dccp_feat_typename(const u8 type); 111extern const char *dccp_feat_typename(const u8 type);
105extern const char *dccp_feat_name(const u8 feat); 112extern const char *dccp_feat_name(const u8 feat);
@@ -114,6 +121,7 @@ static inline void dccp_feat_debug(const u8 type, const u8 feat, const u8 val)
114#endif /* CONFIG_IP_DCCP_DEBUG */ 121#endif /* CONFIG_IP_DCCP_DEBUG */
115 122
116extern int dccp_feat_init(struct sock *sk); 123extern int dccp_feat_init(struct sock *sk);
124extern void dccp_feat_initialise_sysctls(void);
117extern int dccp_feat_register_sp(struct sock *sk, u8 feat, u8 is_local, 125extern int dccp_feat_register_sp(struct sock *sk, u8 feat, u8 is_local,
118 u8 const *list, u8 len); 126 u8 const *list, u8 len);
119extern int dccp_feat_register_nn(struct sock *sk, u8 feat, u64 val); 127extern int dccp_feat_register_nn(struct sock *sk, u8 feat, u64 val);