2007-10-15 13:24:19 +04:00
# ifndef __NET_FRAG_H__
# define __NET_FRAG_H__
struct inet_frag_queue {
struct hlist_node list ;
struct list_head lru_list ; /* lru list member */
spinlock_t lock ;
atomic_t refcnt ;
struct timer_list timer ; /* when will this queue expire? */
struct sk_buff * fragments ; /* list of received fragments */
ktime_t stamp ;
int len ; /* total length of orig datagram */
int meat ;
__u8 last_in ; /* first/last segment arrived? */
# define COMPLETE 4
# define FIRST_IN 2
# define LAST_IN 1
} ;
2007-10-15 13:31:52 +04:00
# define INETFRAGS_HASHSZ 64
2007-10-15 13:33:45 +04:00
struct inet_frags_ctl {
int high_thresh ;
int low_thresh ;
int timeout ;
int secret_interval ;
} ;
2007-10-15 13:31:52 +04:00
struct inet_frags {
struct list_head lru_list ;
struct hlist_head hash [ INETFRAGS_HASHSZ ] ;
rwlock_t lock ;
u32 rnd ;
int nqueues ;
2007-10-15 13:39:14 +04:00
int qsize ;
2007-10-15 13:31:52 +04:00
atomic_t mem ;
struct timer_list secret_timer ;
2007-10-15 13:33:45 +04:00
struct inet_frags_ctl * ctl ;
2007-10-15 13:38:08 +04:00
unsigned int ( * hashfn ) ( struct inet_frag_queue * ) ;
2007-10-15 13:39:14 +04:00
void ( * destructor ) ( struct inet_frag_queue * ) ;
void ( * skb_free ) ( struct sk_buff * ) ;
2007-10-15 13:31:52 +04:00
} ;
void inet_frags_init ( struct inet_frags * ) ;
void inet_frags_fini ( struct inet_frags * ) ;
2007-10-15 13:37:18 +04:00
void inet_frag_kill ( struct inet_frag_queue * q , struct inet_frags * f ) ;
2007-10-15 13:39:14 +04:00
void inet_frag_destroy ( struct inet_frag_queue * q ,
struct inet_frags * f , int * work ) ;
2007-10-15 13:40:06 +04:00
int inet_frag_evictor ( struct inet_frags * f ) ;
2007-10-15 13:37:18 +04:00
2007-10-15 13:24:19 +04:00
# endif