summaryrefslogtreecommitdiff
path: root/sys/netinet/udp_usrreq.c
diff options
context:
space:
mode:
authorHenning Brauer <henning@cvs.openbsd.org>2013-10-19 10:38:56 +0000
committerHenning Brauer <henning@cvs.openbsd.org>2013-10-19 10:38:56 +0000
commit5020dd8837f56b45edd717dde5f5ff870fc14dcf (patch)
tree6cda27f1c1cb19b88ba176bb0ebd3e80ca590413 /sys/netinet/udp_usrreq.c
parentb6ce80a2aefa4b19550d5c0ed14e253f64a6b65e (diff)
make in_proto_cksum_out not rely on the pseudo header checksum to be
already there, just compute it - it's dirt cheap. since that happens very late in ip_output, the rest of the stack doesn't have to care about checksums at all any more, if something needs to be checksummed, just set the flag on the pkthdr mbuf to indicate so. stop pre-computing the pseudo header checksum and incrementally updating it in the tcp and udp stacks. ok lteo florian
Diffstat (limited to 'sys/netinet/udp_usrreq.c')
-rw-r--r--sys/netinet/udp_usrreq.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c
index e2e3e9f61f3..0604b9f0c8a 100644
--- a/sys/netinet/udp_usrreq.c
+++ b/sys/netinet/udp_usrreq.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: udp_usrreq.c,v 1.168 2013/10/17 16:27:44 bluhm Exp $ */
+/* $OpenBSD: udp_usrreq.c,v 1.169 2013/10/19 10:38:55 henning Exp $ */
/* $NetBSD: udp_usrreq.c,v 1.28 1996/03/16 23:54:03 christos Exp $ */
/*
@@ -1077,21 +1077,11 @@ udp_output(struct mbuf *m, ...)
ui->ui_sport = inp->inp_lport;
ui->ui_dport = inp->inp_fport;
ui->ui_ulen = ui->ui_len;
-
- /*
- * Compute the pseudo-header checksum; defer further checksumming
- * until ip_output() or hardware (if it exists).
- */
- if (udpcksum) {
- m->m_pkthdr.csum_flags |= M_UDP_CSUM_OUT;
- ui->ui_sum = in_cksum_phdr(ui->ui_src.s_addr,
- ui->ui_dst.s_addr, htons((u_int16_t)len +
- sizeof (struct udphdr) + IPPROTO_UDP));
- } else
- ui->ui_sum = 0;
((struct ip *)ui)->ip_len = htons(sizeof (struct udpiphdr) + len);
((struct ip *)ui)->ip_ttl = inp->inp_ip.ip_ttl;
((struct ip *)ui)->ip_tos = inp->inp_ip.ip_tos;
+ if (udpcksum)
+ m->m_pkthdr.csum_flags |= M_UDP_CSUM_OUT;
udpstat.udps_opackets++;