Import Upstream version 1.2.2
[quagga-debian.git] / doc / mpls / opaque_lsa.txt
1 1. List of "opaque-type dependent" callback functions per LSA-type.
2
3  <ospf_opaque_lsaN_functab>  (N = 9,10,11)
4       |
5       |    struct
6       |    list            struct                        struct
7       +-> +-------+        listnode                      listnode
8           | head  |-----> +------+                      +------
9           | tail  |       | next |--------------------> | next 
10           | count |    /--| prev |<---------------------| prev
11           +-------+       | data |----+                 |
12           |///////|       +------+    |
13           +-------+                   |
14                                       |
15            struct                     |
16            ospf_opaque_tabent         |
17           +----------------------+ <--+
18           | opaque_type          |
19           +----------------------+
20           | (Callback functions) |
21           +----------------------+
22
23
24 2. Self-originated Opaque-LSAs per LSA-type.
25
26 2.1 Type-11 (AS-external) Opaque-LSAs
27
28                struct
29                ospf
30         +---> +-------------------+
31         |     |///////////////////|
32         |     +-------------------+
33         |     | opaque            |
34         |     +-------------------+
35         |     |///////////////////|
36         |     +-------------------+
37         |     | opaque_lsa_self   |---+
38         |     +-------------------+   |
39         |     |///////////////////|   |
40         |     +-------------------+   |
41         |                             |
42   ......|.............................|.......................................
43   :     |                             |   Almost common for type-9,10,11 LSA :
44   :     |     +-----------------------+                                      :
45   :     |     |                                                              :
46   :     |     |    struct                                                    :
47   :     |     |    list            struct                        struct      :
48   :     |     +-> +-------+        listnode                      listnode    :
49   :     |         | head  |-----> +------+                      +------      :
50   :     |         | tail  |       | next |--------------------> | next       :
51   :     |         | count |    /--| prev |<---------------------| prev       :
52   :     |         +-------+       | data |---+                  |            :
53   :     |         |///////|       +------+   |                               :
54   :     |         +-------+                  |                               :
55   :     |                                    |                               :
56   :     |      struct                        |                               :
57   :     |      opaque_info_per_type          |                               :
58   :     |     +-------------------+ <--------+                               :
59   :     |     | opaque_type       | <------------+                           :
60   :     |     +-------------------+              |                           :
61   :     |     | status            |              |                           :
62   :     |     +-------------------+              |                           :
63   :     |     | t_opaque_lsa_self |              |                           :
64   :     |     +-------------------+              |                           :
65   :     +-----| owner             |              |       struct              :
66   :           +-------------------+              |       ospf_opaque_tabent  :
67   :           | functab           |-------------------> +----------------    :
68   :           +-------------------+              |      | opaque_type        :
69   :           | id_list           |---+          |      |(Callback Funcs)    :
70   :           +-------------------+   |          |      |                    :
71   :                                   |          |                           :
72   :           +-----------------------+          |                           :
73   :           |                                  |                           :
74   :           |    struct                        |                           :
75   :           |    list            struct        |               struct      :
76   :           +-> +-------+        listnode      |               listnode    :
77   :               | head  |-----> +------+       |              +------      :
78   :               | tail  |       | next |--------------------> | next       :
79   :               | count |    /--| prev |<---------------------| prev       :
80   :               +-------+       | data |---+   |              |            :
81   :               |///////|       +------+   |   |                           :
82   :               +-------+                  |   |                           :
83   :                                          |   |                           :
84   :            struct                        |   |                           :
85   :            opaque_info_per_id            |   |                           :
86   :           +-------------------+ <--------+   |                           :
87   :           | opaque_id         |              |                           :
88   :           +-------------------+              |                           :
89   :           | t_opaque_lsa_self |              |                           :
90   :           +-------------------+              |                           :
91   :           | opqctl_type       |--------------+                           :
92   :           +-------------------+                                          :
93   :           | lsa               |---+                                      :
94   :           +-------------------+   |                                      :
95   :                                   |                                      :
96   :            struct                 |                                      :
97   :            ospf_lsa               |                                      :
98   :           +-------------+ <-------+                                      :
99   :           |/////////////|                 struct                         :
100   :           +-------------+                 lsa_header                     :
101   :           | data        |--------------> +--------                       :
102   :           +-------------+                |                               :
103   :           |/////////////|                                                :
104   :           +-------------+                                                :
105   :  +--------| area        |                                                :
106   :  |        +-------------+                                                :
107   : ---       |/////////////|                                                :
108   :           +-------------+                                                :
109   :     +-----| oi          |                                                :
110   :     |     +-------------+                                                :
111   :    ---                                                                   :
112   :..........................................................................:
113
114 2.2 Type-10 (area-local) Opaque-LSAs
115
116                struct
117                ospf
118               +---------+ <-----------+
119               |/////////|             |
120               +---------+             |
121                                       |
122                struct                 |
123                ospf_area              |
124      +--+---> +-----------------+     |
125      |  |     | top             |-----+
126      |  |     +-----------------+
127      |  |     |/////////////////|              struct
128      |  |     +-----------------+              ospf_lsa
129      |  |     | router_lsa_self |-----------> +---------
130      |  |     +-----------------+             |
131      |  |     | opaque_lsa_self |-----+       |
132      |  |     +-----------------+     |
133      |  |     |/////////////////|     |
134      |  |     +-----------------+     |
135      |  |                             |
136   ...|..|.............................|.......................................
137   :  |  |                             |   Almost common for type-9,10,11 LSA :
138   :  |  |     +-----------------------+                                      :
139   :  |  |     |                                                              :
140   :  |  |     |    struct                                                    :
141   :  |  |     |    list            struct                        struct      :
142   :  |  |     +-> +-------+        listnode                      listnode    :
143   :  |  |         | head  |-----> +------+                      +------      :
144   :  |  |         | tail  |       | next |--------------------> | next       :
145   :  |  |         | count |    /--| prev |<---------------------| prev       :
146   :  |  |         +-------+       | data |---+                  |            :
147   :  |  |         |///////|       +------+   |                               :
148   :  |  |         +-------+                  |                               :
149   :  |  |                                    |                               :
150   :  |  |      struct                        |                               :
151   :  |  |      opaque_info_per_type          |                               :
152   :  |  |     +-------------------+ <--------+                               :
153   :  |  |     | opaque_type       | <------------+                           :
154   :  |  |     +-------------------+              |                           :
155   :  |  |     | status            |              |                           :
156   :  |  |     +-------------------+              |                           :
157   :  |  |     | t_opaque_lsa_self |              |                           :
158   :  |  |     +-------------------+              |                           :
159   :  |  +-----| owner             |              |       struct              :
160   :  |        +-------------------+              |       ospf_opaque_tabent  :
161   :  |        | functab           |-------------------> +----------------    :
162   :  |        +-------------------+              |      | opaque_type        :
163   :  |        | id_list           |---+          |      |(Callback Funcs)    :
164   :  |        +-------------------+   |          |      |                    :
165   :  |                                |          |                           :
166   :  |        +-----------------------+          |                           :
167   :  |        |                                  |                           :
168   :  |        |    struct                        |                           :
169   :  |        |    list            struct        |               struct      :
170   :  |        +-> +-------+        listnode      |               listnode    :
171   :  |            | head  |-----> +------+       |              +------      :
172   :  |            | tail  |       | next |--------------------> | next       :
173   :  |            | count |    /--| prev |<---------------------| prev       :
174   :  |            +-------+       | data |---+   |              |            :
175   :  |            |///////|       +------+   |   |                           :
176   :  |            +-------+                  |   |                           :
177   :  |                                       |   |                           :
178   :  |         struct                        |   |                           :
179   :  |         opaque_info_per_id            |   |                           :
180   :  |        +-------------------+ <--------+   |                           :
181   :  |        | opaque_id         |              |                           :
182   :  |        +-------------------+              |                           :
183   :  |        | t_opaque_lsa_self |              |                           :
184   :  |        +-------------------+              |                           :
185   :  |        | opqctl_type       |--------------+                           :
186   :  |        +-------------------+                                          :
187   :  |        | lsa               |---+                                      :
188   :  |        +-------------------+   |                                      :
189   :  |                                |                                      :
190   :  |         struct                 |                                      :
191   :  |         ospf_lsa               |                                      :
192   :  |        +-------------+ <-------+                                      :
193   :  |        |/////////////|                 struct                         :
194   :  |        +-------------+                 lsa_header                     :
195   :  |        | data        |--------------> +--------                       :
196   :  |        +-------------+                |                               :
197   :  |        |/////////////|                                                :
198   :  |        +-------------+                                                :
199   :  +--------| area        |                                                :
200   :           +-------------+                                                :
201   :           |/////////////|                                                :
202   :           +-------------+                                                :
203   :     +-----| oi          |                                                :
204   :     |     +-------------+                                                :
205   :    ---                                                                   :
206   :..........................................................................:
207
208 2.3 Type-9 (link-local) Opaque-LSAs
209
210                struct
211                ospf_area
212      +------> +---------+ <---------+
213      |        |/////////|           |
214      |        +---------+           |
215      |                              |
216      |         struct               |
217      |         ospf_interface       |
218      |  +-+-> +-----------------+   |
219      |  | |   |/////////////////|   |
220      |  | |   +-----------------+   |
221      |  | |   | area            |---+
222      |  | |   +-----------------+
223      |  | |   |/////////////////|              struct
224      |  | |   +-----------------+              ospf_lsa
225      |  | |   |network_lsa_self |-----------> +---------
226      |  | |   +-----------------+             |
227      |  | |   | opaque_lsa_self |-----+       |
228      |  | |   +-----------------+     |
229      |  | |   |/////////////////|     |
230      |  | |   +-----------------+     |
231      |  | |                           |
232   ...|..|.|...........................|.......................................
233   :  |  | |                           |   Almost common for type-9,10,11 LSA :
234   :  |  | |   +-----------------------+                                      :
235   :  |  | |   |                                                              :
236   :  |  | |   |    struct                                                    :
237   :  |  | |   |    list            struct                        struct      :
238   :  |  | |   +-> +-------+        listnode                      listnode    :
239   :  |  | |       | head  |-----> +------+                      +------      :
240   :  |  | |       | tail  |       | next |--------------------> | next       :
241   :  |  | |       | count |    /--| prev |<---------------------| prev       :
242   :  |  | |       +-------+       | data |---+                  |            :
243   :  |  | |       |///////|       +------+   |                               :
244   :  |  | |       +-------+                  |                               :
245   :  |  | |                                  |                               :
246   :  |  | |    struct                        |                               :
247   :  |  | |    opaque_info_per_type          |                               :
248   :  |  | |   +-------------------+ <--------+                               :
249   :  |  | |   | opaque_type       | <------------+                           :
250   :  |  | |   +-------------------+              |                           :
251   :  |  | |   | status            |              |                           :
252   :  |  | |   +-------------------+              |                           :
253   :  |  | |   | t_opaque_lsa_self |              |                           :
254   :  |  | |   +-------------------+              |                           :
255   :  |  | +---| owner             |              |       struct              :
256   :  |  |     +-------------------+              |       ospf_opaque_tabent  :
257   :  |  |     | functab           |-------------------> +----------------    :
258   :  |  |     +-------------------+              |      | opaque_type        :
259   :  |  |     | id_list           |---+          |      |(Callback Funcs)    :
260   :  |  |     +-------------------+   |          |      |                    :
261   :  |  |                             |          |                           :
262   :  |  |     +-----------------------+          |                           :
263   :  |  |     |                                  |                           :
264   :  |  |     |    struct                        |                           :
265   :  |  |     |    list            struct        |               struct      :
266   :  |  |     +-> +-------+        listnode      |               listnode    :
267   :  |  |         | head  |-----> +------+       |              +------      :
268   :  |  |         | tail  |       | next |--------------------> | next       :
269   :  |  |         | count |    /--| prev |<---------------------| prev       :
270   :  |  |         +-------+       | data |---+   |              |            :
271   :  |  |         |///////|       +------+   |   |                           :
272   :  |  |         +-------+                  |   |                           :
273   :  |  |                                    |   |                           :
274   :  |  |      struct                        |   |                           :
275   :  |  |      opaque_info_per_id            |   |                           :
276   :  |  |     +-------------------+ <--------+   |                           :
277   :  |  |     | opaque_id         |              |                           :
278   :  |  |     +-------------------+              |                           :
279   :  |  |     | t_opaque_lsa_self |              |                           :
280   :  |  |     +-------------------+              |                           :
281   :  |  |     | opqctl_type       |--------------+                           :
282   :  |  |     +-------------------+                                          :
283   :  |  |     | lsa               |---+                                      :
284   :  |  |     +-------------------+   |                                      :
285   :  |  |                             |                                      :
286   :  |  |      struct                 |                                      :
287   :  |  |      ospf_lsa               |                                      :
288   :  |  |     +-------------+ <-------+                                      :
289   :  |  |     |/////////////|                 struct                         :
290   :  |  |     +-------------+                 lsa_header                     :
291   :  |  |     | data        |--------------> +--------                       :
292   :  |  |     +-------------+                |                               :
293   :  |  |     |/////////////|                                                :
294   :  |  |     +-------------+                                                :
295   :  +--|-----| area        |                                                :
296   :     |     +-------------+                                                :
297   :     |     |/////////////|                                                :
298   :     |     +-------------+                                                :
299   :     +-----| oi          |                                                :
300   :           +-------------+                                                :
301   :..........................................................................:
302
303
304 3. Internal structures for MPLS-TE parameter management.
305
306        struct                         
307        ospf_mpls_te
308       +-------------+
309       | status      |
310       +-------------+
311       | iflist      |---+
312       +-------------+   |
313       |(Router-TLV) |   |
314       +-------------+   |
315                         |
316   +---------------------+
317   |  
318   |      struct                     
319   |      list            struct                        struct
320   +---> +-------+        listnode                      listnode
321         | head  |-----> +------+                      +------
322         | tail  |       | next |--------------------> | next 
323         | count |    /--| prev |<---------------------| prev
324         +-------+       | data |---+                  |
325         |///////|       +------+   |
326         +-------+                  |
327                                    |
328   +--------------------------------+
329   |
330   |    struct
331   |    ospf_mpls_te_linkparms
332   +-> +----------------+
333       | instance       |                       struct
334       +----------------+                       interface
335       | ifp            |--------------------> +----------+
336       +----------------+               +----> |//////////|
337       | area           |----+          |      +----------+
338       +----------------+    |          |      | info     |-----+
339       | flags          |    |          |      +----------+     |
340       +----------------+    |          |      |//////////|     |
341       | (Link-TLV)     |    |          |      +----------+     |
342       +----------------+    |          |                       |
343       | (Link-SubTLVs) |    |          |       struct          |
344       +----------------+    |          |       ospf_if_info    |
345                             |          |      +----------+ <---+
346                             |          |      |//////////|
347        struct               |          |      +----------+
348        ospf_area            |          |      | oifs     |-----+
349   +-> +--------------+ <----+          |      +----------+     |
350   |   |//////////////|                 |                       |
351   |   +--------------+                 |       struct          |
352   |                                    |       route_table     |
353   |    struct                          |      +-----------+ <--+
354   |    ospf_interface                  |      | route_top | - - - - -.
355   |   +--------------+ <----+          |      +-----------+          .
356   |   |//////////////|      |          |                             .
357   |   +--------------+      |          |       struct                .
358   |   | ifp          |------|----------+       route_node            .
359   |   +--------------+      |                 +-----------+ < - - - - 
360   |   |//////////////|      |                 |///////////|
361   |   +--------------+      |                 +-----------+
362   +---| area         |      +-----------------| info      |
363       +--------------+                        +-----------+
364       |//////////////|                        |///////////|
365       +--------------+                        +-----------+