Annotation of embedaddon/quagga/zebra/irdp.h, revision 1.1
1.1 ! misho 1: /* ICMP Router Discovery Messages
! 2: * Copyright (C) 1997, 2000 Kunihiro Ishiguro
! 3: *
! 4: * This file is part of GNU Zebra.
! 5: *
! 6: * GNU Zebra is free software; you can redistribute it and/or modify it
! 7: * under the terms of the GNU General Public License as published by the
! 8: * Free Software Foundation; either version 2, or (at your option) any
! 9: * later version.
! 10: *
! 11: * GNU Zebra is distributed in the hope that it will be useful, but
! 12: * WITHOUT ANY WARRANTY; without even the implied warranty of
! 13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 14: * General Public License for more details.
! 15: *
! 16: * You should have received a copy of the GNU General Public License
! 17: * along with GNU Zebra; see the file COPYING. If not, write to the Free
! 18: * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! 19: * 02111-1307, USA.
! 20: */
! 21:
! 22: /*
! 23: * This file is modified and completed for the Zebra IRDP implementation
! 24: * by Robert Olsson, Swedish University of Agricultural Sciences
! 25: */
! 26:
! 27: #ifndef _IRDP_H
! 28: #define _IRDP_H
! 29:
! 30: #include "lib/vty.h"
! 31:
! 32: #define TRUE 1
! 33: #define FALSE 0
! 34:
! 35: /* ICMP Messages */
! 36: #ifndef ICMP_ROUTERADVERT
! 37: #define ICMP_ROUTERADVERT 9
! 38: #endif /* ICMP_ROUTERADVERT */
! 39:
! 40: #ifndef ICMP_ROUTERSOLICIT
! 41: #define ICMP_ROUTERSOLICIT 10
! 42: #endif /* ICMP_ROUTERSOLICT */
! 43:
! 44: /* Multicast groups */
! 45: #ifndef INADDR_ALLHOSTS_GROUP
! 46: #define INADDR_ALLHOSTS_GROUP 0xe0000001U /* 224.0.0.1 */
! 47: #endif /* INADDR_ALLHOSTS_GROUP */
! 48:
! 49: #ifndef INADDR_ALLRTRS_GROUP
! 50: #define INADDR_ALLRTRS_GROUP 0xe0000002U /* 224.0.0.2 */
! 51: #endif /* INADDR_ALLRTRS_GROUP */
! 52:
! 53: /* Default irdp packet interval */
! 54: #define IRDP_DEFAULT_INTERVAL 300
! 55:
! 56: /* Router constants from RFC1256 */
! 57: #define MAX_INITIAL_ADVERT_INTERVAL 16
! 58: #define MAX_INITIAL_ADVERTISEMENTS 3
! 59: #define MAX_RESPONSE_DELAY 2
! 60:
! 61: #define IRDP_MAXADVERTINTERVAL 600
! 62: #define IRDP_MINADVERTINTERVAL 450 /* 0.75*600 */
! 63: #define IRDP_LIFETIME 1350 /* 3*450 */
! 64: #define IRDP_PREFERENCE 0
! 65:
! 66: #define ICMP_MINLEN 8
! 67:
! 68: #define IRDP_LAST_ADVERT_MESSAGES 2 /* The last adverts with Holdtime 0 */
! 69:
! 70: #define IRDP_RX_BUF 1500
! 71:
! 72: /*
! 73: Comments comes from RFC1256 ICMP Router Discovery Messages.
! 74:
! 75: The IP destination address to be used for multicast Router
! 76: Advertisements sent from the interface. The only permissible
! 77: values are the all-systems multicast address, 224.0.0.1, or the
! 78: limited-broadcast address, 255.255.255.255. (The all-systems
! 79: address is preferred wherever possible, i.e., on any link where
! 80: all listening hosts support IP multicast.)
! 81:
! 82: Default: 224.0.0.1 if the router supports IP multicast on the
! 83: interface, else 255.255.255.255
! 84:
! 85: The maximum time allowed between sending multicast Router
! 86: Advertisements from the interface, in seconds. Must be no less
! 87: than 4 seconds and no greater than 1800 seconds.
! 88:
! 89: Default: 600 seconds
! 90:
! 91: The minimum time allowed between sending unsolicited multicast
! 92: Router Advertisements from the interface, in seconds. Must be no
! 93: less than 3 seconds and no greater than MaxAdvertisementInterval.
! 94:
! 95: Default: 0.75 * MaxAdvertisementInterval
! 96:
! 97: The value to be placed in the Lifetime field of Router
! 98: Advertisements sent from the interface, in seconds. Must be no
! 99: less than MaxAdvertisementInterval and no greater than 9000
! 100: seconds.
! 101:
! 102: Default: 3 * MaxAdvertisementInterval
! 103:
! 104: The preferability of the address as a default router address,
! 105: relative to other router addresses on the same subnet. A 32-bit,
! 106: signed, twos-complement integer, with higher values meaning more
! 107: preferable. The minimum value (hex 80000000) is used to indicate
! 108: that the address, even though it may be advertised, is not to be
! 109: used by neighboring hosts as a default router address.
! 110:
! 111: Default: 0
! 112: */
! 113:
! 114: struct irdp_interface
! 115: {
! 116: unsigned long MaxAdvertInterval;
! 117: unsigned long MinAdvertInterval;
! 118: unsigned long Preference;
! 119:
! 120: u_int32_t flags;
! 121:
! 122: #define IF_ACTIVE (1<<0) /* ICMP Active */
! 123: #define IF_BROADCAST (1<<1) /* 255.255.255.255 */
! 124: #define IF_SOLICIT (1<<2) /* Solicit active */
! 125: #define IF_DEBUG_MESSAGES (1<<3)
! 126: #define IF_DEBUG_PACKET (1<<4)
! 127: #define IF_DEBUG_MISC (1<<5)
! 128: #define IF_SHUTDOWN (1<<6)
! 129:
! 130: struct interface *ifp;
! 131: struct thread *t_advertise;
! 132: unsigned long irdp_sent;
! 133: u_int16_t Lifetime;
! 134:
! 135: struct list *AdvPrefList;
! 136:
! 137: };
! 138:
! 139: struct Adv
! 140: {
! 141: struct in_addr ip;
! 142: int pref;
! 143: };
! 144:
! 145: extern void irdp_init(void);
! 146: extern int irdp_sock_init(void);
! 147: extern void irdp_finish(void);
! 148: extern void irdp_config_write (struct vty *, struct interface *);
! 149: extern int irdp_send_thread(struct thread *t_advert);
! 150: extern void irdp_advert_off(struct interface *ifp);
! 151: extern void process_solicit (struct interface *ifp);
! 152: extern int irdp_read_raw(struct thread *r);
! 153: extern void send_packet(struct interface *ifp, struct stream *s,
! 154: u_int32_t dst, struct prefix *p, u_int32_t ttl);
! 155:
! 156:
! 157: #endif /* _IRDP_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>