if_elect1.c,v

来自「TCP-IP红宝书源代码」· C,V 代码 · 共 109 行

C,V
109
字号
head	1.2;
access;
symbols;
locks
	dls:1.2; strict;
comment	@ * @;


1.2
date	97.09.21.19.28.38;	author dls;	state Dist;
branches;
next	1.1;

1.1
date	94.02.13.19.38.53;	author dls;	state Works;
branches;
next	;


desc
@@


1.2
log
@pre-3e code
@
text
@/* if_elect1.c - if_elect1 */

#include <conf.h>
#include <kernel.h>
#include <network.h>
#include <ospf.h>

/*------------------------------------------------------------------------
 * if_elect1 - make one neighbor list pass in the election algorithm
 *------------------------------------------------------------------------
 */
int if_elect1(pif, ppdr, ppbr)
struct ospf_if	*pif;
struct ospf_nb	**ppdr, **ppbr;
{
	unsigned long	brid, drid;
	Bool		bdecl, cdecl;
	struct ospf_nb	*pnb, *pdr, *pbr;
	int		i;

	drid = pif->if_drid;
	brid = pif->if_brid;
	bdecl = FALSE;
	pdr = pbr = 0;
	pnb = &pif->if_nbtab[0];
	for (i=0; i<=MAXNBR; ++i, ++pnb) {
		if (pnb->nb_state < NBS_2WAY)
			continue;
		if (pnb->nb_rid == pnb->nb_drid) {
			/* neighbor claims designated routership */

			if (pdr) {
				if (pnb->nb_prio < pdr->nb_prio)
					continue;
				if ((pnb->nb_prio == pdr->nb_prio) &&
				    (net2hl(pnb->nb_rid) <
				     net2hl(pdr->nb_rid)))
					continue;
			}
			pdr = pnb;
			continue;
		} /* else pnb is a backup candidate */

		cdecl = pnb->nb_rid == pnb->nb_brid;
		if (bdecl && !cdecl)
			continue;
		if (cdecl && !bdecl) {
			bdecl = TRUE;
			pbr = pnb;
			continue;
		}
		if (pbr == 0) {
			pbr = pnb;
			continue;
		}
		if (pnb->nb_prio < pbr->nb_prio)
			continue;
		if ((pnb->nb_prio == pbr->nb_prio) &&
		    (net2hl(pnb->nb_rid) < net2hl(pbr->nb_rid)))
			continue;
		pbr = pnb;	/* new backup */
	}
	*ppbr = pbr;
	*ppdr = pdr;
}
@


1.1
log
@Initial revision
@
text
@d36 2
a37 1
				    (pnb->nb_rid < pdr->nb_rid))
d59 1
a59 1
		    (pnb->nb_rid < pbr->nb_rid))
@

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?