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

📄 ntpdc_ops.c

📁 网络时间协议NTP 源码 版本v4.2.0b 该源码用于linux平台下
💻 C
📖 第 1 页 / 共 5 页
字号:
	struct info_io_stats *io;	int items;	int itemsize;	int res;again:	res = doquery(impl_ver, REQ_IO_STATS, 0, 0, 0, (char *)NULL,		      &items, &itemsize, (void *)&io, 0, 		      sizeof(struct info_io_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 (!checkitemsize(itemsize, sizeof(struct info_io_stats)))	    return;	(void) fprintf(fp, "time since reset:     %ld\n",		       (u_long)ntohl(io->timereset));	(void) fprintf(fp, "receive buffers:      %d\n",		       ntohs(io->totalrecvbufs));	(void) fprintf(fp, "free receive buffers: %d\n",		       ntohs(io->freerecvbufs));	(void) fprintf(fp, "used receive buffers: %d\n",		       ntohs(io->fullrecvbufs));	(void) fprintf(fp, "low water refills:    %d\n",		       ntohs(io->lowwater));	(void) fprintf(fp, "dropped packets:      %ld\n",		       (u_long)ntohl(io->dropped));	(void) fprintf(fp, "ignored packets:      %ld\n",		       (u_long)ntohl(io->ignored));	(void) fprintf(fp, "received packets:     %ld\n",		       (u_long)ntohl(io->received));	(void) fprintf(fp, "packets sent:         %ld\n",		       (u_long)ntohl(io->sent));	(void) fprintf(fp, "packets not sent:     %ld\n",		       (u_long)ntohl(io->notsent));	(void) fprintf(fp, "interrupts handled:   %ld\n",		       (u_long)ntohl(io->interrupts));	(void) fprintf(fp, "received by int:      %ld\n",		       (u_long)ntohl(io->int_received));}/* * memstats - print peer memory statistics *//*ARGSUSED*/static voidmemstats(	struct parse *pcmd,	FILE *fp	){	struct info_mem_stats *mem;	int i;	int items;	int itemsize;	int res;again:	res = doquery(impl_ver, REQ_MEM_STATS, 0, 0, 0, (char *)NULL,		      &items, &itemsize, (void *)&mem, 0, 		      sizeof(struct info_mem_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 (!checkitemsize(itemsize, sizeof(struct info_mem_stats)))	    return;	(void) fprintf(fp, "time since reset:     %ld\n",		       (u_long)ntohl(mem->timereset));	(void) fprintf(fp, "total peer memory:    %d\n",		       ntohs(mem->totalpeermem));	(void) fprintf(fp, "free peer memory:     %d\n",		       ntohs(mem->freepeermem));	(void) fprintf(fp, "calls to findpeer:    %ld\n",		       (u_long)ntohl(mem->findpeer_calls));	(void) fprintf(fp, "new peer allocations: %ld\n",		       (u_long)ntohl(mem->allocations));	(void) fprintf(fp, "peer demobilizations: %ld\n",		       (u_long)ntohl(mem->demobilizations));	(void) fprintf(fp, "hash table counts:   ");	for (i = 0; i < NTP_HASH_SIZE; i++) {		(void) fprintf(fp, "%4d", (int)mem->hashcount[i]);		if ((i % 8) == 7 && i != (NTP_HASH_SIZE-1)) {			(void) fprintf(fp, "\n                     ");		}	}	(void) fprintf(fp, "\n");}/* * timerstats - print timer statistics *//*ARGSUSED*/static voidtimerstats(	struct parse *pcmd,	FILE *fp	){	struct info_timer_stats *tim;	int items;	int itemsize;	int res;again:	res = doquery(impl_ver, REQ_TIMER_STATS, 0, 0, 0, (char *)NULL,		      &items, &itemsize, (void *)&tim, 0, 		      sizeof(struct info_timer_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 (!checkitemsize(itemsize, sizeof(struct info_timer_stats)))	    return;	(void) fprintf(fp, "time since reset:  %ld\n",		       (u_long)ntohl(tim->timereset));	(void) fprintf(fp, "alarms handled:    %ld\n",		       (u_long)ntohl(tim->alarms));	(void) fprintf(fp, "alarm overruns:    %ld\n",		       (u_long)ntohl(tim->overflows));	(void) fprintf(fp, "calls to transmit: %ld\n",		       (u_long)ntohl(tim->xmtcalls));}/* * addpeer - configure an active mode association */static voidaddpeer(	struct parse *pcmd,	FILE *fp	){	doconfig(pcmd, fp, MODE_ACTIVE, 0);}/* * addserver - configure a client mode association */static voidaddserver(	struct parse *pcmd,	FILE *fp	){	doconfig(pcmd, fp, MODE_CLIENT, 0);}/* * addrefclock - configure a reference clock association */static voidaddrefclock(	struct parse *pcmd,	FILE *fp	){	doconfig(pcmd, fp, MODE_CLIENT, 1);}/* * broadcast - configure a broadcast mode association */static voidbroadcast(	struct parse *pcmd,	FILE *fp	){	doconfig(pcmd, fp, MODE_BROADCAST, 0);}/* * config - configure a new peer association */static voiddoconfig(	struct parse *pcmd,	FILE *fp,	int mode,        int refc	){	struct conf_peer cpeer;	int items;	int itemsize;	char *dummy;	u_long keyid;	u_int version;	u_char minpoll;	u_int flags;	u_char cmode;	int res;	int sendsize;again:	keyid = 0;	version = NTP_OLDVERSION + 1;	flags = 0;	res = 0;	cmode = 0;	minpoll = NTP_MINDPOLL;	if (impl_ver == IMPL_XNTPD)		sendsize = sizeof(struct conf_peer);	else		sendsize = v4sizeof(struct conf_peer);	items = pcmd->nargs;	if (refc) {		if (pcmd->nargs > 1) {			cmode = (u_char) pcmd->argval[1].uval;			items = 2;		}	} else {		if (pcmd->nargs > 1) {			keyid = pcmd->argval[1].uval;			if (keyid > 0) {				flags |= CONF_FLAG_AUTHENABLE;			}			if (pcmd->nargs > 2) {				version = (u_int)pcmd->argval[2].uval;				if (version > NTP_VERSION ||				    version < NTP_OLDVERSION) {					(void)fprintf(fp,					"invalid version number %u\n",					    version);					res++;				}				items = 3;			}		}	}	while (pcmd->nargs > items) {		if (STREQ(pcmd->argval[items].string, "prefer"))		    flags |= CONF_FLAG_PREFER;		else if (STREQ(pcmd->argval[items].string, "burst"))		    flags |= CONF_FLAG_BURST;		else if (STREQ(pcmd->argval[items].string, "iburst"))		    flags |= CONF_FLAG_IBURST;		else {		        long val;			if (!atoint(pcmd->argval[items].string, &val)) {				(void) fprintf(fp,				    "%s not understood\n",				    pcmd->argval[items].string);				res++;				break;			} else {				if (val >= NTP_MINPOLL && val <= NTP_MAXPOLL) {					minpoll = (u_char)val;				} else {					(void) fprintf(fp,						       "minpol must be within %d..%d\n",						       NTP_MINPOLL, NTP_MAXPOLL);					res++;					break;				}								}		}		items++;	}	if (res)	    return;	memset((void *)&cpeer, 0, sizeof(cpeer));	if (pcmd->argval[0].netnum.ss_family == AF_INET) {		cpeer.peeraddr = GET_INADDR(pcmd->argval[0].netnum);		if (impl_ver == IMPL_XNTPD)			cpeer.v6_flag = 0;	} else {		if (impl_ver == IMPL_XNTPD_OLD) {			fprintf(stderr,			    "***Server doesn't understand IPv6 addresses\n");			return;		}		cpeer.peeraddr6 = GET_INADDR6(pcmd->argval[0].netnum);		cpeer.v6_flag = 1;	}	cpeer.hmode = (u_char) mode;	cpeer.keyid = keyid;	cpeer.version = (u_char) version;	cpeer.minpoll = minpoll;	cpeer.maxpoll = NTP_MAXDPOLL;	cpeer.flags = (u_char)flags;	cpeer.ttl = cmode;	res = doquery(impl_ver, REQ_CONFIG, 1, 1,		      sendsize, (char *)&cpeer, &items,		      &itemsize, &dummy, 0, sizeof(struct conf_peer));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res == INFO_ERR_FMT) {		(void) fprintf(fp,		    "***Retrying command with old conf_peer size\n");		res = doquery(impl_ver, REQ_CONFIG, 1, 1,			      sizeof(struct old_conf_peer), (char *)&cpeer,			      &items, &itemsize, &dummy, 0,			      sizeof(struct conf_peer));	}	if (res == 0)	    (void) fprintf(fp, "done!\n");	return;}/* * unconfig - unconfigure some associations */static voidunconfig(	struct parse *pcmd,	FILE *fp	){	/* 8 is the maximum number of peers which will fit in a packet */	struct conf_unpeer *pl, plist[min(MAXARGS, 8)];	int qitems;	int items;	int itemsize;	char *dummy;	int res;	int sendsize;again:	if (impl_ver == IMPL_XNTPD)		sendsize = sizeof(struct conf_unpeer);	else		sendsize = v4sizeof(struct conf_unpeer);	for (qitems = 0, pl = plist; qitems < min(pcmd->nargs, 8); qitems++) {		if (pcmd->argval[0].netnum.ss_family == AF_INET) {			pl->peeraddr = 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->peeraddr6 =			    GET_INADDR6(pcmd->argval[qitems].netnum);			pl->v6_flag = 1;		}		pl = (struct conf_unpeer *)((char *)pl + sendsize);	}	res = doquery(impl_ver, REQ_UNCONFIG, 1, qitems,		      sendsize, (char *)plist, &items,		      &itemsize, &dummy, 0, sizeof(struct conf_unpeer));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res == 0)	    (void) fprintf(fp, "done!\n");}/* * set - set some system flags */static voidset(	struct parse *pcmd,	FILE *fp	){	doset(pcmd, fp, REQ_SET_SYS_FLAG);}/* * clear - clear some system flags */static voidsys_clear(	struct parse *pcmd,	FILE *fp	){	doset(pcmd, fp, REQ_CLR_SYS_FLAG);}/* * doset - set/clear system flags */static voiddoset(	struct parse *pcmd,	FILE *fp,	int req	){	/* 8 is the maximum number of peers which will fit in a packet */	struct conf_sys_flags sys;	int items;	int itemsize;	char *dummy;	int res;	sys.flags = 0;	res = 0;	for (items = 0; items < pcmd->nargs; items++) {		if (STREQ(pcmd->argval[items].string, "auth"))			sys.flags |= SYS_FLAG_AUTH;		else if (STREQ(pcmd->argval[items].string, "bclient"))			sys.flags |= SYS_FLAG_BCLIENT;		else if (STREQ(pcmd->argval[items].string, "calibrate"))			sys.flags |= SYS_FLAG_CAL;		else if (STREQ(pcmd->argval[items].string, "kernel"))			sys.flags |= SYS_FLAG_KERNEL;		else if (STREQ(pcmd->argval[items].string, "monitor"))			sys.flags |= SYS_FLAG_MONITOR;		else if (STREQ(pcmd->argval[items].string, "ntp"))			sys.flags |= SYS_FLAG_NTP;		else if (STREQ(pcmd->argval[items].string, "pps"))			sys.flags |= SYS_FLAG_PPS;		else if (STREQ(pcmd->argval[items].string, "stats"))			sys.flags |= SYS_FLAG_FILEGEN;		else {			(void) fprintf(fp, "Unknown flag %s\n",			    pcmd->argval[items].string);			res = 1;		}	}	if (res || sys.flags == 0)	    return;again:	res = doquery(impl_ver, req, 1, 1,		      sizeof(struct conf_sys_flags), (char *)&sys, &items,		      &itemsize, &dummy, 0, sizeof(struct conf_sys_flags));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res == 0)	    (void) fprintf(fp, "done!\n");}/* * data for printing/interrpreting the restrict flags */struct resflags {  const char *str;	int bit;};/* XXX: HMS: we apparently don't report set bits we do not recognize. */static struct resflags resflagsV2[] = {	{ "ignore",	0x001 },	{ "noserve",	0x002 },	{ "notrust",	0x004 },	{ "noquery",	0x008 },	{ "nomodify",	0x010 },	{ "nopeer",	0x020 },	{ "notrap",	0x040 },	{ "lptrap",	0x080 },	{ "limited",	0x100 },	{ "",		0 }};static struct resflags resflagsV3[] = {	{ "ignore",	RES_IGNORE },	{ "noserve",	RES_DONTSERVE },	{ "notrust",	RES_DONTTRUST },	{ "noquery",	RES_NOQUERY },	{ "nomodify",	RES_NOMODIFY },	{ "nopeer",	RES_NOPEER },	{ "notrap",	RES_NOTRAP },	{ "lptrap",	RES_LPTRAP },	{ "limited",	RES_LIMITED },	{ "version",	RES_VERSION },	{ "kod",	RES_DEMOBILIZE },	{ "timeout",	RES_TIMEOUT },	{ "",		0 }

⌨️ 快捷键说明

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