]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - include/net/xfrm.h
netfilter: nat: fix src map lookup
[mirror_ubuntu-artful-kernel.git] / include / net / xfrm.h
index 62f5a259e597572ad4b8981ca04dd44a790760bd..c0916ab18d3288033500e7a4953ef481176adaa0 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/mutex.h>
 #include <linux/audit.h>
 #include <linux/slab.h>
+#include <linux/refcount.h>
 
 #include <net/sock.h>
 #include <net/dst.h>
@@ -137,7 +138,7 @@ struct xfrm_state {
        struct hlist_node       bysrc;
        struct hlist_node       byspi;
 
-       atomic_t                refcnt;
+       refcount_t              refcnt;
        spinlock_t              lock;
 
        struct xfrm_id          id;
@@ -559,7 +560,7 @@ struct xfrm_policy {
 
        /* This lock only affects elements except for entry. */
        rwlock_t                lock;
-       atomic_t                refcnt;
+       refcount_t              refcnt;
        struct timer_list       timer;
 
        struct flow_cache_object flo;
@@ -631,7 +632,8 @@ struct xfrm_mgr {
                                           u8 dir, u8 type,
                                           const struct xfrm_migrate *m,
                                           int num_bundles,
-                                          const struct xfrm_kmaddress *k);
+                                          const struct xfrm_kmaddress *k,
+                                          const struct xfrm_encap_tmpl *encap);
        bool                    (*is_alive)(const struct km_event *c);
 };
 
@@ -814,14 +816,14 @@ static inline void xfrm_audit_state_icvfail(struct xfrm_state *x,
 static inline void xfrm_pol_hold(struct xfrm_policy *policy)
 {
        if (likely(policy != NULL))
-               atomic_inc(&policy->refcnt);
+               refcount_inc(&policy->refcnt);
 }
 
 void xfrm_policy_destroy(struct xfrm_policy *policy);
 
 static inline void xfrm_pol_put(struct xfrm_policy *policy)
 {
-       if (atomic_dec_and_test(&policy->refcnt))
+       if (refcount_dec_and_test(&policy->refcnt))
                xfrm_policy_destroy(policy);
 }
 
@@ -836,18 +838,18 @@ void __xfrm_state_destroy(struct xfrm_state *);
 
 static inline void __xfrm_state_put(struct xfrm_state *x)
 {
-       atomic_dec(&x->refcnt);
+       refcount_dec(&x->refcnt);
 }
 
 static inline void xfrm_state_put(struct xfrm_state *x)
 {
-       if (atomic_dec_and_test(&x->refcnt))
+       if (refcount_dec_and_test(&x->refcnt))
                __xfrm_state_destroy(x);
 }
 
 static inline void xfrm_state_hold(struct xfrm_state *x)
 {
-       atomic_inc(&x->refcnt);
+       refcount_inc(&x->refcnt);
 }
 
 static inline bool addr_match(const void *token1, const void *token2,
@@ -1028,7 +1030,7 @@ struct xfrm_offload {
 };
 
 struct sec_path {
-       atomic_t                refcnt;
+       refcount_t              refcnt;
        int                     len;
        int                     olen;
 
@@ -1049,7 +1051,7 @@ static inline struct sec_path *
 secpath_get(struct sec_path *sp)
 {
        if (sp)
-               atomic_inc(&sp->refcnt);
+               refcount_inc(&sp->refcnt);
        return sp;
 }
 
@@ -1058,7 +1060,7 @@ void __secpath_destroy(struct sec_path *sp);
 static inline void
 secpath_put(struct sec_path *sp)
 {
-       if (sp && atomic_dec_and_test(&sp->refcnt))
+       if (sp && refcount_dec_and_test(&sp->refcnt))
                __secpath_destroy(sp);
 }
 
@@ -1675,13 +1677,16 @@ int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol);
 #ifdef CONFIG_XFRM_MIGRATE
 int km_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
               const struct xfrm_migrate *m, int num_bundles,
-              const struct xfrm_kmaddress *k);
+              const struct xfrm_kmaddress *k,
+              const struct xfrm_encap_tmpl *encap);
 struct xfrm_state *xfrm_migrate_state_find(struct xfrm_migrate *m, struct net *net);
 struct xfrm_state *xfrm_state_migrate(struct xfrm_state *x,
-                                     struct xfrm_migrate *m);
+                                     struct xfrm_migrate *m,
+                                     struct xfrm_encap_tmpl *encap);
 int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
                 struct xfrm_migrate *m, int num_bundles,
-                struct xfrm_kmaddress *k, struct net *net);
+                struct xfrm_kmaddress *k, struct net *net,
+                struct xfrm_encap_tmpl *encap);
 #endif
 
 int km_new_mapping(struct xfrm_state *x, xfrm_address_t *ipaddr, __be16 sport);