]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
'struct proto' removed
authorOndrej Filip <feela@network.cz>
Fri, 4 Jun 2004 20:41:02 +0000 (20:41 +0000)
committerOndrej Filip <feela@network.cz>
Fri, 4 Jun 2004 20:41:02 +0000 (20:41 +0000)
Finally, I found the bug reported by Andreas Steinmetz. FIXED.

proto/ospf/lsack.c
proto/ospf/lsupd.c
proto/ospf/lsupd.h
proto/ospf/packet.c

index fb0844dda5d273efc2929ee361d1c997d9d875ee..cb27ec835e980bf1a40b96fce4af41a10f3fd309 100644 (file)
@@ -162,9 +162,9 @@ ospf_lsack_receive(struct ospf_lsack_packet *ps,
   {
     ntohlsah(plsa + i, &lsa);
     if ((en = ospf_hash_find_header(n->lsrth, &lsa)) == NULL)
-      continue;
+      continue;                /* pg 155 */
 
-    if (lsa_comp(&lsa, &en->lsa) != CMP_SAME)
+    if (lsa_comp(&lsa, &en->lsa) != CMP_SAME)  /* pg 156 */
     {
       if ((lsa.sn == LSA_MAXSEQNO) && (lsa.age == LSA_MAXAGE))
        continue;
index 752ba36dd4097acb245cb59caa07d14b0747f801..c04f16bce5d736c84d5676c3897a3e8e45015c50 100644 (file)
@@ -261,22 +261,21 @@ ospf_lsupd_tx_list(struct ospf_neighbor *n, list *l)
 }
 
 void
-ospf_lsupd_rx(struct ospf_lsupd_packet *ps, struct proto *p,
+ospf_lsupd_receive(struct ospf_lsupd_packet *ps,
   struct ospf_iface *ifa, u16 size)
 {
-  u32 area,nrid,myrid;
+  u32 area,nrid;
   struct ospf_neighbor *n,*ntmp;
   struct ospf_lsa_header *lsa;
   struct ospf_area *oa;
-  struct proto_ospf *po=(struct proto_ospf *)p;
+  struct proto_ospf *po=ifa->proto;
+  struct proto *p = (struct proto *)po;
   u16 length;
   u8 i;
+  int sendreq = 1;
 
   nrid=ntohl(ps->ospf_packet.routerid);
 
-  myrid=p->cf->global->router_id;
-
-
   if((n=find_neigh(ifa, nrid))==NULL)
   {
     OSPF_TRACE(D_PACKETS, "Received lsupd from unknown neighbor! (%I)",
@@ -424,6 +423,7 @@ ospf_lsupd_rx(struct ospf_lsupd_packet *ps, struct proto *p,
       if(lsadb && ((now-lsadb->inst_t)<=MINLSARRIVAL)) /* FIXME: test for flooding? */
       {
         DBG("I got it in less that MINLSARRIVAL\n");
+        sendreq = 0;
        continue;
       }
         
@@ -496,6 +496,7 @@ ospf_lsupd_rx(struct ospf_lsupd_packet *ps, struct proto *p,
         /* pg145 (7b) */
         ospf_lsack_enqueue(n, lsa, ACKL_DIRECT);
       }
+      sendreq = 0;
       continue;
     }
 
@@ -520,9 +521,9 @@ ospf_lsupd_rx(struct ospf_lsupd_packet *ps, struct proto *p,
   /* Send direct LSAs */
   ospf_lsack_send(n, ACKL_DIRECT);
 
-  if(n->state==NEIGHBOR_LOADING)
+  if(sendreq && (n->state==NEIGHBOR_LOADING))
   {
-    ospf_lsreq_send(n);        /* Send me another part of database */
+    ospf_lsreq_send(n);        /* Ask for another part of neighbor's database */
   }
 }
 
index 61dd5d0e37f3872956041c2e4f38d49155aee916..5bbc97aba404e4d35c773be8ba17440c0696ceb8 100644 (file)
@@ -11,7 +11,7 @@
 #define _BIRD_OSPF_LSUPD_H_
 
 void ospf_lsupd_tx_list(struct ospf_neighbor *n, list *l);
-void ospf_lsupd_rx(struct ospf_lsupd_packet *ps, struct proto *p,
+void ospf_lsupd_receive(struct ospf_lsupd_packet *ps,
   struct ospf_iface *ifa, u16 size);
 int flood_lsa(struct ospf_neighbor *n, struct ospf_lsa_header *hn,
   struct ospf_lsa_header *hh, struct proto_ospf *po, struct ospf_iface *iff,
index ce7a62921f13055f4c74033395703d922ddd6b52..63a95435cc6dfa7fe2b110b53f9f760d345097c8 100644 (file)
@@ -188,7 +188,7 @@ ospf_rx_hook (sock *sk, int size)
       break;
     case LSUPD_P:
       DBG ("%s: Link state update received.\n", p->name);
-      ospf_lsupd_rx ((struct ospf_lsupd_packet *) ps, p, ifa, size);
+      ospf_lsupd_receive((struct ospf_lsupd_packet *) ps, ifa, size);
       break;
     case LSACK_P:
       DBG ("%s: Link state ack received.\n", p->name);