From owner-freebsd-net@freebsd.org Fri Oct 20 20:12:32 2017 Return-Path: Delivered-To: freebsd-net@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4FC3DE3ECAC for ; Fri, 20 Oct 2017 20:12:32 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from hz.grosbein.net (hz.grosbein.net [78.47.246.247]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "hz.grosbein.net", Issuer "hz.grosbein.net" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id DD0B2640B4 for ; Fri, 20 Oct 2017 20:12:30 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from eg.sd.rdtc.ru (root@eg.sd.rdtc.ru [62.231.161.221] (may be forged)) by hz.grosbein.net (8.15.2/8.15.2) with ESMTPS id v9KKCL04077002 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 20 Oct 2017 22:12:22 +0200 (CEST) (envelope-from eugen@grosbein.net) X-Envelope-From: eugen@grosbein.net X-Envelope-To: Received: from [10.58.0.4] ([10.58.0.4]) by eg.sd.rdtc.ru (8.15.2/8.15.2) with ESMTPS id v9KKCH4J005964 (version=TLSv1.2 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT) for ; Sat, 21 Oct 2017 03:12:17 +0700 (+07) (envelope-from eugen@grosbein.net) To: "freebsd-net@freebsd.org" From: Eugene Grosbein Subject: loopback routes miss RTF_PINNED flag Message-ID: <59EA589D.7020403@grosbein.net> Date: Sat, 21 Oct 2017 03:12:13 +0700 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=2.2 required=5.0 tests=BAYES_00, LOCAL_FROM, RDNS_NONE autolearn=no autolearn_force=no version=3.4.1 X-Spam-Report: * -2.3 BAYES_00 BODY: Bayes spam probability is 0 to 1% * [score: 0.0000] * 1.9 RDNS_NONE Delivered to internal network by a host with no rDNS * 2.6 LOCAL_FROM From my domains X-Spam-Level: ** X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on hz.grosbein.net X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 20 Oct 2017 20:12:32 -0000 Hi! When IP address is being added to an interface, a kernel installs loopback route. For P2P interfaces, we have local IP address and remote one. A route to remote address is added with RTF_PINNED flag, so that it overrides any possibly existing route to that address added by a routing daemon and that's fine. A route to local address created with ifa_maintain_loopback_route() function in https://svnweb.freebsd.org/base/head/sys/net/if.c?annotate=323170#l1711 misess RTF_PINNED flag, so that it cannot override similar possibly existing route and that's not fine as rtrequest1_fib() returns EEXIST in such case. This error is then propagated back to userland ioctl SIOCAIFADD breaking interface configuration sequence. See also https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=223129 for real world example. Is there a reason for such loopback routes to not have RTF_PINNED flag?