1
votes

New user to LUA creating a protocol dissector for Wireshark.

referring to Lua - Bitwise Logical Operations,

I need a function in Lua to create a string based on a converted hex value:

local function HexToCircuitID(val)
    -- input: 0x9D81
    -- output: "630.1.01"
    local e = ((val >> 4) & 0x3) + 1
    local f = val & 0xF
    local g = val >> 6
    return string.format("%d.%d.%02d",e,f,g)
end

the interpreter has a problem with "unexpected symbol near '>' " for the first line with the right-shift operator.

Also, I'm not sure the string format function will operate the same as in C (new to Lua). This function is to create a ProtoField that appears as:

CircuitId: 630.1.01

where the actual value of the field is 0x9D81.

1
did you check the lua version? the answers from that question you linked explain that 5.2 and earlier lua versions do not have bitwise operators just a library.Nifim

1 Answers

1
votes

You can use bit.rshift(x, n) to right shift and bit.band(x1[,x2...]) to &.

The function then becomes:

local function HexToCircuitID(val)
    -- input: 0x9D81
    -- output: "630.1.01"
    local e = bit.band(bit.rshift(val, 4), 0x3) + 1
    local f = bit.band(val, 0xF)
    local g = bit.rshift(val, 6)

    --return string.format("%d.%d.%02d",e,f,g)
    return string.format("%d.%d.%02d",g,f,e)
end

To get the order right I had to change e,f,g to g,f,e.

This will work in the latest version of Wireshark, which uses Lua 5.2. As Nifim mentioned, you have to use the bit library rather than bitwise operators, as they were introduced in Lua 5.3.