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.146 retrieving revision 1.156 diff -u -p -r1.146 -r1.156 --- src/sys/netinet/udp_usrreq.c 2006/01/21 00:15:36 1.146 +++ src/sys/netinet/udp_usrreq.c 2006/11/14 12:05:55 1.156 @@ -1,4 +1,4 @@ -/* $NetBSD: udp_usrreq.c,v 1.146 2006/01/21 00:15:36 rpaulo Exp $ */ +/* $NetBSD: udp_usrreq.c,v 1.156 2006/11/14 12:05:55 rpaulo Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.146 2006/01/21 00:15:36 rpaulo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.156 2006/11/14 12:05:55 rpaulo Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -95,11 +95,6 @@ __KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c #include #include -#ifdef IPSEC_NAT_T -#include -#include -#endif - #ifdef INET6 #include #include @@ -124,6 +119,7 @@ __KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c #ifdef FAST_IPSEC #include #include /* XXX ipsecstat namespace */ +#include #ifdef INET6 #include #endif @@ -131,6 +127,7 @@ __KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c #ifdef IPSEC #include +#include #include #endif /*IPSEC*/ @@ -142,11 +139,7 @@ __KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c * UDP protocol implementation. * Per RFC 768, August, 1980. */ -#ifndef COMPAT_42 int udpcksum = 1; -#else -int udpcksum = 0; /* XXX */ -#endif int udp_do_loopback_cksum = 0; struct inpcbtable udbtable; @@ -180,9 +173,9 @@ static void udp_notify (struct inpcb *, int udbhashsize = UDBHASHSIZE; #ifdef MBUFTRACE -struct mowner udp_mowner = { "udp" }; -struct mowner udp_rx_mowner = { "udp", "rx" }; -struct mowner udp_tx_mowner = { "udp", "tx" }; +struct mowner udp_mowner = MOWNER_INIT("udp", ""); +struct mowner udp_rx_mowner = MOWNER_INIT("udp", "rx"); +struct mowner udp_tx_mowner = MOWNER_INIT("udp", "tx"); #endif #ifdef UDP_CSUM_COUNTERS @@ -1002,11 +995,8 @@ udp_ctlinput(int cmd, struct sockaddr *s } int -udp_ctloutput(op, so, level, optname, mp) - int op; - struct socket *so; - int level, optname; - struct mbuf **mp; +udp_ctloutput(int op, struct socket *so, int level, int optname, + struct mbuf **mp) { int s; int error = 0; @@ -1037,7 +1027,6 @@ udp_ctloutput(op, so, level, optname, mp default: error = EAFNOSUPPORT; goto end; - break; } @@ -1050,7 +1039,7 @@ udp_ctloutput(op, so, level, optname, mp case UDP_ENCAP: if (m == NULL || m->m_len < sizeof (int)) { error = EINVAL; - goto end; + break; } switch(*mtod(m, int *)) { @@ -1071,21 +1060,21 @@ udp_ctloutput(op, so, level, optname, mp #endif default: error = EINVAL; - goto end; break; } break; default: error = ENOPROTOOPT; - goto end; break; } + if (m != NULL) { + m_free(m); + } break; default: error = EINVAL; - goto end; break; } @@ -1182,23 +1171,23 @@ udp_usrreq(struct socket *so, int req, s struct mbuf *control, struct lwp *l) { struct inpcb *inp; - struct proc *p; int s; int error = 0; - p = l ? l->l_proc : NULL; if (req == PRU_CONTROL) return (in_control(so, (long)m, (caddr_t)nam, - (struct ifnet *)control, p)); + (struct ifnet *)control, l)); + + s = splsoftnet(); if (req == PRU_PURGEIF) { in_pcbpurgeif0(&udbtable, (struct ifnet *)control); in_purgeif((struct ifnet *)control); in_pcbpurgeif(&udbtable, (struct ifnet *)control); + splx(s); return (0); } - s = splsoftnet(); inp = sotoinpcb(so); #ifdef DIAGNOSTIC if (req != PRU_SEND && req != PRU_SENDOOB && control) @@ -1242,7 +1231,7 @@ udp_usrreq(struct socket *so, int req, s break; case PRU_BIND: - error = in_pcbbind(inp, nam, p); + error = in_pcbbind(inp, nam, l); break; case PRU_LISTEN: @@ -1250,7 +1239,7 @@ udp_usrreq(struct socket *so, int req, s break; case PRU_CONNECT: - error = in_pcbconnect(inp, nam, p); + error = in_pcbconnect(inp, nam, l); if (error) break; soisconnected(so); @@ -1292,7 +1281,7 @@ udp_usrreq(struct socket *so, int req, s error = EISCONN; goto die; } - error = in_pcbconnect(inp, nam, p); + error = in_pcbconnect(inp, nam, l); if (error) goto die; } else { @@ -1424,11 +1413,8 @@ SYSCTL_SETUP(sysctl_net_inet_udp_setup, * -1 if an error occurent and m was freed */ static int -udp4_espinudp(mp, off, src, so) - struct mbuf **mp; - int off; - struct sockaddr *src; - struct socket *so; +udp4_espinudp(struct mbuf **mp, int off, struct sockaddr *src, + struct socket *so) { size_t len; caddr_t data; @@ -1549,7 +1535,11 @@ udp4_espinudp(mp, off, src, so) ((u_int16_t *)(tag + 1))[1] = dport; m_tag_prepend(n, tag); +#ifdef FAST_IPSEC + ipsec4_common_input(n, iphdrlen); +#else esp4_input(n, iphdrlen); +#endif /* We handled it, it shoudln't be handled by UDP */ return 1;