nftnl_assert(data, attr, _validate_array[_attr] == _data_len); \
})
+void __nftnl_assert_attr_exists(uint16_t attr, uint16_t attr_max,
+ const char *filename, int line);
+
+#define nftnl_assert_attr_exists(_attr, _attr_max) \
+({ \
+ if (_attr > _attr_max) \
+ __nftnl_assert_attr_exists(_attr, _attr_max, __FILE__, __LINE__); \
+})
+
#define SNPRINTF_BUFFER_SIZE(ret, size, len, offset) \
if (ret < 0) \
return ret; \
void nftnl_chain_set_data(struct nftnl_chain *c, uint16_t attr,
const void *data, uint32_t data_len)
{
- if (attr > NFTNL_CHAIN_MAX)
- return;
-
+ nftnl_assert_attr_exists(attr, NFTNL_CHAIN_MAX);
nftnl_assert_validate(data, nftnl_chain_validate, attr, data_len);
switch(attr) {
void nftnl_gen_set_data(struct nftnl_gen *gen, uint16_t attr,
const void *data, uint32_t data_len)
{
- if (attr > NFTNL_GEN_MAX)
- return;
-
+ nftnl_assert_attr_exists(attr, NFTNL_GEN_MAX);
nftnl_assert_validate(data, nftnl_gen_validate, attr, data_len);
switch (attr) {
void nftnl_rule_set_data(struct nftnl_rule *r, uint16_t attr,
const void *data, uint32_t data_len)
{
- if (attr > NFTNL_RULE_MAX)
- return;
-
+ nftnl_assert_attr_exists(attr, NFTNL_RULE_MAX);
nftnl_assert_validate(data, nftnl_rule_validate, attr, data_len);
switch(attr) {
void nftnl_set_set_data(struct nftnl_set *s, uint16_t attr, const void *data,
uint32_t data_len)
{
- if (attr > NFTNL_SET_MAX)
- return;
-
+ nftnl_assert_attr_exists(attr, NFTNL_SET_MAX);
nftnl_assert_validate(data, nftnl_set_validate, attr, data_len);
switch(attr) {
void nftnl_table_set_data(struct nftnl_table *t, uint16_t attr,
const void *data, uint32_t data_len)
{
- if (attr > NFTNL_TABLE_MAX)
- return;
-
+ nftnl_assert_attr_exists(attr, NFTNL_TABLE_MAX);
nftnl_assert_validate(data, nftnl_table_validate, attr, data_len);
switch (attr) {
return ret;
}
+void __nftnl_assert_attr_exists(uint16_t attr, uint16_t attr_max,
+ const char *filename, int line)
+{
+ fprintf(stderr, "libnftnl: attribute %d > %d (maximum) assertion failed in %s:%d\n",
+ attr, attr_max, filename, line);
+ exit(EXIT_FAILURE);
+}
+
void __nftnl_assert_fail(uint16_t attr, const char *filename, int line)
{
fprintf(stderr, "libnftnl: attribute %d assertion failed in %s:%d\n",