/*
- * (C) 2012 by Pablo Neira Ayuso <pablo@netfilter.org>
+ * (C) 2012-2013 by Pablo Neira Ayuso <pablo@netfilter.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
void *nft_chain_attr_get(struct nft_chain *c, uint16_t attr)
{
+ if (!(c->flags & (1 << attr)))
+ return NULL;
+
switch(attr) {
case NFT_CHAIN_ATTR_NAME:
- if (c->flags & (1 << NFT_CHAIN_ATTR_NAME))
- return c->name;
- else
- return NULL;
- break;
+ return c->name;
case NFT_CHAIN_ATTR_TABLE:
- if (c->flags & (1 << NFT_CHAIN_ATTR_TABLE))
- return c->table;
- else
- return NULL;
+ return c->table;
case NFT_CHAIN_ATTR_HOOKNUM:
- if (c->flags & (1 << NFT_CHAIN_ATTR_HOOKNUM))
- return &c->hooknum;
- else
- return NULL;
- break;
+ return &c->hooknum;
case NFT_CHAIN_ATTR_PRIO:
- if (c->flags & (1 << NFT_CHAIN_ATTR_PRIO))
- return &c->prio;
- else
- return NULL;
- break;
+ return &c->prio;
case NFT_CHAIN_ATTR_POLICY:
- if (c->flags & (1 << NFT_CHAIN_ATTR_POLICY))
- return &c->policy;
- else
- return NULL;
- break;
+ return &c->policy;
case NFT_CHAIN_ATTR_USE:
- if (c->flags & (1 << NFT_CHAIN_ATTR_USE))
- return &c->use;
- else
- return NULL;
- break;
+ return &c->use;
case NFT_CHAIN_ATTR_BYTES:
- if (c->flags & (1 << NFT_CHAIN_ATTR_BYTES))
- return &c->bytes;
- else
- return NULL;
- break;
+ return &c->bytes;
case NFT_CHAIN_ATTR_PACKETS:
- if (c->flags & (1 << NFT_CHAIN_ATTR_PACKETS))
- return &c->packets;
- else
- return NULL;
- break;
+ return &c->packets;
case NFT_CHAIN_ATTR_HANDLE:
- if (c->flags & (1 << NFT_CHAIN_ATTR_HANDLE))
- return &c->handle;
- else
- return NULL;
- break;
+ return &c->handle;
case NFT_CHAIN_ATTR_FAMILY:
- if (c->flags & (1 << NFT_CHAIN_ATTR_FAMILY))
- return &c->family;
- else
- return NULL;
- break;
+ return &c->family;
case NFT_CHAIN_ATTR_TYPE:
- if (c->flags & (1 << NFT_CHAIN_ATTR_TYPE))
- return c->type;
- else
- return NULL;
- break;
- default:
- return NULL;
+ return c->type;
}
+ return NULL;
}
EXPORT_SYMBOL(nft_chain_attr_get);
ret = expr->ops->name;
break;
default:
+ if (!(expr->flags & (1 << type)))
+ return NULL;
+
ret = expr->ops->get(expr, type, data_len);
break;
}
switch(type) {
case NFT_EXPR_BITWISE_SREG:
- if (e->flags & (1 << NFT_EXPR_BITWISE_SREG)) {
- *data_len = sizeof(bitwise->sreg);
- return &bitwise->sreg;
- }
- break;
+ *data_len = sizeof(bitwise->sreg);
+ return &bitwise->sreg;
case NFT_EXPR_BITWISE_DREG:
- if (e->flags & (1 << NFT_EXPR_BITWISE_DREG)) {
- *data_len = sizeof(bitwise->dreg);
- return &bitwise->dreg;
- }
- break;
+ *data_len = sizeof(bitwise->dreg);
+ return &bitwise->dreg;
case NFT_EXPR_BITWISE_LEN:
- if (e->flags & (1 << NFT_EXPR_BITWISE_LEN)) {
- *data_len = sizeof(bitwise->len);
- return &bitwise->len;
- }
- break;
+ *data_len = sizeof(bitwise->len);
+ return &bitwise->len;
case NFT_EXPR_BITWISE_MASK:
- if (e->flags & (1 << NFT_EXPR_BITWISE_MASK)) {
- *data_len = bitwise->mask.len;
- return &bitwise->mask.val;
- }
- break;
+ *data_len = bitwise->mask.len;
+ return &bitwise->mask.val;
case NFT_EXPR_BITWISE_XOR:
- if (e->flags & (1 << NFT_EXPR_BITWISE_XOR)) {
- *data_len = bitwise->xor.len;
- return &bitwise->xor.val;
- }
- break;
- default:
- break;
+ *data_len = bitwise->xor.len;
+ return &bitwise->xor.val;
}
return NULL;
}
switch(type) {
case NFT_EXPR_BYTEORDER_SREG:
- if (e->flags & (1 << NFT_EXPR_BYTEORDER_SREG)) {
- *data_len = sizeof(byteorder->sreg);
- return &byteorder->sreg;
- }
- break;
+ *data_len = sizeof(byteorder->sreg);
+ return &byteorder->sreg;
case NFT_EXPR_BYTEORDER_DREG:
- if (e->flags & (1 << NFT_EXPR_BYTEORDER_DREG)) {
- *data_len = sizeof(byteorder->dreg);
- return &byteorder->dreg;
- }
- break;
+ *data_len = sizeof(byteorder->dreg);
+ return &byteorder->dreg;
case NFT_EXPR_BYTEORDER_OP:
- if (e->flags & (1 << NFT_EXPR_BYTEORDER_OP)) {
- *data_len = sizeof(byteorder->op);
- return &byteorder->op;
- }
- break;
+ *data_len = sizeof(byteorder->op);
+ return &byteorder->op;
case NFT_EXPR_BYTEORDER_LEN:
- if (e->flags & (1 << NFT_EXPR_BYTEORDER_LEN)) {
- *data_len = sizeof(byteorder->len);
- return &byteorder->len;
- }
- break;
+ *data_len = sizeof(byteorder->len);
+ return &byteorder->len;
case NFT_EXPR_BYTEORDER_SIZE:
- if (e->flags & (1 << NFT_EXPR_BYTEORDER_SIZE)) {
- *data_len = sizeof(byteorder->size);
- return &byteorder->size;
- }
- break;
- default:
- break;
+ *data_len = sizeof(byteorder->size);
+ return &byteorder->size;
}
return NULL;
}
switch(type) {
case NFT_EXPR_CMP_SREG:
- if (e->flags & (1 << NFT_EXPR_CMP_SREG)) {
- *data_len = sizeof(cmp->sreg);
- return &cmp->sreg;
- } else
- return NULL;
- break;
+ *data_len = sizeof(cmp->sreg);
+ return &cmp->sreg;
case NFT_EXPR_CMP_OP:
- if (e->flags & (1 << NFT_EXPR_CMP_OP)) {
- *data_len = sizeof(cmp->op);
- return &cmp->op;
- } else
- return NULL;
- break;
+ *data_len = sizeof(cmp->op);
+ return &cmp->op;
case NFT_EXPR_CMP_DATA:
- if (e->flags & (1 << NFT_EXPR_CMP_DATA)) {
- *data_len = cmp->data.len;
- return &cmp->data.val;
- } else
- return NULL;
- break;
- default:
- break;
+ *data_len = cmp->data.len;
+ return &cmp->data.val;
}
return NULL;
}
switch(type) {
case NFT_EXPR_CTR_BYTES:
- if (e->flags & (1 << NFT_EXPR_CTR_BYTES)) {
- *data_len = sizeof(ctr->bytes);
- return &ctr->bytes;
- } else
- return NULL;
- break;
+ *data_len = sizeof(ctr->bytes);
+ return &ctr->bytes;
case NFT_EXPR_CTR_PACKETS:
- if (e->flags & (1 << NFT_EXPR_CTR_PACKETS)) {
- *data_len = sizeof(ctr->pkts);
- return &ctr->pkts;
- } else
- return NULL;
- break;
- default:
- break;
+ *data_len = sizeof(ctr->pkts);
+ return &ctr->pkts;
}
return NULL;
}
switch(type) {
case NFT_EXPR_CT_KEY:
- if (e->flags & (1 << NFT_EXPR_CT_KEY)) {
- *data_len = sizeof(ct->key);
- return &ct->key;
- } else
- return NULL;
- break;
+ *data_len = sizeof(ct->key);
+ return &ct->key;
case NFT_EXPR_CT_DIR:
- if (e->flags & (1 << NFT_EXPR_CT_DIR)) {
- *data_len = sizeof(ct->dir);
- return &ct->dir;
- } else
- return NULL;
- break;
+ *data_len = sizeof(ct->dir);
+ return &ct->dir;
case NFT_EXPR_CT_DREG:
- if (e->flags & (1 << NFT_EXPR_CT_DREG)) {
- *data_len = sizeof(ct->dreg);
- return &ct->dreg;
- } else
- return NULL;
- break;
- default:
- break;
+ *data_len = sizeof(ct->dreg);
+ return &ct->dreg;
}
return NULL;
}
switch(type) {
case NFT_EXPR_EXTHDR_DREG:
- if (e->flags & (1 << NFT_EXPR_EXTHDR_DREG)) {
- *data_len = sizeof(exthdr->dreg);
- return &exthdr->dreg;
- } else
- return NULL;
- break;
+ *data_len = sizeof(exthdr->dreg);
+ return &exthdr->dreg;
case NFT_EXPR_EXTHDR_TYPE:
- if (e->flags & (1 << NFT_EXPR_EXTHDR_TYPE)) {
- *data_len = sizeof(exthdr->type);
- return &exthdr->type;
- } else
- return NULL;
- break;
+ *data_len = sizeof(exthdr->type);
+ return &exthdr->type;
case NFT_EXPR_EXTHDR_OFFSET:
- if (e->flags & (1 << NFT_EXPR_EXTHDR_OFFSET)) {
- *data_len = sizeof(exthdr->offset);
- return &exthdr->offset;
- } else
- return NULL;
- break;
+ *data_len = sizeof(exthdr->offset);
+ return &exthdr->offset;
case NFT_EXPR_EXTHDR_LEN:
- if (e->flags & (1 << NFT_EXPR_EXTHDR_LEN)) {
- *data_len = sizeof(exthdr->len);
- return &exthdr->len;
- } else
- return NULL;
- break;
- default:
- break;
+ *data_len = sizeof(exthdr->len);
+ return &exthdr->len;
}
return NULL;
}
switch(type) {
case NFT_EXPR_IMM_DREG:
- if (e->flags & (1 << NFT_EXPR_IMM_DREG)) {
- *data_len = sizeof(imm->dreg);
- return &imm->dreg;
- } else
- return NULL;
- break;
+ *data_len = sizeof(imm->dreg);
+ return &imm->dreg;
case NFT_EXPR_IMM_DATA:
- if (e->flags & (1 << NFT_EXPR_IMM_DATA)) {
- *data_len = imm->data.len;
- return &imm->data.val;
- } else
- return NULL;
- break;
+ *data_len = imm->data.len;
+ return &imm->data.val;
case NFT_EXPR_IMM_VERDICT:
- if (e->flags & (1 << NFT_EXPR_IMM_VERDICT)) {
- *data_len = sizeof(imm->data.verdict);
- return &imm->data.verdict;
- } else
- return NULL;
- break;
+ *data_len = sizeof(imm->data.verdict);
+ return &imm->data.verdict;
case NFT_EXPR_IMM_CHAIN:
- if (e->flags & (1 << NFT_EXPR_IMM_CHAIN)) {
- *data_len = strlen(imm->data.chain)+1;
- return imm->data.chain;
- } else
- return NULL;
- break;
- default:
- break;
+ *data_len = strlen(imm->data.chain)+1;
+ return imm->data.chain;
}
return NULL;
}
switch(type) {
case NFT_EXPR_LIMIT_RATE:
- if (e->flags & (1 << NFT_EXPR_LIMIT_RATE)) {
- *data_len = sizeof(uint64_t);
- return &limit->rate;
- } else
- return NULL;
- break;
+ *data_len = sizeof(uint64_t);
+ return &limit->rate;
case NFT_EXPR_LIMIT_DEPTH:
- if (e->flags & (1 << NFT_EXPR_LIMIT_DEPTH)) {
- *data_len = sizeof(uint64_t);
- return &limit->depth;
- } else
- return NULL;
- break;
- default:
- break;
+ *data_len = sizeof(uint64_t);
+ return &limit->depth;
}
return NULL;
}
switch(type) {
case NFT_EXPR_LOG_PREFIX:
- if (e->flags & (1 << NFT_EXPR_LOG_PREFIX))
- return log->prefix;
- else
- return NULL;
- break;
+ return log->prefix;
case NFT_EXPR_LOG_GROUP:
- if (e->flags & (1 << NFT_EXPR_LOG_GROUP))
- return &log->group;
- else
- return NULL;
- break;
+ return &log->group;
case NFT_EXPR_LOG_SNAPLEN:
- if (e->flags & (1 << NFT_EXPR_LOG_SNAPLEN))
- return &log->snaplen;
- else
- return NULL;
- break;
+ return &log->snaplen;
case NFT_EXPR_LOG_QTHRESHOLD:
- if (e->flags & (1 << NFT_EXPR_LOG_QTHRESHOLD))
- return &log->qthreshold;
- else
- return NULL;
- break;
- default:
- break;
+ return &log->qthreshold;
}
return NULL;
}
switch(type) {
case NFT_EXPR_LOOKUP_SREG:
- if (e->flags & (1 << NFT_EXPR_LOOKUP_SREG)) {
- *data_len = sizeof(lookup->sreg);
- return &lookup->sreg;
- }
- break;
+ *data_len = sizeof(lookup->sreg);
+ return &lookup->sreg;
case NFT_EXPR_LOOKUP_DREG:
- if (e->flags & (1 << NFT_EXPR_LOOKUP_DREG)) {
- *data_len = sizeof(lookup->dreg);
- return &lookup->dreg;
- }
- break;
+ *data_len = sizeof(lookup->dreg);
+ return &lookup->dreg;
case NFT_EXPR_LOOKUP_SET:
- if (e->flags & (1 << NFT_EXPR_LOOKUP_SET))
- return lookup->set_name;
- break;
- default:
- break;
+ return lookup->set_name;
}
return NULL;
}
switch(type) {
case NFT_EXPR_MT_NAME:
- if (e->flags & (1 << NFT_EXPR_MT_NAME)) {
- *data_len = sizeof(mt->name);
- return mt->name;
- } else
- return NULL;
- break;
+ *data_len = sizeof(mt->name);
+ return mt->name;
case NFT_EXPR_MT_REV:
- if (e->flags & (1 << NFT_EXPR_MT_REV)) {
- *data_len = sizeof(mt->rev);
- return &mt->rev;
- } else
- return NULL;
- break;
+ *data_len = sizeof(mt->rev);
+ return &mt->rev;
case NFT_EXPR_MT_INFO:
- if (e->flags & (1 << NFT_EXPR_MT_INFO)) {
- *data_len = mt->data_len;
- return mt->data;
- } else
- return NULL;
- break;
- default:
- break;
+ *data_len = mt->data_len;
+ return mt->data;
}
return NULL;
}
switch(type) {
case NFT_EXPR_META_KEY:
- if (e->flags & (1 << NFT_EXPR_META_KEY)) {
- *data_len = sizeof(meta->key);
- return &meta->key;
- } else
- return NULL;
- break;
+ *data_len = sizeof(meta->key);
+ return &meta->key;
case NFT_EXPR_META_DREG:
- if (e->flags & (1 << NFT_EXPR_META_DREG)) {
- *data_len = sizeof(meta->dreg);
- return &meta->dreg;
- } else
- return NULL;
- break;
- default:
- break;
+ *data_len = sizeof(meta->dreg);
+ return &meta->dreg;
}
return NULL;
}
switch(type) {
case NFT_EXPR_NAT_TYPE:
- if (e->flags & (1 << NFT_EXPR_NAT_TYPE)) {
- *data_len = sizeof(nat->type);
- return &nat->type;
- }
- break;
+ *data_len = sizeof(nat->type);
+ return &nat->type;
case NFT_EXPR_NAT_FAMILY:
- if (e->flags & (1 << NFT_EXPR_NAT_FAMILY)) {
- *data_len = sizeof(nat->family);
- return &nat->family;
- }
- break;
+ *data_len = sizeof(nat->family);
+ return &nat->family;
case NFT_EXPR_NAT_REG_ADDR_MIN:
- if (e->flags & (1 << NFT_EXPR_NAT_REG_ADDR_MIN)) {
- *data_len = sizeof(nat->sreg_addr_min);
- return &nat->sreg_addr_min;
- }
- break;
+ *data_len = sizeof(nat->sreg_addr_min);
+ return &nat->sreg_addr_min;
case NFT_EXPR_NAT_REG_ADDR_MAX:
- if (e->flags & (1 << NFT_EXPR_NAT_REG_ADDR_MAX)) {
- *data_len = sizeof(nat->sreg_addr_max);
- return &nat->sreg_addr_max;
- }
- break;
+ *data_len = sizeof(nat->sreg_addr_max);
+ return &nat->sreg_addr_max;
case NFT_EXPR_NAT_REG_PROTO_MIN:
- if (e->flags & (1 << NFT_EXPR_NAT_REG_PROTO_MIN)) {
- *data_len = sizeof(nat->sreg_proto_min);
- return &nat->sreg_proto_min;
- }
- break;
+ *data_len = sizeof(nat->sreg_proto_min);
+ return &nat->sreg_proto_min;
case NFT_EXPR_NAT_REG_PROTO_MAX:
- if (e->flags & (1 << NFT_EXPR_NAT_REG_PROTO_MAX)) {
- *data_len = sizeof(nat->sreg_proto_max);
- return &nat->sreg_proto_max;
- }
- break;
- default:
- break;
+ *data_len = sizeof(nat->sreg_proto_max);
+ return &nat->sreg_proto_max;
}
-
return NULL;
}
switch(type) {
case NFT_EXPR_PAYLOAD_DREG:
- if (e->flags & (1 << NFT_EXPR_PAYLOAD_DREG)) {
- *data_len = sizeof(payload->dreg);
- return &payload->dreg;
- } else
- return NULL;
- break;
+ *data_len = sizeof(payload->dreg);
+ return &payload->dreg;
case NFT_EXPR_PAYLOAD_BASE:
- if (e->flags & (1 << NFT_EXPR_PAYLOAD_BASE)) {
- *data_len = sizeof(payload->base);
- return &payload->base;
- } else
- return NULL;
- break;
+ *data_len = sizeof(payload->base);
+ return &payload->base;
case NFT_EXPR_PAYLOAD_OFFSET:
- if (e->flags & (1 << NFT_EXPR_PAYLOAD_OFFSET)) {
- *data_len = sizeof(payload->offset);
- return &payload->offset;
- } else
- return NULL;
- break;
+ *data_len = sizeof(payload->offset);
+ return &payload->offset;
case NFT_EXPR_PAYLOAD_LEN:
- if (e->flags & (1 << NFT_EXPR_PAYLOAD_LEN)) {
- *data_len = sizeof(payload->len);
- return &payload->len;
- } else
- return NULL;
- break;
- default:
- break;
+ *data_len = sizeof(payload->len);
+ return &payload->len;
}
return NULL;
}
switch(type) {
case NFT_EXPR_TG_NAME:
- if (e->flags & (1 << NFT_EXPR_TG_NAME)) {
- *data_len = sizeof(tg->name);
- return tg->name;
- } else
- return NULL;
- break;
+ *data_len = sizeof(tg->name);
+ return tg->name;
case NFT_EXPR_TG_REV:
- if (e->flags & (1 << NFT_EXPR_TG_REV)) {
- *data_len = sizeof(tg->rev);
- return &tg->rev;
- } else
- return NULL;
- break;
+ *data_len = sizeof(tg->rev);
+ return &tg->rev;
case NFT_EXPR_TG_INFO:
- if (e->flags & (1 << NFT_EXPR_TG_INFO)) {
- *data_len = tg->data_len;
- return tg->data;
- } else
- return NULL;
- break;
- default:
- break;
+ *data_len = tg->data_len;
+ return tg->data;
}
return NULL;
}
/*
- * (C) 2012 by Pablo Neira Ayuso <pablo@netfilter.org>
+ * (C) 2012-2013 by Pablo Neira Ayuso <pablo@netfilter.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
const void *nft_rule_attr_get(const struct nft_rule *r, uint16_t attr)
{
+ if (!(r->flags & (1 << attr)))
+ return NULL;
+
switch(attr) {
case NFT_RULE_ATTR_FAMILY:
- if (r->flags & (1 << NFT_RULE_ATTR_FAMILY))
- return &r->family;
- else
- return NULL;
- break;
+ return &r->family;
case NFT_RULE_ATTR_TABLE:
- if (r->flags & (1 << NFT_RULE_ATTR_TABLE))
- return r->table;
- else
- return NULL;
- break;
+ return r->table;
case NFT_RULE_ATTR_CHAIN:
- if (r->flags & (1 << NFT_RULE_ATTR_CHAIN))
- return r->chain;
- else
- return NULL;
+ return r->chain;
case NFT_RULE_ATTR_HANDLE:
- if (r->flags & (1 << NFT_RULE_ATTR_HANDLE))
- return &r->handle;
- else
- return NULL;
- break;
+ return &r->handle;
case NFT_RULE_ATTR_FLAGS:
- if (r->flags & (1 << NFT_RULE_ATTR_FLAGS))
- return &r->rule_flags;
- else
- return NULL;
- break;
+ return &r->rule_flags;
case NFT_RULE_ATTR_COMPAT_PROTO:
- if (r->flags & (1 << NFT_RULE_ATTR_COMPAT_PROTO))
- return &r->compat.proto;
- else
- return NULL;
- break;
+ return &r->compat.proto;
case NFT_RULE_ATTR_COMPAT_FLAGS:
- if (r->flags & (1 << NFT_RULE_ATTR_COMPAT_FLAGS))
- return &r->compat.flags;
- else
- return NULL;
- break;
- default:
- return NULL;
+ return &r->compat.flags;
}
+ return NULL;
}
EXPORT_SYMBOL(nft_rule_attr_get);
void *nft_set_attr_get(struct nft_set *s, uint16_t attr)
{
+ if (!(s->flags & (1 << attr)))
+ return NULL;
+
switch(attr) {
case NFT_SET_ATTR_TABLE:
- if (s->flags & (1 << NFT_SET_ATTR_TABLE))
- return s->table;
- break;
+ return s->table;
case NFT_SET_ATTR_NAME:
- if (s->flags & (1 << NFT_SET_ATTR_NAME))
- return s->name;
- break;
+ return s->name;
case NFT_SET_ATTR_FLAGS:
- if (s->flags & (1 << NFT_SET_ATTR_FLAGS))
- return &s->set_flags;
- break;
+ return &s->set_flags;
case NFT_SET_ATTR_KEY_TYPE:
- if (s->flags & (1 << NFT_SET_ATTR_KEY_TYPE))
- return &s->key_type;
- break;
+ return &s->key_type;
case NFT_SET_ATTR_KEY_LEN:
- if (s->flags & (1 << NFT_SET_ATTR_KEY_LEN))
- return &s->key_len;
- break;
+ return &s->key_len;
case NFT_SET_ATTR_DATA_TYPE:
- if (s->flags & (1 << NFT_SET_ATTR_DATA_TYPE))
- return &s->data_type;
- break;
+ return &s->data_type;
case NFT_SET_ATTR_DATA_LEN:
- if (s->flags & (1 << NFT_SET_ATTR_DATA_LEN))
- return &s->data_len;
- break;
+ return &s->data_len;
case NFT_SET_ATTR_FAMILY:
- if (s->flags & (1 << NFT_SET_ATTR_FAMILY))
- return &s->family;
- break;
- default:
- break;
+ return &s->family;
}
return NULL;
}
void *nft_set_elem_attr_get(struct nft_set_elem *s, uint16_t attr, size_t *data_len)
{
+ if (!(s->flags & (1 << attr)))
+ return NULL;
+
switch(attr) {
case NFT_SET_ELEM_ATTR_FLAGS:
- if (s->flags & (1 << NFT_SET_ELEM_ATTR_FLAGS))
- return &s->set_elem_flags;
- break;
+ return &s->set_elem_flags;
case NFT_SET_ELEM_ATTR_KEY: /* NFTA_SET_ELEM_KEY */
- if (s->flags & (1 << NFT_SET_ELEM_ATTR_KEY)) {
- *data_len = s->key.len;
- return &s->key.val;
- }
- break;
+ *data_len = s->key.len;
+ return &s->key.val;
case NFT_SET_ELEM_ATTR_VERDICT: /* NFTA_SET_ELEM_DATA */
- if (s->flags & (1 << NFT_SET_ELEM_ATTR_VERDICT))
- return &s->data.verdict;
- break;
+ return &s->data.verdict;
case NFT_SET_ELEM_ATTR_CHAIN: /* NFTA_SET_ELEM_DATA */
- if (s->flags & (1 << NFT_SET_ELEM_ATTR_CHAIN))
- return s->data.chain;
- break;
+ return s->data.chain;
case NFT_SET_ELEM_ATTR_DATA: /* NFTA_SET_ELEM_DATA */
- if (s->flags & (1 << NFT_SET_ELEM_ATTR_DATA)) {
- *data_len = s->data.len;
- return &s->data.val;
- }
- break;
- default:
- break;
+ *data_len = s->data.len;
+ return &s->data.val;
}
return NULL;
}
/*
- * (C) 2012 by Pablo Neira Ayuso <pablo@netfilter.org>
+ * (C) 2012-2013 by Pablo Neira Ayuso <pablo@netfilter.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
const void *nft_table_attr_get(struct nft_table *t, uint16_t attr)
{
- const void *ret = NULL;
+ if (!(t->flags & (1 << attr)))
+ return NULL;
switch(attr) {
case NFT_TABLE_ATTR_NAME:
- if (t->flags & (1 << NFT_TABLE_ATTR_NAME))
- ret = t->name;
- break;
+ return t->name;
case NFT_TABLE_ATTR_FLAGS:
- if (t->flags & (1 << NFT_TABLE_ATTR_FLAGS))
- ret = &t->table_flags;
- break;
+ return &t->table_flags;
case NFT_TABLE_ATTR_FAMILY:
- if (t->flags & (1 << NFT_TABLE_ATTR_FAMILY))
- ret = &t->family;
- break;
+ return &t->family;
}
- return ret;
+ return NULL;
}
EXPORT_SYMBOL(nft_table_attr_get);