/*------------------------------------------------------------------------ * 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; }
/*------------------------------------------------------------------------ * 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; } }