From 211c374ee27086cf8cd8cc070291a1ad2207aaa1 Mon Sep 17 00:00:00 2001 From: Alice39s Date: Sat, 27 Jun 2026 23:50:19 +0900 Subject: [PATCH] feat(erlang): add xdb header and dual-stack table/pool macros --- binding/erlang/include/ip2region.hrl | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/binding/erlang/include/ip2region.hrl b/binding/erlang/include/ip2region.hrl index a0e91e7..2e7ea80 100644 --- a/binding/erlang/include/ip2region.hrl +++ b/binding/erlang/include/ip2region.hrl @@ -18,6 +18,36 @@ -define(IP2REGION_POOL, ip2region_pool). +%% xdb header field offsets (bytes) +-define(XDB_HEADER_VERSION_OFFSET, 0). +-define(XDB_HEADER_INDEX_POLICY_OFFSET, 2). +-define(XDB_HEADER_CREATED_AT_OFFSET, 4). +-define(XDB_HEADER_START_INDEX_PTR_OFFSET, 8). +-define(XDB_HEADER_END_INDEX_PTR_OFFSET, 12). +-define(XDB_HEADER_IP_VERSION_OFFSET, 16). +-define(XDB_HEADER_RUNTIME_PTR_BYTES_OFFSET, 18). +-define(XDB_HEADER_INFO_LENGTH, 256). + +%% IP versions as stored in xdb header +-define(IP_VERSION_4, 4). +-define(IP_VERSION_6, 6). + +%% Segment index sizes (bytes): start_ip + end_ip + data_len + data_ptr +-define(XDB_SEGMENT_INDEX_SIZE_V4, 14). %% 4 + 4 + 2 + 4 +-define(XDB_SEGMENT_INDEX_SIZE_V6, 38). %% 16 + 16 + 2 + 4 + +%% Per-version ETS tables +-define(XDB_VECTOR_INDEX_V4, ets_xdb_vector_index_v4). +-define(XDB_VECTOR_INDEX_V6, ets_xdb_vector_index_v6). +-define(XDB_SEGMENT_INDEX_V4, ets_xdb_segment_index_v4). +-define(XDB_SEGMENT_INDEX_V6, ets_xdb_segment_index_v6). +-define(IP2REGION_CACHE_V4, ets_ip2region_cache_v4). +-define(IP2REGION_CACHE_V6, ets_ip2region_cache_v6). + +%% Per-version pool names. ?IP2REGION_POOL is kept as the legacy v4 pool name. +-define(IP2REGION_POOL_V4, ip2region_pool_v4). +-define(IP2REGION_POOL_V6, ip2region_pool_v6). + -ifndef(IF). -define(IF(C, T, F), case (C) of true -> (T); false -> (F) end). -define(IF(C, T), ?IF(C, T, skip)).