};
struct {
/* EXPR_PREFIX */
- struct expr *expr;
+ struct expr *prefix;
unsigned int prefix_len;
};
struct {
};
struct {
/* EXPR_MAP */
- struct expr *expr;
+ struct expr *map;
struct expr *mappings;
};
{
struct expr *prefix = *expr, *base, *and, *mask;
- if (expr_evaluate(ctx, &prefix->expr) < 0)
+ if (expr_evaluate(ctx, &prefix->prefix) < 0)
return -1;
- base = prefix->expr;
+ base = prefix->prefix;
if (!expr_is_constant(base))
return expr_error(ctx, prefix,
mpz_prefixmask(mask->value, base->len, prefix->prefix_len);
and = binop_expr_alloc(&prefix->location, OP_AND, base, mask);
- prefix->expr = and;
- if (expr_evaluate(ctx, &prefix->expr) < 0)
+ prefix->prefix = and;
+ if (expr_evaluate(ctx, &prefix->prefix) < 0)
return -1;
- base = prefix->expr;
+ base = prefix->prefix;
assert(expr_is_constant(base));
prefix->dtype = base->dtype;
struct expr_ctx ectx = ctx->ectx;
struct expr *map = *expr, *mappings;
- if (expr_evaluate(ctx, &map->expr) < 0)
+ if (expr_evaluate(ctx, &map->map) < 0)
return -1;
- if (expr_is_constant(map->expr))
- return expr_error(ctx, map->expr,
+ if (expr_is_constant(map->map))
+ return expr_error(ctx, map->map,
"Map expression can not be constant");
mappings = map->mappings;
/* Data for range lookups needs to be in big endian order */
if (map->mappings->set_flags & SET_F_INTERVAL &&
- byteorder_conversion(ctx, &map->expr, BYTEORDER_BIG_ENDIAN) < 0)
+ byteorder_conversion(ctx, &map->map, BYTEORDER_BIG_ENDIAN) < 0)
return -1;
return 0;
case EXPR_RANGE:
goto range;
case EXPR_PREFIX:
- if (byteorder_conversion(ctx, &right->expr, left->byteorder) < 0)
+ if (byteorder_conversion(ctx, &right->prefix, left->byteorder) < 0)
return -1;
break;
case EXPR_VALUE:
static void prefix_expr_print(const struct expr *expr)
{
- expr_print(expr->expr);
+ expr_print(expr->prefix);
printf("/%u", expr->prefix_len);
}
const struct datatype *type,
enum byteorder byteorder)
{
- expr_set_type(expr->expr, type, byteorder);
+ expr_set_type(expr->prefix, type, byteorder);
}
static void prefix_expr_clone(struct expr *new, const struct expr *expr)
{
- new->expr = expr_clone(expr->expr);
+ new->prefix = expr_clone(expr->prefix);
new->prefix_len = expr->prefix_len;
}
static void prefix_expr_destroy(struct expr *expr)
{
- expr_free(expr->expr);
+ expr_free(expr->prefix);
}
static const struct expr_ops prefix_expr_ops = {
prefix = expr_alloc(loc, &prefix_expr_ops, &invalid_type,
BYTEORDER_INVALID, 0);
- prefix->expr = expr;
+ prefix->prefix = expr;
prefix->prefix_len = prefix_len;
return prefix;
}
static void unary_expr_clone(struct expr *new, const struct expr *expr)
{
- new->arg = expr_clone(expr->expr);
+ new->arg = expr_clone(expr->arg);
}
static void unary_expr_destroy(struct expr *expr)
static void map_expr_print(const struct expr *expr)
{
- expr_print(expr->expr);
+ expr_print(expr->map);
printf(" map ");
expr_print(expr->mappings);
}
static void map_expr_clone(struct expr *new, const struct expr *expr)
{
- new->expr = expr_clone(expr->expr);
+ new->map = expr_clone(expr->map);
new->mappings = expr_clone(expr->mappings);
}
static void map_expr_destroy(struct expr *expr)
{
- expr_free(expr->expr);
+ expr_free(expr->map);
expr_free(expr->mappings);
}
struct expr *expr;
expr = expr_alloc(loc, &map_expr_ops, &invalid_type, BYTEORDER_INVALID, 0);
- expr->expr = arg;
+ expr->map = arg;
expr->mappings = mappings;
return expr;
}
switch (expr->ops->type) {
case EXPR_MAP:
- expr_postprocess(ctx, stmt, &expr->expr);
+ expr_postprocess(ctx, stmt, &expr->map);
expr_postprocess(ctx, stmt, &expr->mappings);
break;
case EXPR_MAPPING:
else
sreg = dreg;
- netlink_gen_expr(ctx, expr->expr, sreg);
+ netlink_gen_expr(ctx, expr->map, sreg);
nle = alloc_nft_expr(nfnl_nft_lookup_init);
nfnl_nft_lookup_set_sreg(nle, sreg);
case EXPR_VALUE:
return mpz_set(rop, expr->value);
case EXPR_PREFIX:
- return range_low(rop, expr->expr);
+ return range_low(rop, expr->prefix);
case EXPR_RANGE:
return range_low(rop, expr->left);
case EXPR_MAPPING:
case EXPR_VALUE:
return mpz_set(rop, expr->value);
case EXPR_PREFIX:
- range_low(rop, expr->expr);
+ range_low(rop, expr->prefix);
mpz_init_bitmask(tmp, expr->len - expr->prefix_len);
mpz_add(rop, rop, tmp);
mpz_clear(tmp);