From: Lennart Poettering Date: Mon, 18 Dec 2023 13:47:47 +0000 (+0100) Subject: ether-addr-util: split out logic to mark MAC addresses as random X-Git-Tag: v256-rc1~1463 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e22ca70008999ec451f2cf59a66d96cd067a3f15;p=thirdparty%2Fsystemd.git ether-addr-util: split out logic to mark MAC addresses as random --- diff --git a/src/basic/ether-addr-util.c b/src/basic/ether-addr-util.c index 0a6a54f8f13..12c256a474e 100644 --- a/src/basic/ether-addr-util.c +++ b/src/basic/ether-addr-util.c @@ -270,3 +270,11 @@ int parse_ether_addr(const char *s, struct ether_addr *ret) { *ret = a.ether; return 0; } + +void ether_addr_mark_random(struct ether_addr *addr) { + assert(addr); + + /* see eth_random_addr in the kernel */ + addr->ether_addr_octet[0] &= 0xfe; /* clear multicast bit */ + addr->ether_addr_octet[0] |= 0x02; /* set local assignment bit (IEEE802) */ +} diff --git a/src/basic/ether-addr-util.h b/src/basic/ether-addr-util.h index 83ed77d6345..187e4ef5830 100644 --- a/src/basic/ether-addr-util.h +++ b/src/basic/ether-addr-util.h @@ -113,3 +113,5 @@ static inline bool ether_addr_is_global(const struct ether_addr *addr) { extern const struct hash_ops ether_addr_hash_ops; extern const struct hash_ops ether_addr_hash_ops_free; + +void ether_addr_mark_random(struct ether_addr *addr); diff --git a/src/nspawn/nspawn-network.c b/src/nspawn/nspawn-network.c index c661f1d9e0b..369d8742b60 100644 --- a/src/nspawn/nspawn-network.c +++ b/src/nspawn/nspawn-network.c @@ -95,9 +95,7 @@ static int generate_mac( assert_cc(ETH_ALEN <= sizeof(result)); memcpy(mac->ether_addr_octet, &result, ETH_ALEN); - /* see eth_random_addr in the kernel */ - mac->ether_addr_octet[0] &= 0xfe; /* clear multicast bit */ - mac->ether_addr_octet[0] |= 0x02; /* set local assignment bit (IEEE802) */ + ether_addr_mark_random(mac); return 0; }