- for (cmsg = CMSG_FIRSTHDR(&message); cmsg != NULL; cmsg = CMSG_NXTHDR(&message, cmsg)) {
- if (cmsg->cmsg_level != IPPROTO_IP || cmsg->cmsg_type != IP_PKTINFO)
- continue;
- struct in_pktinfo *pi = CMSG_DATA(cmsg);
- addr = pi->ipi_spec_dst.s_addr;
+ for (cmsg = CMSG_FIRSTHDR(&message);
+ cmsg != NULL;
+ cmsg = CMSG_NXTHDR(&message, cmsg)) {
+ LOG(ctx, LOG_DEBUG, "CMSG: level %d, type %d - skip",
+ cmsg->cmsg_level, cmsg->cmsg_type);
+ if (cmsg->cmsg_level == IPPROTO_IPV6 &&
+ cmsg->cmsg_type == IPV6_PKTINFO) {
+ struct in6_pktinfo *pi =
+ (struct in6_pktinfo *)CMSG_DATA(cmsg);
+ self_addr = pi->ipi6_addr;
+ }