Annotation of embedaddon/ntp/kernel/README, revision 1.1.1.1

1.1       misho       1: Installing Line Disciplines and Streams Modules
                      2: 
                      3: Description
                      4: 
                      5: Most radio and modem clocks used for a primary (stratum-1) NTP server
                      6: utilize serial ports operating at speeds of 9600 baud or greater. The
                      7: timing jitter contributed by the serial port hardware and software
                      8: discipline can accumulate to several milliseconds on a typical Unix
                      9: workstation. In order to reduce these errors, a set of special line
                     10: disciplines can be configured in the operating system process. These
                     11: disciplines intercept special characters or signals provided by the
                     12: radio or modem clock and save a local timestamp for later processing.
                     13: 
                     14: The disciplines can be compiled in the kernel in older BSD-derived
                     15: systems, or installed as System V streams modules and either compiled in
                     16: the kernel or dynamically loaded when required. In either case, they
                     17: require reconfiguration of the Unix kernel and provisions in the NTP
                     18: daemon xntpd. The streams modules can be pushed and popped from the
                     19: streams stack using conventional System V streams program primitives.
                     20: Note that not all Unix kernels support line disciplines and of those
                     21: that do, not all support System V streams. The disciplines here are
                     22: known to work correctly with SunOS 4.x kernels, but have not been tested
                     23: for other kernels.
                     24: 
                     25: There are two line disciplines included in the distribution. Support for
                     26: each is enabled by adding flags to the DEFS_LOCAL line of the build
                     27: configuration file ./Config.local. This can be done automatically by the
                     28: autoconfiguration build procedures, or can be inserted/deleted after the
                     29: process has completed.
                     30: 
                     31: tty_clk (CLK)
                     32: 
                     33:      This discipline intercepts characters received from the serial port
                     34:      and passes unchanged all except a set of designated characters to
                     35:      the generic serial port discipline. For each of the exception
                     36:      characters, the character is inserted in the receiver buffer
                     37:      followed by a timestamp in Unix timeval format. Both select() and
                     38:      SIGIO are supported by the discipline. The -DCLK flag is used to
                     39:      compile support for this disipline in the NTP daemon. This flag is
                     40:      included if the clkdefs.h file is found in the /sys/sys directory,
                     41:      or it can be added (or deleted) manually.
                     42: 
                     43: tty_chu (CHU)
                     44: 
                     45:      This discipline is a special purpose line discipline for receiving
                     46:      a special timecode broadcast by Canadian time and frequency
                     47:      standard station CHU. The radio signal is first demodulated by the
                     48:      300-baud modem included in the gadget box, then processed by the
                     49:      discipline and finally processed by the Scratchbuilt CHU Receiver
                     50:      discipline (type 7). This discipline should be used in raw mode.
                     51:      The -DCHU flag is used to compile support for this disipline in the
                     52:      NTP daemon. This flag is included if the chudefs.h file is found in
                     53:      the /sys/sys directory, or it can be added (or deleted) manually.
                     54: 
                     55: There are two sets of line disciplines. The tty_clk.c and chu_clk.c are
                     56: designed for use with older BSD systems and are compiled in the kernel.
                     57: The tty_clk_STREAMS.c and chu_clk_STREAMS.c are designed for use with
                     58: System V streams, in which case they can be either compiled in the
                     59: kernel or dynamically loaded. Since these disciplines are small,
                     60: unobtrusive, and to nothing unless specifically enabled by an
                     61: application program, it probably doesn't matter which method is choosen.
                     62: 
                     63: Compiling with the Kernel
                     64: 
                     65: The following procedures are for the tty_clk line discipline; for the
                     66: chu_clk, change "tty" to "chu".
                     67: 1.   Copy tty_clk.c into /sys/os and clkdefs.h into /sys/sys.
                     68: 
                     69: 2.   For SunOS 4.x systems, edit /sys/os/tty_conf.c using some facsimile
                     70:      of the following lines:
                     71: 
                     72:      #include "clk.h"
                     73:      ...
                     74:      #if NCLK > 0
                     75:      int  clkopen(), clkclose(), clkwrite(), clkinput(), clkioctl();
                     76:      #endif
                     77:      ...
                     78:      #if NCLK > 0
                     79:           { clkopen, clkclose, ttread, clkwrite, clkioctl,
                     80:             clkinput, nodev, nulldev, ttstart, nullmodem, /* 10 CLK */
                     81:             ttselect },
                     82:      #else
                     83:           { nodev, nodev, nodev, nodev, nodev,
                     84:             nodev, nodev, nodev, nodev, nodev,
                     85:             nodev },
                     86:      #endif
                     87: 
                     88:      For Ultrix 4.x systems, edit /sys/data/tty_conf_data.c using some
                     89:      facsimile of the following lines:
                     90: 
                     91:      #include "clk.h"
                     92:      ...
                     93:      #if NCLK > 0
                     94:      int  clkopen(), clkclose(), clkwrite(), clkinput(), clkioctl();
                     95:      #endif
                     96:      ...
                     97:      #if NCLK > 0
                     98:           clkopen, clkclose, ttread, clkwrite, clkioctl, /* 10 CLK */
                     99:           clkinput, nodev, nulldev, ttstart, nulldev,
                    100:      #else
                    101:           nodev, nodev, nodev, nodev, nodev,
                    102:           nodev, nodev, nodev, nodev, nodev,
                    103:      #endif
                    104: 
                    105:      If the kernel doesn't include the ??select() entry in the structure
                    106:      (i.e., there are only ten entry points in the structure) just leave
                    107:      it out. Also note that the number you give the line discipline (10
                    108:      in most kernels) will be specific to that kernel and will depend on
                    109:      what is in there already. The entries sould be in order with no
                    110:      missing space; that is, if there are only seven disciplines already
                    111:      defined and you want to use 10 for good reason, you should define a
                    112:      dummy 9th entry like this:
                    113: 
                    114:      nodev, nodev, nodev, nodev, nodev, /* 9 CLK */
                    115:      nodev, nodev, nodev, nodev, nodev,
                    116: 
                    117: 3.   Edit /sys/h/ioctl.h and include a line somewhere near where other
                    118:      line disciplines are defined like:
                    119: 
                    120:      #define  CLKLDISC  10        /* clock line discipline */
                    121: 
                    122:      The "10" should match what you used as the number in the preceding
                    123:      step.
                    124: 
                    125: 4.   Edit /sys/conf/files and add a line which looks like:
                    126: 
                    127:      sys/tty_clk.c     optional clk
                    128: 
                    129: 5.   Edit the kernel configuration file to include the following:
                    130: 
                    131:      pseudo-device  tty 4  # TTY clock support
                    132: 6.   Run config, then make clean, then make depend, then make vmunix,
                    133:      then reboot the new kernel.
                    134: 
                    135: Installing as a streams module
                    136: 
                    137: The following procedures are for the tty_clk_STREAMS line discipline;
                    138: for the tty_chu_STREAMS, change "clk" to "chu".
                    139: 
                    140: 1.   Copy your choice to /sys/os, removing the "_STREAMS" in the
                    141:      filename.
                    142: 
                    143: 2.   Copy the clkdefs.h file to /usr/include/sys, then construct a soft
                    144:      link to /sys/sys.
                    145: 
                    146: 3.   Append to /sys/conf.common/files.cmn:
                    147: 
                    148:      os/tty_tty.c  optional tty
                    149: 
                    150: 4.   Edit /sys/sun/str_conf.c. You'll want to add lines in three places.
                    151:      It'll be sort of clear where when you see the file.
                    152: 
                    153:      #include "tty.h"
                    154:      ...
                    155:      #if NTTY > 0
                    156:      extern struct streamtab ttyinfo;
                    157:      #endif
                    158:      ...
                    159:      #if NTTY > 0
                    160:           { "tty", &ttyinfo },
                    161:      #endif
                    162: 
                    163: 5.   Edit /sys/[arch]/conf/[k-name] (substituting the architecture and
                    164:      kernel name) to stick in:
                    165: 
                    166:      pseudo-device  tty 4  # TTY clock support
                    167: 
                    168:      You can change "4" to anything you like. It will limit the number
                    169:      of instantiations of the tty discipline you can use at the same
                    170:      time.
                    171: 
                    172: 6.   Run config, then make clean, then make depend, then make vmunix,
                    173:      then reboot the new kernel.
                    174: 
                    175: Both disciplines can be dynamically loaded using streams procedures
                    176: specific to the kernel. Before using the chu_clk discipline, all other
                    177: streams modules that may already be on the stack should be popped, then
                    178: the discipline should be pushed on the stack.
                    179: 
                    180: How to Use the tty_clk Line Discipline
                    181: 
                    182: The tty_clk line discipline defines a new ioctl(), CLK_SETSTR, which
                    183: takes a pointer to a string of no more than CLK_MAXSTRSIZE characters.
                    184: Until the first CLK_SETSTR is performed, the discipline will simply pass
                    185: through characters. Once it is passed a string by CLK_SETSTR, any
                    186: character in that string will be immediately followed by a timestamp in
                    187: Unix timeval format. You can change the string whenever you want by
                    188: doing another CLK_SETSTR. The character must be an exact, 8 bit match.
                    189: The character '\000' cannot, unfortunately, be used, as it is the string
                    190: terminator. Passing an empty string to CLK_SETSTR turns off stamping.
                    191: Passing NULL will produce undefined results.
                    192: 
                    193: How to Use the tty_chu Line Discipline
                    194: The tty_chu line discipline translates data received from the CHU modem
                    195: and returns chucode structures, as defined in chudefs.h, and expected by
                    196: the Scratchbuilt CHU Receiver reference clock  driver. Depending on the
                    197: settings of PEDANTIC and ANAL_RETENTIVE used when compiling the kernel,
                    198: some checking of the data may or may not be necessary.
                    199: 
                    200: David L. Mills (mills@udel.edu)

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>