Re: [2.2.2] The difference between sk_filter and sock_filter?

Ralf Sauther (rhs@castle.kram.inka.de)
Tue, 23 Feb 1999 16:30:49 +0100


In article <19990223155409.A513@boole.suse.de> you wrote:

> there is trouble with the option CONFIG_FILTER. The structure
> sk_filter used with patch 2.2.2 isn't defined in any header. Only the
> struct sock_filter is given in include/linux/filter.h.
> It looks like sk_filter and sock_filter are different structures because
> the sk_run_filter call in include/net/sock.h uses the entries insns and
> len of that new structure. That means something like

Der Patch ist nicht vollstaendig, scheinbar hat Linus da was von ACox nicht
ganz mitbekommen. Hier ist der fehlende Teil, der die sk_filter Struktur
richtig aendert.

Ralf

-- 
Ralf Sauther -- rhs@inka.de

*** filter.h.damaged Mon Dec 22 02:41:24 1997 --- filter.h Tue Feb 23 17:29:38 1999 *************** *** 18,27 **** struct sock_filter /* Filter block */ { ! 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. */ --- 18,28 ---- struct sock_filter /* Filter block */ { ! __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. */ *************** *** 30,35 **** --- 31,50 ---- struct sock_filter *filter; }; + #ifdef __KERNEL__ + struct sk_filter + { + atomic_t refcnt; + unsigned int len; /* Number of filter blocks */ + struct sock_filter insns[0]; + }; + + extern __inline__ unsigned int sk_filter_len(struct sk_filter *fp) + { + return fp->len*sizeof(struct sock_filter) + sizeof(*fp); + } + #endif + /* * Instruction classes */ *************** *** 86,106 **** #define BPF_TAX 0x00 #define BPF_TXA 0x80 ! #define BPF_MAXINSNS 512 /* * Macros for filter block array initializers. */ #define BPF_STMT(code, k) { (unsigned short)(code), 0, 0, k } #define BPF_JUMP(code, k, jt, jf) { (unsigned short)(code), jt, jf, k } /* * Number of scratch memory words for: BPF_ST and BPF_STX */ #define BPF_MEMWORDS 16 #ifdef __KERNEL__ ! extern int sk_run_filter(unsigned char *data, int len, struct sock_filter *filter, int flen); extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); #endif /* __KERNEL__ */ --- 101,140 ---- #define BPF_TAX 0x00 #define BPF_TXA 0x80 ! #ifndef BPF_MAXINSNS ! #define BPF_MAXINSNS 4096 ! #endif /* * Macros for filter block array initializers. */ + #ifndef BPF_STMT #define BPF_STMT(code, k) { (unsigned short)(code), 0, 0, k } + #endif + #ifndef BPF_JUMP #define BPF_JUMP(code, k, jt, jf) { (unsigned short)(code), jt, jf, k } + #endif /* * Number of scratch memory words for: BPF_ST and BPF_STX */ #define BPF_MEMWORDS 16 + /* RATIONALE. Negative offsets are invalid in BPF. + We use them to reference ancillary data. + Unlike introduction new instructions, it does not break + existing compilers/optimizers. + */ + #define SKF_AD_OFF (-0x1000) + #define SKF_AD_PROTOCOL 0 + #define SKF_AD_PKTTYPE 4 + #define SKF_AD_IFINDEX 8 + #define SKF_AD_MAX 12 + #define SKF_NET_OFF (-0x100000) + #define SKF_LL_OFF (-0x200000) + #ifdef __KERNEL__ ! extern 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); #endif /* __KERNEL__ */

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/