Tnx!
Worked like a charm, with skipped init and other checks, just the control point parts:
<...>
            int optval=1;

setsockopt(root_socket, IPPROTO_IP, IP_RECVDSTADDR, &optval, sizeof(optval))
<...>
            char t[200];
            unsigned int sender_len;
            struct msghdr msg;
            struct iovec iov;
            struct sockaddr_in from;
            sender_len = sizeof(from);
            msg.msg_name = &from;
            msg.msg_namelen = sender_len;
            msg.msg_iov = &iov;
            msg.msg_iovlen = 1;
            msg.msg_iov->iov_base = &u;
            msg.msg_iov->iov_len = sizeof(packet_container);
            msg.msg_control = t;
            msg.msg_controllen = sizeof(t);
            msg.msg_flags = 0;
<...>
            result = recvmsg(root_socket,&msg,0);
<...>
            struct cmsghdr *cmsg=NULL;
            uint32_t* dst_ip=NULL;
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; cmsg = CMSG_NXTHDR(&msg,cmsg)) { if (cmsg->cmsg_level == IPPROTO_IP && cmsg->cmsg_type == IP_RECVDSTADDR) {
                    dst_ip=(uint32_t*)CMSG_DATA(cmsg);
                    break;
                }
            }
<...>
And at that point we have destination ip in dst_ip var:)

_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"

Reply via email to