/*------------------------------------------------------------------------
 *  db_lookup - look up a link state advertisement in the top. database
 *------------------------------------------------------------------------
 */
struct ospf_db *
db_lookup(struct ospf_ar *par, u_long type, u_long lsid)
{
	struct ospf_db	*pdb;

	pdb = par->ar_htable[DBHASH(lsid)];
	for (; pdb; pdb = pdb->db_hnext) {
		if (pdb->db_lsa.lsa_lsid == lsid &&
		    pdb->db_lsa.lsa_type == type)
			break;
	}
	return pdb;
}
Esempio n. 2
0
/*------------------------------------------------------------------------
 *  db_update - update/insert a link state advertisement
 *------------------------------------------------------------------------
 */
int
db_update(struct ospf_ar *par, struct ospf_lsa *plsa)
{
	struct ospf_db	*pdb;

	if (pdb = db_lookup(par, plsa->lsa_type, plsa->lsa_lsid)) {
	} else {
		int	hv;

		pdb = db_new(par, plsa);
		pdb->db_lnext = par->ar_dblhead;
		par->ar_dblhead = pdb;
		hv = DBHASH(pdb->db_lsa.lsa_lsid);
		pdb->db_hnext = par->ar_htable[hv];
		par->ar_htable[hv] = pdb;
	}
}