diff --git a/ebpfcat/ebpf_test.py b/ebpfcat/ebpf_test.py index dbe2cdb8fe64d83df298a824d8fbfdb2dba1ab71..bc8823dae36bc9c43c2d000ad5ee2559645d53ca 100644 --- a/ebpfcat/ebpf_test.py +++ b/ebpfcat/ebpf_test.py @@ -389,6 +389,27 @@ class Tests(TestCase): Instruction(opcode=O.OR, dst=0, src=0, off=0, imm=32), Instruction(opcode=O.B+O.STX, dst=10, src=0, off=-1, imm=0)]) + def test_bits_and_or(self): + class Local(EBPF): + a = LocalVar((5, 1)) + + e = Local(ProgType.XDP, "GPL") + + with e.stmp: + with (e.a != 0) & (e.stmp > 0) | (e.a == 0) & (e.stmp < 0): + e.stmp = 0 + + self.assertEqual(e.opcodes, [ + Instruction(opcode=O.LD+O.B, dst=2, src=10, off=-1, imm=0), + Instruction(opcode=O.JSET, dst=2, src=0, off=1, imm=32), + Instruction(opcode=O.JMP, dst=0, src=0, off=1, imm=0), + Instruction(opcode=O.JSGT, dst=0, src=0, off=3, imm=0), + Instruction(opcode=O.LD+O.B, dst=2, src=10, off=-1, imm=0), + Instruction(opcode=O.JSET, dst=2, src=0, off=2, imm=32), + Instruction(opcode=O.JSGE, dst=0, src=0, off=1, imm=0), + Instruction(opcode=O.MOV+O.LONG, dst=0, src=0, off=0, imm=0), + ]) + def test_local_subprog(self): class Local(EBPF): a = LocalVar('I')