netdev
[Top] [All Lists]

Re: UDP sockets bound to ANY send answers with wrong src ip address

To: Denis Vlasenko <vda@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Subject: Re: UDP sockets bound to ANY send answers with wrong src ip address
From: Julian Anastasov <ja@xxxxxx>
Date: Fri, 11 Jun 2004 16:53:35 +0300 (EEST)
Cc: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>, <yoshfuji@xxxxxxxxxxxxxx>, <netdev@xxxxxxxxxxx>, <linux-net@xxxxxxxxxxxxxxx>, <davem@xxxxxxxxxx>, <pekkas@xxxxxxxxxx>, <jmorris@xxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>
In-reply-to: <200406111527.45955.vda@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
        Hello,

On Fri, 11 Jun 2004, Denis Vlasenko wrote:

> Hmmm... do I have to set a *routing dest address* field
> to set src ip address of my UDP packet?

        Try such function:

static int my_send(int fd, unsigned srcip, (struct sockaddr *) remote,
                        char *data, int len)
{
        struct iovec iov = { data, len };
        struct {
                struct cmsghdr cm;
                struct in_pktinfo ipi;
        } cmsg = {
                .cm = {
                        .cmsg_len       = sizeof(struct cmsghdr) +
                                                sizeof(struct in_pktinfo),
                        .cmsg_level     = SOL_IP,
                        .cmsg_type      = IP_PKTINFO,
                },
                .ipi = {
                        .ipi_ifindex    = 0,
                        .ipi_spec_dst   = srcip,
                },
        };
        struct msghdr m = {
                .msg_name       = remote,
                .msg_namelen    = sizeof(struct sockaddr_in),
                .msg_iov        = &iov,
                .msg_iovlen     = 1,
                .msg_control    = &cmsg,
                .msg_controllen = sizeof(cmsg),
                .msg_flags      = 0,
        };

        return sendmsg(fd, &m, MSG_NOSIGNAL|MSG_DONTWAIT);
}

Regards

--
Julian Anastasov <ja@xxxxxx>


<Prev in Thread] Current Thread [Next in Thread>