diff options
author | Florian Westphal <fw@strlen.de> | 2016-09-09 13:44:50 +0200 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2016-09-09 15:53:14 +0200 |
commit | 42e2ec0198dd1408da4a32e1beefe9cbc0fdae89 (patch) | |
tree | dfb6685f29bffa4942c99e74a2a63d1010904017 | |
parent | 0d7fdb10b10c7a6c276cdb467d824db9b032140b (diff) |
datatype: ll: use big endian byte ordering
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>
-rw-r--r-- | src/datatype.c | 7 | ||||
-rw-r--r-- | src/proto.c | 4 |
2 files changed, 6 insertions, 5 deletions
diff --git a/src/datatype.c b/src/datatype.c index 2b1619a6..1e402879 100644 --- a/src/datatype.c +++ b/src/datatype.c @@ -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, diff --git a/src/proto.c b/src/proto.c index 94995f10..df5439cc 100644 --- a/src/proto.c +++ b/src/proto.c @@ -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, ðertype_type, __member) #define ETHHDR_ADDR(__name, __member) \ PROTO_HDR_TEMPLATE(__name, ðeraddr_type, \ - BYTEORDER_HOST_ENDIAN, \ + BYTEORDER_BIG_ENDIAN, \ offsetof(struct ether_header, __member) * 8, \ field_sizeof(struct ether_header, __member) * 8) |