"Masahiko Endo" < endo @ suri . co . jp >
- [zebra 15475] - MPLS-TE docs
diff --git a/doc/mpls/ChangeLog.opaque.txt b/doc/mpls/ChangeLog.opaque.txt
new file mode 100644
index 0000000..68ddf4c
--- /dev/null
+++ b/doc/mpls/ChangeLog.opaque.txt
@@ -0,0 +1,179 @@
+----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * -----
+Changes 2001.12.03
+
+1. Bug fixes
+
+  1.1 Though a new member "oi" has added to "struct ospf_lsa" to control
+      flooding scope of type-9 Opaque-LSAs, the value was always NULL
+      because no one set it.
+
+  1.2 In the function "show_ip_ospf_database_summary()" and "show_lsa_
+      detail_adv_router()", VTY output for type-11 Opaque-LSAs did not
+      work properly.
+
+  1.3 URL for the opaque-type assignment reference has changed.
+
+  1.4 In the file "ospf_mpls_te.c", printf formats have changed to
+      avoid compiler warning messages; "%lu" -> "%u", "%lx" -> "%x".
+      Note that this hack depends on OS, compiler and their versions. 
+
+  1.5 One of attached documentation "opaque_lsa.txt" has changed to
+      reflect the latest coding.
+
+2. Feature enhancements
+
+  2.1 Knowing that it is an ugly hack, an "officially unallocated"
+      opaque-type value 0 has newly introduced as a "wildcard",
+      which matches to all opaque-type.
+      This value must not be flooded to the network, of course.
+
+  2.2 The Opaque-core module makes use of newly introduced hooks to
+      dispatch every LSDB change (LSA installation and deletion) to
+      preregistered opaque users.
+      Therefore, by providing appropriate callback functions as new
+      parameters of "ospf_register_opaque_functab()", an opaque user
+      can refer to every LSA instance to be installed into, or to be
+      deleted from, the LSDB.
+
+----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * -----
+Changes 2001.10.31
+
+1. Bug fixes
+
+  1.1 Since each LSA has their own lifetime, they will remain in a
+      routing domain (being stored in LSDB of each router), until their
+      age naturally reach to MaxAge or explicitly being flushed by the
+      originated router. Therefore, if a router restarted with a short
+      downtime, it is possible that previously flooded self-originated
+      LSAs might received if the NSM status is not less than Exchange.
+
+      There were some problems in the way of handling self-originated
+      Opaque-LSAs if they are contained in a received LSUpd message,
+      but not installed to the local LSDB yet.
+      Regardless of some conditions to start originating Opaque-LSAs
+      (there should be at least one opaque-capable full-state neighbor),
+      the function "ospf_flood()" will be called to flood and install
+      this brand-new looking LSA.
+      As the result, when the NSM of an opaque-capable neighbor gets
+      full, internal state inconsistency happens; a user of Opaque-LSA
+      such as MPLS-TE can refer to self-originated LSAs in the local
+      LSDB, but cannot modify their contents...
+
+      Above problems have fixed with a policy "flush it from the whole
+      routing domain and keep silent until the flushing completed".
+      By using this sweeping technique, we can be free from confusion
+      caused by self-originated LSAs received via network. 
+
+  1.2 The function "ospf_opaque_type_name()" contained massive ifdefs
+      corresponding to each "opaque-type".
+      These unnecessary ifdefs are removed completely.
+
+  1.3 In the function "ospf_delete_opaque_functab()", there was an
+      improper loop control that causes illegal memory access.
+      Original coding was "next = nextnode (node)".
+
+  1.4 The function "ospf_mpls_te_ism_change()" could not handle the
+      case when the ISM changes from Waiting to DR/BDR/Other.
+      So, there was a case that even if one of an ISM become
+      operational and MPLS-TE module has started, the corresponding
+      Opaque-LSA cannot be originated.
+
+  1.5 The function "ospf_opaque_lsa_reoriginate_schedule()" did not
+      allow to be called multiple times, simply because handling
+      module for the given "lsa-type & opaque-type" already exists.
+      But this assumption seems to be wrong.
+      Change the policy to allow this function to be called multiple
+      times and let the caller to decide what should do when the
+      corresponding callback function "(* functab->lsa_originator)()"
+      is called.
+
+2. Feature enhancements
+
+  2.1 The global bitmap "opaque" has introduced instead of former flag
+      "OpaqueCapable", to store complex conditions to handle Opaque-LSAs.
+
+  2.2 The MPLS-TE module now referes to "draft-katz-yeung-ospf-traffic
+      -06.txt", no significant changes with 05 version, though.
+
+----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * -----
+Changes 2001.08.03
+
+1. Bug fixes
+
+  1.1 Even if the ospfd started with opaque capability enabled, when
+      the ospfd receives an unknown opaque-type (unregistered by the
+      function "ospf_register_opaque_functab()" beforehand), the LSA
+      was discarded. As the result, only the opaque-LSAs that have
+      commonly registered by opaque-capable ospf routers can be
+      flooded in a routing domain.
+
+      This behavior has fixed so that arbitrary opaque-type LSAs can
+      be flooded among opaque-capable ospf routers.
+      If the ospfd has opaque-LSA capability but disabled at runtime,
+      received opaque-LSAs can be accepted and registered to LSDB as
+      is, but not be flooded to the network; those opaque LSAs will
+      remain in LSDB until explicitly flushed by incoming LSUpd
+      messages with MaxAge, or their age naturally reaches to MaxAge.
+
+  1.2 The function "ospf_register_opaque_functab()" did not check
+      if the entry corresponding to the given "lsa-type, opaque-type"
+      combination already exists or not.
+      This problem has fixed not to allow multiple registration.
+
+  1.3 Since type-11 (AS external) LSAs will be flooded beyond areas,
+      there is little relationship between "struct lsa" and "struct
+      area". More specifically, the pointer address "lsa->area" can
+      be NULL if the lsa-type is 11, thus an illegal memory access
+      will happen. This problem has fixed.
+
+  1.4 When self-originated opaque-LSAs are received via network and
+      if the corresponding opaque-type functions are not available
+      (they have already deleted) at that time, those LSAs were
+      dropped due to "unknown opaque-type" error.
+      After the problem 1.1 has fixed, those "self-originated" LSAs
+      were registered to LSDB and then flooded to the network, even
+      if the processing functions did not exist...
+
+      After all, this problem has fixed so that those LSAs should
+      explicitly be flushed from the routing domain immediately, if
+      the processing functions cannot find at that time.
+
+  1.5 Some typo have fixed.
+
+      --- EXAMPLE ---
+      static int
+      opaque_lsa_originate_callback (list funclist, void *lsa_type_dependent)
+                                                          ^^^^^
+      --- EXAMPLE ---
+
+2. Feature enhancements
+
+  2.1 According to the description of rfc2328 in section 10.8, any
+      change in the router's optional capabilities should trigger
+      the option re-negotiation procedures with neighbors.
+
+      --- EXCERPT ---
+                              If for some reason the router's optional
+        capabilities change, the Database Exchange procedure should be
+        restarted by reverting to neighbor state ExStart.
+      --- EXCERPT ---
+
+      For the opaque-capability changes, this feature has implemented.
+      More specifically, if "ospf opaque-lsa" or "no ospf opaque-lsa"
+      VTY command is given at runtime, all self-originated LSAs will
+      be flushed immediately and then all neighbor status will be
+      forced to ExStart by generating SeqNumberMismatch events.
+
+  2.1 When we change opaque-capability dynamically (ON -> OFF -> ON),
+      there was no trigger at "OFF->ON" timing to reactivate opaque
+      LSA handling modules (such as MPLS-TE) that have once forcibly
+      stopped at "ON->OFF" timing.
+      Now this dynamic reactivation feature has added.
+
+  2.2 The MPLS-TE module now referes to "draft-katz-yeung-ospf-traffic
+      -05.txt", no significant changes with 04 version, though.
+
+----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * -----
+Changes 2001.03.28
+
+  Initial release of Opaque-LSA/MPLS-TE extensions for the zebra/ospfd.
diff --git a/doc/mpls/cli_summary.txt b/doc/mpls/cli_summary.txt
new file mode 100644
index 0000000..c60d0ae
--- /dev/null
+++ b/doc/mpls/cli_summary.txt
@@ -0,0 +1,90 @@
+Summary of CLI commands, expanded for Opaque-LSA/MPLS-TE.
+---------------------------------------------------------
+
+router>
+
+  show ip ospf database (asbr-summary|external|max-age|network|router|self-originate|summary|opaque-link|opaque-area|opaque-external)
+
+  show ip ospf database (asbr-summary|external|network|router|summary|opaque-link|opaque-area|opaque-external) (self-originate|)
+
+  show ip ospf database (asbr-summary|external|network|router|summary|opaque-link|opaque-area|opaque-external) A.B.C.D
+
+  show ip ospf database (asbr-summary|external|network|router|summary|opaque-link|opaque-area|opaque-external) A.B.C.D (self-originate|)
+
+  show ip ospf database (asbr-summary|external|network|router|summary|opaque-link|opaque-area|opaque-external) A.B.C.D adv-router A.B.C.D
+
+  show ip ospf database (asbr-summary|external|network|router|summary|opaque-link|opaque-area|opaque-external) adv-router A.B.C.D
+
+  --> Add database items: opaque-link, opaque-area, opaque-external
+
+  show mpls-te interface [INTERFACE]
+
+  --> Show current MPLS-TE link-TLV parameters.
+      If [INTERFACE] is omitted, all interfaces will be displayed.
+
+  show mpls-te router
+
+  --> Show current MPLS-TE Router-TLV parameters.
+
+router> enable
+router#
+router# configure terminal
+router(config)# interface [INTERFACE]
+router(config-if)#
+
+  mpls-te link max-bw BANDWIDTH
+
+  --> Set MPLS-TE link-TLV parameter: Maximum Bandwidth (Bytes/sec).
+      In integer or floating point format (1000, or 1.0e3)
+
+  mpls-te link max-rsv-bw BANDWIDTH
+
+  --> Set MPLS-TE link-TLV parameter: Maximum Reservable Bandwidth (Bytes/sec).
+      In integer or floating point format (1000, or 1.0e3)
+
+  mpls-te link metric <0-4294967295>
+
+  --> Set MPLS-TE link-TLV parameter: MPLS-TE metric.
+
+  mpls-te link rsc-clsclr BITPATTERN
+
+  --> Set MPLS-TE link-TLV parameter: Resource Class/Color.
+      In 32-bit hexadecimal format, with leading "0x" (0x0 - 0xffffffff)
+
+  mpls-te link unrsv-bw <0-7> BANDWIDTH
+
+  --> Set MPLS-TE link-TLV parameter: Unreserved Bandwidth (Bytes/sec).
+      In integer or floating point format (1000, or 1.0e3)
+
+router(config-if)# exit
+router(config)# router ospf
+router(config-router)#
+
+  mpls-te
+
+  --> Enable MPLS-TE functionality.
+      Note that master-switch "ospf opaque-lsa" must also be specified.
+
+  mpls-te on
+
+  --> Alias of "mpls-te" command.
+
+  mpls-te router-address A.B.C.D
+
+  --> Set MPLS-TE Router-TLV parameter: Router Address.
+
+  no mpls-te
+
+  --> Disable MPLS-TE functionality.
+
+  no ospf opaque-lsa
+
+  --> Disable Opaque-LSAs capability.
+      This node behaves Opaque-incapable node.
+
+  ospf opaque-lsa
+
+  --> Enable Opaque-LSAs capability.
+      This is the master-switch to make this node Opaque-capable.
+
+router# exit
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      |
+      +--------------+                        +-----------+
+      |//////////////|                        |///////////|
+      +--------------+                        +-----------+
diff --git a/doc/mpls/ospfd.conf b/doc/mpls/ospfd.conf
new file mode 100644
index 0000000..6be11f9
--- /dev/null
+++ b/doc/mpls/ospfd.conf
@@ -0,0 +1,75 @@
+!
+! Zebra configuration saved from vty
+!   2001/03/16 22:07:53
+!
+hostname HOSTNAME
+password PASSWORD
+log file /var/log/ospfd.log
+!
+debug ospf ism
+debug ospf nsm
+debug ospf lsa
+debug ospf zebra
+debug ospf event
+debug ospf packet all detail
+!
+!
+interface fxp0
+ ip ospf hello-interval 60
+ ip ospf dead-interval 240
+ mpls-te link metric 999
+ mpls-te link max-bw 1.25e+06
+ mpls-te link max-rsv-bw 1.25e+06
+ mpls-te link unrsv-bw 0 1.25e+06
+ mpls-te link unrsv-bw 1 1.25e+06
+ mpls-te link unrsv-bw 2 1.25e+06
+ mpls-te link unrsv-bw 3 1.25e+06
+ mpls-te link unrsv-bw 4 1.25e+06
+ mpls-te link unrsv-bw 5 1.25e+06
+ mpls-te link unrsv-bw 6 1.25e+06
+ mpls-te link unrsv-bw 7 1.25e+06
+ mpls-te link rsc-clsclr 0xab
+!
+interface de1
+ ip ospf hello-interval 60
+ ip ospf dead-interval 240
+ mpls-te link metric 111
+ mpls-te link max-bw 1.25e+06
+ mpls-te link max-rsv-bw 1.25e+06
+ mpls-te link unrsv-bw 0 1.25e+06
+ mpls-te link unrsv-bw 1 1.25e+06
+ mpls-te link unrsv-bw 2 1.25e+06
+ mpls-te link unrsv-bw 3 1.25e+06
+ mpls-te link unrsv-bw 4 1.25e+06
+ mpls-te link unrsv-bw 5 1.25e+06
+ mpls-te link unrsv-bw 6 1.25e+06
+ mpls-te link unrsv-bw 7 1.25e+06
+ mpls-te link rsc-clsclr 0xcd
+!
+interface de0
+ mpls-te link metric 0
+ mpls-te link rsc-clsclr 0x0
+!
+interface lp0
+ ip ospf network point-to-point
+!
+interface tun0
+ ip ospf network point-to-point
+!
+interface sl0
+ ip ospf network point-to-point
+!
+interface ppp0
+ ip ospf network point-to-point
+!
+interface lo0
+!
+router ospf
+ compatible rfc1583
+ network 192.168.0.0/16 area 1
+ ospf opaque-lsa
+  mpls-te
+  mpls-te router-address 1.2.3.4
+!
+line vty
+!