]> git.proxmox.com Git - mirror_frr.git/blame - zebra/rtadv.h
Merge pull request #10792 from donaldsharp/pim_blargle
[mirror_frr.git] / zebra / rtadv.h
CommitLineData
718e3744 1/* Router advertisement
7cee1bb1 2 * Copyright (C) 2005 6WIND <jean-mickael.guerin@6wind.com>
718e3744 3 * Copyright (C) 1999 Kunihiro Ishiguro
4 *
5 * This file is part of GNU Zebra.
6 *
7 * GNU Zebra is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2, or (at your option) any
10 * later version.
11 *
12 * GNU Zebra is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
896014f4
DL
17 * You should have received a copy of the GNU General Public License along
18 * with this program; see the file COPYING; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
718e3744 20 */
21
22#ifndef _ZEBRA_RTADV_H
23#define _ZEBRA_RTADV_H
24
954e1a2b 25#include "zebra.h"
30a2231a 26#include "vty.h"
66c454f2
PJ
27#include "zebra/interface.h"
28
51e94aa7
EDP
29#ifdef __cplusplus
30extern "C" {
31#endif
32
36735ed9 33/* NB: RTADV is defined in zebra/interface.h above */
d62a17ae 34#if defined(HAVE_RTADV)
36735ed9 35
718e3744 36/* Router advertisement prefix. */
d62a17ae 37struct rtadv_prefix {
38 /* Prefix to be advertised. */
39 struct prefix_ipv6 prefix;
40
2a855763
DS
41 /* The prefix was manually/automatically defined. */
42 int AdvPrefixCreate;
43
d62a17ae 44 /* The value to be placed in the Valid Lifetime in the Prefix */
d7c0a89a 45 uint32_t AdvValidLifetime;
718e3744 46#define RTADV_VALID_LIFETIME 2592000
47
d62a17ae 48 /* The value to be placed in the on-link flag */
49 int AdvOnLinkFlag;
718e3744 50
d62a17ae 51 /* The value to be placed in the Preferred Lifetime in the Prefix
52 Information option, in seconds.*/
d7c0a89a 53 uint32_t AdvPreferredLifetime;
718e3744 54#define RTADV_PREFERRED_LIFETIME 604800
55
d62a17ae 56 /* The value to be placed in the Autonomous Flag. */
57 int AdvAutonomousFlag;
7cee1bb1 58
d62a17ae 59 /* The value to be placed in the Router Address Flag [RFC6275 7.2]. */
60 int AdvRouterAddressFlag;
7cee1bb1 61#ifndef ND_OPT_PI_FLAG_RADDR
62#define ND_OPT_PI_FLAG_RADDR 0x20
63#endif
718e3744 64};
65
adee8f21
DS
66/* RFC4861 minimum delay between RAs */
67#ifndef MIN_DELAY_BETWEEN_RAS
68#define MIN_DELAY_BETWEEN_RAS 3000
69#endif
70
6eb0c5ab 71/* RFC4584 Extension to Sockets API for Mobile IPv6 */
7cee1bb1 72
73#ifndef ND_OPT_ADV_INTERVAL
74#define ND_OPT_ADV_INTERVAL 7 /* Adv Interval Option */
75#endif
76#ifndef ND_OPT_HA_INFORMATION
77#define ND_OPT_HA_INFORMATION 8 /* HA Information Option */
78#endif
79
6f0e3f6e 80#ifndef HAVE_STRUCT_ND_OPT_ADV_INTERVAL
d62a17ae 81struct nd_opt_adv_interval { /* Advertisement interval option */
82 uint8_t nd_opt_ai_type;
83 uint8_t nd_opt_ai_len;
84 uint16_t nd_opt_ai_reserved;
85 uint32_t nd_opt_ai_interval;
7cee1bb1 86} __attribute__((__packed__));
87#else
6f0e3f6e 88#ifndef HAVE_STRUCT_ND_OPT_ADV_INTERVAL_ND_OPT_AI_TYPE
7cee1bb1 89/* fields may have to be renamed */
90#define nd_opt_ai_type nd_opt_adv_interval_type
91#define nd_opt_ai_len nd_opt_adv_interval_len
92#define nd_opt_ai_reserved nd_opt_adv_interval_reserved
93#define nd_opt_ai_interval nd_opt_adv_interval_ival
94#endif
95#endif
96
6f0e3f6e 97#ifndef HAVE_STRUCT_ND_OPT_HOMEAGENT_INFO
d62a17ae 98struct nd_opt_homeagent_info { /* Home Agent info */
d7c0a89a
QY
99 uint8_t nd_opt_hai_type;
100 uint8_t nd_opt_hai_len;
101 uint16_t nd_opt_hai_reserved;
102 uint16_t nd_opt_hai_preference;
103 uint16_t nd_opt_hai_lifetime;
7cee1bb1 104} __attribute__((__packed__));
105#endif
106
3eb4fbb0
LS
107#ifndef ND_OPT_RDNSS
108#define ND_OPT_RDNSS 25
109#endif
110#ifndef ND_OPT_DNSSL
111#define ND_OPT_DNSSL 31
112#endif
113
114#ifndef HAVE_STRUCT_ND_OPT_RDNSS
115struct nd_opt_rdnss { /* Recursive DNS server option [RFC8106 5.1] */
116 uint8_t nd_opt_rdnss_type;
117 uint8_t nd_opt_rdnss_len;
118 uint16_t nd_opt_rdnss_reserved;
119 uint32_t nd_opt_rdnss_lifetime;
120 /* Followed by one or more IPv6 addresses */
121} __attribute__((__packed__));
122#endif
123
124#ifndef HAVE_STRUCT_ND_OPT_DNSSL
125struct nd_opt_dnssl { /* DNS search list option [RFC8106 5.2] */
126 uint8_t nd_opt_dnssl_type;
127 uint8_t nd_opt_dnssl_len;
128 uint16_t nd_opt_dnssl_reserved;
129 uint32_t nd_opt_dnssl_lifetime;
130 /*
131 * Followed by one or more domain names encoded as in [RFC1035 3.1].
132 * Multiple domain names are concatenated after encoding. In any case,
133 * the result is zero-padded to a multiple of 8 octets.
134 */
135} __attribute__((__packed__));
136#endif
137
8da4e946 138#endif /* HAVE_RTADV */
36735ed9 139
2a855763
DS
140/*
141 * ipv6 nd prefixes can be manually defined, derived from the kernel interface
142 * configs or both. If both, manual flag/timer settings are used.
143 */
144enum ipv6_nd_prefix_source {
145 PREFIX_SRC_NONE = 0,
146 PREFIX_SRC_MANUAL,
147 PREFIX_SRC_AUTO,
148 PREFIX_SRC_BOTH,
149};
150
57dd8642 151enum ipv6_nd_suppress_ra_status {
d62a17ae 152 RA_ENABLE = 0,
153 RA_SUPPRESS,
57dd8642 154};
b6120505 155
7c2ddfb9 156extern void rtadv_vrf_init(struct zebra_vrf *zvrf);
aab5893a 157extern void rtadv_vrf_terminate(struct zebra_vrf *zvrf);
d7fc0e67
DS
158extern void rtadv_stop_ra(struct interface *ifp);
159extern void rtadv_stop_ra_all(void);
d62a17ae 160extern void rtadv_cmd_init(void);
89f4e507
QY
161extern void zebra_interface_radv_disable(ZAPI_HANDLER_ARGS);
162extern void zebra_interface_radv_enable(ZAPI_HANDLER_ARGS);
2a855763
DS
163extern void rtadv_add_prefix(struct zebra_if *zif, const struct prefix_ipv6 *p);
164extern void rtadv_delete_prefix(struct zebra_if *zif, const struct prefix *p);
954e1a2b
DS
165extern uint32_t rtadv_get_interfaces_configured_from_bgp(void);
166extern bool rtadv_compiled_in(void);
cd80d74f 167
51e94aa7
EDP
168#ifdef __cplusplus
169}
170#endif
1002497a 171
718e3744 172#endif /* _ZEBRA_RTADV_H */