mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 17:51:53 +00:00
Doc in lsalib.c + related minor changes.
This commit is contained in:
parent
d5e4b51865
commit
e9ab0b4212
@ -3,3 +3,4 @@ S topology.c
|
|||||||
S neighbor.c
|
S neighbor.c
|
||||||
S iface.c
|
S iface.c
|
||||||
S packet.c
|
S packet.c
|
||||||
|
S lsalib.c
|
||||||
|
@ -18,6 +18,18 @@ flush_lsa(struct top_hash_entry *en, struct ospf_area *oa)
|
|||||||
ospf_hash_delete(oa->gr,en);
|
ospf_hash_delete(oa->gr,en);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ospf_age
|
||||||
|
* @oa: ospf area
|
||||||
|
*
|
||||||
|
* This function is periodicaly invoked from area_disp(). It computes new
|
||||||
|
* age of all LSAs and old (@age is higher than %LSA_MAXAGE) are flushed
|
||||||
|
* when ever possible. If some LSA originated by router itself is older
|
||||||
|
* than %LSREFRESHTIME new instance is originated.
|
||||||
|
*
|
||||||
|
* RFC says, that router should check checksum of every LSA to detect some
|
||||||
|
* hardware problem. BIRD does not do it to minimalize CPU utilization.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
ospf_age(struct ospf_area *oa)
|
ospf_age(struct ospf_area *oa)
|
||||||
{
|
{
|
||||||
@ -379,11 +391,21 @@ lsa_comp(struct ospf_lsa_header *l1, struct ospf_lsa_header *l2)
|
|||||||
return CMP_SAME;
|
return CMP_SAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* LSA can be temporarrily, but body must be mb_alloced. */
|
/**
|
||||||
|
* lsa_install_new - install new LSA into database
|
||||||
|
* @lsa: LSA header
|
||||||
|
* @body pointer to LSA body
|
||||||
|
* @oa: current ospf_area
|
||||||
|
*
|
||||||
|
* This function ensures installing new LSA into LSA database. Old instance is
|
||||||
|
* replaced. Several actions are taken to detec if new routing table
|
||||||
|
* calculation is necessary. This is described in 13.2 of RFC 2328.
|
||||||
|
*/
|
||||||
struct top_hash_entry *
|
struct top_hash_entry *
|
||||||
lsa_install_new(struct ospf_lsa_header *lsa, void *body, struct ospf_area *oa,
|
lsa_install_new(struct ospf_lsa_header *lsa, void *body, struct ospf_area *oa)
|
||||||
struct proto *p)
|
|
||||||
{
|
{
|
||||||
|
/* LSA can be temporarrily, but body must be mb_alloced. */
|
||||||
|
struct proto *p=&oa->po->proto;
|
||||||
int change=0;
|
int change=0;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
struct top_hash_entry *en;
|
struct top_hash_entry *en;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* BIRD -- OSPF
|
* BIRD -- OSPF
|
||||||
*
|
*
|
||||||
* (c) 2000 Ondrej Filip <feela@network.cz>
|
* (c) 1999 - 2000 Ondrej Filip <feela@network.cz>
|
||||||
*
|
*
|
||||||
* Can be freely distributed and used under the terms of the GNU GPL.
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
*
|
*
|
||||||
@ -22,7 +22,7 @@ u16 lsasum_check(struct ospf_lsa_header *h,void *body,struct proto_ospf *po);
|
|||||||
#define CMP_OLDER -1
|
#define CMP_OLDER -1
|
||||||
int lsa_comp(struct ospf_lsa_header *l1, struct ospf_lsa_header *l2);
|
int lsa_comp(struct ospf_lsa_header *l1, struct ospf_lsa_header *l2);
|
||||||
struct top_hash_entry *lsa_install_new(struct ospf_lsa_header *lsa, void *body,
|
struct top_hash_entry *lsa_install_new(struct ospf_lsa_header *lsa, void *body,
|
||||||
struct ospf_area *oa, struct proto *p);
|
struct ospf_area *oa);
|
||||||
void ospf_age(struct ospf_area *oa);
|
void ospf_age(struct ospf_area *oa);
|
||||||
void flush_lsa(struct top_hash_entry *en, struct ospf_area *oa);
|
void flush_lsa(struct top_hash_entry *en, struct ospf_area *oa);
|
||||||
|
|
||||||
|
@ -425,7 +425,7 @@ ospf_lsupd_rx(struct ospf_lsupd_packet *ps, struct proto *p,
|
|||||||
body=mb_alloc(p->pool,lsatmp.length-sizeof(struct ospf_lsa_header));
|
body=mb_alloc(p->pool,lsatmp.length-sizeof(struct ospf_lsa_header));
|
||||||
ntohlsab(lsa+1,body,lsatmp.type,
|
ntohlsab(lsa+1,body,lsatmp.type,
|
||||||
lsatmp.length-sizeof(struct ospf_lsa_header));
|
lsatmp.length-sizeof(struct ospf_lsa_header));
|
||||||
lsadb=lsa_install_new(&lsatmp,body, oa, p);
|
lsadb=lsa_install_new(&lsatmp,body, oa);
|
||||||
DBG("New LSA installed in DB\n");
|
DBG("New LSA installed in DB\n");
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
|
@ -205,7 +205,7 @@ originate_rt_lsa(struct ospf_area *oa)
|
|||||||
}
|
}
|
||||||
body=originate_rt_lsa_body(oa, &lsa.length, po);
|
body=originate_rt_lsa_body(oa, &lsa.length, po);
|
||||||
lsasum_calculate(&lsa,body,po);
|
lsasum_calculate(&lsa,body,po);
|
||||||
en=lsa_install_new(&lsa, body, oa, &po->proto);
|
en=lsa_install_new(&lsa, body, oa);
|
||||||
oa->rt=en;
|
oa->rt=en;
|
||||||
flood_lsa(NULL,NULL,&oa->rt->lsa,po,NULL,oa,1);
|
flood_lsa(NULL,NULL,&oa->rt->lsa,po,NULL,oa,1);
|
||||||
schedule_rtcalc(oa);
|
schedule_rtcalc(oa);
|
||||||
@ -297,7 +297,7 @@ originate_net_lsa(struct ospf_iface *ifa)
|
|||||||
|
|
||||||
body=originate_net_lsa_body(ifa, &lsa.length, po);
|
body=originate_net_lsa_body(ifa, &lsa.length, po);
|
||||||
lsasum_calculate(&lsa,body,po);
|
lsasum_calculate(&lsa,body,po);
|
||||||
ifa->nlsa=lsa_install_new(&lsa, body, ifa->oa, &po->proto);
|
ifa->nlsa=lsa_install_new(&lsa, body, ifa->oa);
|
||||||
flood_lsa(NULL,NULL,&ifa->nlsa->lsa,po,NULL,ifa->oa,1);
|
flood_lsa(NULL,NULL,&ifa->nlsa->lsa,po,NULL,ifa->oa,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -401,7 +401,7 @@ originate_ext_lsa(net *n, rte *e, struct proto_ospf *po, struct ea_list *attrs)
|
|||||||
lsasum_calculate(&lsa,body,po);
|
lsasum_calculate(&lsa,body,po);
|
||||||
WALK_LIST(oa, po->area_list)
|
WALK_LIST(oa, po->area_list)
|
||||||
{
|
{
|
||||||
en=lsa_install_new(&lsa, body, oa, &po->proto);
|
en=lsa_install_new(&lsa, body, oa);
|
||||||
flood_lsa(NULL,NULL,&en->lsa,po,NULL,oa,1);
|
flood_lsa(NULL,NULL,&en->lsa,po,NULL,oa,1);
|
||||||
body=originate_ext_lsa_body(n, e, po, attrs);
|
body=originate_ext_lsa_body(n, e, po, attrs);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user