* Replace MESSAGE with rc file. * Drop maintainership. * Set PORTROACH. ptpd-1.x implements PTPv1 (IEEE 1588-2002) ptpd-2.x implements PTPv2 (IEEE 1588-2008) PTPv2 is not backward compatible with PTPv1.
93 lines
4.2 KiB
Plaintext
93 lines
4.2 KiB
Plaintext
$OpenBSD: patch-src_dep_net_c,v 1.2 2017/09/09 21:22:49 naddy Exp $
|
|
Index: src/dep/net.c
|
|
--- src/dep/net.c.orig
|
|
+++ src/dep/net.c
|
|
@@ -16,24 +16,24 @@ lookupSubdomainAddress(Octet * subdomainName, Octet *
|
|
|
|
/* set multicast group address based on subdomainName */
|
|
if (!memcmp(subdomainName, DEFAULT_PTP_DOMAIN_NAME, PTP_SUBDOMAIN_NAME_LENGTH))
|
|
- memcpy(subdomainAddress, DEFAULT_PTP_DOMAIN_ADDRESS, NET_ADDRESS_LENGTH);
|
|
+ strncpy(subdomainAddress, DEFAULT_PTP_DOMAIN_ADDRESS, NET_ADDRESS_LENGTH);
|
|
else if (!memcmp(subdomainName, ALTERNATE_PTP_DOMAIN1_NAME, PTP_SUBDOMAIN_NAME_LENGTH))
|
|
- memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN1_ADDRESS, NET_ADDRESS_LENGTH);
|
|
+ strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN1_ADDRESS, NET_ADDRESS_LENGTH);
|
|
else if (!memcmp(subdomainName, ALTERNATE_PTP_DOMAIN2_NAME, PTP_SUBDOMAIN_NAME_LENGTH))
|
|
- memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN2_ADDRESS, NET_ADDRESS_LENGTH);
|
|
+ strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN2_ADDRESS, NET_ADDRESS_LENGTH);
|
|
else if (!memcmp(subdomainName, ALTERNATE_PTP_DOMAIN3_NAME, PTP_SUBDOMAIN_NAME_LENGTH))
|
|
- memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN3_ADDRESS, NET_ADDRESS_LENGTH);
|
|
+ strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN3_ADDRESS, NET_ADDRESS_LENGTH);
|
|
else {
|
|
h = crc_algorithm(subdomainName, PTP_SUBDOMAIN_NAME_LENGTH) % 3;
|
|
switch (h) {
|
|
case 0:
|
|
- memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN1_ADDRESS, NET_ADDRESS_LENGTH);
|
|
+ strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN1_ADDRESS, NET_ADDRESS_LENGTH);
|
|
break;
|
|
case 1:
|
|
- memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN2_ADDRESS, NET_ADDRESS_LENGTH);
|
|
+ strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN2_ADDRESS, NET_ADDRESS_LENGTH);
|
|
break;
|
|
case 2:
|
|
- memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN3_ADDRESS, NET_ADDRESS_LENGTH);
|
|
+ strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN3_ADDRESS, NET_ADDRESS_LENGTH);
|
|
break;
|
|
default:
|
|
ERROR("handle out of range for '%s'!\n", subdomainName);
|
|
@@ -217,6 +217,7 @@ netInit(NetPath * netPath, RunTimeOpts * rtOpts, PtpCl
|
|
struct in_addr interfaceAddr, netAddr;
|
|
struct sockaddr_in addr;
|
|
struct ip_mreq imr;
|
|
+ unsigned char c;
|
|
char addrStr[NET_ADDRESS_LENGTH];
|
|
char *s;
|
|
|
|
@@ -304,22 +305,23 @@ netInit(NetPath * netPath, RunTimeOpts * rtOpts, PtpCl
|
|
return FALSE;
|
|
}
|
|
/* set socket time-to-live */
|
|
- if (setsockopt(netPath->eventSock, IPPROTO_IP, IP_MULTICAST_TTL, &rtOpts->ttl, sizeof(int)) < 0
|
|
- || setsockopt(netPath->generalSock, IPPROTO_IP, IP_MULTICAST_TTL, &rtOpts->ttl, sizeof(int)) < 0) {
|
|
+ c = rtOpts->ttl;
|
|
+ if (setsockopt(netPath->eventSock, IPPROTO_IP, IP_MULTICAST_TTL, &c, sizeof(c)) < 0
|
|
+ || setsockopt(netPath->generalSock, IPPROTO_IP, IP_MULTICAST_TTL, &c, sizeof(c)) < 0) {
|
|
PERROR("failed to set the multi-cast time-to-live");
|
|
return FALSE;
|
|
}
|
|
/* enable loopback */
|
|
- temp = 1;
|
|
- if (setsockopt(netPath->eventSock, IPPROTO_IP, IP_MULTICAST_LOOP, &temp, sizeof(int)) < 0
|
|
- || setsockopt(netPath->generalSock, IPPROTO_IP, IP_MULTICAST_LOOP, &temp, sizeof(int)) < 0) {
|
|
+ c = 1;
|
|
+ if (setsockopt(netPath->eventSock, IPPROTO_IP, IP_MULTICAST_LOOP, &c, sizeof(c)) < 0
|
|
+ || setsockopt(netPath->generalSock, IPPROTO_IP, IP_MULTICAST_LOOP, &c, sizeof(c)) < 0) {
|
|
PERROR("failed to enable multi-cast loopback");
|
|
return FALSE;
|
|
}
|
|
/* make timestamps available through recvmsg() */
|
|
|
|
temp = 1;
|
|
-#if defined(linux)
|
|
+#if defined(linux) || defined(__NetBSD__) || defined(__OpenBSD__)
|
|
if (setsockopt(netPath->eventSock, SOL_SOCKET, SO_TIMESTAMP, &temp, sizeof(int)) < 0
|
|
|| setsockopt(netPath->generalSock, SOL_SOCKET, SO_TIMESTAMP, &temp, sizeof(int)) < 0) {
|
|
#else /* BSD */
|
|
@@ -405,7 +407,7 @@ netRecvEvent(Octet * buf, TimeInternal * time, NetPath
|
|
char control[CMSG_SPACE(sizeof(struct timeval))];
|
|
} cmsg_un;
|
|
struct cmsghdr *cmsg;
|
|
-#if defined(linux)
|
|
+#if defined(linux) || defined(__NetBSD__) || defined(__OpenBSD__)
|
|
struct timeval *tv;
|
|
#else /* FreeBSD */
|
|
struct timespec ts;
|
|
@@ -454,7 +456,7 @@ netRecvEvent(Octet * buf, TimeInternal * time, NetPath
|
|
return 0;
|
|
}
|
|
|
|
-#if defined(linux)
|
|
+#if defined(linux) || defined(__NetBSD__) || defined(__OpenBSD__)
|
|
tv = 0;
|
|
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL;
|
|
cmsg = CMSG_NXTHDR(&msg, cmsg))
|