Path: utzoo!mnetor!uunet!lll-winken!lll-tis!ames!pasteur!ucbvax!LANL.GOV!cpw%sneezy From: cpw%sneezy@LANL.GOV (C. Philip Wood) Newsgroups: comp.protocols.tcp-ip Subject: Re: release of updated network sources for 4.3BSD Message-ID: <8804071508.AA15433@sneezy> Date: 7 Apr 88 15:08:35 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 59 For those of you with VAX's that are planning on incorporating the Berkeley fixes, the following patch should be applied to ip_output.c. It's the old byte order problem coming back to haunt us... Index: /sys/netinet/ip_output.c 4.3 (with new inet code) Submitted by: C. Philip Wood Description: Ip_output, when called upon to fragment, sends the incorrect length and fragment flag in the first packet. Repeat-By: Use minor internet discard protocol with udp and a packet length > the mtu of the network you are netting on, and monitor the network with a suitable tool. % discard -t datagram -l 1700 -p 1 doc Or, ship it through a vanilla IP gateway that keeps track of data length and header header length errors for IP. Take a snap before and after you send the fragmented packet and watch the count of bad packets. % netstat -s | grep "with data length" 265 with data length < header length % netstat -s | grep "with data length" 266 with data length < header length Fix: *** ip_output.c Wed Apr 6 11:52:50 1988 --- ip_output.c.orig Tue Mar 15 22:12:40 1988 *************** *** 10,14 **** * is provided ``as is'' without express or implied warranty. * ! * @(#)ip_output.c 7.9 (LANL) 3/15/88 */ --- 10,14 ---- * is provided ``as is'' without express or implied warranty. * ! * @(#)ip_output.c 7.9 (Berkeley) 3/15/88 */ *************** *** 233,238 **** */ m_adj(m0, hlen + firstlen - ip->ip_len); ! ip->ip_len = htons((u_short)(hlen + firstlen)); ! ip->ip_off = htons((u_short)(ip->ip_off | IP_MF)); ip->ip_sum = 0; ip->ip_sum = in_cksum(m0, hlen); --- 233,238 ---- */ m_adj(m0, hlen + firstlen - ip->ip_len); ! ip->ip_len = hlen + firstlen; ! ip->ip_off |= IP_MF; ip->ip_sum = 0; ip->ip_sum = in_cksum(m0, hlen);