From owner-freebsd-questions@FreeBSD.ORG Fri Jul 6 11:53:34 2012 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0DD0A1065672 for ; Fri, 6 Jul 2012 11:53:34 +0000 (UTC) (envelope-from vladimir.budnev@gmail.com) Received: from mail-lb0-f182.google.com (mail-lb0-f182.google.com [209.85.217.182]) by mx1.freebsd.org (Postfix) with ESMTP id 7DCA58FC08 for ; Fri, 6 Jul 2012 11:53:33 +0000 (UTC) Received: by lbon10 with SMTP id n10so16404791lbo.13 for ; Fri, 06 Jul 2012 04:53:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; bh=RoQXAY735MS0ScENN9x9lpnNq+IJ40P4xuXItsu9cJQ=; b=ebaPzOg6+MxxiwP5UCh2ew3T/2ZwV21cvJ6c9ShAc+wo3ot1E+1M9zTeg4Qz+me5eZ 79ZfadHP29c+HjyCs3rzga1TfOzoirBF4D/udfVgXpSZMJkH6CpYSEY965D6u8fAz0S7 uKm3PrtKC7uz2nae3uTcn/eS/N3RSaY+5kYauu6NDdpMoXkRe+S60kGXsFftiEMxdBWG X7dHaoFLCQL4fP6CMMhWyV34bqWPhZy7dphHsHjilHNhvREJZXk2M33CszRSRG/JvoAM nD9F9s2n5E5lfsyT0sF0gG87mdTY9FxY6mV0HETMdTrDXVtAzmVAiCreW2iyIZ1QzWbH kwYQ== Received: by 10.152.146.67 with SMTP id ta3mr29816859lab.27.1341575612270; Fri, 06 Jul 2012 04:53:32 -0700 (PDT) Received: from [192.168.66.106] ([80.253.27.98]) by mx.google.com with ESMTPS id fv16sm38654006lab.9.2012.07.06.04.53.30 (version=SSLv3 cipher=OTHER); Fri, 06 Jul 2012 04:53:31 -0700 (PDT) Message-ID: <4FF6D1B8.3080108@gmail.com> Date: Fri, 06 Jul 2012 15:53:28 +0400 From: Budnev Vladimir User-Agent: Mozilla/5.0 (X11; Linux i686; rv:13.0) Gecko/20120614 Thunderbird/13.0.1 MIME-Version: 1.0 To: Nikolay Denev , freebsd-questions@freebsd.org References: <4FF45C81.3030907@gmail.com> <07EA7CC9-19CF-4EFE-A9E2-6A94DCA3F1AC@gmail.com> <4FF46498.2070901@gmail.com> In-Reply-To: <4FF46498.2070901@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: Subject: Re: how to correctly distinguish broadcast udp packets vs unicast (socket, pcap or bpf)? X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jul 2012 11:53:34 -0000 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:)