ben@cernvax.UUCP (ben) (03/04/85)
We are having some problems using the MIT PC/IP package to do file transfers using TFTP with both a vanilla 4.2BSD VAX and with Wollongong software under VAX-VMS. The symptoms are different. First of all I must say that TELNET works correctly between all machines, so there is no basic hardware problem. Also, we are using the very latest MIT release dated Jan. 21, 1985. 1. With the 4.2 VAX, the PC complains of a UDP checksum error in the first TFTP data block it sees from the VAX, so things don't get very far... I suspect 4.2 UDP may be involved, not the PC, as this problem does not occur when running the PC with the Wollongong. Also, the Wollongong VAX does not seem happy either with the 4.2 VAX doing TFTP (though it doesn't say explicitly there is a checksum error--it just sulks). The 4.2 VAX, needless to say, does TFTP happily enough to itself (when a few higher- level bugs are fixed). How can this be? Well, I believe 4.2 does not itself check incoming UDP checksums unless the integer "udpcksum" (a global integer defined in "udp_usrreq.c") is set nonzero, which I do not believe is ever done in the vanilla 4.2 code. So an error on UDP output checksumming in 4.2 seems possible. The code is highly inscrutable !!!!! Soooo.. QUESTION NO. 1: Is there a known bug in 4.2 UDP output checksumming?? 2. With the Wollongong software, a TFTP transfer begins OK, but the first time the VAX ACKs a data block received from the PC, the ACK is rejected by the PC, and thus constant retransmissions occur. This seems to be a higher level problem altogether... QUESTION NO. 2: Anyone out there using Wollongong with PC/IP and getting further? Ben M. Segal, CERN-DD, 1211 Geneva 23, Switzerland.
root@bu-cs.UUCP (Barry Shein) (03/06/85)
There was in fact a fix to udp_usrreq.c checksum in 4.2, if you have a recent release of TWG TCP/IP it should incorporate this fix and hence your TWG<->4.2 UDP *should* be broken. Here is a diff file: (cd /usr/sys/netinet;diff udp_usrreq.c udp_usrreq.orig.c) 2d1 < /* modified 11/13/84 Boston University bug in checksum */ 35c34 < int udpcksum = 0; /* 11/13/84 */ --- > int udpcksum; 189c188 < ui->ui_len = htons((u_short)(len+sizeof(struct udphdr)));/* 11/13/84 */ --- > ui->ui_len = len + sizeof (struct udphdr); 194c193 < ui->ui_ulen = (u_short)ui->ui_len; /* 11/13/84 */ --- > ui->ui_ulen = htons((u_short)ui->ui_len); pretty simple, check with TWG about getting a release of their fix if you don't have it already. -Barry Shein, Boston University