From owner-svn-src-user@FreeBSD.ORG Sat Mar 3 13:02:29 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 3F1B0106567D; Sat, 3 Mar 2012 13:02:29 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2AA408FC1F; Sat, 3 Mar 2012 13:02:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q23D2TF3082917; Sat, 3 Mar 2012 13:02:29 GMT (envelope-from andre@svn.freebsd.org) Received: (from andre@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q23D2SIl082911; Sat, 3 Mar 2012 13:02:28 GMT (envelope-from andre@svn.freebsd.org) Message-Id: <201203031302.q23D2SIl082911@svn.freebsd.org> From: Andre Oppermann Date: Sat, 3 Mar 2012 13:02:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r232459 - user/andre/tcp_workqueue/sys/netinet X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Mar 2012 13:02:29 -0000 Author: andre Date: Sat Mar 3 13:02:28 2012 New Revision: 232459 URL: http://svn.freebsd.org/changeset/base/232459 Log: Remove the need for routes to have the MTU explicitly set or inherited from their interface. Unless explicitly set the route MTU is zero and the current interface MTU is being used. This allows interface MTU to be increased even after it got an IP address assigned. If a route has an MTU set that is lower than the interface MTU it will be used instead. If a route has an MTU set that is higher than the interface MTU it will be adjusted and the interface MTU will be used as before. Modified: user/andre/tcp_workqueue/sys/netinet/in_rmx.c user/andre/tcp_workqueue/sys/netinet/ip_fastfwd.c user/andre/tcp_workqueue/sys/netinet/ip_input.c user/andre/tcp_workqueue/sys/netinet/ip_output.c user/andre/tcp_workqueue/sys/netinet/tcp_subr.c Modified: user/andre/tcp_workqueue/sys/netinet/in_rmx.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/in_rmx.c Sat Mar 3 12:41:19 2012 (r232458) +++ user/andre/tcp_workqueue/sys/netinet/in_rmx.c Sat Mar 3 13:02:28 2012 (r232459) @@ -104,7 +104,8 @@ in_addroute(void *v_arg, void *n_arg, st if (IN_MULTICAST(ntohl(sin->sin_addr.s_addr))) rt->rt_flags |= RTF_MULTICAST; - if (!rt->rt_rmx.rmx_mtu && rt->rt_ifp) + if (rt->rt_rmx.rmx_mtu > 0 && rt->rt_ifp != NULL && + rt->rt_rmx.rmx_mtu > rt->rt_ifp->if_mtu) rt->rt_rmx.rmx_mtu = rt->rt_ifp->if_mtu; return (rn_addroute(v_arg, n_arg, head, treenodes)); Modified: user/andre/tcp_workqueue/sys/netinet/ip_fastfwd.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/ip_fastfwd.c Sat Mar 3 12:41:19 2012 (r232458) +++ user/andre/tcp_workqueue/sys/netinet/ip_fastfwd.c Sat Mar 3 13:02:28 2012 (r232459) @@ -534,7 +534,7 @@ passout: /* * Check if packet fits MTU or if hardware will fragment for us */ - if (ro.ro_rt->rt_rmx.rmx_mtu) + if (ro.ro_rt->rt_rmx.rmx_mtu > 0) mtu = min(ro.ro_rt->rt_rmx.rmx_mtu, ifp->if_mtu); else mtu = ifp->if_mtu; Modified: user/andre/tcp_workqueue/sys/netinet/ip_input.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/ip_input.c Sat Mar 3 12:41:19 2012 (r232458) +++ user/andre/tcp_workqueue/sys/netinet/ip_input.c Sat Mar 3 13:02:28 2012 (r232459) @@ -1493,8 +1493,12 @@ ip_forward(struct mbuf *m, int srcrt) error = ip_output(m, NULL, &ro, IP_FORWARDING, NULL, NULL); - if (error == EMSGSIZE && ro.ro_rt) - mtu = ro.ro_rt->rt_rmx.rmx_mtu; + if (error == EMSGSIZE && ro.ro_rt) { + if (ro.ro_rt->rt_rmx.rmx_mtu > 0) + mtu = ro.ro_rt->rt_rmx.rmx_mtu; + else + mtu = ro.ro_rt->rt_ifp->if_mtu; + } if (ro.ro_rt) RTFREE(ro.ro_rt); Modified: user/andre/tcp_workqueue/sys/netinet/ip_output.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/ip_output.c Sat Mar 3 12:41:19 2012 (r232458) +++ user/andre/tcp_workqueue/sys/netinet/ip_output.c Sat Mar 3 13:02:28 2012 (r232459) @@ -309,7 +309,8 @@ again: * Calculate MTU. If we have a route that is up, use that, * otherwise use the interface's MTU. */ - if (rte != NULL && (rte->rt_flags & (RTF_UP|RTF_HOST))) { + if (rte != NULL && (rte->rt_flags & (RTF_UP|RTF_HOST)) && + rte->rt_rmx.rmx_mtu > 0) { /* * This case can happen if the user changed the MTU * of an interface after enabling IP on it. Because Modified: user/andre/tcp_workqueue/sys/netinet/tcp_subr.c ============================================================================== --- user/andre/tcp_workqueue/sys/netinet/tcp_subr.c Sat Mar 3 12:41:19 2012 (r232458) +++ user/andre/tcp_workqueue/sys/netinet/tcp_subr.c Sat Mar 3 13:02:28 2012 (r232459) @@ -1731,10 +1731,10 @@ tcp_maxmtu(struct in_conninfo *inc, int } if (sro.ro_rt != NULL) { ifp = sro.ro_rt->rt_ifp; - if (sro.ro_rt->rt_rmx.rmx_mtu == 0) - maxmtu = ifp->if_mtu; - else + if (sro.ro_rt->rt_rmx.rmx_mtu > 0) maxmtu = min(sro.ro_rt->rt_rmx.rmx_mtu, ifp->if_mtu); + else + maxmtu = ifp->if_mtu; /* Report additional interface capabilities. */ if (flags != NULL) {