Date: Thu, 3 Feb 2000 18:02:30 -0800 (PST) From: Stephen Macmanus <stephenm@windriver.com> To: freebsd-net@freebsd.org Subject: Path MTU discovery Message-ID: <200002040202.SAA01528@brisbane.wrs.com>
next in thread | raw e-mail | index | archive | help
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. 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200002040202.SAA01528>