-- This script verifies that the N(U) is increasing...
--
do
	local nu_state_src = {}

	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)

		-- we want to look here...
		local llc_sapi_get = Field.new("llcgprs.sapib")
		local llc_nu_get = Field.new("llcgprs.nu")
		local bssgp_tlli_get = Field.new("bssgp.tlli")

		local tap = Listener.new("ip", "udp.port == 23000")
		function tap.packet(pinfo,tvb,ip)
			local llc_sapi = llc_sapi_get()
			local llc_nu = llc_nu_get()
			local bssgp_tlli = bssgp_tlli_get()

			if not llc_sapi or not llc_nu or not bssgp_tlli then
				return
			end

			local ip_src = tostring(ip.ip_src)
			local bssgp_ttli = tostring(bssgp_tlli)
			local llc_nu = tostring(llc_nu)
			local llc_sapi = tostring(llc_sapi)

			local src_key = ip_src .. "-" .. bssgp_ttli .. "-" .. llc_sapi
			local last_nu = nu_state_src[src_key]
			if not last_nu then
				-- print("Establishing mapping for " .. src_key)
				nu_state_src[src_key] = llc_nu
				return
			end

			nu_state_src[src_key] = llc_nu
			if tonumber(last_nu) + 1 ~= tonumber(llc_nu) then
				print("JUMP in N(U) on TLLI " .. bssgp_ttli .. " and SAPI: " .. llc_sapi)
				print("\t last: " .. last_nu .. " now: " .. llc_nu)
			end
		end

		function tap.draw()
		end

		function tap.reset()
		end
	end
	init_listener()
end

