summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2014-11-04 20:19:07 +0100
committerTom Gundersen <teg@jklm.no>2014-11-05 16:54:22 +0100
commitc962cb68d5754690cbe924a0d0b4251053217783 (patch)
tree7c405152ed0d56c2a7ceb4941d2f7a8f46851d2b
parent617e79465249e694d697fd78704571b3d00338c8 (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.c17
-rw-r--r--src/libsystemd-network/sd-pppoe.c20
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);