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

📄 ntpdc_ops.c

📁 网络时间协议NTP 源码 版本v4.2.0b 该源码用于linux平台下
💻 C
📖 第 1 页 / 共 5 页
字号:
		       "ppoll %d, hpoll %d, keyid %lu, version %d, association %u\n",		       pp->ppoll, pp->hpoll, (u_long)pp->keyid, pp->version, ntohs(pp->associd));	(void) fprintf(fp,		       "reach %03o, unreach %d, flash 0x%04x, ",		       pp->reach, pp->unreach, pp->flash2);	(void) fprintf(fp, "boffset %s, ttl/mode %d\n",		       fptoa(NTOHS_FP(pp->estbdelay), 5), pp->ttl);		(void) fprintf(fp, "timer %lds, flags", (long)ntohl(pp->timer));	if (pp->flags == 0) {		(void) fprintf(fp, " none\n");	} else {		str = "";		if (pp->flags & INFO_FLAG_SYSPEER) {			(void) fprintf(fp, " system_peer");			str = ",";		}		if (pp->flags & INFO_FLAG_CONFIG) {			(void) fprintf(fp, "%s config", str);			str = ",";		}		if (pp->flags & INFO_FLAG_REFCLOCK) {			(void) fprintf(fp, "%s refclock", str);			str = ",";		}		if (pp->flags & INFO_FLAG_AUTHENABLE) {			(void) fprintf(fp, "%s auth", str);			str = ",";		}		if (pp->flags & INFO_FLAG_BCLIENT) {			(void) fprintf(fp, "%s bclient", str);			str = ",";		}		if (pp->flags & INFO_FLAG_PREFER) {			(void) fprintf(fp, "%s prefer", str);			str = ",";		}		if (pp->flags & INFO_FLAG_BURST) {			(void) fprintf(fp, "%s burst", str);		}		(void) fprintf(fp, "\n");	}	NTOHL_FP(&pp->reftime, &tempts);	(void) fprintf(fp, "reference time:      %s\n",		       prettydate(&tempts));	NTOHL_FP(&pp->org, &tempts);	(void) fprintf(fp, "originate timestamp: %s\n",		       prettydate(&tempts));	NTOHL_FP(&pp->rec, &tempts);	(void) fprintf(fp, "receive timestamp:   %s\n",		       prettydate(&tempts));	NTOHL_FP(&pp->xmt, &tempts);	(void) fprintf(fp, "transmit timestamp:  %s\n",		       prettydate(&tempts));		(void) fprintf(fp, "filter delay: ");	for (i = 0; i < NTP_SHIFT; i++) {		(void) fprintf(fp, " %-8.8s",			       fptoa(NTOHS_FP(pp->filtdelay[i]), 5));		if (i == (NTP_SHIFT>>1)-1)		    (void) fprintf(fp, "\n              ");	}	(void) fprintf(fp, "\n");	(void) fprintf(fp, "filter offset:");	for (i = 0; i < NTP_SHIFT; i++) {		NTOHL_FP(&pp->filtoffset[i], &tempts);		(void) fprintf(fp, " %-8.8s", lfptoa(&tempts, 6));		if (i == (NTP_SHIFT>>1)-1)		    (void) fprintf(fp, "\n              ");	}	(void) fprintf(fp, "\n");	(void) fprintf(fp, "filter order: ");	for (i = 0; i < NTP_SHIFT; i++) {		(void) fprintf(fp, " %-8d", pp->order[i]);		if (i == (NTP_SHIFT>>1)-1)		    (void) fprintf(fp, "\n              ");	}	(void) fprintf(fp, "\n");		NTOHL_FP(&pp->offset, &tempts);	(void) fprintf(fp,		       "offset %s, delay %s, error bound %s, filter error %s\n",		       lfptoa(&tempts, 6), fptoa(NTOHS_FP(pp->delay), 5),		       ufptoa(NTOHS_FP(pp->dispersion), 5),		       ufptoa(NTOHS_FP(pp->selectdisp), 5));}/* * showpeer - show detailed information for a peer */static voidshowpeer(	struct parse *pcmd,	FILE *fp	){	struct info_peer *pp;	/* 4 is the maximum number of peers which will fit in a packet */	struct info_peer_list *pl, plist[min(MAXARGS, 4)];	int qitems;	int items;	int itemsize;	int res;	int sendsize;again:	if (impl_ver == IMPL_XNTPD)		sendsize = sizeof(struct info_peer_list);	else		sendsize = v4sizeof(struct info_peer_list);	for (qitems = 0, pl = plist; qitems < min(pcmd->nargs, 4); qitems++) {		if (pcmd->argval[qitems].netnum.ss_family == AF_INET) {			pl->addr = GET_INADDR(pcmd->argval[qitems].netnum);			if (impl_ver == IMPL_XNTPD)				pl->v6_flag = 0;		} else {			if (impl_ver == IMPL_XNTPD_OLD) {				fprintf(stderr,				    "***Server doesn't understand IPv6 addresses\n");				return;			}			pl->addr6 = GET_INADDR6(pcmd->argval[qitems].netnum);			pl->v6_flag = 1;		}		pl->port = (u_short)s_port;		pl->hmode = pl->flags = 0;		pl = (struct info_peer_list *)((char *)pl + sendsize);	}	res = doquery(impl_ver, REQ_PEER_INFO, 0, qitems,		      sendsize, (char *)plist, &items,		      &itemsize, (void *)&pp, 0, sizeof(struct info_peer));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res != 0)	    return;	if (!checkitems(items, fp))	    return;	if (!checkitemsize(itemsize, sizeof(struct info_peer)) &&	    !checkitemsize(itemsize, v4sizeof(struct info_peer)))	    return;	while (items-- > 0) {		printpeer(pp, fp);		if (items > 0)		    (void) fprintf(fp, "\n");		pp++;	}}/* * peerstats - return statistics for a peer */static voidpeerstats(	struct parse *pcmd,	FILE *fp	){	struct info_peer_stats *pp;	/* 4 is the maximum number of peers which will fit in a packet */	struct info_peer_list *pl, plist[min(MAXARGS, 4)];	struct sockaddr_storage src, dst;	int qitems;	int items;	int itemsize;	int res;	int sendsize;again:	if (impl_ver == IMPL_XNTPD)		sendsize = sizeof(struct info_peer_list);	else		sendsize = v4sizeof(struct info_peer_list);	memset((char *)plist, 0, sizeof(struct info_peer_list) * min(MAXARGS, 4));	for (qitems = 0, pl = plist; qitems < min(pcmd->nargs, 4); qitems++) {		if (pcmd->argval[qitems].netnum.ss_family == AF_INET) {			pl->addr = GET_INADDR(pcmd->argval[qitems].netnum);			if (impl_ver == IMPL_XNTPD)				pl->v6_flag = 0;		} else {			if (impl_ver == IMPL_XNTPD_OLD) {				fprintf(stderr,				    "***Server doesn't understand IPv6 addresses\n");				return;			}			pl->addr6 = GET_INADDR6(pcmd->argval[qitems].netnum);			pl->v6_flag = 1;		}		pl->port = (u_short)s_port;		pl->hmode = plist[qitems].flags = 0;		pl = (struct info_peer_list *)((char *)pl + sendsize);	}	res = doquery(impl_ver, REQ_PEER_STATS, 0, qitems,		      sendsize, (char *)plist, &items,		      &itemsize, (void *)&pp, 0, 		      sizeof(struct info_peer_stats));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res != 0)	    return;	if (!checkitems(items, fp))	    return;	if (!checkitemsize(itemsize, sizeof(struct info_peer_stats)) &&	    !checkitemsize(itemsize, v4sizeof(struct info_peer_stats)))	    return;	while (items-- > 0) {		memset((char *)&src, 0, sizeof(src));		memset((char *)&dst, 0, sizeof(dst));		if (pp->v6_flag != 0) {			GET_INADDR6(src) = pp->srcadr6;			GET_INADDR6(dst) = pp->dstadr6;			src.ss_family = AF_INET6;			dst.ss_family = AF_INET6;		} else {			GET_INADDR(src) = pp->srcadr;			GET_INADDR(dst) = pp->dstadr;			src.ss_family = AF_INET;			dst.ss_family = AF_INET;		}#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR		src.ss_len = SOCKLEN(&src);		dst.ss_len = SOCKLEN(&dst);#endif		(void) fprintf(fp, "remote host:          %s\n",			       nntohost(&src));		(void) fprintf(fp, "local interface:      %s\n",			       stoa(&dst));		(void) fprintf(fp, "time last received:   %lds\n",			       (long)ntohl(pp->timereceived));		(void) fprintf(fp, "time until next send: %lds\n",			       (long)ntohl(pp->timetosend));		(void) fprintf(fp, "reachability change:  %lds\n",			       (long)ntohl(pp->timereachable));		(void) fprintf(fp, "packets sent:         %ld\n",			       (long)ntohl(pp->sent));		(void) fprintf(fp, "packets received:     %ld\n",			       (long)ntohl(pp->processed));		(void) fprintf(fp, "bad authentication:   %ld\n",			       (long)ntohl(pp->badauth));		(void) fprintf(fp, "bogus origin:         %ld\n",			       (long)ntohl(pp->bogusorg));		(void) fprintf(fp, "duplicate:            %ld\n",			       (long)ntohl(pp->oldpkt));		(void) fprintf(fp, "bad dispersion:       %ld\n",			       (long)ntohl(pp->seldisp));		(void) fprintf(fp, "bad reference time:   %ld\n",			       (long)ntohl(pp->selbroken));		(void) fprintf(fp, "candidate order:      %d\n",			       (int)pp->candidate);		if (items > 0)		    (void) fprintf(fp, "\n");		pp++;	}}/* * loopinfo - show loop filter information */static voidloopinfo(	struct parse *pcmd,	FILE *fp	){	struct info_loop *il;	int items;	int itemsize;	int oneline = 0;	int res;	l_fp tempts;	if (pcmd->nargs > 0) {		if (STREQ(pcmd->argval[0].string, "oneline"))		    oneline = 1;		else if (STREQ(pcmd->argval[0].string, "multiline"))		    oneline = 0;		else {			(void) fprintf(stderr, "How many lines?\n");			return;		}	}again:	res = doquery(impl_ver, REQ_LOOP_INFO, 0, 0, 0, (char *)NULL,		      &items, &itemsize, (void *)&il, 0, 		      sizeof(struct info_loop));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res != 0)	    return;	if (!check1item(items, fp))	    return;	if (!checkitemsize(itemsize, sizeof(struct info_loop)))	    return;	if (oneline) {		l_fp temp2ts;		NTOHL_FP(&il->last_offset, &tempts);		NTOHL_FP(&il->drift_comp, &temp2ts);		(void) fprintf(fp,			       "offset %s, frequency %s, time_const %ld, watchdog %ld\n",			       lfptoa(&tempts, 6),			       lfptoa(&temp2ts, 3),			       (u_long)ntohl((u_long)il->compliance),			       (u_long)ntohl((u_long)il->watchdog_timer));	} else {		NTOHL_FP(&il->last_offset, &tempts);		(void) fprintf(fp, "offset:               %s s\n",			       lfptoa(&tempts, 6));		NTOHL_FP(&il->drift_comp, &tempts);		(void) fprintf(fp, "frequency:            %s ppm\n",			       lfptoa(&tempts, 3));		(void) fprintf(fp, "poll adjust:          %ld\n",			       (u_long)ntohl(il->compliance));		(void) fprintf(fp, "watchdog timer:       %ld s\n",			       (u_long)ntohl(il->watchdog_timer));	}}/* * sysinfo - show current system state *//*ARGSUSED*/static voidsysinfo(	struct parse *pcmd,	FILE *fp	){	struct info_sys *is;	struct sockaddr_storage peeraddr;	int items;	int itemsize;	int res;	l_fp tempts;again:	res = doquery(impl_ver, REQ_SYS_INFO, 0, 0, 0, (char *)NULL,		      &items, &itemsize, (void *)&is, 0,		      sizeof(struct info_sys));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res != 0)	    return;	if (!check1item(items, fp))	    return;	if (!checkitemsize(itemsize, sizeof(struct info_sys)) &&	    !checkitemsize(itemsize, v4sizeof(struct info_sys)))	    return;	memset((char *)&peeraddr, 0, sizeof(peeraddr));	if (is->v6_flag != 0) {		GET_INADDR6(peeraddr) = is->peer6;		peeraddr.ss_family = AF_INET6;	} else {		GET_INADDR(peeraddr) = is->peer;		peeraddr.ss_family = AF_INET;	}#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR	peeraddr.ss_len = SOCKLEN(&peeraddr);#endif	(void) fprintf(fp, "system peer:          %s\n", nntohost(&peeraddr));	(void) fprintf(fp, "system peer mode:     %s\n", modetoa(is->peer_mode));	(void) fprintf(fp, "leap indicator:       %c%c\n",		       is->leap & 0x2 ? '1' : '0',		       is->leap & 0x1 ? '1' : '0');	(void) fprintf(fp, "stratum:              %d\n", (int)is->stratum);	(void) fprintf(fp, "precision:            %d\n", (int)is->precision);	(void) fprintf(fp, "root distance:        %s s\n",		       fptoa(NTOHS_FP(is->rootdelay), 5));	(void) fprintf(fp, "root dispersion:      %s s\n",		       ufptoa(NTOHS_FP(is->rootdispersion), 5));	(void) fprintf(fp, "reference ID:         [%s]\n",		       refid_string(is->refid, is->stratum));	NTOHL_FP(&is->reftime, &tempts);	(void) fprintf(fp, "reference time:       %s\n", prettydate(&tempts));	(void) fprintf(fp, "system flags:         ");	if ((is->flags & (INFO_FLAG_BCLIENT | INFO_FLAG_AUTHENABLE |	    INFO_FLAG_NTP | INFO_FLAG_KERNEL| INFO_FLAG_CAL |	    INFO_FLAG_PPS_SYNC | INFO_FLAG_MONITOR | INFO_FLAG_FILEGEN)) == 0) {		(void) fprintf(fp, "none\n");	} else {		if (is->flags & INFO_FLAG_BCLIENT)		    (void) fprintf(fp, "bclient ");		if (is->flags & INFO_FLAG_AUTHENTICATE)		    (void) fprintf(fp, "auth ");		if (is->flags & INFO_FLAG_MONITOR)		    (void) fprintf(fp, "monitor ");		if (is->flags & INFO_FLAG_NTP)		    (void) fprintf(fp, "ntp ");		if (is->flags & INFO_FLAG_KERNEL)		    (void) fprintf(fp, "kernel ");		if (is->flags & INFO_FLAG_FILEGEN)		    (void) fprintf(fp, "stats ");		if (is->flags & INFO_FLAG_CAL)		    (void) fprintf(fp, "calibrate ");		if (is->flags & INFO_FLAG_PPS_SYNC)		    (void) fprintf(fp, "pps ");		(void) fprintf(fp, "\n");	}	(void) fprintf(fp, "jitter:               %s s\n",		       fptoa(ntohl(is->frequency), 6));	(void) fprintf(fp, "stability:            %s ppm\n",		       ufptoa(ntohl(is->stability), 3));	(void) fprintf(fp, "broadcastdelay:       %s s\n",		       fptoa(NTOHS_FP(is->bdelay), 6));	NTOHL_FP(&is->authdelay, &tempts);	(void) fprintf(fp, "authdelay:            %s s\n", lfptoa(&tempts, 6));}/* * sysstats - print system statistics *//*ARGSUSED*/static voidsysstats(	struct parse *pcmd,	FILE *fp	){	struct info_sys_stats *ss;	int items;	int itemsize;	int res;again:	res = doquery(impl_ver, REQ_SYS_STATS, 0, 0, 0, (char *)NULL,		      &items, &itemsize, (void *)&ss, 0, 		      sizeof(struct info_sys_stats));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res != 0)	    return;	if (!check1item(items, fp))	    return;	if (itemsize != sizeof(struct info_sys_stats) &&	    itemsize != sizeof(struct old_info_sys_stats)) {		/* issue warning according to new structure size */		checkitemsize(itemsize, sizeof(struct info_sys_stats));		return;	}	fprintf(fp, "time since restart:     %ld\n",	       (u_long)ntohl(ss->timeup));	fprintf(fp, "time since reset:       %ld\n",		(u_long)ntohl(ss->timereset));        fprintf(fp, "packets received:       %ld\n",		(u_long)ntohl(ss->received));	fprintf(fp, "packets processed:      %ld\n",		(u_long)ntohl(ss->processed));	fprintf(fp, "current version:        %ld\n",	       (u_long)ntohl(ss->newversionpkt));	fprintf(fp, "previous version:       %ld\n",	       (u_long)ntohl(ss->oldversionpkt));	fprintf(fp, "bad version:            %ld\n",	       (u_long)ntohl(ss->unknownversion));	fprintf(fp, "access denied:          %ld\n",		(u_long)ntohl(ss->denied));	fprintf(fp, "bad length or format:   %ld\n",	       (u_long)ntohl(ss->badlength));	fprintf(fp, "bad authentication:     %ld\n",	       (u_long)ntohl(ss->badauth));	if (itemsize != sizeof(struct info_sys_stats))	    return;		fprintf(fp, "rate exceeded:          %ld\n",	       (u_long)ntohl(ss->limitrejected));}/* * iostats - print I/O statistics *//*ARGSUSED*/static voidiostats(	struct parse *pcmd,	FILE *fp	){

⌨️ 快捷键说明

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