Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #ifndef _NF_CONNTRACK_EXTEND_H
  2 #define _NF_CONNTRACK_EXTEND_H
  3 
  4 #include <net/netfilter/nf_conntrack.h>
  5 
  6 enum nf_ct_ext_id
  7 {
  8         NF_CT_EXT_HELPER,
  9         NF_CT_EXT_NAT,
 10         NF_CT_EXT_ACCT,
 11         NF_CT_EXT_ECACHE,
 12         NF_CT_EXT_NUM,
 13 };
 14 
 15 #define NF_CT_EXT_HELPER_TYPE struct nf_conn_help
 16 #define NF_CT_EXT_NAT_TYPE struct nf_conn_nat
 17 #define NF_CT_EXT_ACCT_TYPE struct nf_conn_counter
 18 #define NF_CT_EXT_ECACHE_TYPE struct nf_conntrack_ecache
 19 
 20 /* Extensions: optional stuff which isn't permanently in struct. */
 21 struct nf_ct_ext {
 22         struct rcu_head rcu;
 23         u8 offset[NF_CT_EXT_NUM];
 24         u8 len;
 25         char data[0];
 26 };
 27 
 28 static inline int nf_ct_ext_exist(const struct nf_conn *ct, u8 id)
 29 {
 30         return (ct->ext && ct->ext->offset[id]);
 31 }
 32 
 33 static inline void *__nf_ct_ext_find(const struct nf_conn *ct, u8 id)
 34 {
 35         if (!nf_ct_ext_exist(ct, id))
 36                 return NULL;
 37 
 38         return (void *)ct->ext + ct->ext->offset[id];
 39 }
 40 #define nf_ct_ext_find(ext, id) \
 41         ((id##_TYPE *)__nf_ct_ext_find((ext), (id)))
 42 
 43 /* Destroy all relationships */
 44 extern void __nf_ct_ext_destroy(struct nf_conn *ct);
 45 static inline void nf_ct_ext_destroy(struct nf_conn *ct)
 46 {
 47         if (ct->ext)
 48                 __nf_ct_ext_destroy(ct);
 49 }
 50 
 51 /* Free operation. If you want to free a object referred from private area,
 52  * please implement __nf_ct_ext_free() and call it.
 53  */
 54 static inline void nf_ct_ext_free(struct nf_conn *ct)
 55 {
 56         if (ct->ext)
 57                 kfree(ct->ext);
 58 }
 59 
 60 /* Add this type, returns pointer to data or NULL. */
 61 void *
 62 __nf_ct_ext_add(struct nf_conn *ct, enum nf_ct_ext_id id, gfp_t gfp);
 63 #define nf_ct_ext_add(ct, id, gfp) \
 64         ((id##_TYPE *)__nf_ct_ext_add((ct), (id), (gfp)))
 65 
 66 #define NF_CT_EXT_F_PREALLOC    0x0001
 67 
 68 struct nf_ct_ext_type
 69 {
 70         /* Destroys relationships (can be NULL). */
 71         void (*destroy)(struct nf_conn *ct);
 72         /* Called when realloacted (can be NULL).
 73            Contents has already been moved. */
 74         void (*move)(void *new, void *old);
 75 
 76         enum nf_ct_ext_id id;
 77 
 78         unsigned int flags;
 79 
 80         /* Length and min alignment. */
 81         u8 len;
 82         u8 align;
 83         /* initial size of nf_ct_ext. */
 84         u8 alloc_size;
 85 };
 86 
 87 int nf_ct_extend_register(struct nf_ct_ext_type *type);
 88 void nf_ct_extend_unregister(struct nf_ct_ext_type *type);
 89 #endif /* _NF_CONNTRACK_EXTEND_H */
 90 
  This page was automatically generated by the LXR engine.