?? lss_build.c,v
字號:
head 1.3;
access;
symbols;
locks
dls:1.3; strict;
comment @ * @;
1.3
date 97.09.21.19.28.38; author dls; state Dist;
branches;
next 1.2;
1.2
date 94.02.26.19.50.44; author dls; state Works;
branches;
next 1.1;
1.1
date 94.02.20.18.59.56; author dls; state Works;
branches;
next ;
desc
@@
1.3
log
@pre-3e code
@
text
@/* lss_build.c - lss_build */
#include <conf.h>
#include <kernel.h>
#include <network.h>
#include <ospf.h>
#define LSS_ABORT(par, pnb, pep) { \
signal(par->ar_dbmutex); \
if (pep) \
freebuf(pep); \
pnb->nb_state = NBS_2WAY; \
nb_clearl(pnb); }
/*------------------------------------------------------------------------
* lss_build - build link-state summaries for DD packets
*------------------------------------------------------------------------
*/
int lss_build(pif, pnb, pep)
struct ospf_if *pif;
struct ospf_nb *pnb;
struct ep *pep;
{
struct ospf_ar *par = pif->if_area;
struct ip *pip = (struct ip *)pep->ep_data;
struct ospf *po = (struct ospf *)pip->ip_data;
struct ospf_dd *pdd = (struct ospf_dd *)po->ospf_data;
struct ospf_db *pdb;
struct ospf_lss *plss;
struct ep *ospfddtmpl();
int nls, ifn, maxlspp;
ifn = pif - &ospf_if[0];
maxlspp = (nif[ifn].ni_mtu - IPMHLEN - MINDDLEN) / LSSHDRLEN;
wait(par->ar_dbmutex);
nls = 0;
for (pdb = par->ar_dblhead; pdb; pdb = pdb->db_lnext) {
kprintf("lss_build, pdb %X\n", pdb);
if (nls >= maxlspp) {
pdd->dd_control = DDC_MORE;
if (pnb->nb_master)
pdd->dd_control |= DDC_MSTR;
if (enq(pnb->nb_dsl, pep, 0) < 0) {
LSS_ABORT(par, pnb, pep);
return;
}
pep = ospfddtmpl(pif);
if (pep == 0) {
LSS_ABORT(par, pnb, pep);
return;
}
pip = (struct ip *)pep->ep_data;
po = (struct ospf *)pip->ip_data;
pdd = (struct ospf_dd *)po->ospf_data;
nls = 0;
}
plss = &pdd->dd_lss[nls];
blkcopy(plss, &pdb->db_lsa.lsa_lss, LSSHDRLEN);
plss->lss_age = hs2net(plss->lss_age);
plss->lss_seq = hl2net(plss->lss_seq);
plss->lss_len = hs2net(plss->lss_len);
po->ospf_len += LSSHDRLEN;
++nls;
}
pdd->dd_control = 0;
if (pnb->nb_master)
pdd->dd_control |= DDC_MSTR;
if (enq(pnb->nb_dsl, pep, 0) < 0) {
LSS_ABORT(par, pnb, pep);
return;
}
signal(par->ar_dbmutex);
}
@
1.2
log
@*** empty log message ***
@
text
@d8 1
a8 1
#define LSS_ABORT(par, pnb, pep) \
d13 1
a13 1
nb_clearl(pnb);
d24 7
a30 6
struct ospf_ar *par = pif->if_area;
struct ip *pip = (struct ip *)pep->ep_data;
struct ospf *po = (struct ospf *)pip->ip_data;
struct ospf_dd *pdd = (struct ospf_dd *)po->ospf_data;
struct ospf_db *pdb;
struct ep *ospfddtmpl();
a32 1
d38 2
a39 1
if (++nls >= maxlspp) {
d57 7
d68 1
a68 1
if (enq(pnb->nb_dsl, pep, 0) < 0)
d70 2
@
1.1
log
@Initial revision
@
text
@a31 1
kprintf("lss_build\n");
a33 1
kprintf("ifn %d\n", ifn);
a34 1
kprintf("maxlspp %d\n", maxlspp);
d37 1
a37 1
for (pdb = par->ar_dbhead; pdb; pdb = pdb->db_next) {
a42 1
kprintf("ABORT1, enq(%d, %X)\n", pnb->nb_dsl, pep);
a47 1
kprintf("ABORT2, pep=0\n");
a60 2
{
kprintf("ABORT3, enq(%d, %X)\n", pnb->nb_dsl, pep);
a61 1
}
@
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -