1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-09 01:18:19 +03:00

Merge pull request #21321 from yuwata/ether-addr-fix-local

ether-addr-util: fix ether_addr_is_local()
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2021-11-12 17:12:46 +01:00 committed by GitHub
commit b01ee585c9
2 changed files with 36 additions and 1 deletions

View File

@ -102,7 +102,11 @@ static inline bool ether_addr_is_unicast(const struct ether_addr *addr) {
static inline bool ether_addr_is_local(const struct ether_addr *addr) {
/* Determine if the Ethernet address is locally-assigned one (IEEE 802) */
assert(addr);
return !FLAGS_SET(addr->ether_addr_octet[0], 0x02);
return FLAGS_SET(addr->ether_addr_octet[0], 0x02);
}
static inline bool ether_addr_is_global(const struct ether_addr *addr) {
return !ether_addr_is_local(addr);
}
extern const struct hash_ops ether_addr_hash_ops;

View File

@ -4,6 +4,36 @@
#include "string-util.h"
#include "tests.h"
static void test_ether_addr_helpers(void) {
struct ether_addr a;
log_info("/* %s */", __func__);
a = ETHER_ADDR_NULL;
assert_se(ether_addr_is_null(&a));
assert_se(!ether_addr_is_broadcast(&a));
assert_se(!ether_addr_is_multicast(&a));
assert_se(ether_addr_is_unicast(&a));
assert_se(!ether_addr_is_local(&a));
assert_se(ether_addr_is_global(&a));
memset(a.ether_addr_octet, 0xff, sizeof(a));
assert_se(!ether_addr_is_null(&a));
assert_se(ether_addr_is_broadcast(&a));
assert_se(ether_addr_is_multicast(&a));
assert_se(!ether_addr_is_unicast(&a));
assert_se(ether_addr_is_local(&a));
assert_se(!ether_addr_is_global(&a));
a = (struct ether_addr) { { 0x01, 0x23, 0x34, 0x56, 0x78, 0x9a } };
assert_se(!ether_addr_is_null(&a));
assert_se(!ether_addr_is_broadcast(&a));
assert_se(ether_addr_is_multicast(&a));
assert_se(!ether_addr_is_unicast(&a));
assert_se(!ether_addr_is_local(&a));
assert_se(ether_addr_is_global(&a));
}
#define INFINIBAD_ADDR_1 ((const struct hw_addr_data){ .length = 20, .infiniband = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20} })
static void test_HW_ADDR_TO_STRING(void) {
@ -138,6 +168,7 @@ static void test_parse_hw_addr(void) {
int main(int argc, char *argv[]) {
test_setup_logging(LOG_INFO);
test_ether_addr_helpers();
test_HW_ADDR_TO_STRING();
test_parse_hw_addr();
return 0;