⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lnkstat.c

📁 h内核
💻 C
字号:
/****************************************************************************** * *	(C)Copyright 1998,1999 SysKonnect, *	a business unit of Schneider & Koch & Co. Datensysteme GmbH. * *	See the file "skfddi.c" for further information. * *	This program is free software; you can redistribute it and/or modify *	it under the terms of the GNU General Public License as published by *	the Free Software Foundation; either version 2 of the License, or *	(at your option) any later version. * *	The information in this file is provided "AS IS" without warranty. * ******************************************************************************//*	IBM FDDI read error log function*/#include "h/types.h"#include "h/fddi.h"#include "h/smc.h"#include "h/lnkstat.h"#ifndef	lintstatic const char ID_sccs[] = "@(#)lnkstat.c	1.8 97/04/11 (C) SK " ;#endif#ifdef	sun#define _far#endif#define EL_IS_OK(x,l)	((((int)&(((struct s_error_log *)0)->x)) + \			sizeof(er->x)) <= l)/*	BEGIN_MANUAL_ENTRY(if,func;others;11)	u_long smt_get_error_word(smc)	struct s_smc *smc ;Function	DOWNCALL	(SMT, lnkstat.c)		This functions returns the SMT error work for AIX events.Return	smt_error_word	These bits are supported:		SMT_ERL_ALC	== 	[PS/PA].fddiPORTLerFlag		SMT_ERL_BLC	==	[PB].fddiPORTLerFlag		SMT_ERL_NCC	==	fddiMACNotCopiedFlag		SMT_ERL_FEC	==	fddiMACFrameErrorFlag	END_MANUAL_ENTRY() */u_long smt_get_error_word(struct s_smc *smc){	u_long	st;	/*	 * smt error word low	 */	st = 0 ;	if (smc->s.sas == SMT_SAS) {		if (smc->mib.p[PS].fddiPORTLerFlag)			st |= SMT_ERL_ALC ;	}	else {		if (smc->mib.p[PA].fddiPORTLerFlag)			st |= SMT_ERL_ALC ;		if (smc->mib.p[PB].fddiPORTLerFlag)			st |= SMT_ERL_BLC ;	}	if (smc->mib.m[MAC0].fddiMACNotCopiedFlag)		st |= SMT_ERL_NCC ;		/* not copied condition */	if (smc->mib.m[MAC0].fddiMACFrameErrorFlag)		st |= SMT_ERL_FEC ;		/* frame error condition */	return st;}/*	BEGIN_MANUAL_ENTRY(if,func;others;11)	u_long smt_get_event_word(smc)	struct s_smc *smc ;Function	DOWNCALL	(SMT, lnkstat.c)		This functions returns the SMT event work for AIX events.Return	smt_event_word	always 0	END_MANUAL_ENTRY() */u_long smt_get_event_word(struct s_smc *smc){	return (u_long) 0;}/*	BEGIN_MANUAL_ENTRY(if,func;others;11)	u_long smt_get_port_event_word(smc)	struct s_smc *smc ;Function	DOWNCALL	(SMT, lnkstat.c)		This functions returns the SMT port event work for AIX events.Return	smt_port_event_word	always 0	END_MANUAL_ENTRY() */u_long smt_get_port_event_word(struct s_smc *smc){	return (u_long) 0;}/*	BEGIN_MANUAL_ENTRY(if,func;others;11)	u_long smt_read_errorlog(smc,p,len)	struct s_smc *smc ;	char _far *p ;	int len ;Function	DOWNCALL	(SMT, lnkstat.c)		This functions returns the SMT error log field for AIX events.Para	p	pointer to the error log field	len	len of the error log fieldReturn	len	used len of the error log field	END_MANUAL_ENTRY() */int smt_read_errorlog(struct s_smc *smc, char _far *p, int len){	int			i ;	int			st ;	struct s_error_log _far	*er ;	er = (struct s_error_log _far *) p ;	if (len > sizeof(struct s_error_log))		len = sizeof(struct s_error_log) ;	for (i = 0 ; i < len ; i++)		*p++ = 0 ;	/*	 * set count	 */	if (EL_IS_OK(set_count_high,len)) {		er->set_count_low = (u_short)smc->mib.fddiSMTSetCount.count ;		er->set_count_high =			(u_short)(smc->mib.fddiSMTSetCount.count >> 16L) ;	}	/*	 * aci	 */	if (EL_IS_OK(aci_id_code,len)) {		er->aci_id_code = 0 ;	}	/*	 * purge counter is missed frames; 16 bits only	 */	if (EL_IS_OK(purge_frame_counter,len)) {		if (smc->mib.m[MAC0].fddiMACCopied_Ct > 0xffff)			er->purge_frame_counter = 0xffff ;		else			er->purge_frame_counter =				(u_short)smc->mib.m[MAC0].fddiMACCopied_Ct ;	}	/*	 * CMT and RMT state machines	 */	if (EL_IS_OK(ecm_state,len))		er->ecm_state = smc->mib.fddiSMTECMState ;	if (EL_IS_OK(pcm_b_state,len)) {		if (smc->s.sas == SMT_SAS) {			er->pcm_a_state = smc->y[PS].mib->fddiPORTPCMState ;			er->pcm_b_state = 0 ;		}		else {			er->pcm_a_state = smc->y[PA].mib->fddiPORTPCMState ;			er->pcm_b_state = smc->y[PB].mib->fddiPORTPCMState ;		}	}	if (EL_IS_OK(cfm_state,len))		er->cfm_state = smc->mib.fddiSMTCF_State ;	if (EL_IS_OK(rmt_state,len))		er->rmt_state = smc->mib.m[MAC0].fddiMACRMTState ;	/*	 * smt error word low (we only need the low order 16 bits.)	 */	st = smt_get_error_word(smc) & 0xffff ;	if (EL_IS_OK(smt_error_low,len))		er->smt_error_low = st ;	if (EL_IS_OK(ucode_version_level,len))		er->ucode_version_level = 0x0101 ;	return(len) ;}

⌨️ 快捷键说明

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