"Masahiko Endo" < endo @ suri . co . jp >
- [zebra 15475] - MPLS-TE docs
diff --git a/doc/mpls/opaque_lsa.txt b/doc/mpls/opaque_lsa.txt
new file mode 100644
index 0000000..7d5c7fe
--- /dev/null
+++ b/doc/mpls/opaque_lsa.txt
@@ -0,0 +1,365 @@
+1. List of "opaque-type dependent" callback functions per LSA-type.
+
+ <ospf_opaque_lsaN_functab>  (N = 9,10,11)
+      |
+      |    struct
+      |    list            struct                        struct
+      +-> +-------+        listnode                      listnode
+          | head  |-----> +------+                      +------
+          | tail  |       | next |--------------------> | next 
+          | count |    /--| prev |<---------------------| prev
+          +-------+       | data |----+                 |
+          |///////|       +------+    |
+          +-------+                   |
+                                      |
+           struct                     |
+           ospf_opaque_tabent         |
+          +----------------------+ <--+
+          | opaque_type          |
+          +----------------------+
+          | (Callback functions) |
+          +----------------------+
+
+
+2. Self-originated Opaque-LSAs per LSA-type.
+
+2.1 Type-11 (AS-external) Opaque-LSAs
+
+               struct
+               ospf
+        +---> +-------------------+
+        |     |///////////////////|
+        |     +-------------------+
+        |     | opaque            |
+        |     +-------------------+
+        |     |///////////////////|
+        |     +-------------------+
+        |     | opaque_lsa_self   |---+
+        |     +-------------------+   |
+        |     |///////////////////|   |
+        |     +-------------------+   |
+        |                             |
+  ......|.............................|.......................................
+  :     |                             |   Almost common for type-9,10,11 LSA :
+  :     |     +-----------------------+                                      :
+  :     |     |                                                              :
+  :     |     |    struct                                                    :
+  :     |     |    list            struct                        struct      :
+  :     |     +-> +-------+        listnode                      listnode    :
+  :     |         | head  |-----> +------+                      +------      :
+  :     |         | tail  |       | next |--------------------> | next       :
+  :     |         | count |    /--| prev |<---------------------| prev       :
+  :     |         +-------+       | data |---+                  |            :
+  :     |         |///////|       +------+   |                               :
+  :     |         +-------+                  |                               :
+  :     |                                    |                               :
+  :     |      struct                        |                               :
+  :     |      opaque_info_per_type          |                               :
+  :     |     +-------------------+ <--------+                               :
+  :     |     | opaque_type       | <------------+                           :
+  :     |     +-------------------+              |                           :
+  :     |     | status            |              |                           :
+  :     |     +-------------------+              |                           :
+  :     |     | t_opaque_lsa_self |              |                           :
+  :     |     +-------------------+              |                           :
+  :     +-----| owner             |              |       struct              :
+  :           +-------------------+              |       ospf_opaque_tabent  :
+  :           | functab           |-------------------> +----------------    :
+  :           +-------------------+              |      | opaque_type        :
+  :           | id_list           |---+          |      |(Callback Funcs)    :
+  :           +-------------------+   |          |      |                    :
+  :                                   |          |                           :
+  :           +-----------------------+          |                           :
+  :           |                                  |                           :
+  :           |    struct                        |                           :
+  :           |    list            struct        |               struct      :
+  :           +-> +-------+        listnode      |               listnode    :
+  :               | head  |-----> +------+       |              +------      :
+  :               | tail  |       | next |--------------------> | next       :
+  :               | count |    /--| prev |<---------------------| prev       :
+  :               +-------+       | data |---+   |              |            :
+  :               |///////|       +------+   |   |                           :
+  :               +-------+                  |   |                           :
+  :                                          |   |                           :
+  :            struct                        |   |                           :
+  :            opaque_info_per_id            |   |                           :
+  :           +-------------------+ <--------+   |                           :
+  :           | opaque_id         |              |                           :
+  :           +-------------------+              |                           :
+  :           | t_opaque_lsa_self |              |                           :
+  :           +-------------------+              |                           :
+  :           | opqctl_type       |--------------+                           :
+  :           +-------------------+                                          :
+  :           | lsa               |---+                                      :
+  :           +-------------------+   |                                      :
+  :                                   |                                      :
+  :            struct                 |                                      :
+  :            ospf_lsa               |                                      :
+  :           +-------------+ <-------+                                      :
+  :           |/////////////|                 struct                         :
+  :           +-------------+                 lsa_header                     :
+  :           | data        |--------------> +--------                       :
+  :           +-------------+                |                               :
+  :           |/////////////|                                                :
+  :           +-------------+                                                :
+  :  +--------| area        |                                                :
+  :  |        +-------------+                                                :
+  : ---       |/////////////|                                                :
+  :           +-------------+                                                :
+  :     +-----| oi          |                                                :
+  :     |     +-------------+                                                :
+  :    ---                                                                   :
+  :..........................................................................:
+
+2.2 Type-10 (area-local) Opaque-LSAs
+
+               struct
+               ospf
+              +---------+ <-----------+
+              |/////////|             |
+              +---------+             |
+                                      |
+               struct                 |
+               ospf_area              |
+     +--+---> +-----------------+     |
+     |  |     | top             |-----+
+     |  |     +-----------------+
+     |  |     |/////////////////|              struct
+     |  |     +-----------------+              ospf_lsa
+     |  |     | router_lsa_self |-----------> +---------
+     |  |     +-----------------+             |
+     |  |     | opaque_lsa_self |-----+       |
+     |  |     +-----------------+     |
+     |  |     |/////////////////|     |
+     |  |     +-----------------+     |
+     |  |                             |
+  ...|..|.............................|.......................................
+  :  |  |                             |   Almost common for type-9,10,11 LSA :
+  :  |  |     +-----------------------+                                      :
+  :  |  |     |                                                              :
+  :  |  |     |    struct                                                    :
+  :  |  |     |    list            struct                        struct      :
+  :  |  |     +-> +-------+        listnode                      listnode    :
+  :  |  |         | head  |-----> +------+                      +------      :
+  :  |  |         | tail  |       | next |--------------------> | next       :
+  :  |  |         | count |    /--| prev |<---------------------| prev       :
+  :  |  |         +-------+       | data |---+                  |            :
+  :  |  |         |///////|       +------+   |                               :
+  :  |  |         +-------+                  |                               :
+  :  |  |                                    |                               :
+  :  |  |      struct                        |                               :
+  :  |  |      opaque_info_per_type          |                               :
+  :  |  |     +-------------------+ <--------+                               :
+  :  |  |     | opaque_type       | <------------+                           :
+  :  |  |     +-------------------+              |                           :
+  :  |  |     | status            |              |                           :
+  :  |  |     +-------------------+              |                           :
+  :  |  |     | t_opaque_lsa_self |              |                           :
+  :  |  |     +-------------------+              |                           :
+  :  |  +-----| owner             |              |       struct              :
+  :  |        +-------------------+              |       ospf_opaque_tabent  :
+  :  |        | functab           |-------------------> +----------------    :
+  :  |        +-------------------+              |      | opaque_type        :
+  :  |        | id_list           |---+          |      |(Callback Funcs)    :
+  :  |        +-------------------+   |          |      |                    :
+  :  |                                |          |                           :
+  :  |        +-----------------------+          |                           :
+  :  |        |                                  |                           :
+  :  |        |    struct                        |                           :
+  :  |        |    list            struct        |               struct      :
+  :  |        +-> +-------+        listnode      |               listnode    :
+  :  |            | head  |-----> +------+       |              +------      :
+  :  |            | tail  |       | next |--------------------> | next       :
+  :  |            | count |    /--| prev |<---------------------| prev       :
+  :  |            +-------+       | data |---+   |              |            :
+  :  |            |///////|       +------+   |   |                           :
+  :  |            +-------+                  |   |                           :
+  :  |                                       |   |                           :
+  :  |         struct                        |   |                           :
+  :  |         opaque_info_per_id            |   |                           :
+  :  |        +-------------------+ <--------+   |                           :
+  :  |        | opaque_id         |              |                           :
+  :  |        +-------------------+              |                           :
+  :  |        | t_opaque_lsa_self |              |                           :
+  :  |        +-------------------+              |                           :
+  :  |        | opqctl_type       |--------------+                           :
+  :  |        +-------------------+                                          :
+  :  |        | lsa               |---+                                      :
+  :  |        +-------------------+   |                                      :
+  :  |                                |                                      :
+  :  |         struct                 |                                      :
+  :  |         ospf_lsa               |                                      :
+  :  |        +-------------+ <-------+                                      :
+  :  |        |/////////////|                 struct                         :
+  :  |        +-------------+                 lsa_header                     :
+  :  |        | data        |--------------> +--------                       :
+  :  |        +-------------+                |                               :
+  :  |        |/////////////|                                                :
+  :  |        +-------------+                                                :
+  :  +--------| area        |                                                :
+  :           +-------------+                                                :
+  :           |/////////////|                                                :
+  :           +-------------+                                                :
+  :     +-----| oi          |                                                :
+  :     |     +-------------+                                                :
+  :    ---                                                                   :
+  :..........................................................................:
+
+2.3 Type-9 (link-local) Opaque-LSAs
+
+               struct
+               ospf_area
+     +------> +---------+ <---------+
+     |        |/////////|           |
+     |        +---------+           |
+     |                              |
+     |         struct               |
+     |         ospf_interface       |
+     |  +-+-> +-----------------+   |
+     |  | |   |/////////////////|   |
+     |  | |   +-----------------+   |
+     |  | |   | area            |---+
+     |  | |   +-----------------+
+     |  | |   |/////////////////|              struct
+     |  | |   +-----------------+              ospf_lsa
+     |  | |   |network_lsa_self |-----------> +---------
+     |  | |   +-----------------+             |
+     |  | |   | opaque_lsa_self |-----+       |
+     |  | |   +-----------------+     |
+     |  | |   |/////////////////|     |
+     |  | |   +-----------------+     |
+     |  | |                           |
+  ...|..|.|...........................|.......................................
+  :  |  | |                           |   Almost common for type-9,10,11 LSA :
+  :  |  | |   +-----------------------+                                      :
+  :  |  | |   |                                                              :
+  :  |  | |   |    struct                                                    :
+  :  |  | |   |    list            struct                        struct      :
+  :  |  | |   +-> +-------+        listnode                      listnode    :
+  :  |  | |       | head  |-----> +------+                      +------      :
+  :  |  | |       | tail  |       | next |--------------------> | next       :
+  :  |  | |       | count |    /--| prev |<---------------------| prev       :
+  :  |  | |       +-------+       | data |---+                  |            :
+  :  |  | |       |///////|       +------+   |                               :
+  :  |  | |       +-------+                  |                               :
+  :  |  | |                                  |                               :
+  :  |  | |    struct                        |                               :
+  :  |  | |    opaque_info_per_type          |                               :
+  :  |  | |   +-------------------+ <--------+                               :
+  :  |  | |   | opaque_type       | <------------+                           :
+  :  |  | |   +-------------------+              |                           :
+  :  |  | |   | status            |              |                           :
+  :  |  | |   +-------------------+              |                           :
+  :  |  | |   | t_opaque_lsa_self |              |                           :
+  :  |  | |   +-------------------+              |                           :
+  :  |  | +---| owner             |              |       struct              :
+  :  |  |     +-------------------+              |       ospf_opaque_tabent  :
+  :  |  |     | functab           |-------------------> +----------------    :
+  :  |  |     +-------------------+              |      | opaque_type        :
+  :  |  |     | id_list           |---+          |      |(Callback Funcs)    :
+  :  |  |     +-------------------+   |          |      |                    :
+  :  |  |                             |          |                           :
+  :  |  |     +-----------------------+          |                           :
+  :  |  |     |                                  |                           :
+  :  |  |     |    struct                        |                           :
+  :  |  |     |    list            struct        |               struct      :
+  :  |  |     +-> +-------+        listnode      |               listnode    :
+  :  |  |         | head  |-----> +------+       |              +------      :
+  :  |  |         | tail  |       | next |--------------------> | next       :
+  :  |  |         | count |    /--| prev |<---------------------| prev       :
+  :  |  |         +-------+       | data |---+   |              |            :
+  :  |  |         |///////|       +------+   |   |                           :
+  :  |  |         +-------+                  |   |                           :
+  :  |  |                                    |   |                           :
+  :  |  |      struct                        |   |                           :
+  :  |  |      opaque_info_per_id            |   |                           :
+  :  |  |     +-------------------+ <--------+   |                           :
+  :  |  |     | opaque_id         |              |                           :
+  :  |  |     +-------------------+              |                           :
+  :  |  |     | t_opaque_lsa_self |              |                           :
+  :  |  |     +-------------------+              |                           :
+  :  |  |     | opqctl_type       |--------------+                           :
+  :  |  |     +-------------------+                                          :
+  :  |  |     | lsa               |---+                                      :
+  :  |  |     +-------------------+   |                                      :
+  :  |  |                             |                                      :
+  :  |  |      struct                 |                                      :
+  :  |  |      ospf_lsa               |                                      :
+  :  |  |     +-------------+ <-------+                                      :
+  :  |  |     |/////////////|                 struct                         :
+  :  |  |     +-------------+                 lsa_header                     :
+  :  |  |     | data        |--------------> +--------                       :
+  :  |  |     +-------------+                |                               :
+  :  |  |     |/////////////|                                                :
+  :  |  |     +-------------+                                                :
+  :  +--|-----| area        |                                                :
+  :     |     +-------------+                                                :
+  :     |     |/////////////|                                                :
+  :     |     +-------------+                                                :
+  :     +-----| oi          |                                                :
+  :           +-------------+                                                :
+  :..........................................................................:
+
+
+3. Internal structures for MPLS-TE parameter management.
+
+       struct                         
+       ospf_mpls_te
+      +-------------+
+      | status      |
+      +-------------+
+      | iflist      |---+
+      +-------------+   |
+      |(Router-TLV) |   |
+      +-------------+   |
+                        |
+  +---------------------+
+  |  
+  |      struct                     
+  |      list            struct                        struct
+  +---> +-------+        listnode                      listnode
+        | head  |-----> +------+                      +------
+        | tail  |       | next |--------------------> | next 
+        | count |    /--| prev |<---------------------| prev
+        +-------+       | data |---+                  |
+        |///////|       +------+   |
+        +-------+                  |
+                                   |
+  +--------------------------------+
+  |
+  |    struct
+  |    ospf_mpls_te_linkparms
+  +-> +----------------+
+      | instance       |                       struct
+      +----------------+                       interface
+      | ifp            |--------------------> +----------+
+      +----------------+               +----> |//////////|
+      | area           |----+          |      +----------+
+      +----------------+    |          |      | info     |-----+
+      | flags          |    |          |      +----------+     |
+      +----------------+    |          |      |//////////|     |
+      | (Link-TLV)     |    |          |      +----------+     |
+      +----------------+    |          |                       |
+      | (Link-SubTLVs) |    |          |       struct          |
+      +----------------+    |          |       ospf_if_info    |
+                            |          |      +----------+ <---+
+                            |          |      |//////////|
+       struct               |          |      +----------+
+       ospf_area            |          |      | oifs     |-----+
+  +-> +--------------+ <----+          |      +----------+     |
+  |   |//////////////|                 |                       |
+  |   +--------------+                 |       struct          |
+  |                                    |       route_table     |
+  |    struct                          |      +-----------+ <--+
+  |    ospf_interface                  |      | route_top | - - - - -.
+  |   +--------------+ <----+          |      +-----------+          .
+  |   |//////////////|      |          |                             .
+  |   +--------------+      |          |       struct                .
+  |   | ifp          |------|----------+       route_node            .
+  |   +--------------+      |                 +-----------+ < - - - - 
+  |   |//////////////|      |                 |///////////|
+  |   +--------------+      |                 +-----------+
+  +---| area         |      +-----------------| info      |
+      +--------------+                        +-----------+
+      |//////////////|                        |///////////|
+      +--------------+                        +-----------+