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.138.2.3 retrieving revision 1.146.2.1 diff -u -p -r1.138.2.3 -r1.146.2.1 --- src/sys/netinet/udp_usrreq.c 2007/02/26 09:11:46 1.138.2.3 +++ src/sys/netinet/udp_usrreq.c 2006/02/05 03:09:11 1.146.2.1 @@ -1,4 +1,4 @@ -/* $NetBSD: udp_usrreq.c,v 1.138.2.3 2007/02/26 09:11:46 yamt Exp $ */ +/* $NetBSD: udp_usrreq.c,v 1.146.2.1 2006/02/05 03:09:11 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.138.2.3 2007/02/26 09:11:46 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.146.2.1 2006/02/05 03:09:11 rpaulo Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -95,11 +95,15 @@ __KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c #include #include +#ifdef IPSEC_NAT_T +#include +#include +#endif + #ifdef INET6 #include #include #include -#include #include #include #endif @@ -119,7 +123,6 @@ __KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c #ifdef FAST_IPSEC #include #include /* XXX ipsecstat namespace */ -#include #ifdef INET6 #include #endif @@ -127,7 +130,6 @@ __KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c #ifdef IPSEC #include -#include #include #endif /*IPSEC*/ @@ -139,7 +141,11 @@ __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; @@ -173,9 +179,9 @@ static void udp_notify (struct inpcb *, int udbhashsize = UDBHASHSIZE; #ifdef MBUFTRACE -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"); +struct mowner udp_mowner = { "udp" }; +struct mowner udp_rx_mowner = { "udp", "rx" }; +struct mowner udp_tx_mowner = { "udp", "tx" }; #endif #ifdef UDP_CSUM_COUNTERS @@ -963,7 +969,7 @@ udp_notify(struct inpcb *inp, int errno) } void * -udp_ctlinput(int cmd, const struct sockaddr *sa, void *v) +udp_ctlinput(int cmd, struct sockaddr *sa, void *v) { struct ip *ip = v; struct udphdr *uh; @@ -984,19 +990,22 @@ udp_ctlinput(int cmd, const struct socka return NULL; if (ip) { uh = (struct udphdr *)((caddr_t)ip + (ip->ip_hl << 2)); - in_pcbnotify(&udbtable, satocsin(sa)->sin_addr, uh->uh_dport, + in_pcbnotify(&udbtable, satosin(sa)->sin_addr, uh->uh_dport, ip->ip_src, uh->uh_sport, errno, notify); /* XXX mapped address case */ } else - in_pcbnotifyall(&udbtable, satocsin(sa)->sin_addr, errno, + in_pcbnotifyall(&udbtable, satosin(sa)->sin_addr, errno, notify); return NULL; } int -udp_ctloutput(int op, struct socket *so, int level, int optname, - struct mbuf **mp) +udp_ctloutput(op, so, level, optname, mp) + int op; + struct socket *so; + int level, optname; + struct mbuf **mp; { int s; int error = 0; @@ -1027,6 +1036,7 @@ udp_ctloutput(int op, struct socket *so, default: error = EAFNOSUPPORT; goto end; + break; } @@ -1039,7 +1049,7 @@ udp_ctloutput(int op, struct socket *so, case UDP_ENCAP: if (m == NULL || m->m_len < sizeof (int)) { error = EINVAL; - break; + goto end; } switch(*mtod(m, int *)) { @@ -1060,21 +1070,21 @@ udp_ctloutput(int op, struct socket *so, #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; } @@ -1171,23 +1181,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, l)); - - s = splsoftnet(); + (struct ifnet *)control, p)); 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) @@ -1231,7 +1241,7 @@ udp_usrreq(struct socket *so, int req, s break; case PRU_BIND: - error = in_pcbbind(inp, nam, l); + error = in_pcbbind(inp, nam, p); break; case PRU_LISTEN: @@ -1239,7 +1249,7 @@ udp_usrreq(struct socket *so, int req, s break; case PRU_CONNECT: - error = in_pcbconnect(inp, nam, l); + error = in_pcbconnect(inp, nam, p); if (error) break; soisconnected(so); @@ -1281,7 +1291,7 @@ udp_usrreq(struct socket *so, int req, s error = EISCONN; goto die; } - error = in_pcbconnect(inp, nam, l); + error = in_pcbconnect(inp, nam, p); if (error) goto die; } else { @@ -1413,8 +1423,11 @@ SYSCTL_SETUP(sysctl_net_inet_udp_setup, * -1 if an error occurent and m was freed */ static int -udp4_espinudp(struct mbuf **mp, int off, struct sockaddr *src, - struct socket *so) +udp4_espinudp(mp, off, src, so) + struct mbuf **mp; + int off; + struct sockaddr *src; + struct socket *so; { size_t len; caddr_t data; @@ -1535,11 +1548,7 @@ udp4_espinudp(struct mbuf **mp, int off, ((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;