1c0b746e5SOllivier Robert /* 2c0b746e5SOllivier Robert * refclock_conf.c - reference clock configuration 3c0b746e5SOllivier Robert */ 4c0b746e5SOllivier Robert #ifdef HAVE_CONFIG_H 5c0b746e5SOllivier Robert #include <config.h> 6c0b746e5SOllivier Robert #endif 7c0b746e5SOllivier Robert 8c0b746e5SOllivier Robert #include <stdio.h> 9c0b746e5SOllivier Robert #include <sys/types.h> 10c0b746e5SOllivier Robert 11c0b746e5SOllivier Robert #include "ntpd.h" 12c0b746e5SOllivier Robert #include "ntp_refclock.h" 13c0b746e5SOllivier Robert #include "ntp_stdlib.h" 14c0b746e5SOllivier Robert 15c0b746e5SOllivier Robert #ifdef REFCLOCK 16c0b746e5SOllivier Robert 17c0b746e5SOllivier Robert static struct refclock refclock_none = { 18c0b746e5SOllivier Robert noentry, noentry, noentry, noentry, noentry, noentry, NOFLAGS 19c0b746e5SOllivier Robert }; 20c0b746e5SOllivier Robert 21c0b746e5SOllivier Robert #ifdef CLOCK_LOCAL 22c0b746e5SOllivier Robert extern struct refclock refclock_local; 23c0b746e5SOllivier Robert #else 24c0b746e5SOllivier Robert #define refclock_local refclock_none 25c0b746e5SOllivier Robert #endif 26c0b746e5SOllivier Robert 27c0b746e5SOllivier Robert #ifdef CLOCK_PST 28c0b746e5SOllivier Robert extern struct refclock refclock_pst; 29c0b746e5SOllivier Robert #else 30c0b746e5SOllivier Robert #define refclock_pst refclock_none 31c0b746e5SOllivier Robert #endif 32c0b746e5SOllivier Robert 33c0b746e5SOllivier Robert #ifdef CLOCK_CHU 34c0b746e5SOllivier Robert extern struct refclock refclock_chu; 35c0b746e5SOllivier Robert #else 36c0b746e5SOllivier Robert #define refclock_chu refclock_none 37c0b746e5SOllivier Robert #endif 38c0b746e5SOllivier Robert 39a151a66cSOllivier Robert #ifdef CLOCK_WWV 40a151a66cSOllivier Robert extern struct refclock refclock_wwv; 41a151a66cSOllivier Robert #else 42a151a66cSOllivier Robert #define refclock_wwv refclock_none 43a151a66cSOllivier Robert #endif 44a151a66cSOllivier Robert 45a151a66cSOllivier Robert #ifdef CLOCK_SPECTRACOM 46c0b746e5SOllivier Robert extern struct refclock refclock_wwvb; 47c0b746e5SOllivier Robert #else 48c0b746e5SOllivier Robert #define refclock_wwvb refclock_none 49c0b746e5SOllivier Robert #endif 50c0b746e5SOllivier Robert 51c0b746e5SOllivier Robert #ifdef CLOCK_PARSE 52c0b746e5SOllivier Robert extern struct refclock refclock_parse; 53c0b746e5SOllivier Robert #else 54c0b746e5SOllivier Robert #define refclock_parse refclock_none 55c0b746e5SOllivier Robert #endif 56c0b746e5SOllivier Robert 57224ba2bdSOllivier Robert #if defined(CLOCK_MX4200) && defined(HAVE_PPSAPI) 58c0b746e5SOllivier Robert extern struct refclock refclock_mx4200; 59c0b746e5SOllivier Robert #else 60c0b746e5SOllivier Robert #define refclock_mx4200 refclock_none 61c0b746e5SOllivier Robert #endif 62c0b746e5SOllivier Robert 63c0b746e5SOllivier Robert #ifdef CLOCK_AS2201 64c0b746e5SOllivier Robert extern struct refclock refclock_as2201; 65c0b746e5SOllivier Robert #else 66c0b746e5SOllivier Robert #define refclock_as2201 refclock_none 67c0b746e5SOllivier Robert #endif 68c0b746e5SOllivier Robert 69c0b746e5SOllivier Robert #ifdef CLOCK_ARBITER 70c0b746e5SOllivier Robert extern struct refclock refclock_arbiter; 71c0b746e5SOllivier Robert #else 72c0b746e5SOllivier Robert #define refclock_arbiter refclock_none 73c0b746e5SOllivier Robert #endif 74c0b746e5SOllivier Robert 75c0b746e5SOllivier Robert #ifdef CLOCK_TPRO 76c0b746e5SOllivier Robert extern struct refclock refclock_tpro; 77c0b746e5SOllivier Robert #else 78c0b746e5SOllivier Robert #define refclock_tpro refclock_none 79c0b746e5SOllivier Robert #endif 80c0b746e5SOllivier Robert 81c0b746e5SOllivier Robert #ifdef CLOCK_LEITCH 82c0b746e5SOllivier Robert extern struct refclock refclock_leitch; 83c0b746e5SOllivier Robert #else 84c0b746e5SOllivier Robert #define refclock_leitch refclock_none 85c0b746e5SOllivier Robert #endif 86c0b746e5SOllivier Robert 87c0b746e5SOllivier Robert #ifdef CLOCK_IRIG 88c0b746e5SOllivier Robert extern struct refclock refclock_irig; 89c0b746e5SOllivier Robert #else 90c0b746e5SOllivier Robert #define refclock_irig refclock_none 91c0b746e5SOllivier Robert #endif 92c0b746e5SOllivier Robert 93ea906c41SOllivier Robert #if 0 && defined(CLOCK_MSFEES) && defined(PPS) 94c0b746e5SOllivier Robert extern struct refclock refclock_msfees; 95c0b746e5SOllivier Robert #else 96c0b746e5SOllivier Robert #define refclock_msfees refclock_none 97c0b746e5SOllivier Robert #endif 98c0b746e5SOllivier Robert 99c0b746e5SOllivier Robert #ifdef CLOCK_BANC 100c0b746e5SOllivier Robert extern struct refclock refclock_bancomm; 101c0b746e5SOllivier Robert #else 102c0b746e5SOllivier Robert #define refclock_bancomm refclock_none 103c0b746e5SOllivier Robert #endif 104c0b746e5SOllivier Robert 105c0b746e5SOllivier Robert #ifdef CLOCK_TRUETIME 106c0b746e5SOllivier Robert extern struct refclock refclock_true; 107c0b746e5SOllivier Robert #else 108c0b746e5SOllivier Robert #define refclock_true refclock_none 109c0b746e5SOllivier Robert #endif 110c0b746e5SOllivier Robert 111c0b746e5SOllivier Robert #ifdef CLOCK_DATUM 112c0b746e5SOllivier Robert extern struct refclock refclock_datum; 113c0b746e5SOllivier Robert #else 114c0b746e5SOllivier Robert #define refclock_datum refclock_none 115c0b746e5SOllivier Robert #endif 116c0b746e5SOllivier Robert 117c0b746e5SOllivier Robert #ifdef CLOCK_ACTS 118c0b746e5SOllivier Robert extern struct refclock refclock_acts; 119c0b746e5SOllivier Robert #else 120c0b746e5SOllivier Robert #define refclock_acts refclock_none 121c0b746e5SOllivier Robert #endif 122c0b746e5SOllivier Robert 123c0b746e5SOllivier Robert #ifdef CLOCK_HEATH 124c0b746e5SOllivier Robert extern struct refclock refclock_heath; 125c0b746e5SOllivier Robert #else 126c0b746e5SOllivier Robert #define refclock_heath refclock_none 127c0b746e5SOllivier Robert #endif 128c0b746e5SOllivier Robert 129c0b746e5SOllivier Robert #ifdef CLOCK_NMEA 130c0b746e5SOllivier Robert extern struct refclock refclock_nmea; 131c0b746e5SOllivier Robert #else 132c0b746e5SOllivier Robert #define refclock_nmea refclock_none 133c0b746e5SOllivier Robert #endif 134c0b746e5SOllivier Robert 1352b15cb3dSCy Schubert #if defined (CLOCK_ATOM) && defined(HAVE_PPSAPI) 136c0b746e5SOllivier Robert extern struct refclock refclock_atom; 137c0b746e5SOllivier Robert #else 138c0b746e5SOllivier Robert #define refclock_atom refclock_none 139c0b746e5SOllivier Robert #endif 140c0b746e5SOllivier Robert 141c0b746e5SOllivier Robert #ifdef CLOCK_HPGPS 142c0b746e5SOllivier Robert extern struct refclock refclock_hpgps; 143c0b746e5SOllivier Robert #else 144c0b746e5SOllivier Robert #define refclock_hpgps refclock_none 145c0b746e5SOllivier Robert #endif 146c0b746e5SOllivier Robert 147c0b746e5SOllivier Robert #ifdef CLOCK_GPSVME 148c0b746e5SOllivier Robert extern struct refclock refclock_gpsvme; 149c0b746e5SOllivier Robert #else 150c0b746e5SOllivier Robert #define refclock_gpsvme refclock_none 151c0b746e5SOllivier Robert #endif 152c0b746e5SOllivier Robert 153c0b746e5SOllivier Robert #ifdef CLOCK_ARCRON_MSF 154c0b746e5SOllivier Robert extern struct refclock refclock_arc; 155c0b746e5SOllivier Robert #else 156c0b746e5SOllivier Robert #define refclock_arc refclock_none 157c0b746e5SOllivier Robert #endif 158c0b746e5SOllivier Robert 159a151a66cSOllivier Robert #ifdef CLOCK_SHM 160c0b746e5SOllivier Robert extern struct refclock refclock_shm; 161c0b746e5SOllivier Robert #else 162c0b746e5SOllivier Robert #define refclock_shm refclock_none 163c0b746e5SOllivier Robert #endif 164c0b746e5SOllivier Robert 165c0b746e5SOllivier Robert #ifdef CLOCK_PALISADE 166c0b746e5SOllivier Robert extern struct refclock refclock_palisade; 167c0b746e5SOllivier Robert #else 168c0b746e5SOllivier Robert #define refclock_palisade refclock_none 169c0b746e5SOllivier Robert #endif 170c0b746e5SOllivier Robert 171ea906c41SOllivier Robert #if defined(CLOCK_ONCORE) 172c0b746e5SOllivier Robert extern struct refclock refclock_oncore; 173c0b746e5SOllivier Robert #else 174c0b746e5SOllivier Robert #define refclock_oncore refclock_none 175c0b746e5SOllivier Robert #endif 176c0b746e5SOllivier Robert 1779c2daa00SOllivier Robert #if defined(CLOCK_JUPITER) && defined(HAVE_PPSAPI) 178c0b746e5SOllivier Robert extern struct refclock refclock_jupiter; 179c0b746e5SOllivier Robert #else 180c0b746e5SOllivier Robert #define refclock_jupiter refclock_none 181c0b746e5SOllivier Robert #endif 182c0b746e5SOllivier Robert 183c0b746e5SOllivier Robert #if defined(CLOCK_CHRONOLOG) 184c0b746e5SOllivier Robert extern struct refclock refclock_chronolog; 185c0b746e5SOllivier Robert #else 186c0b746e5SOllivier Robert #define refclock_chronolog refclock_none 187c0b746e5SOllivier Robert #endif 188c0b746e5SOllivier Robert 189c0b746e5SOllivier Robert #if defined(CLOCK_DUMBCLOCK) 190c0b746e5SOllivier Robert extern struct refclock refclock_dumbclock; 191c0b746e5SOllivier Robert #else 192c0b746e5SOllivier Robert #define refclock_dumbclock refclock_none 193c0b746e5SOllivier Robert #endif 194c0b746e5SOllivier Robert 195c0b746e5SOllivier Robert #ifdef CLOCK_ULINK 196c0b746e5SOllivier Robert extern struct refclock refclock_ulink; 197c0b746e5SOllivier Robert #else 198c0b746e5SOllivier Robert #define refclock_ulink refclock_none 199c0b746e5SOllivier Robert #endif 200c0b746e5SOllivier Robert 201a151a66cSOllivier Robert #ifdef CLOCK_PCF 202a151a66cSOllivier Robert extern struct refclock refclock_pcf; 203a151a66cSOllivier Robert #else 204a151a66cSOllivier Robert #define refclock_pcf refclock_none 205a151a66cSOllivier Robert #endif 206a151a66cSOllivier Robert 207a151a66cSOllivier Robert #ifdef CLOCK_FG 208a151a66cSOllivier Robert extern struct refclock refclock_fg; 209a151a66cSOllivier Robert #else 210a151a66cSOllivier Robert #define refclock_fg refclock_none 211a151a66cSOllivier Robert #endif 212a151a66cSOllivier Robert 213224ba2bdSOllivier Robert #ifdef CLOCK_HOPF_SERIAL 214224ba2bdSOllivier Robert extern struct refclock refclock_hopfser; 215224ba2bdSOllivier Robert #else 216224ba2bdSOllivier Robert #define refclock_hopfser refclock_none 217224ba2bdSOllivier Robert #endif 218224ba2bdSOllivier Robert 219224ba2bdSOllivier Robert #ifdef CLOCK_HOPF_PCI 220224ba2bdSOllivier Robert extern struct refclock refclock_hopfpci; 221224ba2bdSOllivier Robert #else 222224ba2bdSOllivier Robert #define refclock_hopfpci refclock_none 223224ba2bdSOllivier Robert #endif 224c0b746e5SOllivier Robert 225ce265a54SOllivier Robert #ifdef CLOCK_JJY 226ce265a54SOllivier Robert extern struct refclock refclock_jjy; 227ce265a54SOllivier Robert #else 228ce265a54SOllivier Robert #define refclock_jjy refclock_none 229ce265a54SOllivier Robert #endif 230ce265a54SOllivier Robert 231ce265a54SOllivier Robert #ifdef CLOCK_TT560 232ce265a54SOllivier Robert extern struct refclock refclock_tt560; 233ce265a54SOllivier Robert #else 234ce265a54SOllivier Robert #define refclock_tt560 refclock_none 235ce265a54SOllivier Robert #endif 236ce265a54SOllivier Robert 237ce265a54SOllivier Robert #ifdef CLOCK_ZYFER 238ce265a54SOllivier Robert extern struct refclock refclock_zyfer; 239ce265a54SOllivier Robert #else 240ce265a54SOllivier Robert #define refclock_zyfer refclock_none 241ce265a54SOllivier Robert #endif 242ce265a54SOllivier Robert 243ba371819SOllivier Robert #ifdef CLOCK_RIPENCC 244ba371819SOllivier Robert extern struct refclock refclock_ripencc; 245ba371819SOllivier Robert #else 246ba371819SOllivier Robert #define refclock_ripencc refclock_none 247ba371819SOllivier Robert #endif 248ba371819SOllivier Robert 249ba371819SOllivier Robert #ifdef CLOCK_NEOCLOCK4X 250ba371819SOllivier Robert extern struct refclock refclock_neoclock4x; 251ba371819SOllivier Robert #else 252ba371819SOllivier Robert #define refclock_neoclock4x refclock_none 253ba371819SOllivier Robert #endif 254ba371819SOllivier Robert 2552b15cb3dSCy Schubert #ifdef CLOCK_TSYNCPCI 2562b15cb3dSCy Schubert extern struct refclock refclock_tsyncpci; 2572b15cb3dSCy Schubert #else 2582b15cb3dSCy Schubert #define refclock_tsyncpci refclock_none 2592b15cb3dSCy Schubert #endif 2602b15cb3dSCy Schubert 2612b15cb3dSCy Schubert #if defined(CLOCK_GPSDJSON) && !defined(SYS_WINNT) 2622b15cb3dSCy Schubert extern struct refclock refclock_gpsdjson; 2632b15cb3dSCy Schubert #else 2642b15cb3dSCy Schubert #define refclock_gpsdjson refclock_none 2652b15cb3dSCy Schubert #endif 266c0b746e5SOllivier Robert /* 267c0b746e5SOllivier Robert * Order is clock_start(), clock_shutdown(), clock_poll(), 268c0b746e5SOllivier Robert * clock_control(), clock_init(), clock_buginfo, clock_flags; 269c0b746e5SOllivier Robert * 270c0b746e5SOllivier Robert * Types are defined in ntp.h. The index must match this. 271c0b746e5SOllivier Robert */ 2722b15cb3dSCy Schubert struct refclock * const refclock_conf[] = { 273c0b746e5SOllivier Robert &refclock_none, /* 0 REFCLK_NONE */ 274c0b746e5SOllivier Robert &refclock_local, /* 1 REFCLK_LOCAL */ 275ea906c41SOllivier Robert &refclock_none, /* 2 deprecated: REFCLK_GPS_TRAK */ 276c0b746e5SOllivier Robert &refclock_pst, /* 3 REFCLK_WWV_PST */ 277a151a66cSOllivier Robert &refclock_wwvb, /* 4 REFCLK_SPECTRACOM */ 278c0b746e5SOllivier Robert &refclock_true, /* 5 REFCLK_TRUETIME */ 279c0b746e5SOllivier Robert &refclock_irig, /* 6 REFCLK_IRIG_AUDIO */ 280a151a66cSOllivier Robert &refclock_chu, /* 7 REFCLK_CHU_AUDIO */ 281c0b746e5SOllivier Robert &refclock_parse, /* 8 REFCLK_PARSE */ 282c0b746e5SOllivier Robert &refclock_mx4200, /* 9 REFCLK_GPS_MX4200 */ 283c0b746e5SOllivier Robert &refclock_as2201, /* 10 REFCLK_GPS_AS2201 */ 284c0b746e5SOllivier Robert &refclock_arbiter, /* 11 REFCLK_GPS_ARBITER */ 285c0b746e5SOllivier Robert &refclock_tpro, /* 12 REFCLK_IRIG_TPRO */ 286c0b746e5SOllivier Robert &refclock_leitch, /* 13 REFCLK_ATOM_LEITCH */ 287ea906c41SOllivier Robert &refclock_none, /* 14 deprecated: REFCLK_MSF_EES */ 288ea906c41SOllivier Robert &refclock_none, /* 15 not used */ 289c0b746e5SOllivier Robert &refclock_bancomm, /* 16 REFCLK_IRIG_BANCOMM */ 290c0b746e5SOllivier Robert &refclock_datum, /* 17 REFCLK_GPS_DATUM */ 291ea906c41SOllivier Robert &refclock_acts, /* 18 REFCLK_ACTS */ 292c0b746e5SOllivier Robert &refclock_heath, /* 19 REFCLK_WWV_HEATH */ 293c0b746e5SOllivier Robert &refclock_nmea, /* 20 REFCLK_GPS_NMEA */ 294c0b746e5SOllivier Robert &refclock_gpsvme, /* 21 REFCLK_GPS_VME */ 295c0b746e5SOllivier Robert &refclock_atom, /* 22 REFCLK_ATOM_PPS */ 296ea906c41SOllivier Robert &refclock_none, /* 23 not used */ 297ea906c41SOllivier Robert &refclock_none, /* 24 not used */ 298ea906c41SOllivier Robert &refclock_none, /* 25 not used */ 299c0b746e5SOllivier Robert &refclock_hpgps, /* 26 REFCLK_GPS_HP */ 300c0b746e5SOllivier Robert &refclock_arc, /* 27 REFCLK_ARCRON_MSF */ 301c0b746e5SOllivier Robert &refclock_shm, /* 28 REFCLK_SHM */ 302c0b746e5SOllivier Robert &refclock_palisade, /* 29 REFCLK_PALISADE */ 303c0b746e5SOllivier Robert &refclock_oncore, /* 30 REFCLK_ONCORE */ 304c0b746e5SOllivier Robert &refclock_jupiter, /* 31 REFCLK_GPS_JUPITER */ 305c0b746e5SOllivier Robert &refclock_chronolog, /* 32 REFCLK_CHRONOLOG */ 306c0b746e5SOllivier Robert &refclock_dumbclock, /* 33 REFCLK_DUMBCLOCK */ 307c0b746e5SOllivier Robert &refclock_ulink, /* 34 REFCLOCK_ULINK */ 308a151a66cSOllivier Robert &refclock_pcf, /* 35 REFCLOCK_PCF */ 309a151a66cSOllivier Robert &refclock_wwv, /* 36 REFCLOCK_WWV_AUDIO */ 310224ba2bdSOllivier Robert &refclock_fg, /* 37 REFCLOCK_FG */ 311224ba2bdSOllivier Robert &refclock_hopfser, /* 38 REFCLK_HOPF_SERIAL */ 312ce265a54SOllivier Robert &refclock_hopfpci, /* 39 REFCLK_HOPF_PCI */ 313ce265a54SOllivier Robert &refclock_jjy, /* 40 REFCLK_JJY */ 314ce265a54SOllivier Robert &refclock_tt560, /* 41 REFCLK_TT560 */ 315ba371819SOllivier Robert &refclock_zyfer, /* 42 REFCLK_ZYFER */ 316ba371819SOllivier Robert &refclock_ripencc, /* 43 REFCLK_RIPENCC */ 3172b15cb3dSCy Schubert &refclock_neoclock4x, /* 44 REFCLK_NEOCLOCK4X */ 3182b15cb3dSCy Schubert &refclock_tsyncpci, /* 45 REFCLK_TSYNCPCI */ 3192b15cb3dSCy Schubert &refclock_gpsdjson /* 46 REFCLK_GPSDJSON */ 320c0b746e5SOllivier Robert }; 321c0b746e5SOllivier Robert 322c0b746e5SOllivier Robert u_char num_refclock_conf = sizeof(refclock_conf)/sizeof(struct refclock *); 323c0b746e5SOllivier Robert 324c0b746e5SOllivier Robert #else 325*f5f40dd6SCy Schubert NONEMPTY_TRANSLATION_UNIT 326c0b746e5SOllivier Robert #endif 327