Date: Fri, 4 Feb 2000 09:51:59 +0200 From: Ruslan Ermilov <ru@ucb.crimea.ua> To: Stephen Macmanus <stephenm@windriver.com> Cc: freebsd-net@FreeBSD.ORG Subject: Re: Path MTU discovery Message-ID: <20000204095159.C10334@relay.ucb.crimea.ua> In-Reply-To: <200002040202.SAA01528@brisbane.wrs.com>; from Stephen Macmanus on Thu, Feb 03, 2000 at 06:02:30PM -0800 References: <200002040202.SAA01528@brisbane.wrs.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Feb 03, 2000 at 06:02:30PM -0800, Stephen Macmanus wrote:
> I have found some puzzling behavior in the path MTU discovery
> implementation in Free BSD 3.4 which I hope someone can shed light
> on.
>
> The tcp_mtudisc routine adjusts the MSS for a connection in
> response to the ICMP error which triggers adjustment of the path
> MTU estimate to a new value. That routine includes the following
> code:
>
> struct tcpcb *tp = intotcpcb(inp);
> struct rtentry *rt;
> struct rmxp_tao *taop;
> struct socket *so = inp->inp_socket;
> int offered;
> int mss;
>
> if (tp) {
> rt = tcp_rtlookup(inp);
> if (!rt || !rt->rt_rmx.rmx_mtu) {
> tp->t_maxopd = tp->t_maxseg = tcp_mssdflt;
> return;
> }
> taop = rmx_taop(rt->rt_rmx);
> offered = taop->tao_mssopt;
> mss = rt->rt_rmx.rmx_mtu - sizeof(struct tcpiphdr);
> if (offered)
> mss = min(mss, offered);
>
> .
> .
> .
>
> Both this routine and the tcp_mss routine examine the results of
> tcp_rtlookup() to verify that a route to the destination address
> exists. That test appears to be redundant. I can't see a situation
> where the system is unable to find a route to the remote address
> given that the routine can only execute after the socket assigns
> local and remote address information, which includes the route lookup.
>
No, they do so to check the current mtu value along this route.
> Similarly, I don't entirely understand the conditional execution
> of the min() operation. It can only apply before the remote peer sends
> the initial SYN since tao_mssopt is always non-zero after that point.
> That could occur if the host generates the ICMP error by sending a TCP
> segment which includes data along with the SYN flag. Examining the
> tcp_output() routine, that behavior doesn't seem possible. Does anyone
> know how it can occur?
>
> Thanks,
>
> Stephen
>
> ------------------
> Stephen Macmanus #include <std_disclaimer.h>
> Software Engineer
> Wind River Systems
>
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-net" in the body of the message
--
Ruslan Ermilov Sysadmin and DBA of the
ru@ucb.crimea.ua United Commercial Bank,
ru@FreeBSD.org FreeBSD committer,
+380.652.247.647 Simferopol, Ukraine
http://www.FreeBSD.org The Power To Serve
http://www.oracle.com Enabling The Information Age
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000204095159.C10334>
