summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2016-09-09 13:44:50 +0200
committerFlorian Westphal <fw@strlen.de>2016-09-09 15:53:14 +0200
commit42e2ec0198dd1408da4a32e1beefe9cbc0fdae89 (patch)
treedfb6685f29bffa4942c99e74a2a63d1010904017 /src
parent0d7fdb10b10c7a6c276cdb467d824db9b032140b (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>
Diffstat (limited to 'src')
-rw-r--r--src/datatype.c7
-rw-r--r--src/proto.c4
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, &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)