⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 patch2.13

📁 BCAST Implementation for NS2
💻 13
字号:
diff -X exclude_files -Nabur ospfd2.12/src/ifcfsm.C ospfd2.13/src/ifcfsm.C--- ospfd2.12/src/ifcfsm.C	Thu Nov 15 13:04:46 2001+++ ospfd2.13/src/ifcfsm.C	Tue Nov 20 13:32:58 2001@@ -149,8 +149,11 @@     // Newly up or down     if (if_ostate == IFS_DOWN) 	if_area->IfcChange(1);-    else if (if_state == IFS_DOWN)+    else if (if_state == IFS_DOWN) {+        // Delete link-local-LSAs+        delete_lsdb(); 	if_area->IfcChange(-1);+    }     // Want AllDRouters now?     if (if_state > IFS_OTHER && if_ostate <= IFS_OTHER) 	ospf->app_join(if_phyint, AllDRouters);diff -X exclude_files -Nabur ospfd2.12/src/lsa.h ospfd2.13/src/lsa.h--- ospfd2.12/src/lsa.h	Thu Nov 15 13:04:46 2001+++ ospfd2.13/src/lsa.h	Tue Nov 20 13:32:58 2001@@ -103,6 +103,7 @@      friend class OSPF;     friend class SpfNbr;+    friend class SpfIfc;     friend class SpfArea;     friend class LsaListIterator;     friend class LocalOrigTimer;diff -X exclude_files -Nabur ospfd2.12/src/lsdb.C ospfd2.13/src/lsdb.C--- ospfd2.12/src/lsdb.C	Thu Nov 15 13:04:46 2001+++ ospfd2.13/src/lsdb.C	Tue Nov 20 13:32:58 2001@@ -301,17 +301,28 @@ 	    lsa_flush(lsap); } -/* Flush all LSAs from an area's link-state database.+/* Delete LSAs from an area's link-state database. This is done+ * silently, without reflooding, as this routine is only called when+ * there are no operational interfaces left connecting to the+ * area (this could be as a result of something like a change in+ * the area's stub status). However, we do inform local applications+ * that Opaque-LSAs have been deleted.+ *+ * This routine must perform the logic included in OSPF::DeleteLSA()+ * for each LSA, although we choose to do it here in a more+ * efficient manner.+ *  * All AS-external-LSAs are left alone, as they belong to all- * areas. This happens when, for example, an area's- * stub status changes, or the last interface to an area is- * deleted.+ * areas. Link-local-LSAs are deleted in SpfIfc::delete_lsdb().  */ -void SpfArea::flush_lsdb(bool everything)+void SpfArea::delete_lsdb()  {     byte lstype;+    SpfArea *bb;++    bb = ospf->FindArea(BACKBONE);      for (lstype = 0; lstype <= MAX_LST; lstype++) { 	AVLtree *tree;@@ -322,14 +333,63 @@ 	if (!(tree = ospf->FindLSdb(0, this, lstype))) 	    continue; 	iter = new AVLsearch(tree);-	while ((lsap = (LSA *)iter->next()))-	    if (everything || lsap->adv_rtr() == ospf->my_id())-		lsa_flush(lsap);+	while ((lsap = (LSA *)iter->next())) {+	    lsap->stop_aging();+	    ospf->UnParseLSA(lsap);+	    switch(lstype) {+  	      case LST_AREA_OPQ:+		// Notify applications of Opaque-LSA deletion?+		if (lsap->lsa_rcvage != MaxAge) {+		    lsap->lsa_rcvage = MaxAge;+		    ospf->upload_opq(lsap);+		}+		break;+	      case LST_GM:+		if (bb && bb->n_active_if != 0)+		    bb->grp_orig(lsap->ls_id(), 0);+		break;+	      default:+		break;+	    }+	} 	delete iter;+	// This frees the LSAs, unless they are on some list+	tree->clear();+    }++    // Reset database checksum+    db_xsum = 0;+}++/* Silently delete all link-local Opaque-LSAs. Analogue to+ * SpfArea::delete_lsdb(), this is only called when the+ * interface becomes inoperational.+ */++void SpfIfc::delete_lsdb()++{+    AVLtree *tree;+    AVLsearch *iter;+    LSA *lsap;++    tree = ospf->FindLSdb(this, if_area, LST_LINK_OPQ);+    iter = new AVLsearch(tree);+    while ((lsap = (LSA *)iter->next())) {+	lsap->stop_aging();+	ospf->UnParseLSA(lsap);+	// Notify applications of Opaque-LSA deletion?+	if (lsap->lsa_rcvage != MaxAge) {+	    lsap->lsa_rcvage = MaxAge;+	    ospf->upload_opq(lsap);     }+    }+    delete iter;+    // This frees the LSAs, unless they are on some list+    tree->clear(); -    // Get rid of things from MaxAge list immediately-    ospf->free_maxage_lsas();+    // Reset database checksum+    db_xsum = 0; }  /* Parse an LSA. Call the LSA-specific parse routine. If thatdiff -X exclude_files -Nabur ospfd2.12/src/ospf.h ospfd2.13/src/ospf.h--- ospfd2.12/src/ospf.h	Thu Nov 15 13:04:46 2001+++ ospfd2.13/src/ospf.h	Tue Nov 20 13:32:58 2001@@ -329,7 +329,7 @@     // Version numbers     enum { 	vmajor = 2,	// Major version number-	vminor = 12,	// Minor version number+	vminor = 13,	// Minor version number     };      // Entry points into the OSPF codediff -X exclude_files -Nabur ospfd2.12/src/spfarea.C ospfd2.13/src/spfarea.C--- ospfd2.12/src/spfarea.C	Thu Nov 15 13:04:46 2001+++ ospfd2.13/src/spfarea.C	Tue Nov 20 13:32:58 2001@@ -169,7 +169,7 @@     while ((ip = if_iter.get_next())) 	delete ip;     // Delete database-    flush_lsdb();+    delete_lsdb();     // Remove ABRs     while ((abr = (RTRrte *) abr_iter.next())) { 	abr_tbl.remove(abr);@@ -283,7 +283,7 @@     }     else if (n_active_if == 0) { 	ospf->rl_orig();-	flush_lsdb(true);+	delete_lsdb();     } } @@ -330,9 +330,10 @@     // Take down interfaces to area     while ((ip = iter.get_next())) 	ip->run_fsm(IFE_DOWN);-    // Flush all our self-originated LSAs in area-    flush_lsdb();+    // Delete entire link-state database+    delete_lsdb();     // Bring up interfaces that are physically operational+    // This will re-create the area's link-state database     iter.reset();     while ((ip = iter.get_next())) { 	if (sys->phy_operational(ip->if_phyint))diff -X exclude_files -Nabur ospfd2.12/src/spfarea.h ospfd2.13/src/spfarea.h--- ospfd2.12/src/spfarea.h	Thu Nov 15 13:04:46 2001+++ ospfd2.13/src/spfarea.h	Tue Nov 20 13:32:58 2001@@ -97,7 +97,7 @@     void asbr_orig(class ASBRrte *rte, int forced=0);     bool needs_indication();     void grp_orig(InAddr group, int forced=0);-    void flush_lsdb(bool everything=false);+    void delete_lsdb();     void a_flush_donotage();     void reinitialize();     void generate_summaries();diff -X exclude_files -Nabur ospfd2.12/src/spfifc.h ospfd2.13/src/spfifc.h--- ospfd2.12/src/spfifc.h	Thu Nov 15 13:04:46 2001+++ ospfd2.13/src/spfifc.h	Tue Nov 20 13:32:58 2001@@ -218,6 +218,7 @@     SpfArea *transit_area();     rtid_t *vl_endpt();     void AddTypesToList(byte lstype, LsaList *lp);+    void delete_lsdb();      // Virtual functions     virtual void clear_config();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -