History

netfilter: nf_tables: use struct nft_verdict within struct nft_data

Patrick McHardy committed 11 years ago

Commit 1ca2e171 parent a55e22e2 files · +23 −22Browse files

Unified · Split

2 files
  1. include/net/netfilter/nf_tables.h +2 −5
  2. net/netfilter/nf_tables_api.c +21 −17
include/net/netfilter/nf_tables.h+2−5
@@ -49,11 +49,8 @@ struct nft_verdict { · 48 unmodified lines
4949
5050 struct nft_data {
5151 union {
52− u32 data[4];
53− struct {
54− u32 verdict;
55− struct nft_chain *chain;
56− };
52+ u32 data[4];
53+ struct nft_verdict verdict;
5754 };
5855 } __attribute__((aligned(__alignof__(u64))));
5956
net/netfilter/nf_tables_api.c+21−17
@@ -4049,10 +4049,10 @@ static int nf_tables_loop_check_setelem(const struct nft_ctx *ctx, · 4048 unmodified lines
40494049 return 0;
40504050
40514051 data = nft_set_ext_data(ext);
4052− switch (data->verdict) {
4052+ switch (data->verdict.code) {
40534053 case NFT_JUMP:
40544054 case NFT_GOTO:
4055− return nf_tables_check_loops(ctx, data->chain);
4055+ return nf_tables_check_loops(ctx, data->verdict.chain);
40564056 default:
40574057 return 0;
40584058 }
@@ -4085,10 +4085,11 @@ static int nf_tables_check_loops(const struct nft_ctx *ctx, · 26 unmodified lines
40854085 if (data == NULL)
40864086 continue;
40874087
4088− switch (data->verdict) {
4088+ switch (data->verdict.code) {
40894089 case NFT_JUMP:
40904090 case NFT_GOTO:
4091− err = nf_tables_check_loops(ctx, data->chain);
4091+ err = nf_tables_check_loops(ctx,
4092+ data->verdict.chain);
40924093 if (err < 0)
40934094 return err;
40944095 default:
@@ -4171,15 +4172,17 @@ int nft_validate_register_store(const struct nft_ctx *ctx, · 76 unmodified lines
41714172 return -EINVAL;
41724173
41734174 if (data != NULL &&
4174− (data->verdict == NFT_GOTO || data->verdict == NFT_JUMP)) {
4175− err = nf_tables_check_loops(ctx, data->chain);
4175+ (data->verdict.code == NFT_GOTO ||
4176+ data->verdict.code == NFT_JUMP)) {
4177+ err = nf_tables_check_loops(ctx, data->verdict.chain);
41764178 if (err < 0)
41774179 return err;
41784180
4179− if (ctx->chain->level + 1 > data->chain->level) {
4181+ if (ctx->chain->level + 1 >
4182+ data->verdict.chain->level) {
41804183 if (ctx->chain->level + 1 == NFT_JUMP_STACK_SIZE)
41814184 return -EMLINK;
4182− data->chain->level = ctx->chain->level + 1;
4185+ data->verdict.chain->level = ctx->chain->level + 1;
41834186 }
41844187 }
41854188
@@ -4220,11 +4223,11 @@ static int nft_verdict_init(const struct nft_ctx *ctx, struct nft_data *data, · 34 unmodified lines
42204223
42214224 if (!tb[NFTA_VERDICT_CODE])
42224225 return -EINVAL;
4223− data->verdict = ntohl(nla_get_be32(tb[NFTA_VERDICT_CODE]));
4226+ data->verdict.code = ntohl(nla_get_be32(tb[NFTA_VERDICT_CODE]));
42244227
4225− switch (data->verdict) {
4228+ switch (data->verdict.code) {
42264229 default:
4227− switch (data->verdict & NF_VERDICT_MASK) {
4230+ switch (data->verdict.code & NF_VERDICT_MASK) {
42284231 case NF_ACCEPT:
42294232 case NF_DROP:
42304233 case NF_QUEUE:
@@ -4250,7 +4253,7 @@ static int nft_verdict_init(const struct nft_ctx *ctx, struct nft_data *data, · 19 unmodified lines
42504253 return -EOPNOTSUPP;
42514254
42524255 chain->use++;
4253− data->chain = chain;
4256+ data->verdict.chain = chain;
42544257 desc->len = sizeof(data);
42554258 break;
42564259 }
@@ -4261,10 +4264,10 @@ static int nft_verdict_init(const struct nft_ctx *ctx, struct nft_data *data, · 4 unmodified lines
42614264
42624265 static void nft_verdict_uninit(const struct nft_data *data)
42634266 {
4264− switch (data->verdict) {
4267+ switch (data->verdict.code) {
42654268 case NFT_JUMP:
42664269 case NFT_GOTO:
4267− data->chain->use--;
4270+ data->verdict.chain->use--;
42684271 break;
42694272 }
42704273 }
@@ -4277,13 +4280,14 @@ static int nft_verdict_dump(struct sk_buff *skb, const struct nft_data *data) · 6 unmodified lines
42774280 if (!nest)
42784281 goto nla_put_failure;
42794282
4280− if (nla_put_be32(skb, NFTA_VERDICT_CODE, htonl(data->verdict)))
4283+ if (nla_put_be32(skb, NFTA_VERDICT_CODE, htonl(data->verdict.code)))
42814284 goto nla_put_failure;
42824285
4283− switch (data->verdict) {
4286+ switch (data->verdict.code) {
42844287 case NFT_JUMP:
42854288 case NFT_GOTO:
4286− if (nla_put_string(skb, NFTA_VERDICT_CHAIN, data->chain->name))
4289+ if (nla_put_string(skb, NFTA_VERDICT_CHAIN,
4290+ data->verdict.chain->name))
42874291 goto nla_put_failure;
42884292 }
42894293 nla_nest_end(skb, nest);