fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / include / linux / filter.h
index bfbb745..91b2e3b 100644 (file)
@@ -5,6 +5,13 @@
 #ifndef __LINUX_FILTER_H__
 #define __LINUX_FILTER_H__
 
+#include <linux/compiler.h>
+#include <linux/types.h>
+
+#ifdef __KERNEL__
+#include <asm/atomic.h>
+#endif
+
 /*
  * Current version of the filter code architecture.
  */
  
 struct sock_filter     /* Filter block */
 {
-        __u16  code;   /* Actual filter code */
-        __u8   jt;     /* Jump true */
-        __u8   jf;     /* Jump false */
-        __u32  k;      /* Generic multiuse field */
+       __u16   code;   /* Actual filter code */
+       __u8    jt;     /* Jump true */
+       __u8    jf;     /* Jump false */
+       __u32   k;      /* Generic multiuse field */
 };
 
 struct sock_fprog      /* Required for SO_ATTACH_FILTER. */
 {
        unsigned short          len;    /* Number of filter blocks */
-       struct sock_filter      *filter;
+       struct sock_filter __user *filter;
 };
 
 #ifdef __KERNEL__
 struct sk_filter
 {
        atomic_t                refcnt;
-        unsigned int           len;    /* Number of filter blocks */
-        struct sock_filter             insns[0];
+       unsigned int            len;    /* Number of filter blocks */
+       struct rcu_head         rcu;
+       struct sock_filter      insns[0];
 };
 
 static inline unsigned int sk_filter_len(struct sk_filter *fp)
@@ -133,7 +141,10 @@ static inline unsigned int sk_filter_len(struct sk_filter *fp)
 #define SKF_LL_OFF    (-0x200000)
 
 #ifdef __KERNEL__
-extern int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen);
+struct sk_buff;
+struct sock;
+
+extern unsigned int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen);
 extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
 extern int sk_chk_filter(struct sock_filter *filter, int flen);
 #endif /* __KERNEL__ */