]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Make recvfromto output a fr_time_t
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 17 May 2019 21:21:06 +0000 (17:21 -0400)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 17 May 2019 21:21:06 +0000 (17:21 -0400)
src/lib/util/udp.c
src/lib/util/udpfromto.c
src/lib/util/udpfromto.h
src/protocols/dhcpv4/udp.c

index f13e0394547fb490577241bf8184fc5d028adf85..8c4e718fce0a374211664878a41fe777a46d81c7 100644 (file)
@@ -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);
index b4bb689ec9139f8f806500df34e5a5cb22994004..d690d1d0d17f4d515dc630302923da63644c08db 100644 (file)
@@ -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);
        }
index 27ed0c82771fd5eb253e5d58104ff102f047f5ec..3d444b292fdf60cc74d55745cc366c22bcaafe1d 100644 (file)
@@ -32,6 +32,7 @@ extern "C" {
 #ifdef WITH_UDPFROMTO
 #include <freeradius-devel/build.h>
 #include <freeradius-devel/missing.h>
+#include <freeradius-devel/util/time.h>
 
 #include <netinet/in.h>
 #include <stddef.h>
@@ -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,
index 2e6ef86164b3eea7b7714b84833be895676ac4f7..47635ce707b218f2632e3d06b56b267e18d278c4 100644 (file)
@@ -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;
 }