X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Ffilter.h;h=91b2e3b9251eb67ee57b19dd44ba0f84bb8fcb94;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=bfbb7453ba00b374a1524e6e2d39f07a023c9067;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/include/linux/filter.h b/include/linux/filter.h index bfbb7453b..91b2e3b92 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -5,6 +5,13 @@ #ifndef __LINUX_FILTER_H__ #define __LINUX_FILTER_H__ +#include +#include + +#ifdef __KERNEL__ +#include +#endif + /* * Current version of the filter code architecture. */ @@ -18,24 +25,25 @@ 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__ */