On 8/29/15 4:40 PM, David Miller wrote:

In the output path we go:

        struct flowi4 fl4 = {
                /* needed to match OIF rule */
                .flowi4_oif = vrf_dev->ifindex,
                .flowi4_iif = LOOPBACK_IFINDEX,
                .flowi4_tos = RT_TOS(ip4h->tos),
                .flowi4_flags = FLOWI_FLAG_ANYSRC | FLOWI_FLAG_VRFSRC,
                .daddr = ip4h->daddr,
        };

        if (vrf_send_v4_prep(skb, &fl4, vrf_dev))
                goto err;

        if (!ip4h->saddr) {
                ip4h->saddr = inet_select_addr(skb_dst(skb)->dev, 0,
                                               RT_SCOPE_LINK);
        }

So in the case where the source address is needed, this
inet_select_addr() call looks like useless work.

The route lookup already filled in fl4.saddr for you, why don't we
just use that?


We will. My intention is to remove the udp_sendmsg change and fill in the saddr in the VRF driver. In the process a fixed version of the above snippet is used.

David
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to