]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/libsystemd-network/ndisc-protocol.c
dhcp: introduce sd_dhcp_lease_get_timestamp()
[thirdparty/systemd.git] / src / libsystemd-network / ndisc-protocol.c
CommitLineData
6e8f5e4c
SS
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2
3#include "ndisc-protocol.h"
4
5static const uint8_t prefix_length_code_to_prefix_length[_PREFIX_LENGTH_CODE_MAX] = {
6 [PREFIX_LENGTH_CODE_96] = 96,
7 [PREFIX_LENGTH_CODE_64] = 64,
8 [PREFIX_LENGTH_CODE_56] = 56,
9 [PREFIX_LENGTH_CODE_48] = 48,
10 [PREFIX_LENGTH_CODE_40] = 40,
11 [PREFIX_LENGTH_CODE_32] = 32,
12};
13
14int pref64_plc_to_prefix_length(uint16_t plc, uint8_t *ret) {
15 plc &= PREF64_PLC_MASK;
16 if (plc >= _PREFIX_LENGTH_CODE_MAX)
17 return -EINVAL;
18
19 if (ret)
20 *ret = prefix_length_code_to_prefix_length[plc];
21 return 0;
22}
23
24int pref64_prefix_length_to_plc(uint8_t prefixlen, uint8_t *ret) {
25 assert(ret);
26
27 for (size_t i = 0; i < ELEMENTSOF(prefix_length_code_to_prefix_length); i++)
28 if (prefix_length_code_to_prefix_length[i] == prefixlen) {
29 *ret = i;
30 return 0;
31 }
32
33 return -EINVAL;
34}