00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef BPF_MAJOR_VERSION
00044
00045
00046 #define BPF_RELEASE 199606
00047
00048 typedef int bpf_int32;
00049 typedef u_int bpf_u_int32;
00050
00051
00052
00053
00054
00055 #define BPF_ALIGNMENT sizeof(bpf_int32)
00056 #define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1))
00057
00058 #define BPF_MAXINSNS 512
00059 #define BPF_MAXBUFSIZE 0x8000
00060 #define BPF_MINBUFSIZE 32
00061
00062
00063
00064
00065 struct bpf_program {
00066 u_int bf_len;
00067 struct bpf_insn *bf_insns;
00068 };
00069
00070
00071
00072
00073 struct bpf_stat {
00074 u_int bs_recv;
00075 u_int bs_drop;
00076 };
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089 struct bpf_version {
00090 u_short bv_major;
00091 u_short bv_minor;
00092 };
00093
00094 #define BPF_MAJOR_VERSION 1
00095 #define BPF_MINOR_VERSION 1
00096
00097
00098
00099
00100
00101
00102
00103
00104 #if (defined(sun) || defined(ibm032)) && !defined(__GNUC__)
00105 #define BIOCGBLEN _IOR(B,102, u_int)
00106 #define BIOCSBLEN _IOWR(B,102, u_int)
00107 #define BIOCSETF _IOW(B,103, struct bpf_program)
00108 #define BIOCFLUSH _IO(B,104)
00109 #define BIOCPROMISC _IO(B,105)
00110 #define BIOCGDLT _IOR(B,106, u_int)
00111 #define BIOCGETIF _IOR(B,107, struct ifreq)
00112 #define BIOCSETIF _IOW(B,108, struct ifreq)
00113 #define BIOCSRTIMEOUT _IOW(B,109, struct timeval)
00114 #define BIOCGRTIMEOUT _IOR(B,110, struct timeval)
00115 #define BIOCGSTATS _IOR(B,111, struct bpf_stat)
00116 #define BIOCIMMEDIATE _IOW(B,112, u_int)
00117 #define BIOCVERSION _IOR(B,113, struct bpf_version)
00118 #define BIOCSTCPF _IOW(B,114, struct bpf_program)
00119 #define BIOCSUDPF _IOW(B,115, struct bpf_program)
00120 #else
00121 #define BIOCGBLEN _IOR('B',102, u_int)
00122 #define BIOCSBLEN _IOWR('B',102, u_int)
00123 #define BIOCSETF _IOW('B',103, struct bpf_program)
00124 #define BIOCFLUSH _IO('B',104)
00125 #define BIOCPROMISC _IO('B',105)
00126 #define BIOCGDLT _IOR('B',106, u_int)
00127 #define BIOCGETIF _IOR('B',107, struct ifreq)
00128 #define BIOCSETIF _IOW('B',108, struct ifreq)
00129 #define BIOCSRTIMEOUT _IOW('B',109, struct timeval)
00130 #define BIOCGRTIMEOUT _IOR('B',110, struct timeval)
00131 #define BIOCGSTATS _IOR('B',111, struct bpf_stat)
00132 #define BIOCIMMEDIATE _IOW('B',112, u_int)
00133 #define BIOCVERSION _IOR('B',113, struct bpf_version)
00134 #define BIOCSTCPF _IOW('B',114, struct bpf_program)
00135 #define BIOCSUDPF _IOW('B',115, struct bpf_program)
00136 #endif
00137
00138
00139
00140
00141 struct bpf_hdr {
00142 struct timeval bh_tstamp;
00143 bpf_u_int32 bh_caplen;
00144 bpf_u_int32 bh_datalen;
00145 u_short bh_hdrlen;
00146
00147 };
00148
00149
00150
00151
00152
00153 #ifdef KERNEL
00154 #define SIZEOF_BPF_HDR 18
00155 #endif
00156
00157
00158
00159
00160 #define DLT_NULL 0
00161 #define DLT_EN10MB 1
00162 #define DLT_EN3MB 2
00163 #define DLT_AX25 3
00164 #define DLT_PRONET 4
00165 #define DLT_CHAOS 5
00166 #define DLT_IEEE802 6
00167 #define DLT_ARCNET 7
00168 #define DLT_SLIP 8
00169 #define DLT_PPP 9
00170 #define DLT_FDDI 10
00171 #define DLT_ATM_RFC1483 11
00172 #define DLT_RAW 12
00173 #define DLT_SLIP_BSDOS 13
00174 #define DLT_PPP_BSDOS 14
00175
00176
00177
00178
00179
00180 #define BPF_CLASS(code) ((code) & 0x07)
00181 #define BPF_LD 0x00
00182 #define BPF_LDX 0x01
00183 #define BPF_ST 0x02
00184 #define BPF_STX 0x03
00185 #define BPF_ALU 0x04
00186 #define BPF_JMP 0x05
00187 #define BPF_RET 0x06
00188 #define BPF_MISC 0x07
00189
00190
00191 #define BPF_SIZE(code) ((code) & 0x18)
00192 #define BPF_W 0x00
00193 #define BPF_H 0x08
00194 #define BPF_B 0x10
00195 #define BPF_MODE(code) ((code) & 0xe0)
00196 #define BPF_IMM 0x00
00197 #define BPF_ABS 0x20
00198 #define BPF_IND 0x40
00199 #define BPF_MEM 0x60
00200 #define BPF_LEN 0x80
00201 #define BPF_MSH 0xa0
00202
00203
00204 #define BPF_OP(code) ((code) & 0xf0)
00205 #define BPF_ADD 0x00
00206 #define BPF_SUB 0x10
00207 #define BPF_MUL 0x20
00208 #define BPF_DIV 0x30
00209 #define BPF_OR 0x40
00210 #define BPF_AND 0x50
00211 #define BPF_LSH 0x60
00212 #define BPF_RSH 0x70
00213 #define BPF_NEG 0x80
00214 #define BPF_JA 0x00
00215 #define BPF_JEQ 0x10
00216 #define BPF_JGT 0x20
00217 #define BPF_JGE 0x30
00218 #define BPF_JSET 0x40
00219 #define BPF_SRC(code) ((code) & 0x08)
00220 #define BPF_K 0x00
00221 #define BPF_X 0x08
00222
00223
00224 #define BPF_RVAL(code) ((code) & 0x18)
00225 #define BPF_A 0x10
00226
00227
00228 #define BPF_MISCOP(code) ((code) & 0xf8)
00229 #define BPF_TAX 0x00
00230 #define BPF_TXA 0x80
00231
00232
00233
00234
00235 struct bpf_insn {
00236 u_short code;
00237 u_char jt;
00238 u_char jf;
00239 bpf_int32 k;
00240 };
00241
00242
00243
00244
00245 #define BPF_STMT(code, k) { (u_short)(code), 0, 0, k }
00246 #define BPF_JUMP(code, k, jt, jf) { (u_short)(code), jt, jf, k }
00247
00248 #ifdef KERNEL
00249 extern u_int bpf_filter();
00250 extern void bpfattach();
00251 extern void bpf_tap();
00252 extern void bpf_mtap();
00253 #else
00254 #if __STDC__
00255 extern u_int bpf_filter(struct bpf_insn *, u_char *, u_int, u_int);
00256 #endif
00257 #endif
00258
00259
00260
00261
00262 #define BPF_MEMWORDS 16
00263
00264 #endif