paul | 7d7ddde | 2003-02-03 16:31:16 +0000 | [diff] [blame] | 1 | ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- |
| 2 | Changes 2002.12.20 |
| 3 | |
| 4 | 1. Bug fixes |
| 5 | |
| 6 | 1.1 When an opaque LSA is being removed from (or added to) the LSDB, |
| 7 | it does not mean a change in network topology. Therefore, SPF |
| 8 | recalculation should not be triggered in that case. |
| 9 | There was an assertion failure problem "assert (rn && rn->info)" |
| 10 | inside the function "ospf_ase_incremental_update()", because |
| 11 | the upper function "ospf_lsa_maxage_walker_remover()" called it |
| 12 | when a type-11 opaque LSA is removed due to MaxAge. |
| 13 | |
| 14 | 1.2 Type-9 LSA is defined to have "link-local" flooding scope. |
| 15 | In the Database exchange procedure with a new neighbor, a type-9 |
| 16 | LSA was added in the database summary of a DD message, even if |
| 17 | the link is different from the one that have bound to. |
| 18 | |
| 19 | 2. Feature enhancements |
| 20 | |
| 21 | 2.1 Though a "wildcard" concept to handle type-9/10/11 LSAs altogether |
| 22 | has introduced about a year ago, it was only a symbol definition |
| 23 | and actual handling mechanism was not implemented. Now it works. |
| 24 | |
| 25 | ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- |
| 26 | Changes 2002.7.8 |
| 27 | |
| 28 | 1. Bug fixes |
| 29 | |
| 30 | 1.1 When "ospf_delete_opaque_functab()" is called, internal structure |
| 31 | "oipt" remain unfreed. If register/delete functab is repeated, |
| 32 | illegal memory access happens due to this "oipt". |
| 33 | |
| 34 | 1.2 In "free_opaque_info_per_id()", there was a crucial typo which |
| 35 | ignores a condition test. |
| 36 | |
| 37 | "if (oipi->lsa != NULL);" <-- semicolon! |
| 38 | |
| 39 | 2. Feature enhancements |
| 40 | |
| 41 | None. |
| 42 | |
| 43 | ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- |
| 44 | Changes 2001.12.03 |
| 45 | |
| 46 | 1. Bug fixes |
| 47 | |
| 48 | 1.1 Though a new member "oi" has added to "struct ospf_lsa" to control |
| 49 | flooding scope of type-9 Opaque-LSAs, the value was always NULL |
| 50 | because no one set it. |
| 51 | |
| 52 | 1.2 In the function "show_ip_ospf_database_summary()" and "show_lsa_ |
| 53 | detail_adv_router()", VTY output for type-11 Opaque-LSAs did not |
| 54 | work properly. |
| 55 | |
| 56 | 1.3 URL for the opaque-type assignment reference has changed. |
| 57 | |
| 58 | 1.4 In the file "ospf_mpls_te.c", printf formats have changed to |
| 59 | avoid compiler warning messages; "%lu" -> "%u", "%lx" -> "%x". |
| 60 | Note that this hack depends on OS, compiler and their versions. |
| 61 | |
| 62 | 1.5 One of attached documentation "opaque_lsa.txt" has changed to |
| 63 | reflect the latest coding. |
| 64 | |
| 65 | 2. Feature enhancements |
| 66 | |
| 67 | 2.1 Knowing that it is an ugly hack, an "officially unallocated" |
| 68 | opaque-type value 0 has newly introduced as a "wildcard", |
| 69 | which matches to all opaque-type. |
| 70 | This value must not be flooded to the network, of course. |
| 71 | |
| 72 | 2.2 The Opaque-core module makes use of newly introduced hooks to |
| 73 | dispatch every LSDB change (LSA installation and deletion) to |
| 74 | preregistered opaque users. |
| 75 | Therefore, by providing appropriate callback functions as new |
| 76 | parameters of "ospf_register_opaque_functab()", an opaque user |
| 77 | can refer to every LSA instance to be installed into, or to be |
| 78 | deleted from, the LSDB. |
| 79 | |
| 80 | ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- |
| 81 | Changes 2001.10.31 |
| 82 | |
| 83 | 1. Bug fixes |
| 84 | |
| 85 | 1.1 Since each LSA has their own lifetime, they will remain in a |
| 86 | routing domain (being stored in LSDB of each router), until their |
| 87 | age naturally reach to MaxAge or explicitly being flushed by the |
| 88 | originated router. Therefore, if a router restarted with a short |
| 89 | downtime, it is possible that previously flooded self-originated |
| 90 | LSAs might received if the NSM status is not less than Exchange. |
| 91 | |
| 92 | There were some problems in the way of handling self-originated |
| 93 | Opaque-LSAs if they are contained in a received LSUpd message, |
| 94 | but not installed to the local LSDB yet. |
| 95 | Regardless of some conditions to start originating Opaque-LSAs |
| 96 | (there should be at least one opaque-capable full-state neighbor), |
| 97 | the function "ospf_flood()" will be called to flood and install |
| 98 | this brand-new looking LSA. |
| 99 | As the result, when the NSM of an opaque-capable neighbor gets |
| 100 | full, internal state inconsistency happens; a user of Opaque-LSA |
| 101 | such as MPLS-TE can refer to self-originated LSAs in the local |
| 102 | LSDB, but cannot modify their contents... |
| 103 | |
| 104 | Above problems have fixed with a policy "flush it from the whole |
| 105 | routing domain and keep silent until the flushing completed". |
| 106 | By using this sweeping technique, we can be free from confusion |
| 107 | caused by self-originated LSAs received via network. |
| 108 | |
| 109 | 1.2 The function "ospf_opaque_type_name()" contained massive ifdefs |
| 110 | corresponding to each "opaque-type". |
| 111 | These unnecessary ifdefs are removed completely. |
| 112 | |
| 113 | 1.3 In the function "ospf_delete_opaque_functab()", there was an |
| 114 | improper loop control that causes illegal memory access. |
| 115 | Original coding was "next = nextnode (node)". |
| 116 | |
| 117 | 1.4 The function "ospf_mpls_te_ism_change()" could not handle the |
| 118 | case when the ISM changes from Waiting to DR/BDR/Other. |
| 119 | So, there was a case that even if one of an ISM become |
| 120 | operational and MPLS-TE module has started, the corresponding |
| 121 | Opaque-LSA cannot be originated. |
| 122 | |
| 123 | 1.5 The function "ospf_opaque_lsa_reoriginate_schedule()" did not |
| 124 | allow to be called multiple times, simply because handling |
| 125 | module for the given "lsa-type & opaque-type" already exists. |
| 126 | But this assumption seems to be wrong. |
| 127 | Change the policy to allow this function to be called multiple |
| 128 | times and let the caller to decide what should do when the |
| 129 | corresponding callback function "(* functab->lsa_originator)()" |
| 130 | is called. |
| 131 | |
| 132 | 2. Feature enhancements |
| 133 | |
| 134 | 2.1 The global bitmap "opaque" has introduced instead of former flag |
| 135 | "OpaqueCapable", to store complex conditions to handle Opaque-LSAs. |
| 136 | |
| 137 | 2.2 The MPLS-TE module now referes to "draft-katz-yeung-ospf-traffic |
| 138 | -06.txt", no significant changes with 05 version, though. |
| 139 | |
| 140 | ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- |
| 141 | Changes 2001.08.03 |
| 142 | |
| 143 | 1. Bug fixes |
| 144 | |
| 145 | 1.1 Even if the ospfd started with opaque capability enabled, when |
| 146 | the ospfd receives an unknown opaque-type (unregistered by the |
| 147 | function "ospf_register_opaque_functab()" beforehand), the LSA |
| 148 | was discarded. As the result, only the opaque-LSAs that have |
| 149 | commonly registered by opaque-capable ospf routers can be |
| 150 | flooded in a routing domain. |
| 151 | |
| 152 | This behavior has fixed so that arbitrary opaque-type LSAs can |
| 153 | be flooded among opaque-capable ospf routers. |
| 154 | If the ospfd has opaque-LSA capability but disabled at runtime, |
| 155 | received opaque-LSAs can be accepted and registered to LSDB as |
| 156 | is, but not be flooded to the network; those opaque LSAs will |
| 157 | remain in LSDB until explicitly flushed by incoming LSUpd |
| 158 | messages with MaxAge, or their age naturally reaches to MaxAge. |
| 159 | |
| 160 | 1.2 The function "ospf_register_opaque_functab()" did not check |
| 161 | if the entry corresponding to the given "lsa-type, opaque-type" |
| 162 | combination already exists or not. |
| 163 | This problem has fixed not to allow multiple registration. |
| 164 | |
| 165 | 1.3 Since type-11 (AS external) LSAs will be flooded beyond areas, |
| 166 | there is little relationship between "struct lsa" and "struct |
| 167 | area". More specifically, the pointer address "lsa->area" can |
| 168 | be NULL if the lsa-type is 11, thus an illegal memory access |
| 169 | will happen. This problem has fixed. |
| 170 | |
| 171 | 1.4 When self-originated opaque-LSAs are received via network and |
| 172 | if the corresponding opaque-type functions are not available |
| 173 | (they have already deleted) at that time, those LSAs were |
| 174 | dropped due to "unknown opaque-type" error. |
| 175 | After the problem 1.1 has fixed, those "self-originated" LSAs |
| 176 | were registered to LSDB and then flooded to the network, even |
| 177 | if the processing functions did not exist... |
| 178 | |
| 179 | After all, this problem has fixed so that those LSAs should |
| 180 | explicitly be flushed from the routing domain immediately, if |
| 181 | the processing functions cannot find at that time. |
| 182 | |
| 183 | 1.5 Some typo have fixed. |
| 184 | |
| 185 | --- EXAMPLE --- |
| 186 | static int |
| 187 | opaque_lsa_originate_callback (list funclist, void *lsa_type_dependent) |
| 188 | ^^^^^ |
| 189 | --- EXAMPLE --- |
| 190 | |
| 191 | 2. Feature enhancements |
| 192 | |
| 193 | 2.1 According to the description of rfc2328 in section 10.8, any |
| 194 | change in the router's optional capabilities should trigger |
| 195 | the option re-negotiation procedures with neighbors. |
| 196 | |
| 197 | --- EXCERPT --- |
| 198 | If for some reason the router's optional |
| 199 | capabilities change, the Database Exchange procedure should be |
| 200 | restarted by reverting to neighbor state ExStart. |
| 201 | --- EXCERPT --- |
| 202 | |
| 203 | For the opaque-capability changes, this feature has implemented. |
| 204 | More specifically, if "ospf opaque-lsa" or "no ospf opaque-lsa" |
| 205 | VTY command is given at runtime, all self-originated LSAs will |
| 206 | be flushed immediately and then all neighbor status will be |
| 207 | forced to ExStart by generating SeqNumberMismatch events. |
| 208 | |
| 209 | 2.1 When we change opaque-capability dynamically (ON -> OFF -> ON), |
| 210 | there was no trigger at "OFF->ON" timing to reactivate opaque |
| 211 | LSA handling modules (such as MPLS-TE) that have once forcibly |
| 212 | stopped at "ON->OFF" timing. |
| 213 | Now this dynamic reactivation feature has added. |
| 214 | |
| 215 | 2.2 The MPLS-TE module now referes to "draft-katz-yeung-ospf-traffic |
| 216 | -05.txt", no significant changes with 04 version, though. |
| 217 | |
| 218 | ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- * ----- |
| 219 | Changes 2001.03.28 |
| 220 | |
| 221 | Initial release of Opaque-LSA/MPLS-TE extensions for the zebra/ospfd. |