summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorpaul <paul>2002-12-13 21:57:32 +0000
committerpaul <paul>2002-12-13 21:57:32 +0000
commit8bddafc9d468427b7ff5d0cc80a6cf5827db1045 (patch)
tree0a9312a9283af1f430f864c77723661cfeb95ce9 /doc
parent0efa4d57e3abef27cccdc571b5fb8c226b7b3b64 (diff)
"Masahiko Endo" < endo @ suri . co . jp >
- [zebra 15475] - MPLS-TE docs
Diffstat (limited to 'doc')
-rw-r--r--doc/mpls/ChangeLog.opaque.txt179
-rw-r--r--doc/mpls/cli_summary.txt90
-rw-r--r--doc/mpls/opaque_lsa.txt365
-rw-r--r--doc/mpls/ospfd.conf75
4 files changed, 709 insertions, 0 deletions
diff --git a/doc/mpls/ChangeLog.opaque.txt b/doc/mpls/ChangeLog.opaque.txt
new file mode 100644
index 00000000..68ddf4c8
--- /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 00000000..c60d0aed
--- /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 00000000..7d5c7fed
--- /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 00000000..6be11f91
--- /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
+!