From owner-svn-src-projects@freebsd.org Sun Aug 23 18:18:45 2015 Return-Path: Delivered-To: svn-src-projects@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 CC0069C1810 for ; Sun, 23 Aug 2015 18:18:45 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org (repo.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 BCCCA6AA; Sun, 23 Aug 2015 18:18:45 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t7NIIjaH042699; Sun, 23 Aug 2015 18:18:45 GMT (envelope-from melifaro@FreeBSD.org) Received: (from melifaro@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t7NIIjBb042695; Sun, 23 Aug 2015 18:18:45 GMT (envelope-from melifaro@FreeBSD.org) Message-Id: <201508231818.t7NIIjBb042695@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: melifaro set sender to melifaro@FreeBSD.org using -f From: "Alexander V. Chernikov" Date: Sun, 23 Aug 2015 18:18:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r287052 - 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.20 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: Sun, 23 Aug 2015 18:18:46 -0000 Author: melifaro Date: Sun Aug 23 18:18:44 2015 New Revision: 287052 URL: https://svnweb.freebsd.org/changeset/base/287052 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 Sun Aug 23 18:18:08 2015 (r287051) +++ projects/routing/sys/net/rt_nhops.c Sun Aug 23 18:18:44 2015 (r287052) @@ -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 Sun Aug 23 18:18:08 2015 (r287051) +++ projects/routing/sys/net/rt_nhops.h Sun Aug 23 18:18:44 2015 (r287052) @@ -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 Sun Aug 23 18:18:08 2015 (r287051) +++ projects/routing/sys/netinet/ip_input.c Sun Aug 23 18:18:44 2015 (r287052) @@ -874,7 +874,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; @@ -970,25 +969,11 @@ 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 rtentry *rt; - - 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; } }