blob: 8e403e342550a8e2a185dca8cd8b8787f1dfb7ee (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
#include "time-util.h"
/* RFC 8781: PREF64 or (NAT64 prefix) */
#define PREF64_SCALED_LIFETIME_MASK 0xfff8
#define PREF64_PLC_MASK 0x0007
#define PREF64_MAX_LIFETIME_USEC (65528 * USEC_PER_SEC)
typedef enum PrefixLengthCode {
PREFIX_LENGTH_CODE_96,
PREFIX_LENGTH_CODE_64,
PREFIX_LENGTH_CODE_56,
PREFIX_LENGTH_CODE_48,
PREFIX_LENGTH_CODE_40,
PREFIX_LENGTH_CODE_32,
_PREFIX_LENGTH_CODE_MAX,
_PREFIX_LENGTH_CODE_INVALID = -EINVAL,
} PrefixLengthCode;
/* rfc8781: section 4 - Scaled Lifetime: 13-bit unsigned integer. PREFIX_LEN (Prefix Length Code): 3-bit unsigned integer */
struct nd_opt_prefix64_info {
uint8_t type;
uint8_t length;
uint16_t lifetime_and_plc;
uint8_t prefix[12];
} __attribute__((__packed__));
int pref64_plc_to_prefix_length(uint16_t plc, uint8_t *ret);
int pref64_prefix_length_to_plc(uint8_t prefixlen, uint8_t *ret);
|