ssize_t sent = sendmsg(socket, &msg, MSG_DONTWAIT);
if (sent < 0)
- syslog(LOG_WARNING, "Failed to send to %s%%%s (%s)",
+ syslog(LOG_NOTICE, "Failed to send to %s%%%s (%s)",
ipbuf, iface->ifname, strerror(errno));
else
syslog(LOG_DEBUG, "Sent %li bytes to %s%%%s",
struct ifaddrmsg *ifa = NLMSG_DATA(nhm);
if (ifa->ifa_scope != RT_SCOPE_UNIVERSE ||
- ifa->ifa_index != (unsigned)ifindex)
+ (ifindex && ifa->ifa_index != (unsigned)ifindex))
continue;
struct rtattr *rta = (struct rtattr*)&ifa[1];
// Extract destination interface
int destiface = 0;
int *hlim = NULL;
+ void *dest = NULL;
struct in6_pktinfo *pktinfo;
struct in_pktinfo *pkt4info;
for (struct cmsghdr *ch = CMSG_FIRSTHDR(&msg); ch != NULL; ch = CMSG_NXTHDR(&msg, ch)) {
ch->cmsg_type == IPV6_PKTINFO) {
pktinfo = (struct in6_pktinfo*)CMSG_DATA(ch);
destiface = pktinfo->ipi6_ifindex;
+ dest = &pktinfo->ipi6_addr;
} else if (ch->cmsg_level == IPPROTO_IP &&
ch->cmsg_type == IP_PKTINFO) {
pkt4info = (struct in_pktinfo*)CMSG_DATA(ch);
destiface = pkt4info->ipi_ifindex;
+ dest = &pkt4info->ipi_addr;
} else if (ch->cmsg_level == IPPROTO_IPV6 &&
ch->cmsg_type == IPV6_HOPLIMIT) {
hlim = (int*)CMSG_DATA(ch);
syslog(LOG_DEBUG, "Received %li Bytes from %s%%%s", (long)len,
ipbuf, (iface) ? iface->ifname : "netlink");
- e->handle_dgram(&addr, data_buf, len, iface);
+ e->handle_dgram(&addr, data_buf, len, iface, dest);
}
}