]>
Commit | Line | Data |
---|---|---|
6e8f5e4c SS |
1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
2 | ||
3 | #include "ndisc-protocol.h" | |
4 | ||
5 | static 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 | ||
14 | int 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 | ||
24 | int 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 | } |