]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
LS Ack receiving done.
authorOndrej Filip <feela@network.cz>
Wed, 12 Apr 2000 15:20:13 +0000 (15:20 +0000)
committerOndrej Filip <feela@network.cz>
Wed, 12 Apr 2000 15:20:13 +0000 (15:20 +0000)
proto/ospf/lsack.c

index f34f7760cb4ed439a013b31bfb26d00108d6fa81..5f82970432f7d658b5447ce376e4af0ab7d0969e 100644 (file)
@@ -20,9 +20,10 @@ ospf_lsack_rx(struct ospf_lsack_packet *ps, struct proto *p,
 {
   u32 nrid, myrid;
   struct ospf_neighbor *n;
-  struct ospf_lsreq_header *lsh;
+  struct ospf_lsa_header lsa,*plsa;
   int length;
-  u8 i;
+  u16 nolsa,i;
+  struct top_hash_entry *en;
 
   nrid=ntohl(ps->ospf_packet.routerid);
 
@@ -34,7 +35,28 @@ ospf_lsack_rx(struct ospf_lsack_packet *ps, struct proto *p,
       nrid);
     return ;
   }
-  /* FIXME Go on! */
+  
+  nolsa=(ntohs(ps->ospf_packet.length)-sizeof(struct ospf_lsack_packet))/
+    sizeof(struct ospf_lsa_header);
+  DBG("Received %d lsa\n",nolsa);
+  plsa=( struct ospf_lsa_header *)(ps+1);
+
+  for(i=0;i<nolsa;i++)
+  {
+    ntohlsah(plsa+i,&lsa);
+    if((en=ospf_hash_find_header(n->lsrth,&lsa))==NULL) continue;
+
+    if(lsa_comp(&lsa,&en->lsa)!=CMP_SAME)
+    {
+      log("Strange LS acknoledgement from %d\n",n->rid);
+      continue;
+    }
+
+    DBG("Deleting LS Id: %u RT: % Type: %u from LS Retl for neighbor %u\n",
+      lsa.id,lsa.rt,lsa.type,n->rid);
+    s_rem_node(SNODE en);
+    ospf_hash_delete(n->lsrth,en);
+  }  
 }
 
 void