: Increase the scope of variable-length htonl/ntohl functions
PATCH 2/11 : Increase the scope of variable-length htonl/ntohl functions
[DCCP]: Increase the scope of variable-length htonl/ntohl functions
This extends the scope of two available functions, encode|decode_value_var, to work up to 6 (8) bytes, to match maximum requirements in the RFC.
These functions are going to be used both by general option processing and feature negotiation code, hence declarations have been put into feat.h.
--- net/dccp/feat.h | 2 ++ net/dccp/options.c | 21 ++++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-)
net/dccp/feat.h +2 -0
@@ -120,4 +120,6 @@ static inline u8 dccp_bytes_per_value(co return value > 0xFFFF? 4 : (value > 0xFF? 2 : 1); } +extern void dccp_encode_value_var (const u64 value,u8 *to,const u8 len); +extern u64 dccp_decode_value_var (const u8 *bf,const u8 len);#endif /* _DCCP_FEAT_H */
net/dccp/options.c +14 -7
@@ -23,16 +23,20 @@#include "dccp.h" #include "feat.h" -static u32 dccp_decode_value_var (const unsigned char *bf,const u8 len) +u64 dccp_decode_value_var (const u8 *bf,const u8 len) { -u32 value =0 ; +u64 value =0 ; +if (len >5 ) + value += ((u64)*bf++) <<40 ; +if (len >4 ) + value += ((u64)*bf++) <<32 ;if (len >3 ) - value += *bf++ <<24 ; + value += ((u64)*bf++) <<24 ;if (len >2 ) - value += *bf++ <<16 ; + value += ((u64)*bf++) <<16 ;if (len >1 ) - value += *bf++ <<8 ; + value += ((u64)*bf++) <<8 ;if (len >0 ) value += *bf;
@@ -286,9 +290,12 @@ out_invalid_option:EXPORT_SYMBOL_GPL (dccp_parse_options); -static void dccp_encode_value_var (const u32 value,unsigned char *to, -const unsigned int len) +void dccp_encode_value_var (const u64 value,u8 *to,const u8 len) { +if (len >5 ) + *to++ = (value &0xFF0000000000ull ) >>40 ; +if (len >4 ) + *to++ = (value &0xFF00000000ull ) >>32 ;if (len >3 ) *to++ = (value &0xFF000000 ) >>24 ;if (len >2 )
Quoted 9 lines · Gerrit Renker
[DCCP]: Increase the scope of variable-length htonl/ntohl functions
This extends the scope of two available functions, encode|decode_value_var, to work up to 6 (8) bytes, to match maximum requirements in the RFC.
These functions are going to be used both by general option processing and feature negotiation code, hence declarations have been put into
feat.h.Signed-off-by Gerrit Renker <[email protected]>
Signature · 3 lines
Web1: http://wand.net.nz/~iam4/ Web2: http://www.jandi.co.nz Blog: http://iansblog.jandi.co.nz