28RCSIDH(redis_ippool_h,
"$Id: 183ce12236f1a9075e770e9226639cff7b723754 $")
33#define _IPPOOL_RCODE_SUCCESS 0
34#define _IPPOOL_RCODE_NOT_FOUND -1
35#define _IPPOOL_RCODE_EXPIRED -2
36#define _IPPOOL_RCODE_DEVICE_MISMATCH -3
37#define _IPPOOL_RCODE_POOL_EMPTY -4
38#define _IPPOOL_RCODE_FAIL -5
56#define IPPOOL_MAX_KEY_PREFIX_SIZE 128
57#define IPPOOL_POOL_KEY "pool"
58#define IPPOOL_ADDRESS_KEY "ip"
59#define IPPOOL_OWNER_KEY "device"
60#define IPPOOL_STATIC_BIT 0x10000000000000
64#define IPPOOL_MAX_POOL_KEY_SIZE IPPOOL_MAX_KEY_PREFIX_SIZE + (sizeof("{}:" IPPOOL_POOL_KEY) - 1) + 2
68#define IPPOOL_MAX_IP_KEY_SIZE IPPOOL_MAX_KEY_PREFIX_SIZE + (sizeof("{}:" IPPOOL_ADDRESS_KEY ":") - 1) + INET6_ADDRSTRLEN + 4
72#define IPPOOL_MAX_OWNER_KEY_SIZE IPPOOL_MAX_KEY_PREFIX_SIZE + (sizeof("{}:" IPPOOL_OWNER_KEY ":") - 1) + 128
75#define IPADDR_LEN(_af) ((_af == AF_UNSPEC) ? 0 : ((_af == AF_INET6) ? 128 : 32))
80#define IPPOOL_BUILD_KEY(_buff, _p, _key, _key_len) \
82 if (_key_len > sizeof(_buff) - sizeof(IPPOOL_POOL_KEY) - sizeof("{}:") - 1) { \
83 ERROR("Pool name too long"); \
84 ret = IPPOOL_RCODE_FAIL; \
88 memcpy(_p, _key, _key_len); \
92 memcpy(_p, IPPOOL_POOL_KEY, sizeof(IPPOOL_POOL_KEY) - 1); \
93 _p += sizeof(IPPOOL_POOL_KEY) - 1; \
99#define IPPOOL_BUILD_IP_KEY(_buff, _p, _key, _key_len, _ip) \
103 memcpy(_p, _key, _key_len); \
105 _slen = strlcpy((char *)_p, "}:"IPPOOL_ADDRESS_KEY":", sizeof(_buff) - (_p - _buff)); \
106 if (is_truncated((size_t)_slen, sizeof(_buff) - (_p - _buff))) { \
107 REDEBUG("IP key too long"); \
108 ret = IPPOOL_RCODE_FAIL; \
111 _p += (size_t)_slen;\
112 _slen = fr_value_box_print(&FR_SBUFF_OUT((char *)_p, sizeof(_buff) - (_p - _buff)), _ip, NULL); \
114 REDEBUG("IP key too long"); \
115 ret = IPPOOL_RCODE_FAIL; \
118 _p += (size_t)_slen;\
121#define IPPOOL_BUILD_IP_KEY_FROM_STR(_buff, _p, _key, _key_len, _ip_str) \
124 if (_key_len > sizeof(_buff) - sizeof(IPPOOL_ADDRESS_KEY) - sizeof("{}:") - 1) { \
125 ERROR("Pool name too long"); \
126 ret = IPPOOL_RCODE_FAIL; \
130 memcpy(_p, _key, _key_len); \
132 _slen = strlcpy((char *)_p, "}:"IPPOOL_ADDRESS_KEY":", sizeof(_buff) - (_p - _buff)); \
133 if (is_truncated((size_t)_slen, sizeof(_buff) - (_p - _buff))) { \
134 ERROR("IP key too long"); \
135 ret = IPPOOL_RCODE_FAIL;\
138 _p += (size_t)_slen;\
139 _p += strlcpy((char *)_p, _ip_str, sizeof(_buff) - (_p - _buff)); \
145#define IPPOOL_SPRINT_IP(_buff, _ip, _prefix) \
147 if (_prefix == IPADDR_LEN((_ip)->af)) { \
148 inet_ntop((_ip)->af, &((_ip)->addr), _buff, sizeof(_buff)); \
150 uint8_t _net = (_ip)->prefix; \
151 (_ip)->prefix = _prefix; \
152 fr_inet_ntop_prefix(_buff, sizeof(_buff), _ip); \
153 (_ip)->prefix = _net; \
#define _IPPOOL_RCODE_NOT_FOUND
@ POOL_ACTION_BULK_RELEASE
#define _IPPOOL_RCODE_FAIL
#define _IPPOOL_RCODE_POOL_EMPTY
#define _IPPOOL_RCODE_EXPIRED
@ IPPOOL_RCODE_DEVICE_MISMATCH
@ IPPOOL_RCODE_POOL_EMPTY
#define _IPPOOL_RCODE_DEVICE_MISMATCH
#define _IPPOOL_RCODE_SUCCESS