Annotation of embedaddon/quagga/ospf6d/ospf6_intra.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2003 Yasuhiro Ohara
! 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
! 18: * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
! 19: * Boston, MA 02111-1307, USA.
! 20: */
! 21:
! 22: #ifndef OSPF6_INTRA_H
! 23: #define OSPF6_INTRA_H
! 24:
! 25: /* Debug option */
! 26: extern unsigned char conf_debug_ospf6_brouter;
! 27: extern u_int32_t conf_debug_ospf6_brouter_specific_router_id;
! 28: extern u_int32_t conf_debug_ospf6_brouter_specific_area_id;
! 29: #define OSPF6_DEBUG_BROUTER_SUMMARY 0x01
! 30: #define OSPF6_DEBUG_BROUTER_SPECIFIC_ROUTER 0x02
! 31: #define OSPF6_DEBUG_BROUTER_SPECIFIC_AREA 0x04
! 32: #define OSPF6_DEBUG_BROUTER_ON() \
! 33: (conf_debug_ospf6_brouter |= OSPF6_DEBUG_BROUTER_SUMMARY)
! 34: #define OSPF6_DEBUG_BROUTER_OFF() \
! 35: (conf_debug_ospf6_brouter &= ~OSPF6_DEBUG_BROUTER_SUMMARY)
! 36: #define IS_OSPF6_DEBUG_BROUTER \
! 37: (conf_debug_ospf6_brouter & OSPF6_DEBUG_BROUTER_SUMMARY)
! 38:
! 39: #define OSPF6_DEBUG_BROUTER_SPECIFIC_ROUTER_ON(router_id) \
! 40: do { \
! 41: conf_debug_ospf6_brouter_specific_router_id = (router_id); \
! 42: conf_debug_ospf6_brouter |= OSPF6_DEBUG_BROUTER_SPECIFIC_ROUTER; \
! 43: } while (0)
! 44: #define OSPF6_DEBUG_BROUTER_SPECIFIC_ROUTER_OFF() \
! 45: do { \
! 46: conf_debug_ospf6_brouter_specific_router_id = 0; \
! 47: conf_debug_ospf6_brouter &= ~OSPF6_DEBUG_BROUTER_SPECIFIC_ROUTER; \
! 48: } while (0)
! 49: #define IS_OSPF6_DEBUG_BROUTER_SPECIFIC_ROUTER \
! 50: (conf_debug_ospf6_brouter & OSPF6_DEBUG_BROUTER_SPECIFIC_ROUTER)
! 51: #define IS_OSPF6_DEBUG_BROUTER_SPECIFIC_ROUTER_ID(router_id) \
! 52: (IS_OSPF6_DEBUG_BROUTER_SPECIFIC_ROUTER && \
! 53: conf_debug_ospf6_brouter_specific_router_id == (router_id))
! 54:
! 55: #define OSPF6_DEBUG_BROUTER_SPECIFIC_AREA_ON(area_id) \
! 56: do { \
! 57: conf_debug_ospf6_brouter_specific_area_id = (area_id); \
! 58: conf_debug_ospf6_brouter |= OSPF6_DEBUG_BROUTER_SPECIFIC_AREA; \
! 59: } while (0)
! 60: #define OSPF6_DEBUG_BROUTER_SPECIFIC_AREA_OFF() \
! 61: do { \
! 62: conf_debug_ospf6_brouter_specific_area_id = 0; \
! 63: conf_debug_ospf6_brouter &= ~OSPF6_DEBUG_BROUTER_SPECIFIC_AREA; \
! 64: } while (0)
! 65: #define IS_OSPF6_DEBUG_BROUTER_SPECIFIC_AREA \
! 66: (conf_debug_ospf6_brouter & OSPF6_DEBUG_BROUTER_SPECIFIC_AREA)
! 67: #define IS_OSPF6_DEBUG_BROUTER_SPECIFIC_AREA_ID(area_id) \
! 68: (IS_OSPF6_DEBUG_BROUTER_SPECIFIC_AREA && \
! 69: conf_debug_ospf6_brouter_specific_area_id == (area_id))
! 70:
! 71: /* Router-LSA */
! 72: #define OSPF6_ROUTER_LSA_MIN_SIZE 4U
! 73: struct ospf6_router_lsa
! 74: {
! 75: u_char bits;
! 76: u_char options[3];
! 77: /* followed by ospf6_router_lsdesc(s) */
! 78: };
! 79:
! 80: /* Link State Description in Router-LSA */
! 81: #define OSPF6_ROUTER_LSDESC_FIX_SIZE 16U
! 82: struct ospf6_router_lsdesc
! 83: {
! 84: u_char type;
! 85: u_char reserved;
! 86: u_int16_t metric; /* output cost */
! 87: u_int32_t interface_id;
! 88: u_int32_t neighbor_interface_id;
! 89: u_int32_t neighbor_router_id;
! 90: };
! 91:
! 92: #define OSPF6_ROUTER_LSDESC_POINTTOPOINT 1
! 93: #define OSPF6_ROUTER_LSDESC_TRANSIT_NETWORK 2
! 94: #define OSPF6_ROUTER_LSDESC_STUB_NETWORK 3
! 95: #define OSPF6_ROUTER_LSDESC_VIRTUAL_LINK 4
! 96:
! 97: #define ROUTER_LSDESC_IS_TYPE(t,x) \
! 98: ((((struct ospf6_router_lsdesc *)(x))->type == \
! 99: OSPF6_ROUTER_LSDESC_ ## t) ? 1 : 0)
! 100: #define ROUTER_LSDESC_GET_METRIC(x) \
! 101: (ntohs (((struct ospf6_router_lsdesc *)(x))->metric))
! 102: #define ROUTER_LSDESC_GET_IFID(x) \
! 103: (ntohl (((struct ospf6_router_lsdesc *)(x))->interface_id))
! 104: #define ROUTER_LSDESC_GET_NBR_IFID(x) \
! 105: (ntohl (((struct ospf6_router_lsdesc *)(x))->neighbor_interface_id))
! 106: #define ROUTER_LSDESC_GET_NBR_ROUTERID(x) \
! 107: (((struct ospf6_router_lsdesc *)(x))->neighbor_router_id)
! 108:
! 109: /* Network-LSA */
! 110: #define OSPF6_NETWORK_LSA_MIN_SIZE 4U
! 111: struct ospf6_network_lsa
! 112: {
! 113: u_char reserved;
! 114: u_char options[3];
! 115: /* followed by ospf6_netowrk_lsd(s) */
! 116: };
! 117:
! 118: /* Link State Description in Router-LSA */
! 119: #define OSPF6_NETWORK_LSDESC_FIX_SIZE 4U
! 120: struct ospf6_network_lsdesc
! 121: {
! 122: u_int32_t router_id;
! 123: };
! 124: #define NETWORK_LSDESC_GET_NBR_ROUTERID(x) \
! 125: (((struct ospf6_network_lsdesc *)(x))->router_id)
! 126:
! 127: /* Link-LSA */
! 128: #define OSPF6_LINK_LSA_MIN_SIZE 24U /* w/o 1st IPv6 prefix */
! 129: struct ospf6_link_lsa
! 130: {
! 131: u_char priority;
! 132: u_char options[3];
! 133: struct in6_addr linklocal_addr;
! 134: u_int32_t prefix_num;
! 135: /* followed by ospf6 prefix(es) */
! 136: };
! 137:
! 138: /* Intra-Area-Prefix-LSA */
! 139: #define OSPF6_INTRA_PREFIX_LSA_MIN_SIZE 12U /* w/o 1st IPv6 prefix */
! 140: struct ospf6_intra_prefix_lsa
! 141: {
! 142: u_int16_t prefix_num;
! 143: u_int16_t ref_type;
! 144: u_int32_t ref_id;
! 145: u_int32_t ref_adv_router;
! 146: /* followed by ospf6 prefix(es) */
! 147: };
! 148:
! 149:
! 150: #define OSPF6_ROUTER_LSA_SCHEDULE(oa) \
! 151: do { \
! 152: if (! (oa)->thread_router_lsa) \
! 153: (oa)->thread_router_lsa = \
! 154: thread_add_event (master, ospf6_router_lsa_originate, oa, 0); \
! 155: } while (0)
! 156: #define OSPF6_NETWORK_LSA_SCHEDULE(oi) \
! 157: do { \
! 158: if (! (oi)->thread_network_lsa) \
! 159: (oi)->thread_network_lsa = \
! 160: thread_add_event (master, ospf6_network_lsa_originate, oi, 0); \
! 161: } while (0)
! 162: #define OSPF6_LINK_LSA_SCHEDULE(oi) \
! 163: do { \
! 164: if (! (oi)->thread_link_lsa) \
! 165: (oi)->thread_link_lsa = \
! 166: thread_add_event (master, ospf6_link_lsa_originate, oi, 0); \
! 167: } while (0)
! 168: #define OSPF6_INTRA_PREFIX_LSA_SCHEDULE_STUB(oa) \
! 169: do { \
! 170: if (! (oa)->thread_intra_prefix_lsa) \
! 171: (oa)->thread_intra_prefix_lsa = \
! 172: thread_add_event (master, ospf6_intra_prefix_lsa_originate_stub, \
! 173: oa, 0); \
! 174: } while (0)
! 175: #define OSPF6_INTRA_PREFIX_LSA_SCHEDULE_TRANSIT(oi) \
! 176: do { \
! 177: if (! (oi)->thread_intra_prefix_lsa) \
! 178: (oi)->thread_intra_prefix_lsa = \
! 179: thread_add_event (master, ospf6_intra_prefix_lsa_originate_transit, \
! 180: oi, 0); \
! 181: } while (0)
! 182:
! 183: #define OSPF6_NETWORK_LSA_EXECUTE(oi) \
! 184: do { \
! 185: THREAD_OFF ((oi)->thread_network_lsa); \
! 186: thread_execute (master, ospf6_network_lsa_originate, oi, 0); \
! 187: } while (0)
! 188: #define OSPF6_INTRA_PREFIX_LSA_EXECUTE_TRANSIT(oi) \
! 189: do { \
! 190: THREAD_OFF ((oi)->thread_intra_prefix_lsa); \
! 191: thread_execute (master, ospf6_intra_prefix_lsa_originate_transit, oi, 0); \
! 192: } while (0)
! 193:
! 194:
! 195: /* Function Prototypes */
! 196: extern char *ospf6_router_lsdesc_lookup (u_char type, u_int32_t interface_id,
! 197: u_int32_t neighbor_interface_id,
! 198: u_int32_t neighbor_router_id,
! 199: struct ospf6_lsa *lsa);
! 200: extern char *ospf6_network_lsdesc_lookup (u_int32_t router_id,
! 201: struct ospf6_lsa *lsa);
! 202:
! 203: extern int ospf6_router_lsa_originate (struct thread *);
! 204: extern int ospf6_network_lsa_originate (struct thread *);
! 205: extern int ospf6_link_lsa_originate (struct thread *);
! 206: extern int ospf6_intra_prefix_lsa_originate_transit (struct thread *);
! 207: extern int ospf6_intra_prefix_lsa_originate_stub (struct thread *);
! 208: extern void ospf6_intra_prefix_lsa_add (struct ospf6_lsa *lsa);
! 209: extern void ospf6_intra_prefix_lsa_remove (struct ospf6_lsa *lsa);
! 210:
! 211: extern void ospf6_intra_route_calculation (struct ospf6_area *oa);
! 212: extern void ospf6_intra_brouter_calculation (struct ospf6_area *oa);
! 213:
! 214: extern void ospf6_intra_init (void);
! 215:
! 216: extern int config_write_ospf6_debug_brouter (struct vty *vty);
! 217: extern void install_element_ospf6_debug_brouter (void);
! 218:
! 219: #endif /* OSPF6_LSA_H */
! 220:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>