From owner-svn-src-projects@FreeBSD.ORG Fri Oct 24 22:00:27 2014 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 3984792F; Fri, 24 Oct 2014 22:00:27 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 253DB353; Fri, 24 Oct 2014 22:00:27 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s9OM0QIf073073; Fri, 24 Oct 2014 22:00:26 GMT (envelope-from melifaro@FreeBSD.org) Received: (from melifaro@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id s9OM0QXw073068; Fri, 24 Oct 2014 22:00:26 GMT (envelope-from melifaro@FreeBSD.org) Message-Id: <201410242200.s9OM0QXw073068@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: melifaro set sender to melifaro@FreeBSD.org using -f From: "Alexander V. Chernikov" Date: Fri, 24 Oct 2014 22:00:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r273609 - in projects/routing/sys: net netinet X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Oct 2014 22:00:27 -0000 Author: melifaro Date: Fri Oct 24 22:00:25 2014 New Revision: 273609 URL: https://svnweb.freebsd.org/changeset/base/273609 Log: Convert last piece of ip_forward to use new rouing api. Modified: projects/routing/sys/net/rt_nhops.c projects/routing/sys/net/rt_nhops.h projects/routing/sys/netinet/ip_input.c Modified: projects/routing/sys/net/rt_nhops.c ============================================================================== --- projects/routing/sys/net/rt_nhops.c Fri Oct 24 21:40:44 2014 (r273608) +++ projects/routing/sys/net/rt_nhops.c Fri Oct 24 22:00:25 2014 (r273609) @@ -393,6 +393,8 @@ fib4_rte_to_nh_extended(struct rtentry * /* Set flags */ pnh4->nh_flags = rte->rt_flags & NHOP_FLAGS_MASK; + if (rte->rt_flags & (RTF_DYNAMIC|RTF_MODIFIED)) + pnh4->nh_flags |= NHOP_REDIRECT; gw = (struct sockaddr_in *)rt_key(rte); if (gw->sin_addr.s_addr == 0) pnh4->nh_flags |= NHOP_DEFAULT; @@ -414,6 +416,8 @@ fib4_rte_to_nh_basic(struct rtentry *rte pnh4->nh_addr = dst; /* Set flags */ pnh4->nh_flags = rte->rt_flags & NHOP_FLAGS_MASK; + if (rte->rt_flags & (RTF_DYNAMIC|RTF_MODIFIED)) + pnh4->nh_flags |= NHOP_REDIRECT; gw = (struct sockaddr_in *)rt_key(rte); if (gw->sin_addr.s_addr == 0) pnh4->nh_flags |= NHOP_DEFAULT; Modified: projects/routing/sys/net/rt_nhops.h ============================================================================== --- projects/routing/sys/net/rt_nhops.h Fri Oct 24 21:40:44 2014 (r273608) +++ projects/routing/sys/net/rt_nhops.h Fri Oct 24 22:00:25 2014 (r273609) @@ -209,8 +209,9 @@ void fib6_free_nh(uint32_t fibnum, struc void fib6_choose_prepend(uint32_t fibnum, struct nhop_data *nh_src, uint32_t flowid, struct nhop_data *nh, struct nhop6_extended *nh_ext); -#define NHOP_REJECT RTF_REJECT -#define NHOP_BLACKHOLE RTF_BLACKHOLE +#define NHOP_REJECT 0x08 /* RTF_REJECT */ +#define NHOP_BLACKHOLE 0x1000 /* RTF_BLACKHOLE */ +#define NHOP_REDIRECT 0x10 /* RTF_DYNAMIC|RTF_MODIFIED */ #define NHOP_DEFAULT 0x80 /* Default route */ #define FWD_INET 0 Modified: projects/routing/sys/netinet/ip_input.c ============================================================================== --- projects/routing/sys/netinet/ip_input.c Fri Oct 24 21:40:44 2014 (r273608) +++ projects/routing/sys/netinet/ip_input.c Fri Oct 24 22:00:25 2014 (r273609) @@ -1445,7 +1445,6 @@ ip_forward(struct mbuf *m, int srcrt) struct mbuf *mcopy; struct in_addr dest; struct nhop4_basic nh4, *pnh4; - struct route ro; struct route_info ri; int error, type = 0, code = 0, mtu = 0; @@ -1533,36 +1532,13 @@ ip_forward(struct mbuf *m, int srcrt) dest.s_addr = 0; if (!srcrt && V_ipsendredirects && pnh4 != NULL && nh4.nh_ifp == m->m_pkthdr.rcvif) { - struct sockaddr_in *sin; - struct rtentry *rt; - bzero(&ro, sizeof(ro)); - sin = (struct sockaddr_in *)&ro.ro_dst; - sin->sin_family = AF_INET; - sin->sin_len = sizeof(*sin); - sin->sin_addr = ip->ip_dst; - in_rtalloc_ign(&ro, 0, M_GETFIB(m)); - - rt = ro.ro_rt; - - if (rt && (rt->rt_flags & (RTF_DYNAMIC|RTF_MODIFIED)) == 0 && - satosin(rt_key(rt))->sin_addr.s_addr != 0) { -#define RTA(rt) ((struct in_ifaddr *)(rt->rt_ifa)) - u_long src = ntohl(ip->ip_src.s_addr); - - if (RTA(rt) && - (src & RTA(rt)->ia_subnetmask) == RTA(rt)->ia_subnet) { - if (rt->rt_flags & RTF_GATEWAY) - dest.s_addr = satosin(rt->rt_gateway)->sin_addr.s_addr; - else - dest.s_addr = ip->ip_dst.s_addr; - /* Router requirements says to only send host redirects */ - type = ICMP_REDIRECT; - code = ICMP_REDIRECT_HOST; - } + if ((nh4.nh_flags & (NHOP_REDIRECT|NHOP_DEFAULT)) == 0) { + dest = nh4.nh_addr; + /*Router requirements says to only send host redirects*/ + type = ICMP_REDIRECT; + code = ICMP_REDIRECT_HOST; } - if (rt) - RTFREE(rt); } /*