1: /* Router advertisement
2: * Copyright (C) 2005 6WIND <jean-mickael.guerin@6wind.com>
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: *
17: * You should have received a copy of the GNU General Public License
18: * along with GNU Zebra; see the file COPYING. If not, write to the Free
19: * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20: * 02111-1307, USA.
21: */
22:
23: #ifndef _ZEBRA_RTADV_H
24: #define _ZEBRA_RTADV_H
25:
26: #include "vty.h"
27: #include "zebra/interface.h"
28:
29: /* NB: RTADV is defined in zebra/interface.h above */
30: #ifdef RTADV
31:
32: /* Router advertisement prefix. */
33: struct rtadv_prefix
34: {
35: /* Prefix to be advertised. */
36: struct prefix_ipv6 prefix;
37:
38: /* The value to be placed in the Valid Lifetime in the Prefix */
39: u_int32_t AdvValidLifetime;
40: #define RTADV_VALID_LIFETIME 2592000
41:
42: /* The value to be placed in the on-link flag */
43: int AdvOnLinkFlag;
44:
45: /* The value to be placed in the Preferred Lifetime in the Prefix
46: Information option, in seconds.*/
47: u_int32_t AdvPreferredLifetime;
48: #define RTADV_PREFERRED_LIFETIME 604800
49:
50: /* The value to be placed in the Autonomous Flag. */
51: int AdvAutonomousFlag;
52:
53: /* The value to be placed in the Router Address Flag [RFC6275 7.2]. */
54: int AdvRouterAddressFlag;
55: #ifndef ND_OPT_PI_FLAG_RADDR
56: #define ND_OPT_PI_FLAG_RADDR 0x20
57: #endif
58:
59: };
60:
61: extern void rtadv_config_write (struct vty *, struct interface *);
62: extern void rtadv_init (void);
63:
64: /* RFC4584 Extension to Sockets API for Mobile IPv6 */
65:
66: #ifndef ND_OPT_ADV_INTERVAL
67: #define ND_OPT_ADV_INTERVAL 7 /* Adv Interval Option */
68: #endif
69: #ifndef ND_OPT_HA_INFORMATION
70: #define ND_OPT_HA_INFORMATION 8 /* HA Information Option */
71: #endif
72:
73: #ifndef HAVE_STRUCT_ND_OPT_ADV_INTERVAL
74: struct nd_opt_adv_interval { /* Advertisement interval option */
75: uint8_t nd_opt_ai_type;
76: uint8_t nd_opt_ai_len;
77: uint16_t nd_opt_ai_reserved;
78: uint32_t nd_opt_ai_interval;
79: } __attribute__((__packed__));
80: #else
81: #ifndef HAVE_STRUCT_ND_OPT_ADV_INTERVAL_ND_OPT_AI_TYPE
82: /* fields may have to be renamed */
83: #define nd_opt_ai_type nd_opt_adv_interval_type
84: #define nd_opt_ai_len nd_opt_adv_interval_len
85: #define nd_opt_ai_reserved nd_opt_adv_interval_reserved
86: #define nd_opt_ai_interval nd_opt_adv_interval_ival
87: #endif
88: #endif
89:
90: #ifndef HAVE_STRUCT_ND_OPT_HOMEAGENT_INFO
91: struct nd_opt_homeagent_info { /* Home Agent info */
92: u_int8_t nd_opt_hai_type;
93: u_int8_t nd_opt_hai_len;
94: u_int16_t nd_opt_hai_reserved;
95: u_int16_t nd_opt_hai_preference;
96: u_int16_t nd_opt_hai_lifetime;
97: } __attribute__((__packed__));
98: #endif
99:
100: extern const char *rtadv_pref_strs[];
101:
102: #endif /* RTADV */
103:
104: #endif /* _ZEBRA_RTADV_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>