mirror of
https://github.com/systemd/systemd.git
synced 2024-12-22 17:35:35 +03:00
tree-wide: htonl() is weird, let's use htobe32() instead (#3538)
Super-important change, yeah!
This commit is contained in:
parent
69281c49eb
commit
8e38570ebe
@ -399,3 +399,10 @@
|
||||
least initially), but it needs to be there. This is particularly important
|
||||
for objects that unprivileged users may allocate, but also matters for
|
||||
everything else any user may allocated.
|
||||
|
||||
- htonl()/ntohl() and htons()/ntohs() are weird. Please use htobe32() and
|
||||
htobe16() instead, it's much more descriptive, and actually says what really
|
||||
is happening, after all htonl() and htons() don't operation on longs and
|
||||
shorts as their name would suggest, but on uint32_t and uint16_t. Also,
|
||||
"network byte order" is just a weird name for "big endian", hence we might
|
||||
want to call it "big endian" right-away.
|
||||
|
20
coccinelle/htonl.cocci
Normal file
20
coccinelle/htonl.cocci
Normal file
@ -0,0 +1,20 @@
|
||||
@@
|
||||
expression s;
|
||||
@@
|
||||
- htonl(s)
|
||||
+ htobe32(s)
|
||||
@@
|
||||
expression s;
|
||||
@@
|
||||
- htons(s)
|
||||
+ htobe16(s)
|
||||
@@
|
||||
expression s;
|
||||
@@
|
||||
- ntohl(s)
|
||||
+ be32toh(s)
|
||||
@@
|
||||
expression s;
|
||||
@@
|
||||
- ntohs(s)
|
||||
+ be16toh(s)
|
@ -85,7 +85,7 @@ int socket_address_parse(SocketAddress *a, const char *s) {
|
||||
return -EINVAL;
|
||||
|
||||
a->sockaddr.in6.sin6_family = AF_INET6;
|
||||
a->sockaddr.in6.sin6_port = htons((uint16_t) u);
|
||||
a->sockaddr.in6.sin6_port = htobe16((uint16_t)u);
|
||||
a->size = sizeof(struct sockaddr_in6);
|
||||
|
||||
} else if (*s == '/') {
|
||||
@ -133,7 +133,7 @@ int socket_address_parse(SocketAddress *a, const char *s) {
|
||||
if (r > 0) {
|
||||
/* Gotcha, it's a traditional IPv4 address */
|
||||
a->sockaddr.in.sin_family = AF_INET;
|
||||
a->sockaddr.in.sin_port = htons((uint16_t) u);
|
||||
a->sockaddr.in.sin_port = htobe16((uint16_t)u);
|
||||
a->size = sizeof(struct sockaddr_in);
|
||||
} else {
|
||||
unsigned idx;
|
||||
@ -147,7 +147,7 @@ int socket_address_parse(SocketAddress *a, const char *s) {
|
||||
return -EINVAL;
|
||||
|
||||
a->sockaddr.in6.sin6_family = AF_INET6;
|
||||
a->sockaddr.in6.sin6_port = htons((uint16_t) u);
|
||||
a->sockaddr.in6.sin6_port = htobe16((uint16_t)u);
|
||||
a->sockaddr.in6.sin6_scope_id = idx;
|
||||
a->sockaddr.in6.sin6_addr = in6addr_any;
|
||||
a->size = sizeof(struct sockaddr_in6);
|
||||
@ -164,12 +164,12 @@ int socket_address_parse(SocketAddress *a, const char *s) {
|
||||
|
||||
if (socket_ipv6_is_supported()) {
|
||||
a->sockaddr.in6.sin6_family = AF_INET6;
|
||||
a->sockaddr.in6.sin6_port = htons((uint16_t) u);
|
||||
a->sockaddr.in6.sin6_port = htobe16((uint16_t)u);
|
||||
a->sockaddr.in6.sin6_addr = in6addr_any;
|
||||
a->size = sizeof(struct sockaddr_in6);
|
||||
} else {
|
||||
a->sockaddr.in.sin_family = AF_INET;
|
||||
a->sockaddr.in.sin_port = htons((uint16_t) u);
|
||||
a->sockaddr.in.sin_port = htobe16((uint16_t)u);
|
||||
a->sockaddr.in.sin_addr.s_addr = INADDR_ANY;
|
||||
a->size = sizeof(struct sockaddr_in);
|
||||
}
|
||||
@ -488,9 +488,7 @@ int sockaddr_port(const struct sockaddr *_sa) {
|
||||
if (!IN_SET(sa->sa.sa_family, AF_INET, AF_INET6))
|
||||
return -EAFNOSUPPORT;
|
||||
|
||||
return ntohs(sa->sa.sa_family == AF_INET6 ?
|
||||
sa->in6.sin6_port :
|
||||
sa->in.sin_port);
|
||||
return be16toh(sa->sa.sa_family == AF_INET6 ? sa->in6.sin6_port : sa->in.sin_port);
|
||||
}
|
||||
|
||||
int sockaddr_pretty(const struct sockaddr *_sa, socklen_t salen, bool translate_ipv6, bool include_port, char **ret) {
|
||||
@ -506,13 +504,13 @@ int sockaddr_pretty(const struct sockaddr *_sa, socklen_t salen, bool translate_
|
||||
case AF_INET: {
|
||||
uint32_t a;
|
||||
|
||||
a = ntohl(sa->in.sin_addr.s_addr);
|
||||
a = be32toh(sa->in.sin_addr.s_addr);
|
||||
|
||||
if (include_port)
|
||||
r = asprintf(&p,
|
||||
"%u.%u.%u.%u:%u",
|
||||
a >> 24, (a >> 16) & 0xFF, (a >> 8) & 0xFF, a & 0xFF,
|
||||
ntohs(sa->in.sin_port));
|
||||
be16toh(sa->in.sin_port));
|
||||
else
|
||||
r = asprintf(&p,
|
||||
"%u.%u.%u.%u",
|
||||
@ -534,7 +532,7 @@ int sockaddr_pretty(const struct sockaddr *_sa, socklen_t salen, bool translate_
|
||||
r = asprintf(&p,
|
||||
"%u.%u.%u.%u:%u",
|
||||
a[0], a[1], a[2], a[3],
|
||||
ntohs(sa->in6.sin6_port));
|
||||
be16toh(sa->in6.sin6_port));
|
||||
else
|
||||
r = asprintf(&p,
|
||||
"%u.%u.%u.%u",
|
||||
@ -550,7 +548,7 @@ int sockaddr_pretty(const struct sockaddr *_sa, socklen_t salen, bool translate_
|
||||
r = asprintf(&p,
|
||||
"[%s]:%u",
|
||||
a,
|
||||
ntohs(sa->in6.sin6_port));
|
||||
be16toh(sa->in6.sin6_port));
|
||||
if (r < 0)
|
||||
return -ENOMEM;
|
||||
} else {
|
||||
|
@ -730,16 +730,16 @@ static int instance_from_socket(int fd, unsigned nr, char **instance) {
|
||||
|
||||
case AF_INET: {
|
||||
uint32_t
|
||||
a = ntohl(local.in.sin_addr.s_addr),
|
||||
b = ntohl(remote.in.sin_addr.s_addr);
|
||||
a = be32toh(local.in.sin_addr.s_addr),
|
||||
b = be32toh(remote.in.sin_addr.s_addr);
|
||||
|
||||
if (asprintf(&r,
|
||||
"%u-%u.%u.%u.%u:%u-%u.%u.%u.%u:%u",
|
||||
nr,
|
||||
a >> 24, (a >> 16) & 0xFF, (a >> 8) & 0xFF, a & 0xFF,
|
||||
ntohs(local.in.sin_port),
|
||||
be16toh(local.in.sin_port),
|
||||
b >> 24, (b >> 16) & 0xFF, (b >> 8) & 0xFF, b & 0xFF,
|
||||
ntohs(remote.in.sin_port)) < 0)
|
||||
be16toh(remote.in.sin_port)) < 0)
|
||||
return -ENOMEM;
|
||||
|
||||
break;
|
||||
@ -760,9 +760,9 @@ static int instance_from_socket(int fd, unsigned nr, char **instance) {
|
||||
"%u-%u.%u.%u.%u:%u-%u.%u.%u.%u:%u",
|
||||
nr,
|
||||
a[0], a[1], a[2], a[3],
|
||||
ntohs(local.in6.sin6_port),
|
||||
be16toh(local.in6.sin6_port),
|
||||
b[0], b[1], b[2], b[3],
|
||||
ntohs(remote.in6.sin6_port)) < 0)
|
||||
be16toh(remote.in6.sin6_port)) < 0)
|
||||
return -ENOMEM;
|
||||
} else {
|
||||
char a[INET6_ADDRSTRLEN], b[INET6_ADDRSTRLEN];
|
||||
@ -771,9 +771,9 @@ static int instance_from_socket(int fd, unsigned nr, char **instance) {
|
||||
"%u-%s:%u-%s:%u",
|
||||
nr,
|
||||
inet_ntop(AF_INET6, &local.in6.sin6_addr, a, sizeof(a)),
|
||||
ntohs(local.in6.sin6_port),
|
||||
be16toh(local.in6.sin6_port),
|
||||
inet_ntop(AF_INET6, &remote.in6.sin6_addr, b, sizeof(b)),
|
||||
ntohs(remote.in6.sin6_port)) < 0)
|
||||
be16toh(remote.in6.sin6_port)) < 0)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,7 @@ int arp_network_bind_raw_socket(int ifindex, be32_t address, const struct ether_
|
||||
};
|
||||
union sockaddr_union link = {
|
||||
.ll.sll_family = AF_PACKET,
|
||||
.ll.sll_protocol = htons(ETH_P_ARP),
|
||||
.ll.sll_protocol = htobe16(ETH_P_ARP),
|
||||
.ll.sll_ifindex = ifindex,
|
||||
.ll.sll_halen = ETH_ALEN,
|
||||
.ll.sll_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
|
||||
@ -112,17 +112,17 @@ static int arp_send_packet(int fd, int ifindex,
|
||||
bool announce) {
|
||||
union sockaddr_union link = {
|
||||
.ll.sll_family = AF_PACKET,
|
||||
.ll.sll_protocol = htons(ETH_P_ARP),
|
||||
.ll.sll_protocol = htobe16(ETH_P_ARP),
|
||||
.ll.sll_ifindex = ifindex,
|
||||
.ll.sll_halen = ETH_ALEN,
|
||||
.ll.sll_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
|
||||
};
|
||||
struct ether_arp arp = {
|
||||
.ea_hdr.ar_hrd = htons(ARPHRD_ETHER), /* HTYPE */
|
||||
.ea_hdr.ar_pro = htons(ETHERTYPE_IP), /* PTYPE */
|
||||
.ea_hdr.ar_hrd = htobe16(ARPHRD_ETHER), /* HTYPE */
|
||||
.ea_hdr.ar_pro = htobe16(ETHERTYPE_IP), /* PTYPE */
|
||||
.ea_hdr.ar_hln = ETH_ALEN, /* HLEN */
|
||||
.ea_hdr.ar_pln = sizeof(be32_t), /* PLEN */
|
||||
.ea_hdr.ar_op = htons(ARPOP_REQUEST), /* REQUEST */
|
||||
.ea_hdr.ar_op = htobe16(ARPOP_REQUEST), /* REQUEST */
|
||||
};
|
||||
int r;
|
||||
|
||||
|
@ -107,9 +107,9 @@ static int _bind_raw_socket(int ifindex, union sockaddr_union *link,
|
||||
return -errno;
|
||||
|
||||
link->ll.sll_family = AF_PACKET;
|
||||
link->ll.sll_protocol = htons(ETH_P_IP);
|
||||
link->ll.sll_protocol = htobe16(ETH_P_IP);
|
||||
link->ll.sll_ifindex = ifindex;
|
||||
link->ll.sll_hatype = htons(arp_type);
|
||||
link->ll.sll_hatype = htobe16(arp_type);
|
||||
link->ll.sll_halen = mac_addr_len;
|
||||
memcpy(link->ll.sll_addr, bcast_addr, mac_addr_len);
|
||||
|
||||
|
@ -57,7 +57,8 @@ int lldp_network_bind_raw_socket(int ifindex) {
|
||||
|
||||
assert(ifindex > 0);
|
||||
|
||||
fd = socket(PF_PACKET, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, htons(ETHERTYPE_LLDP));
|
||||
fd = socket(PF_PACKET, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK,
|
||||
htobe16(ETHERTYPE_LLDP));
|
||||
if (fd < 0)
|
||||
return -errno;
|
||||
|
||||
|
@ -260,7 +260,7 @@ static int dhcp_server_send_unicast_raw(sd_dhcp_server *server,
|
||||
DHCPPacket *packet, size_t len) {
|
||||
union sockaddr_union link = {
|
||||
.ll.sll_family = AF_PACKET,
|
||||
.ll.sll_protocol = htons(ETH_P_IP),
|
||||
.ll.sll_protocol = htobe16(ETH_P_IP),
|
||||
.ll.sll_ifindex = server->ifindex,
|
||||
.ll.sll_halen = ETH_ALEN,
|
||||
};
|
||||
|
@ -310,12 +310,12 @@ _public_ int sd_is_socket_inet(int fd, int family, int type, int listening, uint
|
||||
if (l < sizeof(struct sockaddr_in))
|
||||
return -EINVAL;
|
||||
|
||||
return htons(port) == sockaddr.in.sin_port;
|
||||
return htobe16(port) == sockaddr.in.sin_port;
|
||||
} else {
|
||||
if (l < sizeof(struct sockaddr_in6))
|
||||
return -EINVAL;
|
||||
|
||||
return htons(port) == sockaddr.in6.sin6_port;
|
||||
return htobe16(port) == sockaddr.in6.sin6_port;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -650,9 +650,9 @@ retry:
|
||||
|
||||
if (memcmp(buf.raw, "libudev", 8) == 0) {
|
||||
/* udev message needs proper version magic */
|
||||
if (buf.nlh.magic != htonl(UDEV_MONITOR_MAGIC)) {
|
||||
if (buf.nlh.magic != htobe32(UDEV_MONITOR_MAGIC)) {
|
||||
log_debug("unrecognized message signature (%x != %x)",
|
||||
buf.nlh.magic, htonl(UDEV_MONITOR_MAGIC));
|
||||
buf.nlh.magic, htobe32(UDEV_MONITOR_MAGIC));
|
||||
return NULL;
|
||||
}
|
||||
if (buf.nlh.properties_off+32 > (size_t)buflen) {
|
||||
@ -715,7 +715,7 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor,
|
||||
ssize_t blen, count;
|
||||
struct udev_monitor_netlink_header nlh = {
|
||||
.prefix = "libudev",
|
||||
.magic = htonl(UDEV_MONITOR_MAGIC),
|
||||
.magic = htobe32(UDEV_MONITOR_MAGIC),
|
||||
.header_size = sizeof nlh,
|
||||
};
|
||||
struct iovec iov[2] = {
|
||||
@ -736,19 +736,19 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor,
|
||||
|
||||
/* fill in versioned header */
|
||||
val = udev_device_get_subsystem(udev_device);
|
||||
nlh.filter_subsystem_hash = htonl(util_string_hash32(val));
|
||||
nlh.filter_subsystem_hash = htobe32(util_string_hash32(val));
|
||||
|
||||
val = udev_device_get_devtype(udev_device);
|
||||
if (val != NULL)
|
||||
nlh.filter_devtype_hash = htonl(util_string_hash32(val));
|
||||
nlh.filter_devtype_hash = htobe32(util_string_hash32(val));
|
||||
|
||||
/* add tag bloom filter */
|
||||
tag_bloom_bits = 0;
|
||||
udev_list_entry_foreach(list_entry, udev_device_get_tags_list_entry(udev_device))
|
||||
tag_bloom_bits |= util_string_bloom64(udev_list_entry_get_name(list_entry));
|
||||
if (tag_bloom_bits > 0) {
|
||||
nlh.filter_tag_bloom_hi = htonl(tag_bloom_bits >> 32);
|
||||
nlh.filter_tag_bloom_lo = htonl(tag_bloom_bits & 0xffffffff);
|
||||
nlh.filter_tag_bloom_hi = htobe32(tag_bloom_bits >> 32);
|
||||
nlh.filter_tag_bloom_lo = htobe32(tag_bloom_bits & 0xffffffff);
|
||||
}
|
||||
|
||||
/* add properties list */
|
||||
|
@ -138,7 +138,7 @@ static int ipv4ll_address_claimed(sd_ipv4ll *ll, Link *link) {
|
||||
ll_addr->family = AF_INET;
|
||||
ll_addr->in_addr.in = address;
|
||||
ll_addr->prefixlen = 16;
|
||||
ll_addr->broadcast.s_addr = ll_addr->in_addr.in.s_addr | htonl(0xfffffffflu >> ll_addr->prefixlen);
|
||||
ll_addr->broadcast.s_addr = ll_addr->in_addr.in.s_addr | htobe32(0xfffffffflu >> ll_addr->prefixlen);
|
||||
ll_addr->scope = RT_SCOPE_LINK;
|
||||
|
||||
r = address_configure(ll_addr, link, ipv4ll_address_handler, false);
|
||||
|
@ -35,7 +35,7 @@
|
||||
#include "util.h"
|
||||
|
||||
#define DEFAULT_TNL_HOP_LIMIT 64
|
||||
#define IP6_FLOWINFO_FLOWLABEL htonl(0x000FFFFF)
|
||||
#define IP6_FLOWINFO_FLOWLABEL htobe32(0x000FFFFF)
|
||||
|
||||
static const char* const ip6tnl_mode_table[_NETDEV_IP6_TNL_MODE_MAX] = {
|
||||
[NETDEV_IP6_TNL_MODE_IP6IP6] = "ip6ip6",
|
||||
@ -519,7 +519,7 @@ int config_parse_ipv6_flowlabel(const char* unit,
|
||||
if (k > 0xFFFFF)
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse IPv6 flowlabel option, ignoring: %s", rvalue);
|
||||
else {
|
||||
*ipv6_flowlabel = htonl(k) & IP6_FLOWINFO_FLOWLABEL;
|
||||
*ipv6_flowlabel = htobe32(k) & IP6_FLOWINFO_FLOWLABEL;
|
||||
t->flags &= ~IP6_TNL_F_USE_ORIG_FLOWLABEL;
|
||||
}
|
||||
}
|
||||
|
@ -38,7 +38,7 @@
|
||||
* IPv6 we use ::1 which unfortunately will not translate back to the
|
||||
* hostname but instead something like "localhost" or so. */
|
||||
|
||||
#define LOCALADDRESS_IPV4 (htonl(0x7F000002))
|
||||
#define LOCALADDRESS_IPV4 (htobe32(0x7F000002))
|
||||
#define LOCALADDRESS_IPV6 &in6addr_loopback
|
||||
|
||||
NSS_GETHOSTBYNAME_PROTOTYPES(myhostname);
|
||||
@ -75,7 +75,7 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
|
||||
* is optional */
|
||||
|
||||
canonical = "localhost";
|
||||
local_address_ipv4 = htonl(INADDR_LOOPBACK);
|
||||
local_address_ipv4 = htobe32(INADDR_LOOPBACK);
|
||||
|
||||
} else if (is_gateway_hostname(name)) {
|
||||
|
||||
@ -348,7 +348,7 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
|
||||
|
||||
if (is_localhost(name)) {
|
||||
canonical = "localhost";
|
||||
local_address_ipv4 = htonl(INADDR_LOOPBACK);
|
||||
local_address_ipv4 = htobe32(INADDR_LOOPBACK);
|
||||
|
||||
} else if (is_gateway_hostname(name)) {
|
||||
|
||||
@ -437,9 +437,9 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
|
||||
if ((*(uint32_t*) addr) == LOCALADDRESS_IPV4)
|
||||
goto found;
|
||||
|
||||
if ((*(uint32_t*) addr) == htonl(INADDR_LOOPBACK)) {
|
||||
if ((*(uint32_t*) addr) == htobe32(INADDR_LOOPBACK)) {
|
||||
canonical = "localhost";
|
||||
local_address_ipv4 = htonl(INADDR_LOOPBACK);
|
||||
local_address_ipv4 = htobe32(INADDR_LOOPBACK);
|
||||
goto found;
|
||||
}
|
||||
|
||||
|
@ -400,8 +400,8 @@ int main(int argc, char **argv) {
|
||||
_cleanup_free_ char *dir = NULL, *hostname = NULL;
|
||||
const char *module;
|
||||
|
||||
const uint32_t local_address_ipv4 = htonl(0x7F000001);
|
||||
const uint32_t local_address_ipv4_2 = htonl(0x7F000002);
|
||||
const uint32_t local_address_ipv4 = htobe32(0x7F000001);
|
||||
const uint32_t local_address_ipv4_2 = htobe32(0x7F000002);
|
||||
_cleanup_free_ struct local_address *addresses = NULL;
|
||||
int n_addresses;
|
||||
|
||||
|
@ -353,7 +353,7 @@ static void test_nameinfo_pretty(void) {
|
||||
union sockaddr_union s = {
|
||||
.in.sin_family = AF_INET,
|
||||
.in.sin_port = 0,
|
||||
.in.sin_addr.s_addr = htonl(INADDR_ANY),
|
||||
.in.sin_addr.s_addr = htobe32(INADDR_ANY),
|
||||
};
|
||||
int r;
|
||||
|
||||
@ -391,17 +391,17 @@ static void test_sockaddr_equal(void) {
|
||||
union sockaddr_union a = {
|
||||
.in.sin_family = AF_INET,
|
||||
.in.sin_port = 0,
|
||||
.in.sin_addr.s_addr = htonl(INADDR_ANY),
|
||||
.in.sin_addr.s_addr = htobe32(INADDR_ANY),
|
||||
};
|
||||
union sockaddr_union b = {
|
||||
.in.sin_family = AF_INET,
|
||||
.in.sin_port = 0,
|
||||
.in.sin_addr.s_addr = htonl(INADDR_ANY),
|
||||
.in.sin_addr.s_addr = htobe32(INADDR_ANY),
|
||||
};
|
||||
union sockaddr_union c = {
|
||||
.in.sin_family = AF_INET,
|
||||
.in.sin_port = 0,
|
||||
.in.sin_addr.s_addr = htonl(1234),
|
||||
.in.sin_addr.s_addr = htobe32(1234),
|
||||
};
|
||||
union sockaddr_union d = {
|
||||
.in6.sin6_family = AF_INET6,
|
||||
|
Loading…
Reference in New Issue
Block a user