#define __must_check __attribute__((warn_unused_result))
#define __noreturn __attribute__((__noreturn__))
-#define BUG() assert(0)
+#ifdef DEBUG
+#define BUG(fmt, arg...) ({ fprintf(stderr, "BUG: " fmt, ##arg); assert(0); })
+#else
+#define BUG(fmt, arg...) assert(0)
+#endif
#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
#define BUILD_BUG_ON_ZERO(e) (sizeof(char[1 - 2 * !!(e)]) - 1)
return dtype->print(expr);
if (dtype->sym_tbl != NULL)
return symbolic_constant_print(dtype->sym_tbl, expr);
- BUG();
+ BUG("datatype has no print method or symbol table\n");
}
struct error_record *symbol_parse(const struct expr *sym,
printf("return");
break;
default:
- BUG();
+ BUG("invalid verdict value %u\n", expr->verdict);
}
}
case INDESC_NETLINK:
break;
default:
- BUG();
+ BUG("invalid input descriptor type %u\n", indesc->type);
}
if (indesc->type == INDESC_NETLINK) {
default:
break;
}
- BUG();
+ BUG("invalid byte order conversion %u => %u\n",
+ expr->byteorder, byteorder);
}
static int byteorder_conversion(struct eval_ctx *ctx, struct expr **expr,
}
break;
default:
- BUG();
+ BUG("invalid basetype %s\n", expr_basetype(*expr)->name);
}
return 0;
}
byteorder = BYTEORDER_HOST_ENDIAN;
break;
default:
- BUG();
+ BUG("invalid unary operation %u\n", unary->op);
}
unary->dtype = arg->dtype;
mpz_rshift_ui(val, mpz_get_uint32(right->value));
break;
default:
- BUG();
+ BUG("invalid binary operation %u\n", op->op);
}
new = constant_expr_alloc(&op->location, op->dtype, op->byteorder,
case OP_OR:
return expr_evaluate_bitwise(ctx, expr);
default:
- BUG();
+ BUG("invalid binary operation %u\n", op->op);
}
}
"Expression is not a map");
break;
default:
- BUG();
+ BUG("invalid mapping expression %s\n",
+ map->mappings->ops->name);
}
map->dtype = ctx->ectx.dtype;
*right, expr_get(left->right));
break;
default:
- BUG();
+ BUG("invalid binary operation %u\n", left->op);
}
return expr_evaluate(ctx, right);
return -1;
break;
default:
- BUG();
+ BUG("invalid expression type %s\n", right->ops->name);
}
break;
case OP_LT:
return -1;
break;
default:
- BUG();
+ BUG("invalid relational operation %u\n", rel->op);
}
if (binop_transfer(ctx, expr) < 0)
case EXPR_RELATIONAL:
return expr_evaluate_relational(ctx, expr);
default:
- BUG();
+ BUG("unknown expression type %s\n", (*expr)->ops->name);
}
}
case EXPR_MAP:
break;
default:
- BUG();
+ BUG("invalid verdict expression %s\n", stmt->expr->ops->name);
}
return 0;
}
case STMT_NAT:
return stmt_evaluate_nat(ctx, stmt);
default:
- BUG();
+ BUG("unknown statement type %s\n", stmt->ops->name);
}
}
return 0;
return table_evaluate(ctx, cmd->table);
default:
- BUG();
+ BUG("invalid command object type %u\n", cmd->obj);
}
}
case CMD_OBJ_TABLE:
return 0;
default:
- BUG();
+ BUG("invalid command object type %u\n", cmd->obj);
}
}
case CMD_FLUSH:
return 0;
default:
- BUG();
+ BUG("invalid command operation %u\n", cmd->op);
};
}
case EXPR_VERDICT:
return netlink_gen_verdict(expr);
default:
- BUG();
+ BUG("invalid data expression type %s\n", expr->ops->name);
}
}
op = OP_HTON;
break;
default:
- BUG();
+ BUG("invalid byteorder operation %u\n",
+ nfnl_nft_byteorder_get_op(nle));
}
expr = unary_expr_alloc(loc, op, arg);
case EXPR_VERDICT:
break;
default:
- printf("%s\n", expr->ops->name);
- BUG();
+ BUG("unknown expression type %s\n", expr->ops->name);
}
}
static enum nft_registers get_register(struct netlink_linearize_ctx *ctx)
{
if (ctx->reg_low > NFT_REG_MAX)
- BUG();
+ BUG("register reg_low %u invalid\n", ctx->reg_low);
return ctx->reg_low++;
}
case OP_GTE:
return NFT_CMP_GTE;
default:
- BUG();
+ BUG("invalid comparison operation %u\n", op);
}
}
case OP_LOOKUP:
return netlink_gen_lookup(ctx, expr, dreg);
default:
- BUG();
+ BUG("invalid relational operation %u\n", expr->op);
}
}
combine_binop(mask, xor, tmp, val);
break;
default:
- BUG();
+ BUG("invalid binary operation %u\n", i->op);
}
}
case OP_NTOH:
return NFT_BYTEORDER_HTON;
default:
- BUG();
+ BUG("invalid unary operation %u\n", op);
}
}
case EXPR_CT:
return netlink_gen_ct(ctx, expr, dreg);
default:
- BUG();
+ BUG("unknown expression type %s\n", expr->ops->name);
}
}
case STMT_NAT:
return netlink_gen_nat_stmt(ctx, stmt);
default:
- BUG();
+ BUG("unknown statement type %s\n", stmt->ops->name);
}
}
table_free(cmd->table);
break;
default:
- BUG();
+ BUG("invalid command object type %u\n", cmd->obj);
}
}
xfree(cmd);
case CMD_OBJ_SETELEM:
return do_add_setelems(ctx, &cmd->handle, cmd->expr);
default:
- BUG();
+ BUG("invalid command object type %u\n", cmd->obj);
}
return 0;
}
case CMD_OBJ_SETELEM:
return netlink_delete_setelems(ctx, &cmd->handle, cmd->expr);
default:
- BUG();
+ BUG("invalid command object type %u\n", cmd->obj);
}
}
}
return 0;
default:
- BUG();
+ BUG("invalid command object type %u\n", cmd->obj);
}
list_for_each_entry_safe(rule, nrule, &ctx->list, list) {
case CMD_OBJ_CHAIN:
return netlink_flush_chain(ctx, &cmd->handle);
default:
- BUG();
+ BUG("invalid command object type %u\n", cmd->obj);
}
return 0;
}
case CMD_FLUSH:
return do_command_flush(ctx, cmd);
default:
- BUG();
+ BUG("invalid command object type %u\n", cmd->obj);
}
}
case EXPR_MAPPING:
return range_low(rop, expr->left);
default:
- BUG();
+ BUG("invalid range expression type %s\n", expr->ops->name);
}
}
case EXPR_MAPPING:
return range_high(rop, expr->left);
default:
- BUG();
+ BUG("invalid range expression type %s\n", expr->ops->name);
}
}