*/
#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);
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;
* 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);
}
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);
#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;
}
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);
}
#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>
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,
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) {
packet->data = data;
packet->sockfd = sockfd;
packet->if_index = if_index;
- packet->timestamp = fr_time_from_timeval(&when);
+ packet->timestamp = when;
return packet;
}