rtadv.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. #if defined (HAVE_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. /* RFC4584 Extension to Sockets API for Mobile IPv6 */
  52. #ifndef ND_OPT_ADV_INTERVAL
  53. #define ND_OPT_ADV_INTERVAL 7 /* Adv Interval Option */
  54. #endif
  55. #ifndef ND_OPT_HA_INFORMATION
  56. #define ND_OPT_HA_INFORMATION 8 /* HA Information Option */
  57. #endif
  58. #ifndef HAVE_STRUCT_ND_OPT_ADV_INTERVAL
  59. struct nd_opt_adv_interval { /* Advertisement interval option */
  60. uint8_t nd_opt_ai_type;
  61. uint8_t nd_opt_ai_len;
  62. uint16_t nd_opt_ai_reserved;
  63. uint32_t nd_opt_ai_interval;
  64. } __attribute__((__packed__));
  65. #else
  66. #ifndef HAVE_STRUCT_ND_OPT_ADV_INTERVAL_ND_OPT_AI_TYPE
  67. /* fields may have to be renamed */
  68. #define nd_opt_ai_type nd_opt_adv_interval_type
  69. #define nd_opt_ai_len nd_opt_adv_interval_len
  70. #define nd_opt_ai_reserved nd_opt_adv_interval_reserved
  71. #define nd_opt_ai_interval nd_opt_adv_interval_ival
  72. #endif
  73. #endif
  74. #ifndef HAVE_STRUCT_ND_OPT_HOMEAGENT_INFO
  75. struct nd_opt_homeagent_info { /* Home Agent info */
  76. u_int8_t nd_opt_hai_type;
  77. u_int8_t nd_opt_hai_len;
  78. u_int16_t nd_opt_hai_reserved;
  79. u_int16_t nd_opt_hai_preference;
  80. u_int16_t nd_opt_hai_lifetime;
  81. } __attribute__((__packed__));
  82. #endif
  83. extern const char *rtadv_pref_strs[];
  84. #endif /* HAVE_RTADV */
  85. extern void rtadv_init (struct zebra_vrf *);
  86. extern void rtadv_terminate (struct zebra_vrf *);
  87. extern void rtadv_cmd_init (void);
  88. #endif /* _ZEBRA_RTADV_H */