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

📄 refclock_parse.c

📁 网络时间协议NTP 源码 版本v4.2.0b 该源码用于linux平台下
💻 C
📖 第 1 页 / 共 5 页
字号:
		DCF_TYPE,		WSDCF_MAXUNSYNC,		WSDCF_SPEED,		WSDCF_CFLAG,		WSDCF_IFLAG,		WSDCF_OFLAG,		WSDCF_LFLAG,		WSDCF_SAMPLES,		WSDCF_KEEP	},	{				/* mode 5 */		RAWDCF_FLAGS,		NO_POLL,		RAWDCF_INIT,		NO_EVENT,		NO_END,		NO_MESSAGE,		NO_LCLDATA,		RAWDCF_ROOTDELAY,		CONRAD_BASEDELAY,		DCF_A_ID,		CONRAD_DESCRIPTION,		RAWDCF_FORMAT,		DCF_TYPE,		RAWDCF_MAXUNSYNC,		RAWDCF_SPEED,		RAWDCF_CFLAG,		RAWDCF_IFLAG,		RAWDCF_OFLAG,		RAWDCF_LFLAG,		RAWDCF_SAMPLES,		RAWDCF_KEEP	},	{				/* mode 6 */		RAWDCF_FLAGS,		NO_POLL,		RAWDCF_INIT,		NO_EVENT,		NO_END,		NO_MESSAGE,		NO_LCLDATA,		RAWDCF_ROOTDELAY,		TIMEBRICK_BASEDELAY,		DCF_A_ID,		TIMEBRICK_DESCRIPTION,		RAWDCF_FORMAT,		DCF_TYPE,		RAWDCF_MAXUNSYNC,		RAWDCF_SPEED,		RAWDCF_CFLAG,		RAWDCF_IFLAG,		RAWDCF_OFLAG,		RAWDCF_LFLAG,		RAWDCF_SAMPLES,		RAWDCF_KEEP	},	{				/* mode 7 */		MBG_FLAGS,		GPS16X_POLL,		GPS16X_INIT,		NO_EVENT,		GPS16X_END,		GPS16X_MESSAGE,		GPS16X_DATA,		GPS16X_ROOTDELAY,		GPS16X_BASEDELAY,		GPS16X_ID,		GPS16X_DESCRIPTION,		GPS16X_FORMAT,		GPS_TYPE,		GPS16X_MAXUNSYNC,		GPS16X_SPEED,		GPS16X_CFLAG,		GPS16X_IFLAG,		GPS16X_OFLAG,		GPS16X_LFLAG,		GPS16X_SAMPLES,		GPS16X_KEEP	},	{				/* mode 8 */		RAWDCF_FLAGS,		NO_POLL,		NO_INIT,		NO_EVENT,		NO_END,		NO_MESSAGE,		NO_LCLDATA,		RAWDCF_ROOTDELAY,		IGELCLOCK_BASEDELAY,		DCF_A_ID,		IGELCLOCK_DESCRIPTION,		RAWDCF_FORMAT,		DCF_TYPE,		RAWDCF_MAXUNSYNC,		IGELCLOCK_SPEED,		IGELCLOCK_CFLAG,		RAWDCF_IFLAG,		RAWDCF_OFLAG,		RAWDCF_LFLAG,		RAWDCF_SAMPLES,		RAWDCF_KEEP	},	{				/* mode 9 */		TRIMBLETAIP_FLAGS,#if TRIM_POLLRATE		/* DHD940515: Allow user config */		NO_POLL,#else		TRIMBLETAIP_POLL,#endif		TRIMBLETAIP_INIT,		TRIMBLETAIP_EVENT,		TRIMBLETAIP_END,		NO_MESSAGE,		TRIMBLETAIP_DATA,		TRIMBLETAIP_ROOTDELAY,		TRIMBLETAIP_BASEDELAY,		TRIMBLETAIP_ID,		TRIMBLETAIP_DESCRIPTION,		TRIMBLETAIP_FORMAT,		GPS_TYPE,		TRIMBLETAIP_MAXUNSYNC,		TRIMBLETAIP_SPEED,		TRIMBLETAIP_CFLAG,		TRIMBLETAIP_IFLAG,		TRIMBLETAIP_OFLAG,		TRIMBLETAIP_LFLAG,		TRIMBLETAIP_SAMPLES,		TRIMBLETAIP_KEEP	},	{				/* mode 10 */		TRIMBLETSIP_FLAGS,#if TRIM_POLLRATE		/* DHD940515: Allow user config */		NO_POLL,#else		TRIMBLETSIP_POLL,#endif		TRIMBLETSIP_INIT,		TRIMBLETSIP_EVENT,		TRIMBLETSIP_END,		TRIMBLETSIP_MESSAGE,		TRIMBLETSIP_DATA,		TRIMBLETSIP_ROOTDELAY,		TRIMBLETSIP_BASEDELAY,		TRIMBLETSIP_ID,		TRIMBLETSIP_DESCRIPTION,		TRIMBLETSIP_FORMAT,		GPS_TYPE,		TRIMBLETSIP_MAXUNSYNC,		TRIMBLETSIP_SPEED,		TRIMBLETSIP_CFLAG,		TRIMBLETSIP_IFLAG,		TRIMBLETSIP_OFLAG,		TRIMBLETSIP_LFLAG,		TRIMBLETSIP_SAMPLES,		TRIMBLETSIP_KEEP	},	{                             /* mode 11 */		NO_CL_FLAGS,		RCC8000_POLL,		RCC8000_INIT,		NO_EVENT,		RCC8000_END,		NO_MESSAGE,		RCC8000_DATA,		RCC8000_ROOTDELAY,		RCC8000_BASEDELAY,		RCC8000_ID,		RCC8000_DESCRIPTION,		RCC8000_FORMAT,		DCF_TYPE,		RCC8000_MAXUNSYNC,		RCC8000_SPEED,		RCC8000_CFLAG,		RCC8000_IFLAG,		RCC8000_OFLAG,		RCC8000_LFLAG,		RCC8000_SAMPLES,		RCC8000_KEEP	},	{                             /* mode 12 */		HOPF6021_FLAGS,		NO_POLL,     		NO_INIT,		NO_EVENT,		NO_END,		NO_MESSAGE,		NO_LCLDATA,		HOPF6021_ROOTDELAY,		HOPF6021_BASEDELAY,		DCF_ID,		HOPF6021_DESCRIPTION,		HOPF6021_FORMAT,		DCF_TYPE,		HOPF6021_MAXUNSYNC,		HOPF6021_SPEED,		HOPF6021_CFLAG,		HOPF6021_IFLAG,		HOPF6021_OFLAG,		HOPF6021_LFLAG,		HOPF6021_SAMPLES,		HOPF6021_KEEP	},	{                            /* mode 13 */		COMPUTIME_FLAGS,		NO_POLL,		NO_INIT,		NO_EVENT,		NO_END,		NO_MESSAGE,		NO_LCLDATA,		COMPUTIME_ROOTDELAY,		COMPUTIME_BASEDELAY,		COMPUTIME_ID,		COMPUTIME_DESCRIPTION,		COMPUTIME_FORMAT,		COMPUTIME_TYPE,		COMPUTIME_MAXUNSYNC,		COMPUTIME_SPEED,		COMPUTIME_CFLAG,		COMPUTIME_IFLAG,		COMPUTIME_OFLAG,		COMPUTIME_LFLAG,		COMPUTIME_SAMPLES,		COMPUTIME_KEEP	},	{				/* mode 14 */		RAWDCF_FLAGS,		NO_POLL,		RAWDCFDTRSET_INIT,		NO_EVENT,		NO_END,		NO_MESSAGE,		NO_LCLDATA,		RAWDCF_ROOTDELAY,		RAWDCF_BASEDELAY,		DCF_A_ID,		RAWDCFDTRSET_DESCRIPTION,		RAWDCF_FORMAT,		DCF_TYPE,		RAWDCF_MAXUNSYNC,		RAWDCF_SPEED,		RAWDCF_CFLAG,		RAWDCF_IFLAG,		RAWDCF_OFLAG,		RAWDCF_LFLAG,		RAWDCF_SAMPLES,		RAWDCF_KEEP	},	{				/* mode 15 */		0,				/* operation flags (io modes) */  		NO_POLL,			/* active poll routine */		NO_INIT,			/* active poll init routine */  		NO_EVENT,		        /* special event handling (e.g. reset clock) */  		NO_END,				/* active poll end routine */  		NO_MESSAGE,			/* process a lower layer message */		NO_LCLDATA,			/* local data area for "poll" mechanism */		0,				/* rootdelay */		11.0 /* bits */ / 9600,		/* current offset by which the RS232				           	time code is delayed from the actual time */		DCF_ID,				/* ID code */		"WHARTON 400A Series clock",	/* device name */		"WHARTON 400A Series clock Output Format 1",	/* fixed format */			/* Must match a format-name in a libparse/clk_xxx.c file */		DCF_TYPE,			/* clock type (ntp control) */		(1*60*60),		        /* time to trust oscillator after losing synch */		B9600,				/* terminal input & output baudrate */		(CS8|CREAD|PARENB|CLOCAL|HUPCL),/* terminal control flags */		0,				/* terminal input flags */		0,				/* terminal output flags */		0,				/* terminal local flags */		5,				/* samples for median filter */		3,				/* samples for median filter to keep */	},	{				/* mode 16 - RAWDCF RTS set, DTR clr */		RAWDCF_FLAGS,		NO_POLL,		RAWDCFDTRCLRRTSSET_INIT,		NO_EVENT,		NO_END,		NO_MESSAGE,		NO_LCLDATA,		RAWDCF_ROOTDELAY,		RAWDCF_BASEDELAY,		DCF_A_ID,		RAWDCFDTRCLRRTSSET_DESCRIPTION,		RAWDCF_FORMAT,		DCF_TYPE,		RAWDCF_MAXUNSYNC,		RAWDCF_SPEED,		RAWDCF_CFLAG,		RAWDCF_IFLAG,		RAWDCF_OFLAG,		RAWDCF_LFLAG,		RAWDCF_SAMPLES,		RAWDCF_KEEP	},        {                            /* mode 17 */                VARITEXT_FLAGS,                NO_POLL,                NO_INIT,                NO_EVENT,                NO_END,                NO_MESSAGE,                NO_LCLDATA,                VARITEXT_ROOTDELAY,                VARITEXT_BASEDELAY,                VARITEXT_ID,                VARITEXT_DESCRIPTION,                VARITEXT_FORMAT,                VARITEXT_TYPE,                VARITEXT_MAXUNSYNC,                VARITEXT_SPEED,                VARITEXT_CFLAG,                VARITEXT_IFLAG,                VARITEXT_OFLAG,                VARITEXT_LFLAG,                VARITEXT_SAMPLES,                VARITEXT_KEEP        },	{				/* mode 18 */		MBG_FLAGS,		NO_POLL,		NO_INIT,		NO_EVENT,		GPS16X_END,		GPS16X_MESSAGE,		GPS16X_DATA,		GPS16X_ROOTDELAY,		GPS16X_BASEDELAY,		GPS16X_ID,		GPS16X_DESCRIPTION,		GPS16X_FORMAT,		GPS_TYPE,		GPS16X_MAXUNSYNC,		GPS16X_SPEED,		GPS16X_CFLAG,		GPS16X_IFLAG,		GPS16X_OFLAG,		GPS16X_LFLAG,		GPS16X_SAMPLES,		GPS16X_KEEP	},};static int ncltypes = sizeof(parse_clockinfo) / sizeof(struct parse_clockinfo);#define CLK_REALTYPE(x) ((int)(((x)->ttl) & 0x7F))#define CLK_TYPE(x)	((CLK_REALTYPE(x) >= ncltypes) ? ~0 : CLK_REALTYPE(x))#define CLK_UNIT(x)	((int)REFCLOCKUNIT(&(x)->srcadr))#define CLK_PPS(x)	(((x)->ttl) & 0x80)/* * Other constant stuff */#define	PARSEHSREFID	0x7f7f08ff	/* 127.127.8.255 refid for hi strata */#define PARSESTATISTICS   (60*60)	        /* output state statistics every hour */static int notice = 0;#define PARSE_STATETIME(parse, i) ((parse->generic->currentstatus == i) ? parse->statetime[i] + current_time - parse->lastchange : parse->statetime[i])static void parse_event   P((struct parseunit *, int));static void parse_process P((struct parseunit *, parsetime_t *));static void clear_err     P((struct parseunit *, u_long));static int  list_err      P((struct parseunit *, u_long));static char * l_mktime    P((u_long));/**=========================================================================== ** implementation error message regression module **/static voidclear_err(	struct parseunit *parse,	u_long            lstate	){	if (lstate == ERR_ALL)	{		int i;		for (i = 0; i < ERR_CNT; i++)		{			parse->errors[i].err_stage   = err_tbl[i];			parse->errors[i].err_cnt     = 0;			parse->errors[i].err_last    = 0;			parse->errors[i].err_started = 0;			parse->errors[i].err_suppressed = 0;		}	}	else	{		parse->errors[lstate].err_stage   = err_tbl[lstate];		parse->errors[lstate].err_cnt     = 0;		parse->errors[lstate].err_last    = 0;		parse->errors[lstate].err_started = 0;		parse->errors[lstate].err_suppressed = 0;	}}static intlist_err(	struct parseunit *parse,	u_long            lstate	){	int do_it;	struct errorinfo *err = &parse->errors[lstate];	if (err->err_started == 0)	{		err->err_started = current_time;	}	do_it = (current_time - err->err_last) >= err->err_stage->err_delay;	if (do_it)	    err->err_cnt++;  	if (err->err_stage->err_count &&	    (err->err_cnt >= err->err_stage->err_count))	{		err->err_stage++;		err->err_cnt = 0;	}	if (!err->err_cnt && do_it)	    msyslog(LOG_INFO, "PARSE receiver #%d: interval for following error message class is at least %s",		    CLK_UNIT(parse->peer), l_mktime(err->err_stage->err_delay));	if (!do_it)	    err->err_suppressed++;	else	    err->err_last = current_time;	if (do_it && err->err_suppressed)	{		msyslog(LOG_INFO, "PARSE receiver #%d: %ld message%s suppressed, error condition class persists for %s",			CLK_UNIT(parse->peer), err->err_suppressed, (err->err_suppressed == 1) ? " was" : "s where",			l_mktime(current_time - err->err_started));		err->err_suppressed = 0;	}  	return do_it;}/*-------------------------------------------------- * mkreadable - make a printable ascii string (without * embedded quotes so that the ntpq protocol isn't * fooled */#ifndef isprint#define isprint(_X_) (((_X_) > 0x1F) && ((_X_) < 0x7F))#endifstatic char *mkreadable(	char  *buffer,	long  blen,	const char  *src,	u_long  srclen,	int hex	){	char *b    = buffer;	char *endb = (char *)0;	if (blen < 4)		return (char *)0;		/* don't bother with mini buffers */	endb = buffer + blen - 4;	blen--;			/* account for '\0' */	while (blen && srclen--)	{		if (!hex &&             /* no binary only */		    (*src != '\\') &&   /* no plain \ */		    (*src != '"') &&    /* no " */		    isprint((int)*src))	/* only printables */		{			/* they are easy... */			*buffer++ = *src++;			blen--;		}		else		{			if (blen < 4)

⌨️ 快捷键说明

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