]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
datatype: ll: use big endian byte ordering
authorFlorian Westphal <fw@strlen.de>
Fri, 9 Sep 2016 11:44:50 +0000 (13:44 +0200)
committerFlorian Westphal <fw@strlen.de>
Fri, 9 Sep 2016 13:53:14 +0000 (15:53 +0200)
ether daddr set 00:03:2d:2b:74:ec  is listed as:
ether daddr set ec:74:2b:2d:03:00

(it was fine without 'set' keyword).  Reason is that
ether address was listed as being HOST endian.

The payload expression (unlike statement) path contains
a few conversion call sites for this, i.e.:

if (tmp->byteorder == BYTEORDER_HOST_ENDIAN)
   mpz_switch_byteorder(tmp->value, tmp->len / BITS_PER_BYTE);

... it might make sense to remove those in a followup patch.

Reported-by: Laura Garcia Liebana <nevola@gmail.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/datatype.c
src/proto.c

index 2b1619a6fd054f87d5866259e9bb19f50bf02c02..1e4028793bd5d9b51fa3212028b482b839ca4b1b 100644 (file)
@@ -348,7 +348,8 @@ static void lladdr_type_print(const struct expr *expr)
        uint8_t data[len];
        unsigned int i;
 
-       mpz_export_data(data, expr->value, BYTEORDER_HOST_ENDIAN, len);
+       mpz_export_data(data, expr->value, BYTEORDER_BIG_ENDIAN, len);
+
        for (i = 0; i < len; i++) {
                printf("%s%.2x", delim, data[i]);
                delim = ":";
@@ -374,7 +375,7 @@ static struct error_record *lladdr_type_parse(const struct expr *sym,
        }
 
        *res = constant_expr_alloc(&sym->location, sym->dtype,
-                                  BYTEORDER_HOST_ENDIAN, len * BITS_PER_BYTE,
+                                  BYTEORDER_BIG_ENDIAN, len * BITS_PER_BYTE,
                                   buf);
        return NULL;
 }
@@ -383,7 +384,7 @@ const struct datatype lladdr_type = {
        .type           = TYPE_LLADDR,
        .name           = "ll_addr",
        .desc           = "link layer address",
-       .byteorder      = BYTEORDER_HOST_ENDIAN,
+       .byteorder      = BYTEORDER_BIG_ENDIAN,
        .basetype       = &integer_type,
        .print          = lladdr_type_print,
        .parse          = lladdr_type_parse,
index 94995f10e4e38389b68526a67d05f0302b9211a7..df5439ccda3c9ac449494620c5401050c306c112 100644 (file)
@@ -854,7 +854,7 @@ const struct datatype etheraddr_type = {
        .type           = TYPE_ETHERADDR,
        .name           = "ether_addr",
        .desc           = "Ethernet address",
-       .byteorder      = BYTEORDER_HOST_ENDIAN,
+       .byteorder      = BYTEORDER_BIG_ENDIAN,
        .size           = ETH_ALEN * BITS_PER_BYTE,
        .basetype       = &lladdr_type,
 };
@@ -892,7 +892,7 @@ const struct datatype ethertype_type = {
        ETHHDR_TEMPLATE(__name, &ethertype_type, __member)
 #define ETHHDR_ADDR(__name, __member) \
        PROTO_HDR_TEMPLATE(__name, &etheraddr_type,             \
-                          BYTEORDER_HOST_ENDIAN,               \
+                          BYTEORDER_BIG_ENDIAN,                \
                           offsetof(struct ether_header, __member) * 8, \
                           field_sizeof(struct ether_header, __member) * 8)