Annotation of embedaddon/ntp/util/timetrim.c, revision 1.1
1.1 ! misho 1: #if defined(sgi) || defined(_UNICOSMP)
! 2: /*
! 3: * timetrim.c
! 4: *
! 5: * "timetrim" allows setting and adjustment of the system clock frequency
! 6: * trim parameter on Silicon Graphics machines. The trim value native
! 7: * units are nanoseconds per second (10**-9), so a trim value of 1 makes
! 8: * the system clock step ahead 1 nanosecond more per second than a value
! 9: * of zero. Xntpd currently uses units of 2**-20 secs for its frequency
! 10: * offset (drift) values; to convert to a timetrim value, multiply by
! 11: * 1E9 / 2**20 (about 954).
! 12: *
! 13: * "timetrim" with no arguments just prints out the current kernel value.
! 14: * With a numeric argument, the kernel value is set to the supplied value.
! 15: * The "-i" flag causes the supplied value to be added to the kernel value.
! 16: * The "-n" option causes all input and output to be in xntpd units rather
! 17: * than timetrim native units.
! 18: *
! 19: * Note that there is a limit of +-3000000 (0.3%) on the timetrim value
! 20: * which is (silently?) enforced by the kernel.
! 21: *
! 22: */
! 23:
! 24: #ifdef HAVE_CONFIG_H
! 25: #include <config.h>
! 26: #endif
! 27:
! 28: #include <stdio.h>
! 29: #include <ctype.h>
! 30: #include <stdlib.h>
! 31: #ifdef HAVE_SYS_SYSSGI_H
! 32: # include <sys/syssgi.h>
! 33: #endif
! 34: #ifdef HAVE_SYS_SYSTUNE_H
! 35: # include <sys/systune.h>
! 36: #endif
! 37:
! 38: #define abs(X) (((X) < 0) ? -(X) : (X))
! 39: #define USAGE "usage: timetrim [-n] [[-i] value]\n"
! 40: #define SGITONTP(X) ((double)(X) * 1048576.0/1.0e9)
! 41: #define NTPTOSGI(X) ((long)((X) * 1.0e9/1048576.0))
! 42:
! 43: int
! 44: main(
! 45: int argc,
! 46: char *argv[]
! 47: )
! 48: {
! 49: char *rem;
! 50: int incremental = 0, ntpunits = 0;
! 51: long timetrim;
! 52: double value;
! 53:
! 54: while (--argc && **++argv == '-' && isalpha((int)argv[0][1])) {
! 55: switch (argv[0][1]) {
! 56: case 'i':
! 57: incremental++;
! 58: break;
! 59: case 'n':
! 60: ntpunits++;
! 61: break;
! 62: default:
! 63: fprintf(stderr, USAGE);
! 64: exit(1);
! 65: }
! 66: }
! 67:
! 68: #ifdef HAVE_SYS_SYSSGI_H
! 69: if (syssgi(SGI_GETTIMETRIM, &timetrim) < 0) {
! 70: perror("syssgi");
! 71: exit(2);
! 72: }
! 73: #endif
! 74: #ifdef HAVE_SYS_SYSTUNE_H
! 75: if (systune(SYSTUNE_GET, "timetrim", &timetrim) < 0) {
! 76: perror("systune");
! 77: exit(2);
! 78: }
! 79: #endif
! 80:
! 81: if (argc == 0) {
! 82: if (ntpunits)
! 83: fprintf(stdout, "%0.5f\n", SGITONTP(timetrim));
! 84: else
! 85: fprintf(stdout, "%ld\n", timetrim);
! 86: } else if (argc != 1) {
! 87: fprintf(stderr, USAGE);
! 88: exit(1);
! 89: } else {
! 90: value = strtod(argv[0], &rem);
! 91: if (*rem != '\0') {
! 92: fprintf(stderr, USAGE);
! 93: exit(1);
! 94: }
! 95: if (ntpunits)
! 96: value = NTPTOSGI(value);
! 97: if (incremental)
! 98: timetrim += value;
! 99: else
! 100: timetrim = value;
! 101: #ifdef HAVE_SYS_SYSSGI_H
! 102: if (syssgi(SGI_SETTIMETRIM, timetrim) < 0) {
! 103: perror("syssgi");
! 104: exit(2);
! 105: }
! 106: #endif
! 107: #ifdef HAVE_SYS_SYSTUNE_H
! 108: if (systune(SYSTUNE_SET, "timer", "timetrim", &timetrim) < 0) {
! 109: perror("systune");
! 110: exit(2);
! 111: }
! 112: #endif
! 113: }
! 114: return 0;
! 115: }
! 116: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>