]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: remove flagcmp expression
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 26 Mar 2025 20:54:13 +0000 (21:54 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Thu, 27 Mar 2025 20:39:03 +0000 (21:39 +0100)
This expression is not used anymore, since:

 ("src: transform flag match expression to binop expression from parser")

remove it.

This completes the revert of c3d57114f119 ("parser_bison: add shortcut
syntax for matching flags without binary operations"), except the parser
chunk for backwards compatibility.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/expression.h
include/json.h
src/evaluate.c
src/expression.c
src/json.c

index d48d8ed81d2b0ffaec8f3c7b623b5103e0824e9a..f42a0c2b3419c760dea87e0d3371b3eabe3ac83e 100644 (file)
@@ -47,7 +47,6 @@
  * @EXPR_FIB           forward information base expression
  * @EXPR_XFRM          XFRM (ipsec) expression
  * @EXPR_SET_ELEM_CATCHALL catchall element expression
- * @EXPR_FLAGCMP       flagcmp expression
  * @EXPR_RANGE_VALUE   constant range expression
  * @EXPR_RANGE_SYMBOL  unparse symbol range expression
  */
@@ -81,7 +80,6 @@ enum expr_types {
        EXPR_FIB,
        EXPR_XFRM,
        EXPR_SET_ELEM_CATCHALL,
-       EXPR_FLAGCMP,
        EXPR_RANGE_VALUE,
        EXPR_RANGE_SYMBOL,
        __EXPR_MAX
@@ -402,12 +400,6 @@ struct expr {
                        uint8_t                 ttl;
                        uint32_t                flags;
                } osf;
-               struct {
-                       /* EXPR_FLAGCMP */
-                       struct expr             *expr;
-                       struct expr             *mask;
-                       struct expr             *value;
-               } flagcmp;
        };
 };
 
@@ -544,10 +536,6 @@ extern struct expr *set_elem_expr_alloc(const struct location *loc,
 
 struct expr *set_elem_catchall_expr_alloc(const struct location *loc);
 
-struct expr *flagcmp_expr_alloc(const struct location *loc, enum ops op,
-                               struct expr *expr, struct expr *mask,
-                               struct expr *value);
-
 extern void range_expr_value_low(mpz_t rop, const struct expr *expr);
 extern void range_expr_value_high(mpz_t rop, const struct expr *expr);
 void range_expr_swap_values(struct expr *range);
index 0670b8714519b55ccfaf2b6d3843cf71ec3dc979..b61eeafe8d7e2ad6e8ee12f7b0d0e5d0a00915f3 100644 (file)
@@ -29,7 +29,6 @@ struct list_head;
 
 json_t *binop_expr_json(const struct expr *expr, struct output_ctx *octx);
 json_t *relational_expr_json(const struct expr *expr, struct output_ctx *octx);
-json_t *flagcmp_expr_json(const struct expr *expr, struct output_ctx *octx);
 json_t *range_expr_json(const struct expr *expr, struct output_ctx *octx);
 json_t *meta_expr_json(const struct expr *expr, struct output_ctx *octx);
 json_t *payload_expr_json(const struct expr *expr, struct output_ctx *octx);
@@ -137,7 +136,6 @@ static inline json_t *name##_json(arg1_t arg1, arg2_t arg2) { return NULL; }
        JSON_PRINT_STUB(name##_stmt, const struct stmt *, struct output_ctx *)
 
 EXPR_PRINT_STUB(binop_expr)
-EXPR_PRINT_STUB(flagcmp_expr)
 EXPR_PRINT_STUB(relational_expr)
 EXPR_PRINT_STUB(range_expr)
 EXPR_PRINT_STUB(meta_expr)
index 785c4fab6b3a3908cd37db40931f230b2c4d6be2..ffb23005a68ef4f5f7a2f54a9fea31d5693b3749 100644 (file)
@@ -2977,25 +2977,6 @@ static int expr_evaluate_xfrm(struct eval_ctx *ctx, struct expr **exprp)
        return expr_evaluate_primary(ctx, exprp);
 }
 
-static int expr_evaluate_flagcmp(struct eval_ctx *ctx, struct expr **exprp)
-{
-       struct expr *expr = *exprp, *binop, *rel;
-
-       if (expr->op != OP_EQ &&
-           expr->op != OP_NEQ)
-               return expr_error(ctx->msgs, expr, "either == or != is allowed");
-
-       binop = binop_expr_alloc(&expr->location, OP_AND,
-                                expr_get(expr->flagcmp.expr),
-                                expr_get(expr->flagcmp.mask));
-       rel = relational_expr_alloc(&expr->location, expr->op, binop,
-                                   expr_get(expr->flagcmp.value));
-       expr_free(expr);
-       *exprp = rel;
-
-       return expr_evaluate(ctx, exprp);
-}
-
 static int verdict_validate_chainlen(struct eval_ctx *ctx,
                                     struct expr *chain)
 {
@@ -3095,8 +3076,6 @@ static int expr_evaluate(struct eval_ctx *ctx, struct expr **expr)
                return expr_evaluate_xfrm(ctx, expr);
        case EXPR_SET_ELEM_CATCHALL:
                return expr_evaluate_set_elem_catchall(ctx, expr);
-       case EXPR_FLAGCMP:
-               return expr_evaluate_flagcmp(ctx, expr);
        case EXPR_RANGE_SYMBOL:
                return expr_evaluate_symbol_range(ctx, expr);
        default:
index ecdb8846a4f1f8db351bfa521f5db74794953290..d32702420b553b6d8be34e358dfcd9de92142c9c 100644 (file)
@@ -1680,61 +1680,6 @@ struct expr *set_elem_catchall_expr_alloc(const struct location *loc)
        return expr;
 }
 
-static void flagcmp_expr_print(const struct expr *expr, struct output_ctx *octx)
-{
-       expr_print(expr->flagcmp.expr, octx);
-
-       if (expr->op == OP_NEQ)
-               nft_print(octx, " != ");
-       else
-               nft_print(octx, " ");
-
-       expr_print(expr->flagcmp.value, octx);
-       nft_print(octx, " / ");
-       expr_print(expr->flagcmp.mask, octx);
-}
-
-static void flagcmp_expr_clone(struct expr *new, const struct expr *expr)
-{
-       new->flagcmp.expr = expr_clone(expr->flagcmp.expr);
-       new->flagcmp.mask = expr_clone(expr->flagcmp.mask);
-       new->flagcmp.value = expr_clone(expr->flagcmp.value);
-}
-
-static void flagcmp_expr_destroy(struct expr *expr)
-{
-       expr_free(expr->flagcmp.expr);
-       expr_free(expr->flagcmp.mask);
-       expr_free(expr->flagcmp.value);
-}
-
-static const struct expr_ops flagcmp_expr_ops = {
-       .type           = EXPR_FLAGCMP,
-       .name           = "flags comparison",
-       .print          = flagcmp_expr_print,
-       .json           = flagcmp_expr_json,
-       .clone          = flagcmp_expr_clone,
-       .destroy        = flagcmp_expr_destroy,
-};
-
-struct expr *flagcmp_expr_alloc(const struct location *loc, enum ops op,
-                               struct expr *match, struct expr *mask,
-                               struct expr *value)
-{
-       struct expr *expr;
-
-       expr = expr_alloc(loc, EXPR_FLAGCMP, match->dtype, match->byteorder,
-                         match->len);
-       expr->op = op;
-       expr->flagcmp.expr = match;
-       expr->flagcmp.mask = mask;
-       /* json output needs this operation for compatibility */
-       expr->flagcmp.mask->op = OP_OR;
-       expr->flagcmp.value = value;
-
-       return expr;
-}
-
 void range_expr_value_low(mpz_t rop, const struct expr *expr)
 {
        switch (expr->etype) {
@@ -1814,7 +1759,6 @@ static const struct expr_ops *__expr_ops_by_type(enum expr_types etype)
        case EXPR_FIB: return &fib_expr_ops;
        case EXPR_XFRM: return &xfrm_expr_ops;
        case EXPR_SET_ELEM_CATCHALL: return &set_elem_catchall_expr_ops;
-       case EXPR_FLAGCMP: return &flagcmp_expr_ops;
        case EXPR_RANGE_VALUE: return &constant_range_expr_ops;
        case EXPR_RANGE_SYMBOL: return &symbol_range_expr_ops;
        case __EXPR_MAX: break;
index 831bc90f08332fb101d9bc7535b09ae5f4a3b332..bcdcd56b156834b79507026851e933cdd3057fff 100644 (file)
@@ -547,20 +547,6 @@ static json_t *table_print_json(const struct table *table)
        return json_pack("{s:o}", "table", root);
 }
 
-json_t *flagcmp_expr_json(const struct expr *expr, struct output_ctx *octx)
-{
-       json_t *left;
-
-       left = json_pack("{s:[o, o]}", expr_op_symbols[OP_AND],
-                        expr_print_json(expr->flagcmp.expr, octx),
-                        expr_print_json(expr->flagcmp.mask, octx));
-
-       return json_pack("{s:{s:s, s:o, s:o}}", "match",
-                        "op", expr_op_symbols[expr->op] ? : "in",
-                        "left", left,
-                        "right", expr_print_json(expr->flagcmp.value, octx));
-}
-
 static json_t *
 __binop_expr_json(int op, const struct expr *expr, struct output_ctx *octx)
 {