Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[linux-2.6-block.git] / net / ipv4 / xfrm4_mode_tunnel.c
index 31b18152528fe4dbf9e500ae0c9a2a1a5a3a2adf..05f2b484954feda957d04ff2f0300eedf9c97263 100644 (file)
 #include <net/ip.h>
 #include <net/xfrm.h>
 
-/* Informational hook. The decap is still done here. */
-static struct xfrm_tunnel_notifier __rcu *rcv_notify_handlers __read_mostly;
-static DEFINE_MUTEX(xfrm4_mode_tunnel_input_mutex);
-
-int xfrm4_mode_tunnel_input_register(struct xfrm_tunnel_notifier *handler)
-{
-       struct xfrm_tunnel_notifier __rcu **pprev;
-       struct xfrm_tunnel_notifier *t;
-       int ret = -EEXIST;
-       int priority = handler->priority;
-
-       mutex_lock(&xfrm4_mode_tunnel_input_mutex);
-
-       for (pprev = &rcv_notify_handlers;
-            (t = rcu_dereference_protected(*pprev,
-            lockdep_is_held(&xfrm4_mode_tunnel_input_mutex))) != NULL;
-            pprev = &t->next) {
-               if (t->priority > priority)
-                       break;
-               if (t->priority == priority)
-                       goto err;
-
-       }
-
-       handler->next = *pprev;
-       rcu_assign_pointer(*pprev, handler);
-
-       ret = 0;
-
-err:
-       mutex_unlock(&xfrm4_mode_tunnel_input_mutex);
-       return ret;
-}
-EXPORT_SYMBOL_GPL(xfrm4_mode_tunnel_input_register);
-
-int xfrm4_mode_tunnel_input_deregister(struct xfrm_tunnel_notifier *handler)
-{
-       struct xfrm_tunnel_notifier __rcu **pprev;
-       struct xfrm_tunnel_notifier *t;
-       int ret = -ENOENT;
-
-       mutex_lock(&xfrm4_mode_tunnel_input_mutex);
-       for (pprev = &rcv_notify_handlers;
-            (t = rcu_dereference_protected(*pprev,
-            lockdep_is_held(&xfrm4_mode_tunnel_input_mutex))) != NULL;
-            pprev = &t->next) {
-               if (t == handler) {
-                       *pprev = handler->next;
-                       ret = 0;
-                       break;
-               }
-       }
-       mutex_unlock(&xfrm4_mode_tunnel_input_mutex);
-       synchronize_net();
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(xfrm4_mode_tunnel_input_deregister);
-
 static inline void ipip_ecn_decapsulate(struct sk_buff *skb)
 {
        struct iphdr *inner_iph = ipip_hdr(skb);
@@ -127,14 +68,8 @@ static int xfrm4_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
        return 0;
 }
 
-#define for_each_input_rcu(head, handler)      \
-       for (handler = rcu_dereference(head);   \
-            handler != NULL;                   \
-            handler = rcu_dereference(handler->next))
-
 static int xfrm4_mode_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
 {
-       struct xfrm_tunnel_notifier *handler;
        int err = -EINVAL;
 
        if (XFRM_MODE_SKB_CB(skb)->protocol != IPPROTO_IPIP)
@@ -143,9 +78,6 @@ static int xfrm4_mode_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
        if (!pskb_may_pull(skb, sizeof(struct iphdr)))
                goto out;
 
-       for_each_input_rcu(rcv_notify_handlers, handler)
-               handler->handler(skb);
-
        err = skb_unclone(skb, GFP_ATOMIC);
        if (err)
                goto out;