Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!linus!decvax!harpo!seismo!hao!hplabs!sri-unix!RWS@MIT-XX.ARPA From: RWS@MIT-XX.ARPA Newsgroups: net.unix-wizards Subject: 4.2 UDP Message-ID: <13436@sri-arpa.UUCP> Date: Mon, 7-Nov-83 21:15:32 EST Article-I.D.: sri-arpa.13436 Posted: Mon Nov 7 21:15:32 1983 Date-Received: Wed, 9-Nov-83 08:17:20 EST Lines: 42 From: Robert W. Scheifler 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; -------