]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/libsystemd-network/radv-internal.h
ipv4acd: do not unref() event sources when update or disable them
[thirdparty/systemd.git] / src / libsystemd-network / radv-internal.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
04473969
PF
2#pragma once
3
4/***
810adae9 5 Copyright © 2017 Intel Corporation. All rights reserved.
04473969
PF
6***/
7
8#include "sd-radv.h"
9
10#include "log.h"
11#include "list.h"
12#include "sparse-endian.h"
13
204fb681
PF
14assert_cc(SD_RADV_DEFAULT_MIN_TIMEOUT_USEC <= SD_RADV_DEFAULT_MAX_TIMEOUT_USEC)
15
16#define SD_RADV_MAX_INITIAL_RTR_ADVERT_INTERVAL_USEC (16*USEC_PER_SEC)
17#define SD_RADV_MAX_INITIAL_RTR_ADVERTISEMENTS 3
18#define SD_RADV_MAX_FINAL_RTR_ADVERTISEMENTS 3
19#define SD_RADV_MIN_DELAY_BETWEEN_RAS 3
20#define SD_RADV_MAX_RA_DELAY_TIME_USEC (500*USEC_PER_MSEC)
21
e9c6da38 22#define SD_RADV_OPT_RDNSS 25
e965d6ab 23#define SD_RADV_OPT_DNSSL 31
e9c6da38 24
204f99d2
PF
25enum RAdvState {
26 SD_RADV_STATE_IDLE = 0,
27 SD_RADV_STATE_ADVERTISING = 1,
28};
29typedef enum RAdvState RAdvState;
30
e9c6da38
PF
31struct sd_radv_opt_dns {
32 uint8_t type;
33 uint8_t length;
34 uint16_t reserved;
35 be32_t lifetime;
36} _packed_;
37
204f99d2
PF
38struct sd_radv {
39 unsigned n_ref;
40 RAdvState state;
41
42 int ifindex;
43
44 sd_event *event;
45 int event_priority;
46
47 struct ether_addr mac_addr;
48 uint8_t hop_limit;
49 uint8_t flags;
50 uint32_t mtu;
51 uint16_t lifetime;
52
77baf5ae 53 int fd;
204fb681 54 unsigned ra_sent;
88d5a3db 55 sd_event_source *recv_event_source;
204fb681
PF
56 sd_event_source *timeout_event_source;
57
204f99d2
PF
58 unsigned n_prefixes;
59 LIST_HEAD(sd_radv_prefix, prefixes);
e9c6da38
PF
60
61 size_t n_rdnss;
62 struct sd_radv_opt_dns *rdnss;
e965d6ab 63 struct sd_radv_opt_dns *dnssl;
204f99d2
PF
64};
65
04473969
PF
66struct sd_radv_prefix {
67 unsigned n_ref;
68
69 struct {
70 uint8_t type;
71 uint8_t length;
72 uint8_t prefixlen;
73 uint8_t flags;
74 be32_t valid_lifetime;
75 be32_t preferred_lifetime;
76 uint32_t reserved;
77 struct in6_addr in6_addr;
78 } _packed_ opt;
79
80 LIST_FIELDS(struct sd_radv_prefix, prefix);
d601b566
PF
81
82 usec_t valid_until;
83 usec_t preferred_until;
04473969
PF
84};
85
86#define log_radv_full(level, error, fmt, ...) log_internal(level, error, __FILE__, __LINE__, __func__, "RADV: " fmt, ##__VA_ARGS__)
87#define log_radv_errno(error, fmt, ...) log_radv_full(LOG_DEBUG, error, fmt, ##__VA_ARGS__)
04473969 88#define log_radv(fmt, ...) log_radv_errno(0, fmt, ##__VA_ARGS__)