mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 16:37:19 +09:00
These files use the .h extension but are not standalone so let's not make it appear like they are proper headers and instead use the .inc extension.
47 lines
1.1 KiB
C
47 lines
1.1 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
|
|
#include <errno.h>
|
|
#include <linux/if_arp.h>
|
|
#include <linux/if_infiniband.h>
|
|
#include <netinet/in.h>
|
|
#include <string.h>
|
|
|
|
#include "arphrd-util.h"
|
|
#include "assert-util.h"
|
|
#include "macro.h"
|
|
|
|
static const struct arphrd_name* lookup_arphrd(register const char *str, register GPERF_LEN_TYPE len);
|
|
|
|
#include "arphrd-from-name.inc"
|
|
#include "arphrd-to-name.inc"
|
|
|
|
int arphrd_from_name(const char *name) {
|
|
const struct arphrd_name *sc;
|
|
|
|
assert(name);
|
|
|
|
sc = lookup_arphrd(name, strlen(name));
|
|
if (!sc)
|
|
return -EINVAL;
|
|
|
|
return sc->id;
|
|
}
|
|
|
|
size_t arphrd_to_hw_addr_len(uint16_t arphrd) {
|
|
switch (arphrd) {
|
|
case ARPHRD_ETHER:
|
|
return ETH_ALEN;
|
|
case ARPHRD_INFINIBAND:
|
|
return INFINIBAND_ALEN;
|
|
case ARPHRD_TUNNEL:
|
|
case ARPHRD_SIT:
|
|
case ARPHRD_IPGRE:
|
|
return sizeof(struct in_addr);
|
|
case ARPHRD_TUNNEL6:
|
|
case ARPHRD_IP6GRE:
|
|
return sizeof(struct in6_addr);
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|