rte_better implemented.
This commit is contained in:
parent
9f0d45d634
commit
bbd76b421a
2 changed files with 31 additions and 0 deletions
|
@ -15,6 +15,7 @@ ospf_start(struct proto *p)
|
||||||
DBG("%s: Start\n",p->name);
|
DBG("%s: Start\n",p->name);
|
||||||
|
|
||||||
p->if_notify=ospf_if_notify;
|
p->if_notify=ospf_if_notify;
|
||||||
|
p->rte_better=ospf_rte_better;
|
||||||
fib_init(&po->efib,p->pool,sizeof(struct extfib),16,init_efib);
|
fib_init(&po->efib,p->pool,sizeof(struct extfib),16,init_efib);
|
||||||
|
|
||||||
return PS_UP;
|
return PS_UP;
|
||||||
|
@ -69,6 +70,34 @@ ospf_init(struct proto_config *c)
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If new is better return 1 */
|
||||||
|
static int
|
||||||
|
ospf_rte_better(struct rte *new, struct rte *old)
|
||||||
|
{
|
||||||
|
struct proto *p = new->attrs->proto;
|
||||||
|
|
||||||
|
if(new->u.ospf.metric1=LSINFINITY) return 0;
|
||||||
|
|
||||||
|
if(((new->attrs->source==RTS_OSPF) || (new->attrs->source==RTS_OSPF_IA))
|
||||||
|
&& (old->attrs->source==RTS_OSPF_EXT)) return 1;
|
||||||
|
|
||||||
|
if(((old->attrs->source==RTS_OSPF) || (old->attrs->source==RTS_OSPF_IA))
|
||||||
|
&& (new->attrs->source==RTS_OSPF_EXT)) return 0;
|
||||||
|
|
||||||
|
if(new->u.ospf.metric2!=0)
|
||||||
|
{
|
||||||
|
if(old->u.ospf.metric2==0) return 0;
|
||||||
|
if(new->u.ospf.metric2<old->u.ospf.metric2) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(old->u.ospf.metric2!=0) return 1;
|
||||||
|
if(new->u.ospf.metric1<old->u.ospf.metric1) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ospf_postconfig(struct proto_config *c)
|
ospf_postconfig(struct proto_config *c)
|
||||||
{
|
{
|
||||||
|
|
|
@ -349,6 +349,8 @@ static void ospf_dump(struct proto *p);
|
||||||
static struct proto *ospf_init(struct proto_config *c);
|
static struct proto *ospf_init(struct proto_config *c);
|
||||||
static void ospf_preconfig(struct protocol *p, struct config *c);
|
static void ospf_preconfig(struct protocol *p, struct config *c);
|
||||||
static void ospf_postconfig(struct proto_config *c);
|
static void ospf_postconfig(struct proto_config *c);
|
||||||
|
static int ospf_rte_better(struct rte *new, struct rte *old);
|
||||||
|
|
||||||
|
|
||||||
#include "proto/ospf/hello.h"
|
#include "proto/ospf/hello.h"
|
||||||
#include "proto/ospf/packet.h"
|
#include "proto/ospf/packet.h"
|
||||||
|
|
Loading…
Reference in a new issue