Annotation of embedaddon/ntp/util/timetrim.c, revision 1.1.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>