]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
expr: replace PAYLOAD_PROTOCOL_EXPR by generic flag
authorPatrick McHardy <kaber@trash.net>
Wed, 8 Jan 2014 13:02:15 +0000 (13:02 +0000)
committerPatrick McHardy <kaber@trash.net>
Wed, 8 Jan 2014 13:02:15 +0000 (13:02 +0000)
Introduce a generic flag to indicate that an expression describes the
upper layer protocol as replacement for the payload specific flag.

Signed-off-by: Patrick McHardy <kaber@trash.net>
include/expression.h
include/payload.h
src/netlink_delinearize.c
src/payload.c

index f0eb7993570b4e5b9f933bfba3b530114af6ef06..d8f28682870d8c868d586dd43807523e8f027c43 100644 (file)
@@ -135,12 +135,14 @@ struct expr_ops {
  *
  * @EXPR_F_CONSTANT:           constant expression
  * @EXPR_F_SINGLETON:          singleton (implies primary and constant)
+ * @EXPR_F_PROTOCOL:           expressions describes upper layer protocol
  * @EXPR_F_INTERVAL_END:       set member ends an open interval
  */
 enum expr_flags {
        EXPR_F_CONSTANT         = 0x1,
        EXPR_F_SINGLETON        = 0x2,
-       EXPR_F_INTERVAL_END     = 0x4,
+       EXPR_F_PROTOCOL         = 0x4,
+       EXPR_F_INTERVAL_END     = 0x8,
 };
 
 #include <payload.h>
@@ -227,7 +229,6 @@ struct expr {
                        const struct payload_template   *tmpl;
                        enum payload_bases              base;
                        unsigned int                    offset;
-                       unsigned int                    flags;
                } payload;
                struct {
                        /* EXPR_EXTHDR */
index c9cc84f3d7a2904ea0fcc2d554c7fa9fb0989313..fa8d82e1b12f8e1dc96c46e9cfbd9f1ac237e19c 100644 (file)
@@ -20,15 +20,6 @@ enum payload_bases {
 };
 #define PAYLOAD_BASE_MAX       (__PAYLOAD_BASE_MAX - 1)
 
-/**
- * enum payload_expr_flags
- *
- * @PAYLOAD_PROTOCOL_EXPR:     payload expression contains upper layer protocol
- */
-enum payload_expr_flags {
-       PAYLOAD_PROTOCOL_EXPR           = 0x1,
-};
-
 /**
  * struct payload_template - template for a payload header expression
  *
index b771da595daed1bacf5a0a7ebf53f1d3d05425df..8545273574f09991717be77812e638f09a78a89c 100644 (file)
@@ -622,7 +622,7 @@ static void payload_match_postprocess(struct rule_pp_ctx *ctx,
                         * payload expression.
                         */
                        if (ctx->pbase == PAYLOAD_BASE_INVALID &&
-                           left->payload.flags & PAYLOAD_PROTOCOL_EXPR) {
+                           left->flags & EXPR_F_PROTOCOL) {
                                ctx->pbase = left->payload.base;
                                ctx->pdep  = nstmt;
                        } else
index ea0d4e260da84e33725f9e514e65763ec6f2ba24..2a60a762840eaceb9ac5f6423d15b51bdfe7bb0e 100644 (file)
@@ -69,7 +69,6 @@ static void payload_expr_clone(struct expr *new, const struct expr *expr)
        new->payload.tmpl   = expr->payload.tmpl;
        new->payload.base   = expr->payload.base;
        new->payload.offset = expr->payload.offset;
-       new->payload.flags  = expr->payload.flags;
 }
 
 static const struct expr_ops payload_expr_ops = {
@@ -92,7 +91,7 @@ struct expr *payload_expr_alloc(const struct location *loc,
                tmpl = &desc->templates[type];
                base = desc->base;
                if (type == desc->protocol_key)
-                       flags = PAYLOAD_PROTOCOL_EXPR;
+                       flags = EXPR_F_PROTOCOL;
        } else {
                tmpl = &payload_unknown_template;
                base = PAYLOAD_BASE_INVALID;
@@ -100,11 +99,13 @@ struct expr *payload_expr_alloc(const struct location *loc,
 
        expr = expr_alloc(loc, &payload_expr_ops, tmpl->dtype,
                          tmpl->dtype->byteorder, tmpl->len);
+       expr->flags |= flags;
+
        expr->payload.desc   = desc;
        expr->payload.tmpl   = tmpl;
        expr->payload.base   = base;
        expr->payload.offset = tmpl->offset;
-       expr->payload.flags  = flags;
+
        return expr;
 }
 
@@ -256,7 +257,7 @@ void payload_ctx_update(struct payload_ctx *ctx, const struct expr *expr)
        const struct expr *left = expr->left, *right = expr->right;
        const struct payload_desc *base, *desc;
 
-       if (!(left->payload.flags & PAYLOAD_PROTOCOL_EXPR))
+       if (!(left->flags & EXPR_F_PROTOCOL))
                return;
 
        assert(expr->op == OP_EQ);