-- I count the buffer space needed for LLC PDUs in the worse case and print it do local function init_listener() -- handle the port as NS over IP local udp_port_table = DissectorTable.get("udp.port") local gprs_ns_dis = Dissector.get("gprs_ns") udp_port_table:add(23000,gprs_ns_dis) -- bssgp filters local bssgp_pdu_get = Field.new("bssgp.pdu_type") local bssgp_delay_get = Field.new("bssgp.delay_val") local llcgprs_get = Field.new("llcgprs") local pdus = nil print("START...") local tap = Listener.new("ip", "udp.port == 23000 && bssgp.pdu_type == 0") function tap.packet(pinfo,tvb,ip) local pdu = bssgp_pdu_get() local len = llcgprs_get().len local delay = bssgp_delay_get() -- only handle bssgp, but we also want the IP frame if not pdu then return end if tonumber(tostring(delay)) == 65535 then pdus = { next = pdus, len = len, expires = -1 } else local off = tonumber(tostring(delay)) / 100.0 pdus = { next = pdus, len = len, expires = pinfo.rel_ts + off } end local now_time = tonumber(tostring(pinfo.rel_ts)) local now_size = 0 local l = pdus local prev = nil local count = 0 while l do if now_time < l.expires or l.expires == -1 then now_size = now_size + l.len prev = l l = l.next count = count + 1 else -- delete things if prev == nil then pdus = nil l = nil else prev.next = l.next l = l.next end end end -- print("TOTAL: " .. now_time .. " PDU_SIZE: " .. now_size) print(now_time .. " " .. now_size / 1024.0 .. " " .. count) -- print("NOW: " .. tostring(pinfo.rel_ts) .. " Delay: " .. tostring(delay) .. " Length: " .. tostring(len)) end function tap.draw() -- well... this will not be called... -- for ip,bssgp_histo in pairs(dumpers) do -- print("IP " .. ip) -- end print("END") end function tap.reset() -- well... this will not be called... end end init_listener() end