linux/include/linux/filter.h
<<
>>
Prefs
   1/*
   2 * Linux Socket Filter Data Structures
   3 */
   4#ifndef __LINUX_FILTER_H__
   5#define __LINUX_FILTER_H__
   6
   7#include <linux/atomic.h>
   8#include <linux/compat.h>
   9#include <uapi/linux/filter.h>
  10
  11#ifdef CONFIG_COMPAT
  12/*
  13 * A struct sock_filter is architecture independent.
  14 */
  15struct compat_sock_fprog {
  16        u16             len;
  17        compat_uptr_t   filter;         /* struct sock_filter * */
  18};
  19#endif
  20
  21struct sk_buff;
  22struct sock;
  23
  24struct sk_filter
  25{
  26        atomic_t                refcnt;
  27        unsigned int            len;    /* Number of filter blocks */
  28        unsigned int            (*bpf_func)(const struct sk_buff *skb,
  29                                            const struct sock_filter *filter);
  30        struct rcu_head         rcu;
  31        struct sock_filter      insns[0];
  32};
  33
  34static inline unsigned int sk_filter_len(const struct sk_filter *fp)
  35{
  36        return fp->len * sizeof(struct sock_filter) + sizeof(*fp);
  37}
  38
  39extern int sk_filter(struct sock *sk, struct sk_buff *skb);
  40extern unsigned int sk_run_filter(const struct sk_buff *skb,
  41                                  const struct sock_filter *filter);
  42extern int sk_unattached_filter_create(struct sk_filter **pfp,
  43                                       struct sock_fprog *fprog);
  44extern void sk_unattached_filter_destroy(struct sk_filter *fp);
  45extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
  46extern int sk_detach_filter(struct sock *sk);
  47extern int sk_chk_filter(struct sock_filter *filter, unsigned int flen);
  48extern int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, unsigned len);
  49
  50#ifdef CONFIG_BPF_JIT
  51extern void bpf_jit_compile(struct sk_filter *fp);
  52extern void bpf_jit_free(struct sk_filter *fp);
  53#define SK_RUN_FILTER(FILTER, SKB) (*FILTER->bpf_func)(SKB, FILTER->insns)
  54#else
  55static inline void bpf_jit_compile(struct sk_filter *fp)
  56{
  57}
  58static inline void bpf_jit_free(struct sk_filter *fp)
  59{
  60}
  61#define SK_RUN_FILTER(FILTER, SKB) sk_run_filter(SKB, FILTER->insns)
  62#endif
  63
  64enum {
  65        BPF_S_RET_K = 1,
  66        BPF_S_RET_A,
  67        BPF_S_ALU_ADD_K,
  68        BPF_S_ALU_ADD_X,
  69        BPF_S_ALU_SUB_K,
  70        BPF_S_ALU_SUB_X,
  71        BPF_S_ALU_MUL_K,
  72        BPF_S_ALU_MUL_X,
  73        BPF_S_ALU_DIV_X,
  74        BPF_S_ALU_MOD_K,
  75        BPF_S_ALU_MOD_X,
  76        BPF_S_ALU_AND_K,
  77        BPF_S_ALU_AND_X,
  78        BPF_S_ALU_OR_K,
  79        BPF_S_ALU_OR_X,
  80        BPF_S_ALU_XOR_K,
  81        BPF_S_ALU_XOR_X,
  82        BPF_S_ALU_LSH_K,
  83        BPF_S_ALU_LSH_X,
  84        BPF_S_ALU_RSH_K,
  85        BPF_S_ALU_RSH_X,
  86        BPF_S_ALU_NEG,
  87        BPF_S_LD_W_ABS,
  88        BPF_S_LD_H_ABS,
  89        BPF_S_LD_B_ABS,
  90        BPF_S_LD_W_LEN,
  91        BPF_S_LD_W_IND,
  92        BPF_S_LD_H_IND,
  93        BPF_S_LD_B_IND,
  94        BPF_S_LD_IMM,
  95        BPF_S_LDX_W_LEN,
  96        BPF_S_LDX_B_MSH,
  97        BPF_S_LDX_IMM,
  98        BPF_S_MISC_TAX,
  99        BPF_S_MISC_TXA,
 100        BPF_S_ALU_DIV_K,
 101        BPF_S_LD_MEM,
 102        BPF_S_LDX_MEM,
 103        BPF_S_ST,
 104        BPF_S_STX,
 105        BPF_S_JMP_JA,
 106        BPF_S_JMP_JEQ_K,
 107        BPF_S_JMP_JEQ_X,
 108        BPF_S_JMP_JGE_K,
 109        BPF_S_JMP_JGE_X,
 110        BPF_S_JMP_JGT_K,
 111        BPF_S_JMP_JGT_X,
 112        BPF_S_JMP_JSET_K,
 113        BPF_S_JMP_JSET_X,
 114        /* Ancillary data */
 115        BPF_S_ANC_PROTOCOL,
 116        BPF_S_ANC_PKTTYPE,
 117        BPF_S_ANC_IFINDEX,
 118        BPF_S_ANC_NLATTR,
 119        BPF_S_ANC_NLATTR_NEST,
 120        BPF_S_ANC_MARK,
 121        BPF_S_ANC_QUEUE,
 122        BPF_S_ANC_HATYPE,
 123        BPF_S_ANC_RXHASH,
 124        BPF_S_ANC_CPU,
 125        BPF_S_ANC_ALU_XOR_X,
 126        BPF_S_ANC_SECCOMP_LD_W,
 127        BPF_S_ANC_VLAN_TAG,
 128        BPF_S_ANC_VLAN_TAG_PRESENT,
 129};
 130
 131#endif /* __LINUX_FILTER_H__ */
 132
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.