symbolic_constant_print() uses mpz_cmp_ui() to find the matching symbol.
Since GMP internally treats all values as being in host byte, this
doesn't work when the constant value is non-host byteorder, such as
the ethernet protocol type.
Export the expression's value in its original byteorder for comparison
to fix this.
Signed-off-by: Patrick McHardy <kaber@trash.net>
const struct expr *expr)
{
const struct symbolic_constant *s;
+ uint64_t val = 0;
+
+ /* Export the data in the correct byteorder for comparison */
+ assert(expr->len / BITS_PER_BYTE <= sizeof(val));
+ mpz_export_data(&val, expr->value, expr->byteorder,
+ expr->len / BITS_PER_BYTE);
for (s = tbl->symbols; s->identifier != NULL; s++) {
- if (!mpz_cmp_ui(expr->value, s->value))
+ if (val == s->value)
break;
}