From: Arran Cudbard-Bell Date: Fri, 17 May 2019 21:21:06 +0000 (-0400) Subject: Make recvfromto output a fr_time_t X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ced898df880554e6ac9856773014933408830c8d;p=thirdparty%2Ffreeradius-server.git Make recvfromto output a fr_time_t --- diff --git a/src/lib/util/udp.c b/src/lib/util/udp.c index f13e0394547..8c4e718fce0 100644 --- a/src/lib/util/udp.c +++ b/src/lib/util/udp.c @@ -204,15 +204,11 @@ ssize_t udp_recv(int sockfd, void *data, size_t data_len, int flags, */ #ifdef WITH_UDPFROMTO if (dst_ipaddr) { - struct timeval when_tv; - received = recvfromto(sockfd, data, data_len, sock_flags, (struct sockaddr *)&src, &sizeof_src, (struct sockaddr *)&dst, &sizeof_dst, - if_index, &when_tv); + if_index, when); if (received <= 0) goto done; - - *when = fr_time_from_timeval(&when_tv); } else { received = recvfrom(sockfd, data, data_len, sock_flags, (struct sockaddr *)&src, &sizeof_src); diff --git a/src/lib/util/udpfromto.c b/src/lib/util/udpfromto.c index b4bb689ec91..d690d1d0d17 100644 --- a/src/lib/util/udpfromto.c +++ b/src/lib/util/udpfromto.c @@ -194,7 +194,7 @@ int udpfromto_init(int s) int recvfromto(int fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *from_len, struct sockaddr *to, socklen_t *to_len, - int *if_index, struct timeval *when) + int *if_index, fr_time_t *when) { struct msghdr msgh; struct cmsghdr *cmsg; @@ -216,7 +216,7 @@ int recvfromto(int fd, void *buf, size_t len, int flags, * Catch the case where the caller passes invalid arguments. */ if (!to || !to_len) { - if (when) gettimeofday(when, NULL); + if (when) *when = fr_time(); return recvfrom(fd, buf, len, flags, from, from_len); } @@ -301,10 +301,7 @@ int recvfromto(int fd, void *buf, size_t len, int flags, if (from_len) *from_len = msgh.msg_namelen; if (if_index) *if_index = 0; - if (when) { - when->tv_sec = 0; - when->tv_usec = 0; - } + if (when) *when = 0; /* Process auxiliary received data in msgh */ for (cmsg = CMSG_FIRSTHDR(&msgh); @@ -354,12 +351,16 @@ int recvfromto(int fd, void *buf, size_t len, int flags, #ifdef SO_TIMESTAMP if (when && (cmsg->cmsg_level == SOL_IP) && (cmsg->cmsg_type == SO_TIMESTAMP)) { - memcpy(when, CMSG_DATA(cmsg), sizeof(*when)); + struct timeval when_tv; + + memcpy(&when_tv, CMSG_DATA(cmsg), sizeof(when_tv)); + + *when = fr_time_from_timeval(&when_tv); } #endif } - if (when && !when->tv_sec) gettimeofday(when, NULL); + if (when && !*when) *when = fr_time(); return ret; } @@ -637,7 +638,7 @@ client: if ((n = recvfromto(client_socket, buf, sizeof(buf), 0, (struct sockaddr *)&from, &fl, - (struct sockaddr *)&to, &tl, &if_index)) < 0) { + (struct sockaddr *)&to, &tl, &if_index, NULL)) < 0) { perror("client: recvfromto"); fr_exit_now(1); } diff --git a/src/lib/util/udpfromto.h b/src/lib/util/udpfromto.h index 27ed0c82771..3d444b292fd 100644 --- a/src/lib/util/udpfromto.h +++ b/src/lib/util/udpfromto.h @@ -32,6 +32,7 @@ extern "C" { #ifdef WITH_UDPFROMTO #include #include +#include #include #include @@ -42,7 +43,7 @@ int udpfromto_init(int s); int recvfromto(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen, struct sockaddr *to, socklen_t *tolen, - int *if_index, struct timeval *when); + int *if_index, fr_time_t *when); int sendfromto(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t fromlen, diff --git a/src/protocols/dhcpv4/udp.c b/src/protocols/dhcpv4/udp.c index 2e6ef86164b..47635ce707b 100644 --- a/src/protocols/dhcpv4/udp.c +++ b/src/protocols/dhcpv4/udp.c @@ -153,7 +153,7 @@ RADIUS_PACKET *fr_dhcpv4_udp_packet_recv(int sockfd) fr_ipaddr_t src_ipaddr, dst_ipaddr; uint16_t src_port, dst_port; int if_index = 0; - struct timeval when; + fr_time_t when; data = talloc_zero_array(NULL, uint8_t, MAX_PACKET_SIZE); if (!data) { @@ -206,7 +206,7 @@ RADIUS_PACKET *fr_dhcpv4_udp_packet_recv(int sockfd) packet->data = data; packet->sockfd = sockfd; packet->if_index = if_index; - packet->timestamp = fr_time_from_timeval(&when); + packet->timestamp = when; return packet; }