ospf6_intra.h
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:5k
源码类别:

网络

开发平台:

Unix_Linux

  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. #ifndef OSPF6_INTRA_H
  22. #define OSPF6_INTRA_H
  23. /* Router-LSA */
  24. struct ospf6_router_lsa
  25. {
  26.   u_char bits;
  27.   u_char options[3];
  28.   /* followed by ospf6_router_lsdesc(s) */
  29. };
  30. /* Link State Description in Router-LSA */
  31. struct ospf6_router_lsdesc
  32. {
  33.   u_char    type;
  34.   u_char    reserved;
  35.   u_int16_t metric;                /* output cost */
  36.   u_int32_t interface_id;
  37.   u_int32_t neighbor_interface_id;
  38.   u_int32_t neighbor_router_id;
  39. };
  40. #define OSPF6_ROUTER_LSDESC_POINTTOPOINT       1
  41. #define OSPF6_ROUTER_LSDESC_TRANSIT_NETWORK    2
  42. #define OSPF6_ROUTER_LSDESC_STUB_NETWORK       3
  43. #define OSPF6_ROUTER_LSDESC_VIRTUAL_LINK       4
  44. #define ROUTER_LSDESC_IS_TYPE(t,x)                         
  45.   ((((struct ospf6_router_lsdesc *)(x))->type ==           
  46.    OSPF6_ROUTER_LSDESC_ ## t) ? 1 : 0)
  47. #define ROUTER_LSDESC_GET_METRIC(x)                        
  48.   (ntohs (((struct ospf6_router_lsdesc *)(x))->metric))
  49. #define ROUTER_LSDESC_GET_IFID(x)                          
  50.   (ntohl (((struct ospf6_router_lsdesc *)(x))->interface_id))
  51. #define ROUTER_LSDESC_GET_NBR_IFID(x)                      
  52.   (ntohl (((struct ospf6_router_lsdesc *)(x))->neighbor_interface_id))
  53. #define ROUTER_LSDESC_GET_NBR_ROUTERID(x)                  
  54.   (((struct ospf6_router_lsdesc *)(x))->neighbor_router_id)
  55. /* Network-LSA */
  56. struct ospf6_network_lsa
  57. {
  58.   u_char reserved;
  59.   u_char options[3];
  60.   /* followed by ospf6_netowrk_lsd(s) */
  61. };
  62. /* Link State Description in Router-LSA */
  63. struct ospf6_network_lsdesc
  64. {
  65.   u_int32_t router_id;
  66. };
  67. #define NETWORK_LSDESC_GET_NBR_ROUTERID(x)                  
  68.   (((struct ospf6_network_lsdesc *)(x))->router_id)
  69. /* Link-LSA */
  70. struct ospf6_link_lsa
  71. {
  72.   u_char          priority;
  73.   u_char          options[3];
  74.   struct in6_addr linklocal_addr;
  75.   u_int32_t       prefix_num;
  76.   /* followed by ospf6 prefix(es) */
  77. };
  78. /* Intra-Area-Prefix-LSA */
  79. struct ospf6_intra_prefix_lsa
  80. {
  81.   u_int16_t prefix_num;
  82.   u_int16_t ref_type;
  83.   u_int32_t ref_id;
  84.   u_int32_t ref_adv_router;
  85.   /* followed by ospf6 prefix(es) */
  86. };
  87. #define OSPF6_ROUTER_LSA_SCHEDULE(oa) 
  88.   do { 
  89.     if (! (oa)->thread_router_lsa) 
  90.       (oa)->thread_router_lsa = 
  91.         thread_add_event (master, ospf6_router_lsa_originate, oa, 0); 
  92.   } while (0)
  93. #define OSPF6_NETWORK_LSA_SCHEDULE(oi) 
  94.   do { 
  95.     if (! (oi)->thread_network_lsa) 
  96.       (oi)->thread_network_lsa = 
  97.         thread_add_event (master, ospf6_network_lsa_originate, oi, 0); 
  98.   } while (0)
  99. #define OSPF6_LINK_LSA_SCHEDULE(oi) 
  100.   do { 
  101.     if (! (oi)->thread_link_lsa) 
  102.       (oi)->thread_link_lsa = 
  103.         thread_add_event (master, ospf6_link_lsa_originate, oi, 0); 
  104.   } while (0)
  105. #define OSPF6_INTRA_PREFIX_LSA_SCHEDULE_STUB(oa) 
  106.   do { 
  107.     if (! (oa)->thread_intra_prefix_lsa) 
  108.       (oa)->thread_intra_prefix_lsa = 
  109.         thread_add_event (master, ospf6_intra_prefix_lsa_originate_stub, 
  110.                           oa, 0); 
  111.   } while (0)
  112. #define OSPF6_INTRA_PREFIX_LSA_SCHEDULE_TRANSIT(oi) 
  113.   do { 
  114.     if (! (oi)->thread_intra_prefix_lsa) 
  115.       (oi)->thread_intra_prefix_lsa = 
  116.         thread_add_event (master, ospf6_intra_prefix_lsa_originate_transit, 
  117.                           oi, 0); 
  118.   } while (0)
  119. #define OSPF6_NETWORK_LSA_EXECUTE(oi) 
  120.   do { 
  121.     THREAD_OFF ((oi)->thread_network_lsa); 
  122.     thread_execute (master, ospf6_network_lsa_originate, oi, 0); 
  123.   } while (0)
  124. #define OSPF6_INTRA_PREFIX_LSA_EXECUTE_TRANSIT(oi) 
  125.   do { 
  126.     THREAD_OFF ((oi)->thread_intra_prefix_lsa); 
  127.     thread_execute (master, ospf6_intra_prefix_lsa_originate_transit, oi, 0); 
  128.   } while (0)
  129. /* Function Prototypes */
  130. char *ospf6_router_lsdesc_lookup (u_char type, u_int32_t interface_id,
  131.                             u_int32_t neighbor_interface_id,
  132.                             u_int32_t neighbor_router_id,
  133.                             struct ospf6_lsa *lsa);
  134. char *ospf6_network_lsdesc_lookup (u_int32_t router_id,
  135.                                    struct ospf6_lsa *lsa);
  136. int ospf6_router_lsa_originate (struct thread *);
  137. int ospf6_network_lsa_originate (struct thread *);
  138. int ospf6_link_lsa_originate (struct thread *);
  139. int ospf6_intra_prefix_lsa_originate_transit (struct thread *);
  140. int ospf6_intra_prefix_lsa_originate_stub (struct thread *);
  141. void ospf6_intra_prefix_lsa_add (struct ospf6_lsa *lsa);
  142. void ospf6_intra_prefix_lsa_remove (struct ospf6_lsa *lsa);
  143. void ospf6_intra_route_calculation (struct ospf6_area *oa);
  144. void ospf6_intra_brouter_calculation (struct ospf6_area *oa);
  145. void ospf6_intra_init ();
  146. #endif /* OSPF6_LSA_H */