Home | History | Annotate | Download | only in bpf_dsl

Lines Matching defs:insn

35 void Ld(State* state, const struct sock_filter& insn, const char** err) {
36 if (BPF_SIZE(insn.code) != BPF_W || BPF_MODE(insn.code) != BPF_ABS ||
37 insn.jt != 0 || insn.jf != 0) {
41 if (insn.k < sizeof(struct arch_seccomp_data) && (insn.k & 3) == 0) {
44 reinterpret_cast<const char*>(&state->data) + insn.k, 4);
53 void Jmp(State* state, const struct sock_filter& insn, const char** err) {
54 if (BPF_OP(insn.code) == BPF_JA) {
55 if (state->ip + insn.k + 1 >= state->program.size() ||
56 state->ip + insn.k + 1 <= state->ip) {
61 state->ip += insn.k;
63 if (BPF_SRC(insn.code) != BPF_K || !state->acc_is_valid ||
64 state->ip + insn.jt + 1 >= state->program.size() ||
65 state->ip + insn.jf + 1 >= state->program.size()) {
68 switch (BPF_OP(insn.code)) {
70 if (state->accumulator == insn.k) {
71 state->ip += insn.jt;
73 state->ip += insn.jf;
77 if (state->accumulator > insn.k) {
78 state->ip += insn.jt;
80 state->ip += insn.jf;
84 if (state->accumulator >= insn.k) {
85 state->ip += insn.jt;
87 state->ip += insn.jf;
91 if (state->accumulator & insn.k) {
92 state->ip += insn.jt;
94 state->ip += insn.jf;
103 uint32_t Ret(State*, const struct sock_filter& insn, const char** err) {
104 if (BPF_SRC(insn.code) != BPF_K) {
108 return insn.k;
111 void Alu(State* state, const struct sock_filter& insn, const char** err) {
112 if (BPF_OP(insn.code) == BPF_NEG) {
116 if (BPF_SRC(insn.code) != BPF_K) {
120 switch (BPF_OP(insn.code)) {
122 state->accumulator += insn.k;
125 state->accumulator -= insn.k;
128 state->accumulator *= insn.k;
131 if (!insn.k) {
135 state->accumulator /= insn.k;
138 if (!insn.k) {
142 state->accumulator %= insn.k;
145 state->accumulator |= insn.k;
148 state->accumulator ^= insn.k;
151 state->accumulator &= insn.k;
154 if (insn.k > 32) {
158 state->accumulator <<= insn.k;
161 if (insn.k > 32) {
165 state->accumulator >>= insn.k;
189 const struct sock_filter& insn = program[state.ip];
190 switch (BPF_CLASS(insn.code)) {
192 Ld(&state, insn, err);
195 Jmp(&state, insn, err);
198 uint32_t r = Ret(&state, insn, err);
214 Alu(&state, insn, err);