RWS@MIT-XX.ARPA (11/08/83)
From: Robert W. Scheifler <RWS@MIT-XX.ARPA> My earlier UDP bug fixes were not completely wonderful. Here is my final rewrite. In /sys/netinet/udp_usrreq.c in udp_output(), the code ui->ui_ulen = htons((u_short)ui->ui_len); should be changed to ui->ui_len = htons((u_short)ui->ui_len); ui->ui_ulen = ui->ui_len; and the code ui->ui_sum = in_cksum(m, sizeof (struct udpiphdr) + len) should be changed to if (udpcksum) { if (!(ui->ui_sum = in_cksum(m, sizeof (struct udpiphdr) + len))) ui->ui_sum = -1; } In udp_input(), the code if (udpcksum) { ui->ui_next = ui->ui_prev = 0; ui->ui_x1 = 0; ui->ui_len = htons((u_short)len); if (ui->ui_sum = in_cksum(m, len + sizeof (struct ip))) { udpstat.udps_badsum++; m_freem(m); return; } } should be changed to if (udpcksum && ui->ui_sum) { ui->ui_next = ui->ui_prev = 0; ui->ui_x1 = 0; ui->ui_len = htons((u_short)len); if (in_cksum(m, len + sizeof (struct ip))) { udpstat.udps_badsum++; m_freem(m); return; } } Then int udpcksum; can be changed to int udpcksum = 1; -------