rtadv.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. #ifndef _ZEBRA_RTADV_H
  23. #define _ZEBRA_RTADV_H
  24. #include "vty.h"
  25. #include "zebra/interface.h"
  26. /* NB: RTADV is defined in zebra/interface.h above */
  27. #ifdef RTADV
  28. /* Router advertisement prefix. */
  29. struct rtadv_prefix
  30. {
  31. /* Prefix to be advertised. */
  32. struct prefix_ipv6 prefix;
  33. /* The value to be placed in the Valid Lifetime in the Prefix */
  34. u_int32_t AdvValidLifetime;
  35. #define RTADV_VALID_LIFETIME 2592000
  36. /* The value to be placed in the on-link flag */
  37. int AdvOnLinkFlag;
  38. /* The value to be placed in the Preferred Lifetime in the Prefix
  39. Information option, in seconds.*/
  40. u_int32_t AdvPreferredLifetime;
  41. #define RTADV_PREFERRED_LIFETIME 604800
  42. /* The value to be placed in the Autonomous Flag. */
  43. int AdvAutonomousFlag;
  44. /* The value to be placed in the Router Address Flag [RFC6275 7.2]. */
  45. int AdvRouterAddressFlag;
  46. #ifndef ND_OPT_PI_FLAG_RADDR
  47. #define ND_OPT_PI_FLAG_RADDR 0x20
  48. #endif
  49. };
  50. extern void rtadv_config_write (struct vty *, struct interface *);
  51. extern void rtadv_init (void);
  52. /* RFC4584 Extension to Sockets API for Mobile IPv6 */
  53. #ifndef ND_OPT_ADV_INTERVAL
  54. #define ND_OPT_ADV_INTERVAL 7 /* Adv Interval Option */
  55. #endif
  56. #ifndef ND_OPT_HA_INFORMATION
  57. #define ND_OPT_HA_INFORMATION 8 /* HA Information Option */
  58. #endif
  59. #ifndef HAVE_STRUCT_ND_OPT_ADV_INTERVAL
  60. struct nd_opt_adv_interval { /* Advertisement interval option */
  61. uint8_t nd_opt_ai_type;
  62. uint8_t nd_opt_ai_len;
  63. uint16_t nd_opt_ai_reserved;
  64. uint32_t nd_opt_ai_interval;
  65. } __attribute__((__packed__));
  66. #else
  67. #ifndef HAVE_STRUCT_ND_OPT_ADV_INTERVAL_ND_OPT_AI_TYPE
  68. /* fields may have to be renamed */
  69. #define nd_opt_ai_type nd_opt_adv_interval_type
  70. #define nd_opt_ai_len nd_opt_adv_interval_len
  71. #define nd_opt_ai_reserved nd_opt_adv_interval_reserved
  72. #define nd_opt_ai_interval nd_opt_adv_interval_ival
  73. #endif
  74. #endif
  75. #ifndef HAVE_STRUCT_ND_OPT_HOMEAGENT_INFO
  76. struct nd_opt_homeagent_info { /* Home Agent info */
  77. u_int8_t nd_opt_hai_type;
  78. u_int8_t nd_opt_hai_len;
  79. u_int16_t nd_opt_hai_reserved;
  80. u_int16_t nd_opt_hai_preference;
  81. u_int16_t nd_opt_hai_lifetime;
  82. } __attribute__((__packed__));
  83. #endif
  84. extern const char *rtadv_pref_strs[];
  85. #endif /* RTADV */
  86. #endif /* _ZEBRA_RTADV_H */