switch(n->state)
{
case NEIGHBOR_EXSTART: /* Send empty packets */
+ n->myimms.bit.i=1;
pkt=(struct ospf_dbdes_packet *)(ifa->ip_sk->tbuf);
op=(struct ospf_packet *)pkt;
fill_ospf_pkt_hdr(ifa, pkt, DBDES_P);
break;
case NEIGHBOR_EXCHANGE:
+ n->myimms.bit.i=0;
+
if(((n->myimms.bit.ms) && (n->dds==n->ddr+1)) ||
((!(n->myimms.bit.ms)) && (n->dds==n->ddr)))
{
{
ospf_neigh_sm(n, INM_EXDONE);
if(n->myimms.bit.ms) tm_stop(n->rxmt_timer);
+ else tm_start(n->rxmt_timer,ifa->rxmtint);
}
}
break;
break;
}
}
-
+ if(ps->imms.bit.i) break;
case NEIGHBOR_EXCHANGE:
if((ps->imms.byte==n->imms.byte) && (ps->options==n->options) &&
(ntohl(ps->ddseq)==n->ddr))
if(ps->imms.bit.ms!=n->imms.bit.ms) /* M/S bit differs */
{
- DBG("SEQMIS-BIT-MS\n");
+ log("SEQMIS-BIT-MS\n");
ospf_neigh_sm(n, INM_SEQMIS);
break;
}
if(ps->imms.bit.i) /* I bit is set */
{
- DBG("SEQMIS-BIT-I\n");
+ log("SEQMIS-BIT-I\n");
ospf_neigh_sm(n, INM_SEQMIS);
break;
}
if(ps->options!=n->options) /* Options differs */
{
- DBG("SEQMIS-OPT\n");
+ log("SEQMIS-OPT\n");
ospf_neigh_sm(n, INM_SEQMIS);
break;
}
{
if(ntohl(ps->ddseq)!=n->dds) /* MASTER */
{
- DBG("SEQMIS-MASTER\n");
+ log("SEQMIS-MASTER\n");
ospf_neigh_sm(n, INM_SEQMIS);
break;
}
{
if(ntohl(ps->ddseq)!=(n->dds+1)) /* SLAVE */
{
- DBG("SEQMIS-SLAVE\n");
+ log("SEQMIS-SLAVE\n");
ospf_neigh_sm(n, INM_SEQMIS);
break;
}
}
else
{
- DBG("SEQMIS-FULL\n");
+ log("SEQMIS-FULL\n");
ospf_neigh_sm(n, INM_SEQMIS);
}
break;
*/
#include "ospf.h"
+#include <sys/socket.h>
+#include "lib/sysio.h"
void
install_inactim(struct ospf_neighbor *n)
{
u32 nrid, *pnrid;
struct ospf_neighbor *neigh,*n;
- u8 twoway,oldpriority;
- u32 i;
+ u8 i,twoway,oldpriority;
ip_addr olddr,oldbdr;
ip_addr mask;
char *beg=": Bad OSPF hello packet from ", *rec=" received: ";
DBG("%s: Adding new multicast socket for (B)DR\n", p->name);
ifa->dr_sk=sk_new(p->pool);
ifa->dr_sk->type=SK_IP_MC;
+ ifa->dr_sk->sport=0;
ifa->dr_sk->dport=OSPF_PROTO;
- ifa->dr_sk->saddr=AllDRouters;
+ ifa->dr_sk->saddr=ipa_from_u32(0);
ifa->dr_sk->daddr=AllDRouters;
ifa->dr_sk->tos=IP_PREC_INTERNET_CONTROL;
ifa->dr_sk->ttl=1;
mcsk=sk_new(p->pool);
mcsk->type=SK_IP_MC;
+ mcsk->sport=0;
mcsk->dport=OSPF_PROTO;
- mcsk->saddr=AllSPFRouters;
+ mcsk->saddr=ipa_from_u32(0);
mcsk->daddr=AllSPFRouters;
mcsk->tos=IP_PREC_INTERNET_CONTROL;
mcsk->ttl=1;
schedule_rt_lsa(ifa->oa);
schedule_net_lsa(ifa);
}
+ if(oldstate>=NEIGHBOR_EXSTART && state<NEIGHBOR_EXSTART)
+ {
+ /* Stop RXMT timer */
+ tm_stop(n->rxmt_timer);
+ }
if(state==NEIGHBOR_EXSTART)
{
if(n->adj==0) /* First time adjacency */
}
break;
case INM_SEQMIS:
+ OSPF_TRACE(D_EVENTS, "Seq mis!");
case INM_BADLSREQ:
OSPF_TRACE(D_EVENTS, "Bad LS req!");
if(n->state>=NEIGHBOR_EXCHANGE)