[ntpsec commit] Remove support for the Symmetricom bc600-series GPS/ IRIG Receiver.

Eric S. Raymond esr at ntpsec.org
Tue Sep 29 22:29:54 UTC 2015


Module:    ntpsec
Branch:    master
Commit:    71eb17d4088d34bf7673b6f36002dd31eb014039
Changeset: http://git.ntpsec.org/ntpsec/commit/?id=71eb17d4088d34bf7673b6f36002dd31eb014039

Author:    Eric S. Raymond <esr at thyrsus.com>
Date:      Tue Sep 29 18:17:27 2015 -0400

Remove support for the Symmetricom bc600-series GPS/IRIG Receiver.

The crash landing here is that it requires a closed-source driver
with kernel privileges.  Mark Atwood and I have judged this to be
an unacceptable security risk.

This commit also adds a note to the docs/refclocks.txt explaining
that as a policy matter refclocks requiring privileged closed-source
blobs will not be supported.

---

 docs/driver16.txt                         |  42 ---
 docs/refclock.txt                         |   7 +-
 libntp/clocktypes.c                       |   4 +-
 ntpd/refclock_bancomm.c                   | 544 ------------------------------
 ntpd/refclock_conf.c                      |   8 +-
 ports/winnt/ppsapi/loopback/src/timepps.h |   4 -
 pylib/refclock.py                         |   6 -
 7 files changed, 8 insertions(+), 607 deletions(-)

diff --git a/docs/driver16.txt b/docs/driver16.txt
deleted file mode 100644
index 416abf7..0000000
--- a/docs/driver16.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-= Symmetricom bc600-series GPS/IRIG Receiver =
-
-Last update: 20-Sep-2015 04:44 UTC
-
-'''''
-
-== Synopsis ==
-
-["literal",subs="normal"]
-Address: 127.127.16.'u'
-Reference ID: BTFP
-Driver ID: GPS_BANCOMM
-Bancomm Device: /dev/btfp0
-
-== Deprecation warning ==
-
-This refclock is deprecated and obsolete. The {project-shortname}
-maintainers plan to remove it in a future release.  If you have a
-requirement for it, please make this known to us.
-
-== Description ==
-
-This is the clock driver for Symmetricom bc600 series of Time and
-Frequency Processors (formerly sold under the brands Datum and
-Bancomm).
-
-It directly supports the bc637PCI-U on FreeBSD, but requires
-installation of a Symmetricom proprietary driver under Linux and
-Solaris.
-
-It might also support the bc635VME on SunOS 4.x/SunOS 5.x, though
-this has not been confirmed since 2003 and {project-shortname} may no
-longer build in that environment without modifications.  The bc635VME
-use also requires the Symmetricom proprietary driver.
-
-== Additional Information ==
-
-link:refclock.html[Reference Clock Drivers]
-
-'''''
-
-include::includes/footer.txt[]
diff --git a/docs/refclock.txt b/docs/refclock.txt
index 8c395fe..3d6990b 100644
--- a/docs/refclock.txt
+++ b/docs/refclock.txt
@@ -143,6 +143,10 @@ entries than you expected.  Support for some very ancient drivers
 (notably, those rendered obsolete by the WWVB modulation change in
 2013) has been dropped in order to reduce our maintainance load.
 
+For security reasons, we will no longer support any refclock that requires
+a closed-source driver to run.  This filtered out the
+Datum/Bancomm/Symmetricom bc600-series GPS/IRIG Receiver.
+
 [options="header"]
 |====================================================================
 | Number                      | Flags | Driver
@@ -155,7 +159,6 @@ entries than you expected.  Support for some very ancient drivers
 | link:driver9.html[Type 9]   | D     | Magnavox MX4200 GPS Receiver
 | link:driver10.html[Type 10] | D     | Austron 2200A/2201A GPS Receivers
 | link:driver11.html[Type 11] | D     | Arbiter 1088A/B GPS Receiver
-| link:driver16.html[Type 16] | D     | Symmetricom bc600-series GPS/IRIG Receiver
 | link:driver18.html[Type 18] | -     | NIST/USNO/PTB Modem Time Services
 | link:driver20.html[Type 20] | T     | Generic NMEA GPS Receiver
 | link:driver22.html[Type 22] | -     | PPS Clock Discipline
@@ -184,7 +187,7 @@ The flags field should be interpreted as follows:
 | T | Regularly tested by an active maintainer
 |====================================================================
 
-Driver numbers 2, 3, 12, 13, 14, 15, 17, 19, 21, 23, 24, 25, 32, 34,
+Driver numbers 2, 3, 12, 13, 14, 15, 16, 17, 19, 21, 23, 24, 25, 32, 34,
 36, 41, and 43 (all unused numbers below 45) are reserved. Some of
 these were used by refclock types (now obsolete) in older NTP versions
 
diff --git a/libntp/clocktypes.c b/libntp/clocktypes.c
index 11e8776..4c7b806 100644
--- a/libntp/clocktypes.c
+++ b/libntp/clocktypes.c
@@ -43,8 +43,8 @@ struct clktype clktypes[] = {
 	  "NOT_USED" },
 	{ REFCLK_NONE,		"not used (15)",
 	  "NOT_USED" },
-	{ REFCLK_IRIG_BANCOMM,	"Bancomm GPS/IRIG Receiver (16)",
-	  "GPS_BANC" },
+	{ REFCLK_NONE,		"not used (16)",
+	  "NOT_USED" },
 	{ REFCLK_GPS_DATUM,	"Datum Precision Time System (17)",
 	  "GPS_DATUM" },
 	{ REFCLK_ACTS,		"Automated Computer Time Service (18)",
diff --git a/ntpd/refclock_bancomm.c b/ntpd/refclock_bancomm.c
deleted file mode 100644
index 9ceb2d2..0000000
--- a/ntpd/refclock_bancomm.c
+++ /dev/null
@@ -1,544 +0,0 @@
-/* refclock_bancomm.c - clock driver for the  Datum/Bancomm bc635VME 
- * Time and Frequency Processor. It requires the BANCOMM bc635VME/
- * bc350VXI Time and Frequency Processor Module Driver for SunOS4.x 
- * and SunOS5.x UNIX Systems. It has been tested on a UltraSparc 
- * IIi-cEngine running Solaris 2.6.
- * 
- * Author(s): 	Ganesh Ramasivan & Gary Cliff, Computing Devices Canada,
- *		Ottawa, Canada
- *
- * Date: 	July 1999
- *
- * Note(s):	The refclock type has been defined as 16.
- *
- *		This program has been modelled after the Bancomm driver
- *		originally written by R. Schmidt of Time Service, U.S. 
- *		Naval Observatory for a HP-UX machine. Since the original
- *		authors no longer plan to maintain this code, all 
- *		references to the HP-UX vme2 driver subsystem bave been
- *		removed. Functions vme_report_event(), vme_receive(), 
- *		vme_control() and vme_buginfo() have been deleted because
- *		they are no longer being used.
- *
- *	04/28/2005 Rob Neal 
- *		Modified to add support for Symmetricom bc637PCI-U Time & 
- *		Frequency Processor. 
- *	2/21/2007 Ali Ghorashi
- *	        Modified to add support for Symmetricom bc637PCI-U Time & 
- *		Frequency Processor on Solaris.
- *		Tested on Solaris 10 with a bc635 card.
- *
- *		Card bus type (VME/VXI or PCI) and environment are specified via the
- *		"mode" keyword on the server command in ntp.conf.
- *		server 127.127.16.u prefer mode M
- *		where u is the id (usually 0) of the entry in /dev (/dev/stfp0)
- *	
- *		and M is one of the following modes: 
- *		1		: FreeBSD PCI 635/637.
- *		2		: Linux or Windows PCI 635/637.
- *		3		: Solaris PCI 635/637
- *		not specified, or other number: 
- *				: Assumed to be VME/VXI legacy Bancomm card on Solaris.
- *		Linux and Windows platforms require Symmetricoms' proprietary driver
- *		for the TFP card.
- *		Solaris requires Symmetricom's driver and its header file (freely distributed) to 
- *		be installed and running.
- */
-
-#include <config.h>
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_control.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-#include "ntp_stdlib.h"
-
-#include <stdio.h>
-#include <sys/ioctl.h>
-#include <syslog.h>
-#include <ctype.h>
-
-struct btfp_time                /* Structure for reading 5 time words   */
-                                /* in one ioctl(2) operation.           */
-{
-	unsigned short btfp_time[5];  /* Time words 0,1,2,3, and 4. (16bit)*/
-};
-/* SunOS5 ioctl commands definitions.*/
-#define BTFPIOC            ( 'b'<< 8 )
-#define IOCIO( l, n )      ( BTFPIOC | n )
-#define IOCIOR( l, n, s )  ( BTFPIOC | n )
-#define IOCIORN( l, n, s ) ( BTFPIOC | n )
-#define IOCIOWN( l, n, s ) ( BTFPIOC | n )
-
-/***** Simple ioctl commands *****/
-#define RUNLOCK     	IOCIOR(b, 19, int )  /* Release Capture Lockout */
-#define RCR0      	IOCIOR(b, 22, int )  /* Read control register zero.*/
-#define	WCR0		IOCIOWN(b, 23, int)	     /* Write control register zero*/
-/***** Compound ioctl commands *****/
-
-/* Read all 5 time words in one call.   */
-#define READTIME	IOCIORN(b, 32, sizeof( struct btfp_time ))
-
-#if defined(__FreeBSD__) 
-#undef  READTIME
-#define READTIME	_IOR('u', 5, struct btfp_time )
-#endif 
-
-/* Solaris specific section */
-struct	stfp_tm {
-	int32_t tm_sec; 
-	int32_t tm_min;
-	int32_t tm_hour;
-	int32_t tm_mday;
-	int32_t tm_mon;
-	int32_t tm_year;
-	int32_t tm_wday;
-	int32_t tm_yday;
-	int32_t tm_isdst;
-};
-
-struct stfp_time {
-	struct stfp_tm	tm;
-	int32_t 	usec;			/* usec 0 - 999999 */
-	int32_t 	hnsec;			/* hnsec 0 - 9 (hundreds of nsecs) */
-	int32_t 	status;
-};
-
-#define SELTIMEFORMAT	2	
-#	define TIME_DECIMAL 0
-#	define TIME_BINARY	1
-
-#if defined(__sun__)
-#undef	READTIME
-#define READTIME		9
-#endif /** __sun___ **/
-/* end solaris specific section */
-
-struct vmedate {			   /* structure returned by get_vmetime.c */
-	unsigned short year;
-	unsigned short day;
-	unsigned short hr;
-	unsigned short mn;
-	unsigned short sec;
-	long frac;
-	unsigned short status;
-};
-
-typedef void *SYMMT_PCI_HANDLE;
-
-/*
- * VME interface parameters. 
- */
-#define VMEPRECISION    (-21)   /* precision assumed (1 us) */
-#define USNOREFID       "BTFP"  /* or whatever */
-#define VMEREFID        "BTFP"  /* reference id */
-#define VMEDESCRIPTION  "Bancomm bc635 TFP" /* who we are */
-#define VMEHSREFID      0x7f7f1000 /* 127.127.16.00 refid hi strata */
-/* clock type 16 is used here  */
-#define GMT           	0       /* hour offset from Greenwich */
-
-/*
- * Imported from ntp_timer module
- */
-extern u_long current_time;     /* current time(s) */
-
-/*
- * VME unit control structure.
- * Changes made to vmeunit structure. Most members are now available in the 
- * new refclockproc structure in ntp_refclock.h - 07/99 - Ganesh Ramasivan
- */
-struct vmeunit {
-	struct vmedate vmedata; /* data returned from vme read */
-	u_long lasttime;        /* last time clock heard from */
-};
-
-/*
- * Function prototypes
- */
-static  bool     vme_start       (int, struct peer *);
-static  void    vme_shutdown    (int, struct peer *);
-static  void    vme_receive     (struct recvbuf *);
-static  void    vme_poll        (int unit, struct peer *);
-struct vmedate *get_datumtime(struct vmedate *);	
-void	tvme_fill(struct vmedate *, time_t btm[2]);
-void	stfp_time2tvme(struct vmedate *time_vme, struct stfp_time *stfp);
-char *DEVICE_NAME(int n);
-
-
-/*
- * Define the bc*() functions as weak so we can compile/link without them.
- * Only clients with the card will have the proprietary vendor device driver
- * and interface library needed for use on Linux/Windows platforms.
- */
-extern uint32_t __attribute__ ((weak)) bcReadBinTime(SYMMT_PCI_HANDLE, time_t *, time_t*, uint8_t*);
-extern SYMMT_PCI_HANDLE __attribute__ ((weak)) bcStartPci(void);
-extern void __attribute__ ((weak)) bcStopPci(SYMMT_PCI_HANDLE);
-
-/*
- * Transfer vector
- */
-struct  refclock refclock_bancomm = {
-	vme_start, 		/* start up driver */
-	vme_shutdown,		/* shut down driver */
-	vme_poll,		/* transmit poll message */
-	noentry,		/* not used (old vme_control) */
-	noentry,		/* initialize driver */ 
-	noentry,		/* not used (old vme_buginfo) */ 
-	noentry			/* not used */
-};
-
-int fd_vme;  /* file descriptor for ioctls */
-int regvalue;
-int tfp_type;	/* mode selector, indicate platform and driver interface */
-SYMMT_PCI_HANDLE stfp_handle;
-
-/** 
- * this macro returns the device name based on
- * the platform we are running on and the device number
- */
-#if defined(__sun__)
-char *DEVICE_NAME(int n) {static char s[20]={0}; snprintf(s,19,"/dev/stfp%d",n);return s;}
-#else
-char* DEVICE_NAME(int n) {static char s[20]={0}; snprintf(s,19,"/dev/btfp%d",n);return s;}
-#endif /**__sun__**/
-
-/*
- * vme_start - open the VME device and initialize data for processing
- */
-static bool
-vme_start(
-	int unit,
-	struct peer *peer
-	)
-{
-	register struct vmeunit *vme;
-	struct refclockproc *pp;
-	int dummy;
-	char vmedev[20];
-	
-	tfp_type = (int)(peer->ttl);
-	switch (tfp_type) {		
-		case 1:
-		case 3:
-			break;
-		case 2:
-			stfp_handle = bcStartPci(); 	/* init the card in lin/win */
-			break;
-		default:
-			break;
-	}
-	/*
-	 * Open VME device
-	 */
-#ifdef DEBUG
-
-	printf("Opening DATUM DEVICE %s\n",DEVICE_NAME(peer->refclkunit));
-#endif
-	if ( (fd_vme = open(DEVICE_NAME(peer->refclkunit), O_RDWR)) < 0) {
-		msyslog(LOG_ERR, "vme_start: failed open of %s: %m", vmedev);
-		return false;
-	}
-	else  { 
-		switch (tfp_type) {
-		  	case 1:	break;
-			case 2: break;
-			case 3:break;
-			default: 
-				/* Release capture lockout in case it was set before. */
-				if( ioctl( fd_vme, RUNLOCK, &dummy ) )
-		    		msyslog(LOG_ERR, "vme_start: RUNLOCK failed %m");
-
-				regvalue = 0; /* More esoteric stuff to do... */
-				if( ioctl( fd_vme, WCR0, &regvalue ) )
-		    		msyslog(LOG_ERR, "vme_start: WCR0 failed %m");
-				break;
-		}
-	}
-
-	/*
-	 * Allocate unit structure
-	 */
-	vme = emalloc_zero(sizeof(struct vmeunit));
-
-
-	/*
-	 * Set up the structures
-	 */
-	pp = peer->procptr;
-	pp->unitptr = vme;
-	pp->timestarted = current_time;
-
-	pp->io.clock_recv = vme_receive;
-	pp->io.srcclock = peer;
-	pp->io.datalen = 0;
-	pp->io.fd = fd_vme;
-	/* shouldn't there be an io_addclock() call? */
-
-	/*
-	 * All done.  Initialize a few random peer variables, then
- 	 * return success. Note that root delay and root dispersion are
-	 * always zero for this clock.
-	 */
-	peer->precision = VMEPRECISION;
-	memcpy(&pp->refid, USNOREFID, REFIDLEN);
-	peer->sstclktype = CTL_SST_TS_UHF;
-	return true;
-}
-
-
-/*
- * vme_shutdown - shut down a VME clock
- */
-static void
-vme_shutdown(
-	int unit, 
-	struct peer *peer
-	)
-{
-	register struct vmeunit *vme;
-	struct refclockproc *pp;
-
-	/*
-	 * Tell the I/O module to turn us off.  We're history.
-	 */
-	pp = peer->procptr;
-	vme = pp->unitptr;
-	io_closeclock(&pp->io);
-	pp->unitptr = NULL;
-	if (NULL != vme)
-		free(vme);
-	if (tfp_type == 2)
-		bcStopPci(stfp_handle); 
-}
-
-
-/*
- * vme_receive - receive data from the VME device.
- *
- * Note: This interface would be interrupt-driven. We don't use that
- * now, but include a dummy routine for possible future adventures.
- */
-static void
-vme_receive(
-	struct recvbuf *rbufp
-	)
-{
-}
-
-
-/*
- * vme_poll - called by the transmit procedure
- */
-static void
-vme_poll(
-	int unit,
-	struct peer *peer
-	)
-{
-	struct vmedate *tptr; 
-	struct vmeunit *vme;
-	struct refclockproc *pp;
-	time_t tloc;
-	struct tm *tadr, tm;
-        
-	pp = peer->procptr;	 
-	vme = pp->unitptr;        /* Here is the structure */
-
-	tptr = &vme->vmedata; 
-	if ((tptr = get_datumtime(tptr)) == NULL ) {
-		refclock_report(peer, CEVNT_BADREPLY);
-		return;
-	}
-
-	get_systime(&pp->lastrec);
-	pp->polls++;
-	vme->lasttime = current_time;
-
-	/*
-	 * Get VME time and convert to timestamp format. 
-	 * The year must come from the system clock.
-	 */
-	
-	  time(&tloc);
-	  tadr = gmtime_r(&tloc, &tm);
-	  tptr->year = (unsigned short)(tadr->tm_year + 1900);
-
-	snprintf(pp->a_lastcode,
-		 sizeof(pp->a_lastcode),
-		 "%3.3d %2.2d:%2.2d:%2.2d.%.6ld %1d",
-		 tptr->day, 
-		 tptr->hr, 
-		 tptr->mn,
-		 tptr->sec, 
-		 tptr->frac, 
-		 tptr->status);
-
-	pp->lencode = (u_short) strlen(pp->a_lastcode);
-
-	pp->day =  tptr->day;
-	pp->hour =   tptr->hr;
-	pp->minute =  tptr->mn;
-	pp->second =  tptr->sec;
-	pp->nsec =   tptr->frac;	
-
-#ifdef DEBUG
-	if (debug)
-	    printf("pp: %3d %02d:%02d:%02d.%06ld %1x\n",
-		   pp->day, pp->hour, pp->minute, pp->second,
-		   pp->nsec, tptr->status);
-#endif
-	if (tptr->status ) {       /*  Status 0 is locked to ref., 1 is not */
-		refclock_report(peer, CEVNT_BADREPLY);
-		return;
-	}
-
-	/*
-	 * Now, compute the reference time value. Use the heavy
-	 * machinery for the seconds and the millisecond field for the
-	 * fraction when present. If an error in conversion to internal
-	 * format is found, the program declares bad data and exits.
-	 * Note that this code does not yet know how to do the years and
-	 * relies on the clock-calendar chip for sanity.
-	 */
-	if (!refclock_process(pp)) {
-		refclock_report(peer, CEVNT_BADTIME);
-		return;
-	}
-	pp->lastref = pp->lastrec;
-	refclock_receive(peer);
-	record_clock_stats(&peer->srcadr, pp->a_lastcode);
-}
-
-struct vmedate *
-get_datumtime(struct vmedate *time_vme)
-{
-	char cbuf[7];
-	struct btfp_time vts;
-	time_t btm[2];
-	uint8_t dmy;
-	struct stfp_time stfpm;
-	
-	if (time_vme == NULL)
-  		time_vme = emalloc(sizeof(*time_vme));
-
-	switch (tfp_type) {
-		case 1:				/* BSD, PCI, 2 32bit time words */
-			if (ioctl(fd_vme, READTIME, &btm)) {
-	    		msyslog(LOG_ERR, "get_bc63x error: %m");
-				return(NULL);
-			}
-			tvme_fill(time_vme, btm);
-			break;
-
-		case 2:				/* Linux/Windows, PCI, 2 32bit time words */
-			if (bcReadBinTime(stfp_handle, &btm[1], &btm[0], &dmy) == 0) {
-	    		msyslog(LOG_ERR, "get_datumtime error: %m"); 
-				return(NULL);
-			}
-			tvme_fill(time_vme, btm);
-			break;
-			
-		case 3: /** solaris **/
-			memset(&stfpm,0,sizeof(stfpm));
-			
-			/* we need the time in decimal format */
-			/* Here we rudely assume that we are the only user of the driver.
-			 * Other programs will have to set their own time format before reading 
-			 * the time.
-			 */
-			if(ioctl (fd_vme, SELTIMEFORMAT, TIME_DECIMAL)){	
-					msyslog(LOG_ERR, "Could not set time format");
-					return (NULL);	
-			}
-			/* read the time */
-			if (ioctl(fd_vme, READTIME, &stfpm)) {
-				msyslog(LOG_ERR, "ioctl error: %m");
-				return(NULL);
-			}
-			stfp_time2tvme(time_vme,  &stfpm);
-			break;			
-
-		default:			/* legacy bancomm card */
-
-			if (ioctl(fd_vme, READTIME, &vts)) {
-				msyslog(LOG_ERR,
-					"get_datumtime error: %m");
-				return(NULL);
-			}
-			/* Get day */
-			snprintf(cbuf, sizeof(cbuf), "%3.3x",
-				 ((vts.btfp_time[ 0 ] & 0x000f) << 8) +
-				  ((vts.btfp_time[ 1 ] & 0xff00) >> 8));  
-			time_vme->day = (unsigned short)atoi(cbuf);
-
-			/* Get hour */
-			snprintf(cbuf, sizeof(cbuf), "%2.2x",
-				 vts.btfp_time[ 1 ] & 0x00ff);
-			time_vme->hr = (unsigned short)atoi(cbuf);
-
-			/* Get minutes */
-			snprintf(cbuf, sizeof(cbuf), "%2.2x",
-				 (vts.btfp_time[ 2 ] & 0xff00) >> 8);
-			time_vme->mn = (unsigned short)atoi(cbuf);
-
-			/* Get seconds */
-			snprintf(cbuf, sizeof(cbuf), "%2.2x",
-				 vts.btfp_time[ 2 ] & 0x00ff);
-			time_vme->sec = (unsigned short)atoi(cbuf);
-
-			/* Get microseconds.  Yes, we ignore the 0.1 microsecond digit so
-				 we can use the TVTOTSF function  later on...*/
-
-			snprintf(cbuf, sizeof(cbuf), "%4.4x%2.2x",
-				 vts.btfp_time[ 3 ],
-				 vts.btfp_time[ 4 ] >> 8);
-			time_vme->frac = (u_long) atoi(cbuf);
-
-			/* Get status bit */
-			time_vme->status = (vts.btfp_time[0] & 0x0010) >> 4;
-
-			break;
-	}
-
-	if (time_vme->status) 
-		return ((void *)NULL);
-	else
-	    return (time_vme);
-}
-/* Assign values to time_vme struct. Mostly for readability */
-void
-tvme_fill(struct vmedate *time_vme, time_t btm[2])
-{
-	struct tm maj;
-	time_t dmaj, dmin;
-
-	dmaj = btm[1];			/* syntax sugar */
-	dmin = btm[0];
-
-	gmtime_r(&dmaj, &maj);
-	time_vme->day  = maj.tm_yday+1;
-	time_vme->hr   = maj.tm_hour;
-	time_vme->mn   = maj.tm_min;
-	time_vme->sec  = maj.tm_sec;
-	time_vme->frac = (dmin & 0x000fffff) * 1000; 
-	time_vme->frac += ((dmin & 0x00f00000) >> 20) * 100;
-	time_vme->status = (dmin & 0x01000000) >> 24;
-	return;
-}
-
-
-/* Assign values to time_vme struct. Mostly for readability */
-void
-stfp_time2tvme(struct vmedate *time_vme, struct stfp_time *stfp)
-{
-
-	time_vme->day  = stfp->tm.tm_yday+1;
-	time_vme->hr   = stfp->tm.tm_hour;
-	time_vme->mn   = stfp->tm.tm_min;
-	time_vme->sec  = stfp->tm.tm_sec;
-	time_vme->frac = stfp->usec*1000;  
-	time_vme->frac += stfp->hnsec * 100;
-	time_vme->status = stfp->status;
-	return;
-}
-
diff --git a/ntpd/refclock_conf.c b/ntpd/refclock_conf.c
index 595b999..26458cb 100644
--- a/ntpd/refclock_conf.c
+++ b/ntpd/refclock_conf.c
@@ -62,12 +62,6 @@ extern	struct refclock	refclock_irig;
 #define refclock_irig	refclock_none
 #endif
 
-#ifdef CLOCK_BANC
-extern	struct refclock refclock_bancomm;
-#else
-#define refclock_bancomm refclock_none
-#endif
-
 #ifdef CLOCK_TRUETIME
 extern	struct refclock	refclock_true;
 #else
@@ -210,7 +204,7 @@ struct refclock * const refclock_conf[] = {
 	&refclock_none,		/* 13 was: REFCLK_ATOM_LEITCH */
 	&refclock_none,		/* 14 was: REFCLOCK_MSF_EES */
 	&refclock_none,		/* 15 was: OLD TrueTime GPS/TM-TMD Receiver */
-	&refclock_bancomm,	/* 16 REFCLK_IRIG_BANCOMM */
+	&refclock_none,		/* 16 was: REFCLK_IRIG_BANCOMM */
 	&refclock_none,		/* 17 was: REFCLK_GPS_DATUM */
 	&refclock_acts,		/* 18 REFCLK_ACTS */
 	&refclock_none,		/* 19 was: REFCLK_WWV_HEATH */
diff --git a/ports/winnt/ppsapi/loopback/src/timepps.h b/ports/winnt/ppsapi/loopback/src/timepps.h
index d2cefc2..22822f5 100644
--- a/ports/winnt/ppsapi/loopback/src/timepps.h
+++ b/ports/winnt/ppsapi/loopback/src/timepps.h
@@ -226,10 +226,6 @@ typedef struct pps_params {
 
 typedef UINT_PTR pps_handle_t;	/* pps handlebars */
 
-#ifndef inline
-#define inline __inline
-#endif
-
 /*
  * ntpd on Windows is typically distributed as a binary as few users
  * have the tools needed to build from source.  Rather than build
diff --git a/pylib/refclock.py b/pylib/refclock.py
index 279a8fe..ab21972 100644
--- a/pylib/refclock.py
+++ b/pylib/refclock.py
@@ -64,12 +64,6 @@ refclock_map = {
 		"file":		"arbiter"
 	},
 
-	16: {
-		"descr":	"Bancomm GPS/IRIG Receiver",
-		"define":	"CLOCK_BANC",
-		"file":		"bancomm"
-	},
-
 	18: {
 		"descr":	"NIST/USNO/PTB Modem Time Services",
 		"define":	"CLOCK_ACTS",



More information about the vc mailing list