diff options
author | Tom Gundersen <teg@jklm.no> | 2014-11-04 20:19:07 +0100 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2014-11-05 16:54:22 +0100 |
commit | c962cb68d5754690cbe924a0d0b4251053217783 (patch) | |
tree | 7c405152ed0d56c2a7ceb4941d2f7a8f46851d2b | |
parent | 617e79465249e694d697fd78704571b3d00338c8 (diff) |
libsystemd-network: don't use unaligned helpers in _packed_ structs
The compiler will do this for us.
-rw-r--r-- | src/libsystemd-network/dhcp6-option.c | 17 | ||||
-rw-r--r-- | src/libsystemd-network/sd-pppoe.c | 20 |
2 files changed, 15 insertions, 22 deletions
diff --git a/src/libsystemd-network/dhcp6-option.c b/src/libsystemd-network/dhcp6-option.c index a46b6e3096..ea863f45e4 100644 --- a/src/libsystemd-network/dhcp6-option.c +++ b/src/libsystemd-network/dhcp6-option.c @@ -37,11 +37,11 @@ typedef struct DHCP6Option { be16_t code; be16_t len; uint8_t data[]; -} DHCP6Option; +} _packed_ DHCP6Option; static int option_append_hdr(uint8_t **buf, size_t *buflen, uint16_t optcode, size_t optlen) { - DHCP6Option *option = (DHCP6Option*) *buf; /* unaligned! */ + DHCP6Option *option = (DHCP6Option*) *buf; assert_return(buf, -EINVAL); assert_return(*buf, -EINVAL); @@ -50,8 +50,8 @@ static int option_append_hdr(uint8_t **buf, size_t *buflen, uint16_t optcode, if (optlen > 0xffff || *buflen < optlen + sizeof(DHCP6Option)) return -ENOBUFS; - unaligned_write_be16(&option->code, optcode); - unaligned_write_be16(&option->len, (uint16_t) optlen); + option->code = htobe16(optcode); + option->len = htobe16(optlen); *buf += sizeof(DHCP6Option); *buflen -= sizeof(DHCP6Option); @@ -136,9 +136,8 @@ int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, DHCP6IA *ia) { } -static int option_parse_hdr(uint8_t **buf, size_t *buflen, uint16_t *optcode, - size_t *optlen) { - DHCP6Option *option = (DHCP6Option*) *buf; /* unaligned! */ +static int option_parse_hdr(uint8_t **buf, size_t *buflen, uint16_t *optcode, size_t *optlen) { + DHCP6Option *option = (DHCP6Option*) *buf; uint16_t len; assert_return(buf, -EINVAL); @@ -148,12 +147,12 @@ static int option_parse_hdr(uint8_t **buf, size_t *buflen, uint16_t *optcode, if (*buflen < sizeof(DHCP6Option)) return -ENOMSG; - len = unaligned_read_be16(&option->len); + len = be16toh(option->len); if (len > *buflen) return -ENOMSG; - *optcode = unaligned_read_be16(&option->code); + *optcode = be16toh(option->code); *optlen = len; *buf += 4; diff --git a/src/libsystemd-network/sd-pppoe.c b/src/libsystemd-network/sd-pppoe.c index 075e10204b..0a962235e0 100644 --- a/src/libsystemd-network/sd-pppoe.c +++ b/src/libsystemd-network/sd-pppoe.c @@ -100,19 +100,13 @@ struct sd_pppoe { be16toh((header)->length) #define PPPOE_PACKET_TAIL(packet) \ - (struct pppoe_tag *)((uint8_t*)(packet) + sizeof(struct pppoe_hdr) + PPPOE_PACKET_LENGTH(packet)) + (struct pppoe_tag*)((uint8_t*)(packet) + sizeof(struct pppoe_hdr) + PPPOE_PACKET_LENGTH(packet)) -#define PPPOE_TAG_LENGTH(tag) \ - unaligned_read_be16(&(tag)->tag_len) +#define PPPOE_TAG_LENGTH(tag) \ + be16toh((tag)->tag_len) -#define PPPOE_TAG_TYPE(tag) \ - htobe16(unaligned_read_be16(&(tag)->tag_type)) - -#define PPPOE_TAG_SET_LENGTH(tag, len) \ - unaligned_write_be16(&(tag)->tag_len, len) - -#define PPPOE_TAG_SET_TYPE(tag, len) \ - unaligned_write_be16(&(tag)->tag_type, be16toh(len)) +#define PPPOE_TAG_TYPE(tag) \ + (tag)->tag_type #define PPPOE_TAG_NEXT(tag) \ (struct pppoe_tag *)((uint8_t *)(tag) + sizeof(struct pppoe_tag) + PPPOE_TAG_LENGTH(tag)) @@ -278,8 +272,8 @@ static void pppoe_tag_append(struct pppoe_hdr *packet, size_t packet_size, be16_ tag = PPPOE_PACKET_TAIL(packet); - PPPOE_TAG_SET_LENGTH(tag, tag_len); - PPPOE_TAG_SET_TYPE(tag, tag_type); + tag->tag_len = htobe16(tag_len); + tag->tag_type = tag_type; if (tag_data) memcpy(tag->tag_data, tag_data, tag_len); |