]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/netfilter/xt_policy.c
ASoC: Fix inverted mute controls for WM8580
[mv-sheeva.git] / net / netfilter / xt_policy.c
index 9e918add2282943632476f501e8a473884183fe8..f23e97bb42d7c0f860cdf15258e530a11bb54bef 100644 (file)
@@ -6,7 +6,7 @@
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  */
-
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/skbuff.h>
@@ -26,9 +26,9 @@ xt_addr_cmp(const union nf_inet_addr *a1, const union nf_inet_addr *m,
            const union nf_inet_addr *a2, unsigned short family)
 {
        switch (family) {
-       case AF_INET:
+       case NFPROTO_IPV4:
                return ((a1->ip ^ a2->ip) & m->ip) == 0;
-       case AF_INET6:
+       case NFPROTO_IPV6:
                return ipv6_masked_addr_cmp(&a1->in6, &m->in6, &a2->in6) == 0;
        }
        return false;
@@ -86,7 +86,7 @@ match_policy_out(const struct sk_buff *skb, const struct xt_policy_info *info,
                 unsigned short family)
 {
        const struct xt_policy_elem *e;
-       const struct dst_entry *dst = skb->dst;
+       const struct dst_entry *dst = skb_dst(skb);
        int strict = info->flags & XT_POLICY_MATCH_STRICT;
        int i, pos;
 
@@ -110,18 +110,15 @@ match_policy_out(const struct sk_buff *skb, const struct xt_policy_info *info,
 }
 
 static bool
-policy_mt(const struct sk_buff *skb, const struct net_device *in,
-          const struct net_device *out, const struct xt_match *match,
-          const void *matchinfo, int offset, unsigned int protoff,
-          bool *hotdrop)
+policy_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
-       const struct xt_policy_info *info = matchinfo;
+       const struct xt_policy_info *info = par->matchinfo;
        int ret;
 
        if (info->flags & XT_POLICY_MATCH_IN)
-               ret = match_policy_in(skb, info, match->family);
+               ret = match_policy_in(skb, info, par->family);
        else
-               ret = match_policy_out(skb, info, match->family);
+               ret = match_policy_out(skb, info, par->family);
 
        if (ret < 0)
                ret = info->flags & XT_POLICY_MATCH_NONE ? true : false;
@@ -131,41 +128,35 @@ policy_mt(const struct sk_buff *skb, const struct net_device *in,
        return ret;
 }
 
-static bool
-policy_mt_check(const char *tablename, const void *ip_void,
-                const struct xt_match *match, void *matchinfo,
-                unsigned int hook_mask)
+static int policy_mt_check(const struct xt_mtchk_param *par)
 {
-       struct xt_policy_info *info = matchinfo;
+       const struct xt_policy_info *info = par->matchinfo;
 
        if (!(info->flags & (XT_POLICY_MATCH_IN|XT_POLICY_MATCH_OUT))) {
-               printk(KERN_ERR "xt_policy: neither incoming nor "
-                               "outgoing policy selected\n");
-               return false;
+               pr_info("neither incoming nor outgoing policy selected\n");
+               return -EINVAL;
        }
-       if (hook_mask & (1 << NF_INET_PRE_ROUTING | 1 << NF_INET_LOCAL_IN)
-           && info->flags & XT_POLICY_MATCH_OUT) {
-               printk(KERN_ERR "xt_policy: output policy not valid in "
-                               "PRE_ROUTING and INPUT\n");
-               return false;
+       if (par->hook_mask & ((1 << NF_INET_PRE_ROUTING) |
+           (1 << NF_INET_LOCAL_IN)) && info->flags & XT_POLICY_MATCH_OUT) {
+               pr_info("output policy not valid in PREROUTING and INPUT\n");
+               return -EINVAL;
        }
-       if (hook_mask & (1 << NF_INET_POST_ROUTING | 1 << NF_INET_LOCAL_OUT)
-           && info->flags & XT_POLICY_MATCH_IN) {
-               printk(KERN_ERR "xt_policy: input policy not valid in "
-                               "POST_ROUTING and OUTPUT\n");
-               return false;
+       if (par->hook_mask & ((1 << NF_INET_POST_ROUTING) |
+           (1 << NF_INET_LOCAL_OUT)) && info->flags & XT_POLICY_MATCH_IN) {
+               pr_info("input policy not valid in POSTROUTING and OUTPUT\n");
+               return -EINVAL;
        }
        if (info->len > XT_POLICY_MAX_ELEM) {
-               printk(KERN_ERR "xt_policy: too many policy elements\n");
-               return false;
+               pr_info("too many policy elements\n");
+               return -EINVAL;
        }
-       return true;
+       return 0;
 }
 
 static struct xt_match policy_mt_reg[] __read_mostly = {
        {
                .name           = "policy",
-               .family         = AF_INET,
+               .family         = NFPROTO_IPV4,
                .checkentry     = policy_mt_check,
                .match          = policy_mt,
                .matchsize      = sizeof(struct xt_policy_info),
@@ -173,7 +164,7 @@ static struct xt_match policy_mt_reg[] __read_mostly = {
        },
        {
                .name           = "policy",
-               .family         = AF_INET6,
+               .family         = NFPROTO_IPV6,
                .checkentry     = policy_mt_check,
                .match          = policy_mt,
                .matchsize      = sizeof(struct xt_policy_info),