2003-03-25 Paul Jakma <paul@dishone.st>

	* sync to latest zebra CVS
	* spec file: updated and added define for ospf-api/client

NB: OSPF-API has been broken by the zebra.org changes, which
has added struct ospf * as a new arg to many functions
diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c
index 6e92bb2..1586a3a 100644
--- a/ospfd/ospf_spf.c
+++ b/ospfd/ospf_spf.c
@@ -365,39 +365,41 @@
 	      
 	      if (l->m[0].type == LSA_LINK_TYPE_POINTOPOINT)
 		{
-		  /* check for PtMP, signified by PtP link V->W with link_data our PtMP interface */
-                  oi = ospf_if_is_configured(&l->link_data);
+		  /* Check for PtMP, signified by PtP link V->W
+		     with link_data our PtMP interface. */
+                  oi = ospf_if_is_configured (area->ospf, &l->link_data);
                   if (oi && oi->type == OSPF_IFTYPE_POINTOMULTIPOINT)
 		    {
-		    
-		      struct prefix_ipv4 * la = prefix_ipv4_new();
-		      la->prefixlen = oi->address->prefixlen;
-		      
-		      /* we link to them on PtMP interface - find the interface on w */
+		      struct prefix_ipv4 la;
+		      la.prefixlen = oi->address->prefixlen;
+		      /* We link to them on PtMP interface
+			 - find the interface on w */
 		      while ((l2 = ospf_get_next_link (w, v, l2)))
 			{
-			  la->prefix = l2->link_data;
+			  la.prefix = l2->link_data;
 			  
-			  if (prefix_cmp((struct prefix *)la, oi->address) == 0)
+			  if (prefix_cmp ((struct prefix *)&la,
+					  oi->address) == 0)
 			    /* link_data is on our PtMP network */
 			    break;
-			  
 			}
 		    }
 		  else
 		    {                                
 		      while ((l2 = ospf_get_next_link (w, v, l2)))
 			{
-			  oi = ospf_if_is_configured (&(l2->link_data));
+			  oi = ospf_if_is_configured (area->ospf,
+						      &(l2->link_data));
 			  
 			  if (oi == NULL)
 			    continue;
 			  
-			  if (!IPV4_ADDR_SAME (&oi->address->u.prefix4, &l->link_data))
+			  if (!IPV4_ADDR_SAME (&oi->address->u.prefix4,
+					       &l->link_data))
 			    continue;
 			  
 			  break;
-                      }
+			}
 		    }
 		  
 		  if (oi && l2)
@@ -414,7 +416,7 @@
 	{
 	  while ((l = ospf_get_next_link (v, w, l)))
 	    {
-	      oi = ospf_if_is_configured (&(l->link_data));
+	      oi = ospf_if_is_configured (area->ospf, &(l->link_data));
 	      if (oi)
 		{
 		  nh = vertex_nexthop_new (v);
@@ -995,7 +997,7 @@
   /* Increment SPF Calculation Counter. */
   area->spf_calculation++;
 
-  ospf_top->ts_spf = time (NULL);
+  area->ospf->ts_spf = time (NULL);
 
   if (IS_DEBUG_OSPF_EVENT)
     zlog_info ("ospf_spf_calculate: Stop");
@@ -1003,32 +1005,30 @@
 
 /* Timer for SPF calculation. */
 int
-ospf_spf_calculate_timer (struct thread *t)
+ospf_spf_calculate_timer (struct thread *thread)
 {
+  struct ospf *ospf = THREAD_ARG (thread);
   struct route_table *new_table, *new_rtrs;
-  struct ospf *ospf;
-  /* struct ospf_area *area; */
   listnode node;
 
   if (IS_DEBUG_OSPF_EVENT)
     zlog_info ("SPF: Timer (SPF calculation expire)");
   
-  ospf = THREAD_ARG (t);
   ospf->t_spf_calc = NULL;
 
   /* Allocate new table tree. */
   new_table = route_table_init ();
   new_rtrs  = route_table_init ();
 
-  ospf_vl_unapprove ();
+  ospf_vl_unapprove (ospf);
 
   /* Calculate SPF for each area. */
   for (node = listhead (ospf->areas); node; node = nextnode (node))
     ospf_spf_calculate (node->data, new_table, new_rtrs);
 
-  ospf_vl_shut_unapproved ();
+  ospf_vl_shut_unapproved (ospf);
 
-  ospf_ia_routing (new_table, new_rtrs);
+  ospf_ia_routing (ospf, new_table, new_rtrs);
 
   ospf_prune_unreachable_networks (new_table);
   ospf_prune_unreachable_routers (new_rtrs);
@@ -1038,26 +1038,26 @@
   /* If new Router Route is installed,
      then schedule re-calculate External routes. */
   if (1)
-    ospf_ase_calculate_schedule ();
+    ospf_ase_calculate_schedule (ospf);
 
-  ospf_ase_calculate_timer_add ();
+  ospf_ase_calculate_timer_add (ospf);
 
   /* Update routing table. */
-  ospf_route_install (new_table);
+  ospf_route_install (ospf, new_table);
 
   /* Update ABR/ASBR routing table */
-  if (ospf_top->old_rtrs)
+  if (ospf->old_rtrs)
     {
       /* old_rtrs's node holds linked list of ospf_route. --kunihiro. */
-      /* ospf_route_delete (ospf_top->old_rtrs); */
-      ospf_rtrs_free (ospf_top->old_rtrs);
+      /* ospf_route_delete (ospf->old_rtrs); */
+      ospf_rtrs_free (ospf->old_rtrs);
     }
 
-  ospf_top->old_rtrs = ospf_top->new_rtrs;
-  ospf_top->new_rtrs = new_rtrs;
+  ospf->old_rtrs = ospf->new_rtrs;
+  ospf->new_rtrs = new_rtrs;
 
   if (OSPF_IS_ABR) 
-    ospf_abr_task (new_table, new_rtrs);
+    ospf_abr_task (ospf);
 
   if (IS_DEBUG_OSPF_EVENT)
     zlog_info ("SPF: calculation complete");
@@ -1068,7 +1068,7 @@
 /* Add schedule for SPF calculation.  To avoid frequenst SPF calc, we
    set timer for SPF calc. */
 void
-ospf_spf_calculate_schedule ()
+ospf_spf_calculate_schedule (struct ospf *ospf)
 {
   time_t ht, delay;
 
@@ -1076,34 +1076,34 @@
     zlog_info ("SPF: calculation timer scheduled");
 
   /* OSPF instance does not exist. */
-  if (!ospf_top)
+  if (ospf == NULL)
     return;
 
   /* SPF calculation timer is already scheduled. */
-  if (ospf_top->t_spf_calc)
+  if (ospf->t_spf_calc)
     {
       if (IS_DEBUG_OSPF_EVENT)
 	zlog_info ("SPF: calculation timer is already scheduled: %p",
-		   ospf_top->t_spf_calc);
+		   ospf->t_spf_calc);
       return;
     }
 
-  ht = time (NULL) - ospf_top->ts_spf;
+  ht = time (NULL) - ospf->ts_spf;
 
   /* Get SPF calculation delay time. */
-  if (ht < ospf_top->spf_holdtime)
+  if (ht < ospf->spf_holdtime)
     {
-      if (ospf_top->spf_holdtime - ht < ospf_top->spf_delay)
-	delay = ospf_top->spf_delay;
+      if (ospf->spf_holdtime - ht < ospf->spf_delay)
+	delay = ospf->spf_delay;
       else
-	delay = ospf_top->spf_holdtime - ht;
+	delay = ospf->spf_holdtime - ht;
     }
   else
-    delay = ospf_top->spf_delay;
+    delay = ospf->spf_delay;
 
   if (IS_DEBUG_OSPF_EVENT)
     zlog_info ("SPF: calculation timer delay = %ld", delay);
-  ospf_top->t_spf_calc =
-    thread_add_timer (master, ospf_spf_calculate_timer, ospf_top, delay);
+  ospf->t_spf_calc =
+    thread_add_timer (master, ospf_spf_calculate_timer, ospf, delay);
 }