ssize_t nbytes;
bool resched;
char errbuf[BUFSIZ];
+ struct sockaddr_storage sa;
uint8_t control[64];
struct ipaddr src = {};
struct iovec iov;
iov.iov_base = r->ibuf;
iov.iov_len = sizeof(r->ibuf);
- m.msg_name = NULL;
- m.msg_namelen = 0;
+ m.msg_name = &sa;
+ m.msg_namelen = sizeof(sa);
m.msg_iov = &iov;
m.msg_iovlen = 1;
m.msg_control = control;
VRRP_PKT_VCHECK(pktsize > 0, "IPv4 packet has no payload");
/* Extract source address */
+ struct sockaddr_in *sa = m->msg_name;
src->ipa_type = IPADDR_V4;
- src->ipaddr_v4 = ip->ip_src;
+ src->ipaddr_v4 = sa->sin_addr;
} else if (family == AF_INET6) {
struct cmsghdr *c;
for (c = CMSG_FIRSTHDR(m); c != NULL; CMSG_NXTHDR(m, c)) {
pktsize = read;
/* Extract source address */
- src->ipa_type = IPADDR_V6;
struct sockaddr_in6 *sa = m->msg_name;
+ src->ipa_type = IPADDR_V6;
memcpy(&src->ipaddr_v6, &sa->sin6_addr,
sizeof(struct in6_addr));
} else {