&extra_len);
break;
default:
- BUG("Unknown expression %s\n", expr->ops->name);
+ BUG("Unknown expression %s\n", expr_name(expr));
}
masklen = len + shift;
return expr_binary_error(ctx->msgs, left, op,
"Binary operation (%s) is undefined "
"for %s expressions",
- sym, left->ops->name);
+ sym, expr_name(left));
if (!expr_is_constant(right))
return expr_binary_error(ctx->msgs, right, op,
return expr_binary_error(ctx->msgs, left, op,
"Binary operation (%s) is undefined "
"for %s expressions",
- sym, right->ops->name);
+ sym, expr_name(right));
/* The grammar guarantees this */
assert(expr_basetype(left) == expr_basetype(right));
break;
default:
BUG("invalid mapping expression %s\n",
- map->mappings->ops->name);
+ expr_name(map->mappings));
}
if (!datatype_equal(map->map->dtype, map->mappings->set->key->dtype))
return -1;
break;
default:
- BUG("invalid expression type %s\n", right->ops->name);
+ BUG("invalid expression type %s\n", expr_name(right));
}
break;
case OP_LT:
"Relational expression (%s) is undefined "
"for %s expressions",
expr_op_symbols[rel->op],
- left->ops->name);
+ expr_name(left));
default:
break;
}
"Relational expression (%s) is undefined "
"for %s expressions",
expr_op_symbols[rel->op],
- right->ops->name);
+ expr_name(right));
if (byteorder_conversion(ctx, &rel->left, BYTEORDER_BIG_ENDIAN) < 0)
return -1;
if (ctx->nft->debug_mask & NFT_DEBUG_EVALUATION) {
struct error_record *erec;
erec = erec_create(EREC_INFORMATIONAL, &(*expr)->location,
- "Evaluate %s", (*expr)->ops->name);
+ "Evaluate %s", expr_name(*expr));
erec_print(&ctx->nft->output, erec, ctx->nft->debug_mask);
expr_print(*expr, &ctx->nft->output);
nft_print(&ctx->nft->output, "\n\n");
case EXPR_XFRM:
return expr_evaluate_xfrm(ctx, expr);
default:
- BUG("unknown expression type %s\n", (*expr)->ops->name);
+ BUG("unknown expression type %s\n", expr_name(*expr));
}
}
case EXPR_MAP:
break;
default:
- BUG("invalid verdict expression %s\n", stmt->expr->ops->name);
+ BUG("invalid verdict expression %s\n", expr_name(stmt->expr));
}
return 0;
}
break;
default:
BUG("invalid mapping expression %s\n",
- map->mappings->ops->name);
+ expr_name(map->mappings));
}
if (!datatype_equal(map->map->dtype, map->mappings->set->key->dtype))
return e1->ops->cmp(e1, e2);
}
+const char *expr_name(const struct expr *e)
+{
+ return e->ops->name;
+}
+
void expr_describe(const struct expr *expr, struct output_ctx *octx)
{
const struct datatype *dtype = expr->dtype;
case EXPR_SET_ELEM:
return range_expr_value_low(rop, expr->key);
default:
- BUG("invalid range expression type %s\n", expr->ops->name);
+ BUG("invalid range expression type %s\n", expr_name(expr));
}
}
case EXPR_SET_ELEM:
return range_expr_value_high(rop, expr->key);
default:
- BUG("invalid range expression type %s\n", expr->ops->name);
+ BUG("invalid range expression type %s\n", expr_name(expr));
}
}
value->len = left->len;
break;
default:
- BUG("unknown expression type %s\n", left->ops->name);
+ BUG("unknown expression type %s\n", expr_name(left));
break;
}
}
__binop_adjust(binop, i->key->key, shift);
break;
default:
- BUG("unknown expression type %s\n", i->key->ops->name);
+ BUG("unknown expression type %s\n", expr_name(i->key));
}
}
break;
binop_adjust_one(binop, right->right, shift);
break;
default:
- BUG("unknown expression type %s\n", right->ops->name);
+ BUG("unknown expression type %s\n", expr_name(right));
break;
}
}
ct_expr_update_type(&ctx->pctx, expr);
break;
default:
- BUG("unknown expression type %s\n", expr->ops->name);
+ BUG("unknown expression type %s\n", expr_name(expr));
}
}