From patchwork Wed Dec 10 09:41:14 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yang Hongyang X-Patchwork-Id: 13145 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 2D772DDF73 for ; Wed, 10 Dec 2008 20:39:51 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753415AbYLJJjr (ORCPT ); Wed, 10 Dec 2008 04:39:47 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751567AbYLJJjq (ORCPT ); Wed, 10 Dec 2008 04:39:46 -0500 Received: from cn.fujitsu.com ([222.73.24.84]:57269 "EHLO song.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1751489AbYLJJjp (ORCPT ); Wed, 10 Dec 2008 04:39:45 -0500 Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id 9C475170091; Wed, 10 Dec 2008 17:45:41 +0800 (CST) Received: from fnst.cn.fujitsu.com (localhost.localdomain [127.0.0.1]) by tang.cn.fujitsu.com (8.13.1/8.13.1) with ESMTP id mBA9jfsg015368; Wed, 10 Dec 2008 17:45:41 +0800 Received: from localhost.localdomain (unknown [10.167.141.200]) by fnst.cn.fujitsu.com (Postfix) with ESMTPA id B1B78D432E; Wed, 10 Dec 2008 17:44:05 +0800 (CST) Message-ID: <493F8EBA.7070907@cn.fujitsu.com> Date: Wed, 10 Dec 2008 17:41:14 +0800 From: Yang Hongyang User-Agent: Thunderbird 2.0.0.17 (X11/20081009) MIME-Version: 1.0 To: David Miller CC: remi.denis-courmont@nokia.com, netdev@vger.kernel.org Subject: Re: [RFC][PATCH 3/3]ipv6:fix the outgoing interface selection order in udpv6_sendmsg() References: <20081209.221611.26561529.davem@davemloft.net> <493F62D7.3080000@cn.fujitsu.com> <493F63E1.3030800@cn.fujitsu.com> <20081210.011514.120756807.davem@davemloft.net> In-Reply-To: <20081210.011514.120756807.davem@davemloft.net> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org David Miller wrote: > From: Yang Hongyang > Date: Wed, 10 Dec 2008 14:38:25 +0800 > ...snip... >>>> >>> Hum..can we just ignore the sync of the sticky option and the SO_BINDTODEVICE, >>> when send a message,first check sk_bound_dev_if,If it is specified,use it,otherwise >>> use sticky option?This was what i ment. and in my patch ,the outgoing interface >>> specified by sticky options will be overrided by the interface specified by >>> SO_BINDTODEVICE. >> If this is the solution, i'll post a updated patch. > > Please do, this sounds like the correct approach. > Thanks for your comment,here is the updated patch: 1.When no interface is specified in an IPV6_PKTINFO ancillary data item, the interface specified in an IPV6_PKTINFO sticky optionis is used. RFC3542: 6.7. Summary of Outgoing Interface Selection This document and [RFC-3493] specify various methods that affect the selection of the packet's outgoing interface. This subsection summarizes the ordering among those in order to ensure deterministic behavior. For a given outgoing packet on a given socket, the outgoing interface is determined in the following order: 1. if an interface is specified in an IPV6_PKTINFO ancillary data item, the interface is used. 2. otherwise, if an interface is specified in an IPV6_PKTINFO sticky option, the interface is used. Signed-off-by: Yang Hongyang --- net/ipv6/udp.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 8b48512..6b06421 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -763,6 +763,9 @@ do_udp_sendmsg: if (!fl.oif) fl.oif = sk->sk_bound_dev_if; + if (!fl.oif) + fl.oif = np->sticky_pktinfo.ipi6_ifindex; + if (msg->msg_controllen) { opt = &opt_space; memset(opt, 0, sizeof(struct ipv6_txoptions));