Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


filter.h
001: /*
002:  * Linux Socket Filter Data Structures
003:  */
004: 
005: #ifndef __LINUX_FILTER_H__
006: #define __LINUX_FILTER_H__
007: 
008: 
009: #include <linux/types.h>
010: 
011: 
012: /*
013:  * Current version of the filter code architecture.
014:  */
015: #define BPF_MAJOR_VERSION 1
016: #define BPF_MINOR_VERSION 1
017: 
018: /*
019:  *      Try and keep these values and structures similar to BSD, especially
020:  *      the BPF code definitions which need to match so you can share filters
021:  */
022:  
023: struct sock_filter {    /* Filter block */
024:         __u16   code;   /* Actual filter code */
025:         __u8    jt;     /* Jump true */
026:         __u8    jf;     /* Jump false */
027:         __u32   k;      /* Generic multiuse field */
028: };
029: 
030: struct sock_fprog {     /* Required for SO_ATTACH_FILTER. */
031:         unsigned short          len;    /* Number of filter blocks */
032:         struct sock_filter *filter;
033: };
034: 
035: /*
036:  * Instruction classes
037:  */
038: 
039: #define BPF_CLASS(code) ((code) & 0x07)
040: #define         BPF_LD          0x00
041: #define         BPF_LDX         0x01
042: #define         BPF_ST          0x02
043: #define         BPF_STX         0x03
044: #define         BPF_ALU         0x04
045: #define         BPF_JMP         0x05
046: #define         BPF_RET         0x06
047: #define         BPF_MISC        0x07
048: 
049: /* ld/ldx fields */
050: #define BPF_SIZE(code)  ((code) & 0x18)
051: #define         BPF_W           0x00
052: #define         BPF_H           0x08
053: #define         BPF_B           0x10
054: #define BPF_MODE(code)  ((code) & 0xe0)
055: #define         BPF_IMM         0x00
056: #define         BPF_ABS         0x20
057: #define         BPF_IND         0x40
058: #define         BPF_MEM         0x60
059: #define         BPF_LEN         0x80
060: #define         BPF_MSH         0xa0
061: 
062: /* alu/jmp fields */
063: #define BPF_OP(code)    ((code) & 0xf0)
064: #define         BPF_ADD         0x00
065: #define         BPF_SUB         0x10
066: #define         BPF_MUL         0x20
067: #define         BPF_DIV         0x30
068: #define         BPF_OR          0x40
069: #define         BPF_AND         0x50
070: #define         BPF_LSH         0x60
071: #define         BPF_RSH         0x70
072: #define         BPF_NEG         0x80
073: #define         BPF_JA          0x00
074: #define         BPF_JEQ         0x10
075: #define         BPF_JGT         0x20
076: #define         BPF_JGE         0x30
077: #define         BPF_JSET        0x40
078: #define BPF_SRC(code)   ((code) & 0x08)
079: #define         BPF_K           0x00
080: #define         BPF_X           0x08
081: 
082: /* ret - BPF_K and BPF_X also apply */
083: #define BPF_RVAL(code)  ((code) & 0x18)
084: #define         BPF_A           0x10
085: 
086: /* misc */
087: #define BPF_MISCOP(code) ((code) & 0xf8)
088: #define         BPF_TAX         0x00
089: #define         BPF_TXA         0x80
090: 
091: #ifndef BPF_MAXINSNS
092: #define BPF_MAXINSNS 4096
093: #endif
094: 
095: /*
096:  * Macros for filter block array initializers.
097:  */
098: #ifndef BPF_STMT
099: #define BPF_STMT(code, k) { (unsigned short)(code), 0, 0, k }
100: #endif
101: #ifndef BPF_JUMP
102: #define BPF_JUMP(code, k, jt, jf) { (unsigned short)(code), jt, jf, k }
103: #endif
104: 
105: /*
106:  * Number of scratch memory words for: BPF_ST and BPF_STX
107:  */
108: #define BPF_MEMWORDS 16
109: 
110: /* RATIONALE. Negative offsets are invalid in BPF.
111:    We use them to reference ancillary data.
112:    Unlike introduction new instructions, it does not break
113:    existing compilers/optimizers.
114:  */
115: #define SKF_AD_OFF    (-0x1000)
116: #define SKF_AD_PROTOCOL 0
117: #define SKF_AD_PKTTYPE  4
118: #define SKF_AD_IFINDEX  8
119: #define SKF_AD_NLATTR   12
120: #define SKF_AD_NLATTR_NEST      16
121: #define SKF_AD_MARK     20
122: #define SKF_AD_QUEUE    24
123: #define SKF_AD_HATYPE   28
124: #define SKF_AD_RXHASH   32
125: #define SKF_AD_CPU      36
126: #define SKF_AD_MAX      40
127: #define SKF_NET_OFF   (-0x100000)
128: #define SKF_LL_OFF    (-0x200000)
129: 
130: 
131: #endif /* __LINUX_FILTER_H__ */
132: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/