diff options
-rw-r--r-- | doc/mpls/ChangeLog.opaque.txt | 179 | ||||
-rw-r--r-- | doc/mpls/cli_summary.txt | 90 | ||||
-rw-r--r-- | doc/mpls/opaque_lsa.txt | 365 | ||||
-rw-r--r-- | doc/mpls/ospfd.conf | 75 |
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 +! |