From owner-svn-src-head@FreeBSD.ORG Mon Jun 24 05:01:13 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 92CCCA2A; Mon, 24 Jun 2013 05:01:13 +0000 (UTC) (envelope-from qingli@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 85F901D7B; Mon, 24 Jun 2013 05:01:13 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r5O51D53037063; Mon, 24 Jun 2013 05:01:13 GMT (envelope-from qingli@svn.freebsd.org) Received: (from qingli@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r5O51DWS037062; Mon, 24 Jun 2013 05:01:13 GMT (envelope-from qingli@svn.freebsd.org) Message-Id: <201306240501.r5O51DWS037062@svn.freebsd.org> From: Qing Li Date: Mon, 24 Jun 2013 05:01:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r252141 - head/sys/netinet6 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 24 Jun 2013 05:01:13 -0000 Author: qingli Date: Mon Jun 24 05:01:13 2013 New Revision: 252141 URL: http://svnweb.freebsd.org/changeset/base/252141 Log: Delete the nd6 entries associated with an off-link prefix if the same prefix cannot be found on an alternative interface. Reviewed by: hrs MFC after: 1 week Modified: head/sys/netinet6/nd6_rtr.c Modified: head/sys/netinet6/nd6_rtr.c ============================================================================== --- head/sys/netinet6/nd6_rtr.c Mon Jun 24 05:00:31 2013 (r252140) +++ head/sys/netinet6/nd6_rtr.c Mon Jun 24 05:01:13 2013 (r252141) @@ -1720,6 +1720,7 @@ nd6_prefix_offlink(struct nd_prefix *pr) } } error = a_failure; + a_failure = 1; if (error == 0) { pr->ndpr_stateflags &= ~NDPRF_ONLINK; @@ -1758,7 +1759,8 @@ nd6_prefix_offlink(struct nd_prefix *pr) &opr->ndpr_prefix.sin6_addr), opr->ndpr_plen, if_name(ifp), if_name(opr->ndpr_ifp), e)); - } + } else + a_failure = 0; } } } else { @@ -1770,6 +1772,10 @@ nd6_prefix_offlink(struct nd_prefix *pr) if_name(ifp), error)); } + if (a_failure) + lltable_prefix_free(AF_INET6, (struct sockaddr *)&sa6, + (struct sockaddr *)&mask6, LLE_STATIC); + return (error); }