From 58320aecbedfd0380b4effcc18f213f7fbb883bd Mon Sep 17 00:00:00 2001 From: bol-van Date: Sun, 28 Dec 2025 12:49:09 +0300 Subject: [PATCH] nfqws2: swap24 --- docs/manual.md | 1 + nfq2/helpers.c | 4 ++++ nfq2/helpers.h | 1 + nfq2/lua.c | 11 +++++++++++ 4 files changed, 17 insertions(+) diff --git a/docs/manual.md b/docs/manual.md index 0522291..7f91f94 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -1752,6 +1752,7 @@ function bu48(u48) ``` function swap16(u16) +function swap24(u24) function swap32(u32) function swap48(u48) ``` diff --git a/nfq2/helpers.c b/nfq2/helpers.c index ea78514..bd7aa5a 100644 --- a/nfq2/helpers.c +++ b/nfq2/helpers.c @@ -401,6 +401,10 @@ uint16_t swap16(uint16_t u) // __builtin_bswap16 is absent in ancient lexra gcc 4.6 return (u>>8) | ((u&0xFF)<<8); } +uint32_t swap24(uint32_t u) +{ + return (u>>16) & 0xFF | u & 0xFF00 | (u<<16) & 0xFF0000; +} uint64_t swap48(uint64_t u) { return ((u & 0xFF0000000000) >> 40) | ((u & 0xFF00000000) >> 24) | ((u & 0xFF000000) >> 8) | ((u & 0xFF0000) << 8) | ((u & 0xFF00) << 24) | ((u & 0xFF) << 40); diff --git a/nfq2/helpers.h b/nfq2/helpers.h index 109bc8f..254e9b6 100644 --- a/nfq2/helpers.h +++ b/nfq2/helpers.h @@ -67,6 +67,7 @@ uint64_t pntoh64(const uint8_t *p); void phton64(uint8_t *p, uint64_t v); uint16_t swap16(uint16_t u); +uint32_t swap24(uint32_t u); uint64_t swap48(uint64_t u); bool parse_hex_str(const char *s, uint8_t *pbuf, size_t *size); diff --git a/nfq2/lua.c b/nfq2/lua.c index 64120b4..bfac2ed 100644 --- a/nfq2/lua.c +++ b/nfq2/lua.c @@ -281,6 +281,16 @@ static int luacall_swap16(lua_State *L) lua_pushinteger(L,swap16(u)); return 1; } +static int luacall_swap24(lua_State *L) +{ + lua_check_argc(L,"swap24",1); + + int64_t i =(int64_t)luaL_checklint(L,1); + if (i>0xFFFFFF || i<-(int64_t)0xFFFFFF) luaL_error(L, "out of range"); + uint32_t u = (uint32_t)i; + lua_pushlint(L,swap24(u)); + return 1; +} static int luacall_swap32(lua_State *L) { lua_check_argc(L,"swap32",1); @@ -3186,6 +3196,7 @@ static void lua_init_functions(void) {"bu48",luacall_bu48}, // swap byte order {"swap16",luacall_swap16}, + {"swap24",luacall_swap24}, {"swap32",luacall_swap32}, {"swap48",luacall_swap48},