}
static void set_elem_add(const struct set *set, struct expr *init, mpz_t value,
- uint32_t flags)
+ uint32_t flags, enum byteorder byteorder)
{
struct expr *expr;
expr = constant_expr_alloc(&internal_location, set->key->dtype,
- set->key->byteorder, set->key->len, NULL);
+ byteorder, set->key->len, NULL);
mpz_set(expr->value, value);
expr = set_elem_expr_alloc(&internal_location, expr);
expr->flags = flags;
list_for_each_entry(i, &init->expressions, list) {
switch (i->key->etype) {
case EXPR_VALUE:
- set_elem_add(set, new_init, i->key->value, i->flags);
+ set_elem_add(set, new_init, i->key->value,
+ i->flags, i->byteorder);
break;
default:
range_expr_value_low(low, i);
- set_elem_add(set, new_init, low, 0);
+ set_elem_add(set, new_init, low, 0, i->byteorder);
range_expr_value_high(high, i);
mpz_add_ui(high, high, 1);
- set_elem_add(set, new_init, high, EXPR_F_INTERVAL_END);
+ set_elem_add(set, new_init, high,
+ EXPR_F_INTERVAL_END, i->byteorder);
break;
}
}
--- /dev/null
+#!/bin/bash
+
+RULESET="table ip t {
+ set s {
+ type mark
+ flags interval
+ elements = {
+ 0x23-0x42, 0x1337
+ }
+ }
+}"
+
+$NFT -f - <<< "$RULESET" || { echo "can't apply basic ruleset"; exit 1; }
+
+$NFT get element ip t s '{ 0x23-0x42 }' || {
+ echo "can't find existing range 0x23-0x42"
+ exit 1
+}
+
+$NFT get element ip t s '{ 0x26-0x28 }' || {
+ echo "can't find existing sub-range 0x26-0x28"
+ exit 1
+}
+
+$NFT get element ip t s '{ 0x26-0x99 }' && {
+ echo "found non-existing range 0x26-0x99"
+ exit 1
+}
+
+$NFT get element ip t s '{ 0x55-0x99 }' && {
+ echo "found non-existing range 0x55-0x99"
+ exit 1
+}
+
+$NFT get element ip t s '{ 0x55 }' && {
+ echo "found non-existing element 0x55"
+ exit 1
+}
+
+$NFT get element ip t s '{ 0x1337 }' || {
+ echo "can't find existing element 0x1337"
+ exit 1
+}