From e22ca70008999ec451f2cf59a66d96cd067a3f15 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 18 Dec 2023 14:47:47 +0100 Subject: [PATCH] ether-addr-util: split out logic to mark MAC addresses as random --- src/basic/ether-addr-util.c | 8 ++++++++ src/basic/ether-addr-util.h | 2 ++ src/nspawn/nspawn-network.c | 4 +--- 3 files changed, 11 insertions(+), 3 deletions(-) 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; } -- 2.47.3