1*387f9dfdSAndroid Build Coastguard Workerlocal ffi = require('ffi') 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker-- Define basic ctypes 4*387f9dfdSAndroid Build Coastguard Workerffi.cdef [[ 5*387f9dfdSAndroid Build Coastguard Worker struct bpf_insn { 6*387f9dfdSAndroid Build Coastguard Worker uint8_t code; /* opcode */ 7*387f9dfdSAndroid Build Coastguard Worker uint8_t dst_reg:4; /* dest register */ 8*387f9dfdSAndroid Build Coastguard Worker uint8_t src_reg:4; /* source register */ 9*387f9dfdSAndroid Build Coastguard Worker uint16_t off; /* signed offset */ 10*387f9dfdSAndroid Build Coastguard Worker uint32_t imm; /* signed immediate constant */ 11*387f9dfdSAndroid Build Coastguard Worker }; 12*387f9dfdSAndroid Build Coastguard Worker]] 13*387f9dfdSAndroid Build Coastguard Worker 14*387f9dfdSAndroid Build Coastguard Worker-- Inject mock ljsyscall for tests 15*387f9dfdSAndroid Build Coastguard Workerpackage.loaded['syscall'] = { 16*387f9dfdSAndroid Build Coastguard Worker bpf = function() error('mock') end, 17*387f9dfdSAndroid Build Coastguard Worker c = { BPF_MAP = {}, BPF_PROG = {} }, 18*387f9dfdSAndroid Build Coastguard Worker abi = { arch = 'x64' }, 19*387f9dfdSAndroid Build Coastguard Worker} 20*387f9dfdSAndroid Build Coastguard Worker 21*387f9dfdSAndroid Build Coastguard Workerpackage.loaded['syscall.helpers'] = { 22*387f9dfdSAndroid Build Coastguard Worker strflag = function (tab) 23*387f9dfdSAndroid Build Coastguard Worker local function flag(cache, str) 24*387f9dfdSAndroid Build Coastguard Worker if type(str) ~= "string" then return str end 25*387f9dfdSAndroid Build Coastguard Worker if #str == 0 then return 0 end 26*387f9dfdSAndroid Build Coastguard Worker local s = str:upper() 27*387f9dfdSAndroid Build Coastguard Worker if #s == 0 then return 0 end 28*387f9dfdSAndroid Build Coastguard Worker local val = rawget(tab, s) 29*387f9dfdSAndroid Build Coastguard Worker if not val then return nil end 30*387f9dfdSAndroid Build Coastguard Worker cache[str] = val 31*387f9dfdSAndroid Build Coastguard Worker return val 32*387f9dfdSAndroid Build Coastguard Worker end 33*387f9dfdSAndroid Build Coastguard Worker return setmetatable(tab, {__index = setmetatable({}, {__index = flag}), __call = function(t, a) return t[a] end}) 34*387f9dfdSAndroid Build Coastguard Worker end 35*387f9dfdSAndroid Build Coastguard Worker}