On Tue, 10.02.15 18:07, Paul Martin ([email protected]) wrote: > On a big-endian host, systemd-networkd prints out IPv4 network > addresses byte reversed: > > Feb 10 16:43:32 hostname systemd-networkd[151]: eth0 : DHCPv4 address > 158.1.24.10/16 via 1.1.24.10 > > The address obtained is 10.24.1.158/16 and the route is > > 10.24.0.0/16 dev eth0 src 10.24.1.187 > > The macro ADDRESS_FMT_VAL() unpacks a "struct in_addr" in a > little-endian specific manner. This patch makes the macro endian > agnostic using the same trick as is used in the IN6_ARE_ADDR_EQUAL() > macro in <netinet/in.h>. > > > diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h > index 449dbc8..3394b61 100644 > --- a/src/network/networkd-link.h > +++ b/src/network/networkd-link.h > @@ -153,7 +153,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_unref); > #define log_link_struct(link, level, ...) log_struct(level, "INTERFACE=%s", > link->ifname, __VA_ARGS__) > > #define ADDRESS_FMT_VAL(address) \ > - (address).s_addr & 0xFF, \ > - ((address).s_addr >> 8) & 0xFF, \ > - ((address).s_addr >> 16) & 0xFF, \ > - (address).s_addr >> 24 > + ((const uint8_t *) (&address))[0], \ > + ((const uint8_t *) (&address))[1], \ > + ((const uint8_t *) (&address))[2], \ > + ((const uint8_t *) (&address))[3]
Hmm, I think it would be nicer to use be32toh() here instead, since it ensures the macro is (to a limited degree) typesafe. Any chance you could rework that? Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
