LCOV - code coverage report
Current view: top level - include/net - inet_frag.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 2 100.0 %
Date: 2017-01-25 Functions: 0 0 -

          Line data    Source code
       1             : #ifndef __NET_FRAG_H__
       2             : #define __NET_FRAG_H__
       3             : 
       4             : struct netns_frags {
       5             :         int                     nqueues;
       6             :         atomic_t                mem;
       7             :         struct list_head        lru_list;
       8             : 
       9             :         /* sysctls */
      10             :         int                     timeout;
      11             :         int                     high_thresh;
      12             :         int                     low_thresh;
      13             : };
      14             : 
      15             : struct inet_frag_queue {
      16             :         struct hlist_node       list;
      17             :         struct netns_frags      *net;
      18             :         struct list_head        lru_list;   /* lru list member */
      19             :         spinlock_t              lock;
      20             :         atomic_t                refcnt;
      21             :         struct timer_list       timer;      /* when will this queue expire? */
      22             :         struct sk_buff          *fragments; /* list of received fragments */
      23             :         ktime_t                 stamp;
      24             :         int                     len;        /* total length of orig datagram */
      25             :         int                     meat;
      26             :         __u8                    last_in;    /* first/last segment arrived? */
      27             : 
      28             : #define INET_FRAG_COMPLETE      4
      29             : #define INET_FRAG_FIRST_IN      2
      30             : #define INET_FRAG_LAST_IN       1
      31             : };
      32             : 
      33             : #define INETFRAGS_HASHSZ                64
      34             : 
      35             : struct inet_frags {
      36             :         struct hlist_head       hash[INETFRAGS_HASHSZ];
      37             :         rwlock_t                lock;
      38             :         u32                     rnd;
      39             :         int                     qsize;
      40             :         int                     secret_interval;
      41             :         struct timer_list       secret_timer;
      42             : 
      43             :         unsigned int            (*hashfn)(struct inet_frag_queue *);
      44             :         void                    (*constructor)(struct inet_frag_queue *q,
      45             :                                                 void *arg);
      46             :         void                    (*destructor)(struct inet_frag_queue *);
      47             :         void                    (*skb_free)(struct sk_buff *);
      48             :         int                     (*match)(struct inet_frag_queue *q,
      49             :                                                 void *arg);
      50             :         void                    (*frag_expire)(unsigned long data);
      51             : };
      52             : 
      53             : void inet_frags_init(struct inet_frags *);
      54             : void inet_frags_fini(struct inet_frags *);
      55             : 
      56             : void inet_frags_init_net(struct netns_frags *nf);
      57             : void inet_frags_exit_net(struct netns_frags *nf, struct inet_frags *f);
      58             : 
      59             : void inet_frag_kill(struct inet_frag_queue *q, struct inet_frags *f);
      60             : void inet_frag_destroy(struct inet_frag_queue *q,
      61             :                                 struct inet_frags *f, int *work);
      62             : int inet_frag_evictor(struct netns_frags *nf, struct inet_frags *f);
      63             : struct inet_frag_queue *inet_frag_find(struct netns_frags *nf,
      64             :                 struct inet_frags *f, void *key, unsigned int hash)
      65             :         __releases(&f->lock);
      66             : 
      67             : static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f)
      68             : {
      69             :         if (atomic_dec_and_test(&q->refcnt))
      70             :                 inet_frag_destroy(q, f, NULL);
      71             : }
      72           1 : 
      73             : #endif

Generated by: LCOV version 1.10