Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[pandora-kernel.git] / net / netfilter / xt_multiport.c
index 4dce2a8..fd88c48 100644 (file)
@@ -22,7 +22,7 @@
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Netfilter Core Team <coreteam@netfilter.org>");
-MODULE_DESCRIPTION("x_tables multiple port match module");
+MODULE_DESCRIPTION("Xtables: multiple port matching for TCP, UDP, UDP-Lite, SCTP and DCCP");
 MODULE_ALIAS("ipt_multiport");
 MODULE_ALIAS("ip6t_multiport");
 
@@ -33,24 +33,24 @@ MODULE_ALIAS("ip6t_multiport");
 #endif
 
 /* Returns 1 if the port is matched by the test, 0 otherwise. */
-static inline int
-ports_match(const u_int16_t *portlist, enum xt_multiport_flags flags,
-           u_int8_t count, u_int16_t src, u_int16_t dst)
+static inline bool
+ports_match_v0(const u_int16_t *portlist, enum xt_multiport_flags flags,
+              u_int8_t count, u_int16_t src, u_int16_t dst)
 {
        unsigned int i;
        for (i = 0; i < count; i++) {
                if (flags != XT_MULTIPORT_DESTINATION && portlist[i] == src)
-                       return 1;
+                       return true;
 
                if (flags != XT_MULTIPORT_SOURCE && portlist[i] == dst)
-                       return 1;
+                       return true;
        }
 
-       return 0;
+       return false;
 }
 
 /* Returns 1 if the port is matched by the test, 0 otherwise. */
-static inline int
+static inline bool
 ports_match_v1(const struct xt_multiport_v1 *minfo,
               u_int16_t src, u_int16_t dst)
 {
@@ -67,48 +67,45 @@ ports_match_v1(const struct xt_multiport_v1 *minfo,
 
                        if (minfo->flags == XT_MULTIPORT_SOURCE
                            && src >= s && src <= e)
-                               return 1 ^ minfo->invert;
+                               return true ^ minfo->invert;
                        if (minfo->flags == XT_MULTIPORT_DESTINATION
                            && dst >= s && dst <= e)
-                               return 1 ^ minfo->invert;
+                               return true ^ minfo->invert;
                        if (minfo->flags == XT_MULTIPORT_EITHER
                            && ((dst >= s && dst <= e)
                                || (src >= s && src <= e)))
-                               return 1 ^ minfo->invert;
+                               return true ^ minfo->invert;
                } else {
                        /* exact port matching */
                        duprintf("src or dst matches with %d?\n", s);
 
                        if (minfo->flags == XT_MULTIPORT_SOURCE
                            && src == s)
-                               return 1 ^ minfo->invert;
+                               return true ^ minfo->invert;
                        if (minfo->flags == XT_MULTIPORT_DESTINATION
                            && dst == s)
-                               return 1 ^ minfo->invert;
+                               return true ^ minfo->invert;
                        if (minfo->flags == XT_MULTIPORT_EITHER
                            && (src == s || dst == s))
-                               return 1 ^ minfo->invert;
+                               return true ^ minfo->invert;
                }
        }
 
        return minfo->invert;
 }
 
-static int
-match(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,
-      int *hotdrop)
+static bool
+multiport_mt_v0(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)
 {
-       __be16 _ports[2], *pptr;
+       const __be16 *pptr;
+       __be16 _ports[2];
        const struct xt_multiport *multiinfo = matchinfo;
 
        if (offset)
-               return 0;
+               return false;
 
        pptr = skb_header_pointer(skb, protoff, sizeof(_ports), _ports);
        if (pptr == NULL) {
@@ -116,30 +113,26 @@ match(const struct sk_buff *skb,
                 * can't.  Hence, no choice but to drop.
                 */
                duprintf("xt_multiport: Dropping evil offset=0 tinygram.\n");
-               *hotdrop = 1;
-               return 0;
+               *hotdrop = true;
+               return false;
        }
 
-       return ports_match(multiinfo->ports,
-                          multiinfo->flags, multiinfo->count,
-                          ntohs(pptr[0]), ntohs(pptr[1]));
+       return ports_match_v0(multiinfo->ports, multiinfo->flags,
+              multiinfo->count, ntohs(pptr[0]), ntohs(pptr[1]));
 }
 
-static int
-match_v1(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,
-        int *hotdrop)
+static bool
+multiport_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)
 {
-       __be16 _ports[2], *pptr;
+       const __be16 *pptr;
+       __be16 _ports[2];
        const struct xt_multiport_v1 *multiinfo = matchinfo;
 
        if (offset)
-               return 0;
+               return false;
 
        pptr = skb_header_pointer(skb, protoff, sizeof(_ports), _ports);
        if (pptr == NULL) {
@@ -147,14 +140,14 @@ match_v1(const struct sk_buff *skb,
                 * can't.  Hence, no choice but to drop.
                 */
                duprintf("xt_multiport: Dropping evil offset=0 tinygram.\n");
-               *hotdrop = 1;
-               return 0;
+               *hotdrop = true;
+               return false;
        }
 
        return ports_match_v1(multiinfo, ntohs(pptr[0]), ntohs(pptr[1]));
 }
 
-static inline int
+static inline bool
 check(u_int16_t proto,
       u_int8_t ip_invflags,
       u_int8_t match_flags,
@@ -172,12 +165,10 @@ check(u_int16_t proto,
 }
 
 /* Called when user tries to insert an entry of this type. */
-static int
-checkentry(const char *tablename,
-          const void *info,
-          const struct xt_match *match,
-          void *matchinfo,
-          unsigned int hook_mask)
+static bool
+multiport_mt_check_v0(const char *tablename, const void *info,
+                      const struct xt_match *match, void *matchinfo,
+                      unsigned int hook_mask)
 {
        const struct ipt_ip *ip = info;
        const struct xt_multiport *multiinfo = matchinfo;
@@ -186,12 +177,10 @@ checkentry(const char *tablename,
                     multiinfo->count);
 }
 
-static int
-checkentry_v1(const char *tablename,
-             const void *info,
-             const struct xt_match *match,
-             void *matchinfo,
-             unsigned int hook_mask)
+static bool
+multiport_mt_check(const char *tablename, const void *info,
+                   const struct xt_match *match, void *matchinfo,
+                   unsigned int hook_mask)
 {
        const struct ipt_ip *ip = info;
        const struct xt_multiport_v1 *multiinfo = matchinfo;
@@ -200,12 +189,10 @@ checkentry_v1(const char *tablename,
                     multiinfo->count);
 }
 
-static int
-checkentry6(const char *tablename,
-           const void *info,
-           const struct xt_match *match,
-           void *matchinfo,
-           unsigned int hook_mask)
+static bool
+multiport_mt6_check_v0(const char *tablename, const void *info,
+                       const struct xt_match *match, void *matchinfo,
+                       unsigned int hook_mask)
 {
        const struct ip6t_ip6 *ip = info;
        const struct xt_multiport *multiinfo = matchinfo;
@@ -214,12 +201,10 @@ checkentry6(const char *tablename,
                     multiinfo->count);
 }
 
-static int
-checkentry6_v1(const char *tablename,
-              const void *info,
-              const struct xt_match *match,
-              void *matchinfo,
-              unsigned int hook_mask)
+static bool
+multiport_mt6_check(const char *tablename, const void *info,
+                    const struct xt_match *match, void *matchinfo,
+                    unsigned int hook_mask)
 {
        const struct ip6t_ip6 *ip = info;
        const struct xt_multiport_v1 *multiinfo = matchinfo;
@@ -228,13 +213,13 @@ checkentry6_v1(const char *tablename,
                     multiinfo->count);
 }
 
-static struct xt_match xt_multiport_match[] = {
+static struct xt_match multiport_mt_reg[] __read_mostly = {
        {
                .name           = "multiport",
                .family         = AF_INET,
                .revision       = 0,
-               .checkentry     = checkentry,
-               .match          = match,
+               .checkentry     = multiport_mt_check_v0,
+               .match          = multiport_mt_v0,
                .matchsize      = sizeof(struct xt_multiport),
                .me             = THIS_MODULE,
        },
@@ -242,8 +227,8 @@ static struct xt_match xt_multiport_match[] = {
                .name           = "multiport",
                .family         = AF_INET,
                .revision       = 1,
-               .checkentry     = checkentry_v1,
-               .match          = match_v1,
+               .checkentry     = multiport_mt_check,
+               .match          = multiport_mt,
                .matchsize      = sizeof(struct xt_multiport_v1),
                .me             = THIS_MODULE,
        },
@@ -251,8 +236,8 @@ static struct xt_match xt_multiport_match[] = {
                .name           = "multiport",
                .family         = AF_INET6,
                .revision       = 0,
-               .checkentry     = checkentry6,
-               .match          = match,
+               .checkentry     = multiport_mt6_check_v0,
+               .match          = multiport_mt_v0,
                .matchsize      = sizeof(struct xt_multiport),
                .me             = THIS_MODULE,
        },
@@ -260,24 +245,23 @@ static struct xt_match xt_multiport_match[] = {
                .name           = "multiport",
                .family         = AF_INET6,
                .revision       = 1,
-               .checkentry     = checkentry6_v1,
-               .match          = match_v1,
+               .checkentry     = multiport_mt6_check,
+               .match          = multiport_mt,
                .matchsize      = sizeof(struct xt_multiport_v1),
                .me             = THIS_MODULE,
        },
 };
 
-static int __init xt_multiport_init(void)
+static int __init multiport_mt_init(void)
 {
-       return xt_register_matches(xt_multiport_match,
-                                  ARRAY_SIZE(xt_multiport_match));
+       return xt_register_matches(multiport_mt_reg,
+              ARRAY_SIZE(multiport_mt_reg));
 }
 
-static void __exit xt_multiport_fini(void)
+static void __exit multiport_mt_exit(void)
 {
-       xt_unregister_matches(xt_multiport_match,
-                             ARRAY_SIZE(xt_multiport_match));
+       xt_unregister_matches(multiport_mt_reg, ARRAY_SIZE(multiport_mt_reg));
 }
 
-module_init(xt_multiport_init);
-module_exit(xt_multiport_fini);
+module_init(multiport_mt_init);
+module_exit(multiport_mt_exit);