]> err.no Git - linux-2.6/blobdiff - include/net/inet_frag.h
[TCP]: Abstract tp->highest_sack accessing & point to next skb
[linux-2.6] / include / net / inet_frag.h
index d51f23873da96dbfe5f59980926910ece0eae5e8..954def408975a13a11b6e57cbeb3624346f0328c 100644 (file)
@@ -20,17 +20,48 @@ struct inet_frag_queue {
 
 #define INETFRAGS_HASHSZ               64
 
+struct inet_frags_ctl {
+       int high_thresh;
+       int low_thresh;
+       int timeout;
+       int secret_interval;
+};
+
 struct inet_frags {
        struct list_head        lru_list;
        struct hlist_head       hash[INETFRAGS_HASHSZ];
        rwlock_t                lock;
        u32                     rnd;
        int                     nqueues;
+       int                     qsize;
        atomic_t                mem;
        struct timer_list       secret_timer;
+       struct inet_frags_ctl   *ctl;
+
+       unsigned int            (*hashfn)(struct inet_frag_queue *);
+       void                    (*constructor)(struct inet_frag_queue *q,
+                                               void *arg);
+       void                    (*destructor)(struct inet_frag_queue *);
+       void                    (*skb_free)(struct sk_buff *);
+       int                     (*match)(struct inet_frag_queue *q,
+                                               void *arg);
+       void                    (*frag_expire)(unsigned long data);
 };
 
 void inet_frags_init(struct inet_frags *);
 void inet_frags_fini(struct inet_frags *);
 
+void inet_frag_kill(struct inet_frag_queue *q, struct inet_frags *f);
+void inet_frag_destroy(struct inet_frag_queue *q,
+                               struct inet_frags *f, int *work);
+int inet_frag_evictor(struct inet_frags *f);
+struct inet_frag_queue *inet_frag_find(struct inet_frags *f, void *key,
+               unsigned int hash);
+
+static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f)
+{
+       if (atomic_dec_and_test(&q->refcnt))
+               inet_frag_destroy(q, f, NULL);
+}
+
 #endif