[NETFILTER]: x_tables: switch xt_match->checkentry to bool
[safe/jmp/linux-2.6] / net / ipv6 / netfilter / ip6t_hbh.c
index d32a205..6fdd797 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <asm/byteorder.h>
 
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv6/ip6_tables.h>
 #include <linux/netfilter_ipv6/ip6t_opts.h>
 
@@ -46,7 +47,7 @@ MODULE_ALIAS("ip6t_dst");
  *     5       -> RTALERT 2 x x
  */
 
-static int
+static bool
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
@@ -54,31 +55,36 @@ match(const struct sk_buff *skb,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
-      int *hotdrop)
+      bool *hotdrop)
 {
        struct ipv6_opt_hdr _optsh, *oh;
        const struct ip6t_opts *optinfo = matchinfo;
        unsigned int temp;
        unsigned int ptr;
        unsigned int hdrlen = 0;
-       unsigned int ret = 0;
+       bool ret = false;
        u8 _opttype, *tp = NULL;
        u8 _optlen, *lp = NULL;
        unsigned int optlen;
+       int err;
 
-       if (ipv6_find_hdr(skb, &ptr, match->data, NULL) < 0)
-               return 0;
+       err = ipv6_find_hdr(skb, &ptr, match->data, NULL);
+       if (err < 0) {
+               if (err != -ENOENT)
+                       *hotdrop = true;
+               return false;
+       }
 
        oh = skb_header_pointer(skb, ptr, sizeof(_optsh), &_optsh);
        if (oh == NULL) {
-               *hotdrop = 1;
-               return 0;
+               *hotdrop = true;
+               return false;
        }
 
        hdrlen = ipv6_optlen(oh);
        if (skb->len - ptr < hdrlen) {
                /* Packet smaller than it's length field */
-               return 0;
+               return false;
        }
 
        DEBUGP("IPv6 OPTS LEN %u %u ", hdrlen, oh->hdrlen);
@@ -117,7 +123,7 @@ match(const struct sk_buff *skb,
                                DEBUGP("Tbad %02X %02X\n",
                                       *tp,
                                       (optinfo->opts[temp] & 0xFF00) >> 8);
-                               return 0;
+                               return false;
                        } else {
                                DEBUGP("Tok ");
                        }
@@ -138,7 +144,7 @@ match(const struct sk_buff *skb,
                                if (spec_len != 0x00FF && spec_len != *lp) {
                                        DEBUGP("Lbad %02X %04X\n", *lp,
                                               spec_len);
-                                       return 0;
+                                       return false;
                                }
                                DEBUGP("Lok ");
                                optlen = *lp + 2;
@@ -161,14 +167,14 @@ match(const struct sk_buff *skb,
                if (temp == optinfo->optsnr)
                        return ret;
                else
-                       return 0;
+                       return false;
        }
 
-       return 0;
+       return false;
 }
 
 /* Called when user tries to insert an entry of this type. */
-static int
+static bool
 checkentry(const char *tablename,
           const void *entry,
           const struct xt_match *match,
@@ -179,9 +185,9 @@ checkentry(const char *tablename,
 
        if (optsinfo->invflags & ~IP6T_OPTS_INV_MASK) {
                DEBUGP("ip6t_opts: unknown flags %X\n", optsinfo->invflags);
-               return 0;
+               return false;
        }
-       return 1;
+       return true;
 }
 
 static struct xt_match opts_match[] = {