Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!rutgers!topaz!hedrick From: hedrick@topaz.RUTGERS.EDU (Charles Hedrick) Newsgroups: comp.unix.wizards,comp.protocols.tcp-ip Subject: Re: IP fragmentation, and how to avoid it Message-ID: <11947@topaz.RUTGERS.EDU> Date: Wed, 13-May-87 04:14:40 EDT Article-I.D.: topaz.11947 Posted: Wed May 13 04:14:40 1987 Date-Received: Sat, 16-May-87 01:11:53 EDT References: <12640@teknowledge-vaxc.ARPA> Organization: Rutgers Univ., New Brunswick, N.J. Lines: 73 Xref: mnetor comp.unix.wizards:2288 comp.protocols.tcp-ip:173 Now and then we run into machines that can't reassemble. Note that the 1006 limit on imp0 isn't a problem with the VAX. It is the limit allowed by the Arpanet. There are more elegant solutions, but if you don't have source, here is a program that will let you change the MTU on the fly. We have used it on both Pyramid and Sun, changing only the name of the kernel variable. I.e. the string "_il_softc", which is the name appropriate for il0 on the Pyramid. I just checked and it looks like _le_softc will work for a Sun 3/50. At least this will let you see whether your problem is really a reassembly problem. You should try "mtu 1006" or maybe some slightly smaller number. (We typically use 900 for testing.) #include #include #include #include struct nlist nl[2]; short mtu; int kmem; struct stat statblock; char *kernelfile; main(argc,argv) char *argv[]; { if (argc < 2) { fprintf(stderr,"usage: mtu {}\n"); exit(2); } if ((kmem = open("/dev/kmem",2))<0) { perror("open /dev/kmem"); exit(1); } if (argc > 2) { kernelfile = argv[2]; } else { kernelfile = "/vmunix"; } if (stat(kernelfile,&statblock)) { fprintf(stderr,"%s not found.\n",kernelfile); exit(1); } initnlistvars(atoi(argv[1])); exit(0); } initnlistvars(on) register int on; { nl[0].n_un.n_name = "_il_softc"; nl[1].n_un.n_name = ""; nlist(kernelfile,nl); if (nl[0].n_type == 0) { fprintf(stderr, "%s: No namelist\n", kernelfile); exit(4); } (void) lseek(kmem,(nl[0].n_value)+6,0); if (read(kmem,&mtu,2) != 2) { perror("read kmem"); exit(5); } fprintf(stderr,"mtu was: %d is now: %d\n",mtu,on); (void) lseek(kmem,(nl[0].n_value)+6,0); mtu = on; if (write(kmem,&mtu,2) != 2) { perror("write kmem"); exit(6); } }