Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/netinet/udp_usrreq.c,v rcsdiff: /ftp/cvs/cvsroot/src/sys/netinet/udp_usrreq.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.111 retrieving revision 1.115 diff -u -p -r1.111 -r1.115 --- src/sys/netinet/udp_usrreq.c 2003/09/25 00:59:32 1.111 +++ src/sys/netinet/udp_usrreq.c 2004/03/10 18:50:45 1.115 @@ -1,4 +1,4 @@ -/* $NetBSD: udp_usrreq.c,v 1.111 2003/09/25 00:59:32 mycroft Exp $ */ +/* $NetBSD: udp_usrreq.c,v 1.115 2004/03/10 18:50:45 drochner Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.111 2003/09/25 00:59:32 mycroft Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.115 2004/03/10 18:50:45 drochner Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -270,8 +270,8 @@ udp_input(m, va_alist) */ if (uh->uh_sum) { switch (m->m_pkthdr.csum_flags & - ((m->m_pkthdr.rcvif->if_csum_flags_rx & M_CSUM_UDPv4) | - M_CSUM_TCP_UDP_BAD | M_CSUM_DATA)) { + ((m->m_pkthdr.rcvif->if_csum_flags_rx & M_CSUM_UDPv4) | + M_CSUM_TCP_UDP_BAD | M_CSUM_DATA)) { case M_CSUM_UDPv4|M_CSUM_TCP_UDP_BAD: UDP_CSUM_COUNTER_INCR(&udp_hwcsum_bad); goto badcsum; @@ -280,8 +280,9 @@ udp_input(m, va_alist) u_int32_t hw_csum = m->m_pkthdr.csum_data; UDP_CSUM_COUNTER_INCR(&udp_hwcsum_data); if (m->m_pkthdr.csum_flags & M_CSUM_NO_PSEUDOHDR) - hw_csum = in_cksum_phdr(ip->ip_src.s_addr, ip->ip_dst.s_addr, - htonl(hw_csum + ntohs(ip->ip_len) + IPPROTO_UDP)); + hw_csum = in_cksum_phdr(ip->ip_src.s_addr, + ip->ip_dst.s_addr, + htons(hw_csum + len + IPPROTO_UDP)); if ((hw_csum ^ 0xffff) != 0) goto badcsum; break; @@ -1022,11 +1023,6 @@ udp_usrreq(so, req, m, nam, control, p) so->so_state &= ~SS_ISCONNECTED; /* XXX */ in_pcbdisconnect(inp); inp->inp_laddr = zeroin_addr; /* XXX */ - if (inp->inp_ia != NULL) { - LIST_REMOVE(inp, inp_ialink); - IFAFREE(&inp->inp_ia->ia_ifa); - inp->inp_ia = NULL; - } in_pcbstate(inp, INP_BOUND); /* XXX */ break; @@ -1071,11 +1067,6 @@ udp_usrreq(so, req, m, nam, control, p) in_pcbstate(inp, INP_BOUND); /* XXX */ } die: - if (inp->inp_ia != NULL && in_nullhost(inp->inp_laddr)) { - LIST_REMOVE(inp, inp_ialink); - IFAFREE(&inp->inp_ia->ia_ifa); - inp->inp_ia = NULL; - } if (m) m_freem(m); } @@ -1118,31 +1109,36 @@ release: /* * Sysctl for udp variables. */ -int -udp_sysctl(name, namelen, oldp, oldlenp, newp, newlen) - int *name; - u_int namelen; - void *oldp; - size_t *oldlenp; - void *newp; - size_t newlen; +SYSCTL_SETUP(sysctl_net_inet_udp_setup, "sysctl net.inet.udp subtree setup") { - /* All sysctl names at this level are terminal. */ - if (namelen != 1) - return (ENOTDIR); - - switch (name[0]) { - case UDPCTL_CHECKSUM: - return (sysctl_int(oldp, oldlenp, newp, newlen, &udpcksum)); - case UDPCTL_SENDSPACE: - return (sysctl_int(oldp, oldlenp, newp, newlen, - &udp_sendspace)); - case UDPCTL_RECVSPACE: - return (sysctl_int(oldp, oldlenp, newp, newlen, - &udp_recvspace)); - default: - return (ENOPROTOOPT); - } - /* NOTREACHED */ + + sysctl_createv(SYSCTL_PERMANENT, + CTLTYPE_NODE, "net", NULL, + NULL, 0, NULL, 0, + CTL_NET, CTL_EOL); + sysctl_createv(SYSCTL_PERMANENT, + CTLTYPE_NODE, "inet", NULL, + NULL, 0, NULL, 0, + CTL_NET, PF_INET, CTL_EOL); + sysctl_createv(SYSCTL_PERMANENT, + CTLTYPE_NODE, "udp", NULL, + NULL, 0, NULL, 0, + CTL_NET, PF_INET, IPPROTO_UDP, CTL_EOL); + + sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, + CTLTYPE_INT, "checksum", NULL, + NULL, 0, &udpcksum, 0, + CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_CHECKSUM, + CTL_EOL); + sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, + CTLTYPE_INT, "sendspace", NULL, + NULL, 0, &udp_sendspace, 0, + CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_SENDSPACE, + CTL_EOL); + sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE, + CTLTYPE_INT, "recvspace", NULL, + NULL, 0, &udp_recvspace, 0, + CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_RECVSPACE, + CTL_EOL); } #endif