Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.14-rc5 133 lines 3.9 kB view raw
1#ifndef _ACKVEC_H 2#define _ACKVEC_H 3/* 4 * net/dccp/ackvec.h 5 * 6 * An implementation of the DCCP protocol 7 * Copyright (c) 2005 Arnaldo Carvalho de Melo <acme@mandriva.com> 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/config.h> 15#include <linux/compiler.h> 16#include <linux/time.h> 17#include <linux/types.h> 18 19/* Read about the ECN nonce to see why it is 253 */ 20#define DCCP_MAX_ACKVEC_LEN 253 21 22#define DCCP_ACKVEC_STATE_RECEIVED 0 23#define DCCP_ACKVEC_STATE_ECN_MARKED (1 << 6) 24#define DCCP_ACKVEC_STATE_NOT_RECEIVED (3 << 6) 25 26#define DCCP_ACKVEC_STATE_MASK 0xC0 /* 11000000 */ 27#define DCCP_ACKVEC_LEN_MASK 0x3F /* 00111111 */ 28 29/** struct dccp_ackvec - ack vector 30 * 31 * This data structure is the one defined in the DCCP draft 32 * Appendix A. 33 * 34 * @dccpav_buf_head - circular buffer head 35 * @dccpav_buf_tail - circular buffer tail 36 * @dccpav_buf_ackno - ack # of the most recent packet acknowledgeable in the 37 * buffer (i.e. %dccpav_buf_head) 38 * @dccpav_buf_nonce - the one-bit sum of the ECN Nonces on all packets acked 39 * by the buffer with State 0 40 * 41 * Additionally, the HC-Receiver must keep some information about the 42 * Ack Vectors it has recently sent. For each packet sent carrying an 43 * Ack Vector, it remembers four variables: 44 * 45 * @dccpav_ack_seqno - the Sequence Number used for the packet 46 * (HC-Receiver seqno) 47 * @dccpav_ack_ptr - the value of buf_head at the time of acknowledgement. 48 * @dccpav_ack_ackno - the Acknowledgement Number used for the packet 49 * (HC-Sender seqno) 50 * @dccpav_ack_nonce - the one-bit sum of the ECN Nonces for all State 0. 51 * 52 * @dccpav_buf_len - circular buffer length 53 * @dccpav_time - the time in usecs 54 * @dccpav_buf - circular buffer of acknowledgeable packets 55 */ 56struct dccp_ackvec { 57 unsigned int dccpav_buf_head; 58 unsigned int dccpav_buf_tail; 59 u64 dccpav_buf_ackno; 60 u64 dccpav_ack_seqno; 61 u64 dccpav_ack_ackno; 62 unsigned int dccpav_ack_ptr; 63 unsigned int dccpav_sent_len; 64 unsigned int dccpav_vec_len; 65 unsigned int dccpav_buf_len; 66 struct timeval dccpav_time; 67 u8 dccpav_buf_nonce; 68 u8 dccpav_ack_nonce; 69 u8 dccpav_buf[0]; 70}; 71 72struct sock; 73struct sk_buff; 74 75#ifdef CONFIG_IP_DCCP_ACKVEC 76extern struct dccp_ackvec *dccp_ackvec_alloc(unsigned int len, 77 const gfp_t priority); 78extern void dccp_ackvec_free(struct dccp_ackvec *av); 79 80extern int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk, 81 const u64 ackno, const u8 state); 82 83extern void dccp_ackvec_check_rcv_ackno(struct dccp_ackvec *av, 84 struct sock *sk, const u64 ackno); 85extern int dccp_ackvec_parse(struct sock *sk, const struct sk_buff *skb, 86 const u8 opt, const u8 *value, const u8 len); 87 88extern int dccp_insert_option_ackvec(struct sock *sk, struct sk_buff *skb); 89 90static inline int dccp_ackvec_pending(const struct dccp_ackvec *av) 91{ 92 return av->dccpav_sent_len != av->dccpav_vec_len; 93} 94#else /* CONFIG_IP_DCCP_ACKVEC */ 95static inline struct dccp_ackvec *dccp_ackvec_alloc(unsigned int len, 96 const gfp_t priority) 97{ 98 return NULL; 99} 100 101static inline void dccp_ackvec_free(struct dccp_ackvec *av) 102{ 103} 104 105static inline int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk, 106 const u64 ackno, const u8 state) 107{ 108 return -1; 109} 110 111static inline void dccp_ackvec_check_rcv_ackno(struct dccp_ackvec *av, 112 struct sock *sk, const u64 ackno) 113{ 114} 115 116static inline int dccp_ackvec_parse(struct sock *sk, const struct sk_buff *skb, 117 const u8 opt, const u8 *value, const u8 len) 118{ 119 return -1; 120} 121 122static inline int dccp_insert_option_ackvec(const struct sock *sk, 123 const struct sk_buff *skb) 124{ 125 return -1; 126} 127 128static inline int dccp_ackvec_pending(const struct dccp_ackvec *av) 129{ 130 return 0; 131} 132#endif /* CONFIG_IP_DCCP_ACKVEC */ 133#endif /* _ACKVEC_H */