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