#define REFCLK_TT560 41 /* TrueTime 560 IRIG-B decoder */
#define REFCLK_ZYFER 42 /* Zyfer GPStarplus receiver */
#define REFCLK_RIPENCC 43 /* RIPE NCC Trimble driver */
- #define REFCLK_MAX 43 /* Grow as needed... */
+ #define REFCLK_NEOCLOCK4X 44 /* NeoClock4X DCF77 or TDF receiver */
-#define REFCLK_MAX 44 /* Grow as needed... */
+
+ /*
+ * Macro for sockaddr_storage structures operations
+ */
+#define SOCKCMP(sock1, sock2) \
+ (((struct sockaddr_storage *)sock1)->ss_family \
+ == ((struct sockaddr_storage *)sock2)->ss_family ? \
+ ((struct sockaddr_storage *)sock1)->ss_family == AF_INET ? \
+ memcmp(&((struct sockaddr_in *)sock1)->sin_addr, \
+ &((struct sockaddr_in *)sock2)->sin_addr, \
+ sizeof(struct in_addr)) == 0 : \
+ memcmp(&((struct sockaddr_in6 *)sock1)->sin6_addr, \
+ &((struct sockaddr_in6 *)sock2)->sin6_addr, \
+ sizeof(struct in6_addr)) == 0 : \
+ 0)
+
+#define SOCKNUL(sock1) \
+ (((struct sockaddr_storage *)sock1)->ss_family == AF_INET ? \
+ (((struct sockaddr_in *)sock1)->sin_addr.s_addr == 0) : \
+ (IN6_IS_ADDR_UNSPECIFIED(&((struct sockaddr_in6 *)sock1)->sin6_addr)))
+
+#define SOCKLEN(sock) \
+ (((struct sockaddr_storage *)sock)->ss_family == AF_INET ? \
+ (sizeof(struct sockaddr_in)) : (sizeof(struct sockaddr_in6)))
+
+#define ANYSOCK(sock) \
+ memset(((struct sockaddr_in *)sock), 0, \
+ sizeof(struct sockaddr_storage))
+
+#define ANY_INTERFACE_CHOOSE(sock) \
+ (((struct sockaddr_storage *)sock)->ss_family == AF_INET ? \
+ any_interface : any6_interface)
/*
* We tell reference clocks from real peers by giving the reference